Cortex-M3內核的ARM芯片,支持位帶(bit band)操作。位帶操作就是使用普通的加載/存儲指令來對單一的比特進行讀寫。在CM3中,有兩個區中實現了位帶。其中一個是SRAM區的最低1MB範圍,第二個則是片內外設區的最低1MB範圍。這兩個區中的地址除了可以像普通的RAM一樣使用外,它們還都有自己的“位帶別名區”,位帶別名區把每個比特“膨脹”成一個32 位的字。當你通過位帶別名區訪問這些字時,就可以達到訪問原始比特的目的。
// 參閱sys.h文件
// 把“位帶地址+位序號”轉換成別名地址的宏
#define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x2000000+((addr &0xFFFFF)<<5)+(bitnum<<2))
// 把該地址轉換成一個指針
#define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
#define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))