34 #define _hwa_setup__gpa(o,a) \
35 _hwa_setup_r( o, crl ); \
36 _hwa_setup_r( o, crh ); \
37 _hwa_setup_r( o, odr ); \
38 _hwa_setup_r( o, bsrr ); \
39 _hwa_setup_r( o, brr ); \
40 _hwa_setup_r( o, lckr ); \
43 #define _hwa_init__gpa(o,a) \
44 _hwa_init_r( o, crl, 0x44444444 ); \
45 _hwa_init_r( o, crh, 0x44444444 ); \
46 _hwa_init_r( o, odr, 0x00000000 ); \
47 _hwa_init_r( o, bsrr, 0x00000000 ); \
48 _hwa_init_r( o, brr, 0x00000000 ); \
49 _hwa_init_r( o, lckr, 0x00000000 )
51 #define _hwa_commit__gpa(o,a) \
52 _hwa_commit_r( o, crl ); \
53 _hwa_commit_r( o, crh ); \
54 _hwa_commit_r( o, odr ); \
55 _hwa_commit_r( o, bsrr ); \
56 _hwa_commit_r( o, brr ); \
57 _hwa_commit_r( o, lckr ); \
58 _hwa_commit_toggles( &hwa->o )
63 HW_INLINE
void _hwa_commit_toggles ( hwa_gpa_t *o )
66 volatile uint32_t *odr = (
volatile uint32_t*)o->odr.a;
68 if ( (o->odr.omask & 0xffff) != 0xffff ) {
69 o->odr.ovalue = *odr ;
70 o->odr.omask = 0xffff ;
72 o->odr.ovalue ^= o->toggles ;
75 volatile uint32_t *bsrr = (
volatile uint32_t*)o->bsrr.a;
76 *bsrr = (o->toggles & ~o->odr.ovalue)<<16 | (o->toggles & o->odr.ovalue);
81 o->bsrr.omask = 0xffffffff ;