Revision 1fa17188
| modules/PowerManagement_1-1/board.c | ||
|---|---|---|
| 59 | 59 |
const uint32_t afrh, |
| 60 | 60 |
const uint16_t ignmask) {
|
| 61 | 61 |
|
| 62 |
uint32_t ignmask2 = 0; |
|
| 63 |
uint32_t ignmask4_low = 0; |
|
| 64 |
uint32_t ignmask4_high = 0; |
|
| 65 |
|
|
| 66 |
/* some bit-magic to fan out the mask */ |
|
| 67 | 62 |
const uint8_t lut[] = {0x00, 0x03, 0x0C, 0x0F,
|
| 68 | 63 |
0x30, 0x33, 0x3C, 0x3F, |
| 69 | 64 |
0xC0, 0xC3, 0xCC, 0xCF, |
| 70 | 65 |
0xF0, 0xF3, 0xFC, 0xFF}; |
| 71 |
for (uint8_t i = 0; i < 4; ++i) {
|
|
| 72 |
ignmask2 |= lut[(ignmask >> 4*i) & 0x0F] << (8*i); |
|
| 73 |
ignmask4_low |= lut[lut[(ignmask >> 2*i) & 0x03]] << (8*i); |
|
| 74 |
ignmask4_high |= lut[lut[(ignmask >> (8 + 2*i)) & 0x03]] << (8*i); |
|
| 75 |
} |
|
| 66 |
|
|
| 67 |
/* some bit-magic to fan out the mask */ |
|
| 68 |
const uint32_t ignmask2 = (lut[(ignmask >> 12) ] << 24) | |
|
| 69 |
(lut[(ignmask >> 8) & 0x0F] << 16) | |
|
| 70 |
(lut[(ignmask >> 4) & 0x0F] << 8) | |
|
| 71 |
(lut[(ignmask ) & 0x0F]); |
|
| 72 |
const uint32_t ignmask4_low = (lut[lut[(ignmask >> 6) & 0x03]] << 24) | |
|
| 73 |
(lut[lut[(ignmask >> 4) & 0x03]] << 16) | |
|
| 74 |
(lut[lut[(ignmask >> 2) & 0x03]] << 8) | |
|
| 75 |
(lut[lut[(ignmask ) & 0x03]]); |
|
| 76 |
const uint32_t ignmask4_high = (lut[lut[(ignmask >> 14) ]] << 24) | |
|
| 77 |
(lut[lut[(ignmask >> 12) & 0x03]] << 16) | |
|
| 78 |
(lut[lut[(ignmask >> 10) & 0x03]] << 8) | |
|
| 79 |
(lut[lut[(ignmask >> 8) & 0x03]]); |
|
| 76 | 80 |
|
| 77 | 81 |
gpiop->OTYPER = (gpiop->OTYPER & ignmask ) | (otyper & ~ignmask ); |
| 78 | 82 |
gpiop->OSPEEDR = (gpiop->OSPEEDR & ignmask2 ) | (ospeedr & ~ignmask2 ); |
Also available in: Unified diff