34 #define _hwa_setup__gpb(o,a) \
35 _hwa_setup_r( o, mode ); \
36 _hwa_setup_r( o, otype ); \
37 _hwa_setup_r( o, ospeed ); \
38 _hwa_setup_r( o, pupd ); \
39 _hwa_setup_r( o, odr ); \
40 _hwa_setup_r( o, bsrr ); \
41 _hwa_setup_r( o, lckr ); \
42 _hwa_setup_r( o, afrl ); \
43 _hwa_setup_r( o, afrh ); \
46 #define _hwa_init__gpb(o,a) \
47 _hwa_init_r( o, mode , _hwa_gpbmode_##o ); \
48 _hwa_init_r( o, otype , 0x00000000 ); \
49 _hwa_init_r( o, ospeed , _hwa_gpbspeed_##o ); \
50 _hwa_init_r( o, pupd , _hwa_gpbpupd_##o ); \
51 _hwa_init_r( o, odr , 0x00000000 ); \
52 _hwa_init_r( o, bsrr , 0x00000000 ); \
53 _hwa_init_r( o, lckr , 0x00000000 ); \
54 _hwa_init_r( o, afrl , 0x00000000 ); \
55 _hwa_init_r( o, afrh , 0x00000000 )
57 #define _hwa_gpbmode_porta 0xA8000000
58 #define _hwa_gpbmode_portb 0x00000280
59 #define _hwa_gpbmode_portc 0x00000000
60 #define _hwa_gpbmode_portd 0x00000000
61 #define _hwa_gpbmode_porte 0x00000000
62 #define _hwa_gpbmode_portf 0x00000000
63 #define _hwa_gpbmode_portg 0x00000000
64 #define _hwa_gpbmode_porth 0x00000000
66 #define _hwa_gpbspeed_porta 0x0C000000
67 #define _hwa_gpbspeed_portb 0x000000C0
68 #define _hwa_gpbspeed_portc 0x00000000
69 #define _hwa_gpbspeed_portd 0x00000000
70 #define _hwa_gpbspeed_porte 0x00000000
71 #define _hwa_gpbspeed_portf 0x00000000
72 #define _hwa_gpbspeed_portg 0x00000000
73 #define _hwa_gpbspeed_porth 0x00000000
75 #define _hwa_gpbpupd_porta 0x64000000
76 #define _hwa_gpbpupd_portb 0x00000100
77 #define _hwa_gpbpupd_portc 0x00000000
78 #define _hwa_gpbpupd_portd 0x00000000
79 #define _hwa_gpbpupd_porte 0x00000000
80 #define _hwa_gpbpupd_portf 0x00000000
81 #define _hwa_gpbpupd_portg 0x00000000
82 #define _hwa_gpbpupd_porth 0x00000000
84 #define _hwa_commit__gpb(o,a) \
85 _hwa_commit_r( o, otype ); \
86 _hwa_commit_r( o, ospeed ); \
87 _hwa_commit_r( o, pupd ); \
88 _hwa_commit_r( o, afrl ); \
89 _hwa_commit_r( o, afrh ); \
90 _hwa_commit_r( o, odr ); \
91 _hwa_commit_r( o, bsrr ); \
92 _hwa_commit_r( o, mode ); \
93 _hwa_commit_toggles( &hwa->o ); \
94 _hwa_commit_r( o, lckr )
99 HW_INLINE
void _hwa_commit_toggles ( hwa_gpb_t *o )
102 volatile uint32_t *odr = (
volatile uint32_t*)o->odr.a;
104 if ( (o->odr.omask & 0xffff) != 0xffff ) {
105 o->odr.ovalue = *odr ;
106 o->odr.omask = 0xffff ;
108 o->odr.ovalue ^= o->toggles ;
111 volatile uint32_t *bsrr = (
volatile uint32_t*)o->bsrr.a;
112 *bsrr = (o->toggles & ~o->odr.ovalue)<<16 | (o->toggles & o->odr.ovalue);
117 o->bsrr.omask = 0xffffffff ;