位带别名区为啥可以操作io寄存器bit

2019-08-16 21:20发布

请教一个问题,关于位带别名区,为啥操作位带别名区就可以操作io的寄存器的每一位呢?地址都变了呀?


#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)) //IO口地址映射#define GPIOA_ODR_Addr    (GPIOA_BASE+12) //0x4001080C #define GPIOB_ODR_Addr    (GPIOB_BASE+12) //0x40010C0C #define GPIOC_ODR_Addr    (GPIOC_BASE+12) //0x4001100C #define GPIOD_ODR_Addr    (GPIOD_BASE+12) //0x4001140C #define GPIOE_ODR_Addr    (GPIOE_BASE+12) //0x4001180C #define GPIOF_ODR_Addr    (GPIOF_BASE+12) //0x40011A0C    #define GPIOG_ODR_Addr    (GPIOG_BASE+12) //0x40011E0

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
taizonglai
1楼-- · 2019-08-16 22:56
请参考《Cortex-M3权威指南》的位带区相关章节。
Owen
2楼-- · 2019-08-17 02:36
为啥操作stm32的寄存器相关引脚上就能输出对应的电平呢?
ssssssssssss
3楼-- · 2019-08-17 03:14
 精彩回答 2  元偷偷看……
ssssssssssss
4楼-- · 2019-08-17 06:26
zuozhongkai 发表于 2017-7-22 16:06
请参考《Cortex-M3权威指南》的位带区相关章节。

求大神指点迷津

一周热门 更多>