位帶操作HWREGBITW(x, b) 理解
阿新 • • 發佈:2021-08-05
1、位帶操作
位帶區域分直接位帶區(bit-band region)和位帶別名區(bit-band alias)。直接位帶區是一塊直接對應暫存器的地址(地址表見晶片手冊Memory Map);位帶別名區是直接位帶區的對映,將每一位膨脹成了一個32位的字。
2、HWREG()巨集
HWREG()巨集可以直接操作硬體暫存器,裡面的引數是tm4c晶片的硬體外設暫存器地址
#define HWREG(x) \ (*((volatile uint32_t *)(x))) #define HWREGH(x) \ (*((volatile uint16_t *)(x))) #define HWREGB(x) \ (*((volatile uint8_t *)(x)))
3、HWREGBITW()巨集
HWREGBITW()巨集定義的是tm4c晶片的位帶操作,對應地址範圍是SRAM/Peripheral bit-band alias。巨集定義中的“| 0x02000000”則鎖定了位帶別名區。
#define HWREGBITW(x, b) \ HWREG(((uint32_t)(x) & 0xF0000000) | 0x02000000 | \ (((uint32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2)) #define HWREGBITH(x, b) \ HWREGH(((uint32_t)(x) & 0xF0000000) | 0x02000000 | \ (((uint32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2)) #define HWREGBITB(x, b) \ HWREGB(((uint32_t)(x) & 0xF0000000) | 0x02000000 | \ (((uint32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2))
(1)位帶區
TM4C晶片中位帶區域包含SRAM和Peripheral,如下圖所示。
(2)引數說明
HWREGBITW(x,b)巨集中的x是所填位帶區的地址,b是偏移量。