本文已参与「新人创作礼」活动,一起开启掘金创作之路。
位带
Cortex-M3内核是32位,每4个字节一个单元,一个单元对应一个地址。从0x20000000-0x20100000中一共个字节,因此对应1MB.
位带别名区将比特位膨胀为32位,然后重新分配地址,因此对于外设区某一位,距基地址的比特位数目为,重新分配地址时按照4个字节(32位)分配新地址,因此新地址变成
优点
- 便于控制GPIO的输入输出
- 便于控制串行接口芯片的时序
比如操控LED可以通过对位带地址进行读取和写入(参考了普中视频)
#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))
#define PCout(n) BIT_ADDR(GPIOC_ODR_Addr,n)