博士
最后登录1970-1-1
在线时间 小时
注册时间2021-7-16
|
本帖最后由 Access 于 2022-6-30 00:14 编辑
火哥教程里关于位带别名区地址的描述如下:对于片上外设位带区的某个比特,记它所在字节的地址为A, 位序号为n(0<=n<=7),则该比特在
别名区的地址为:AliasAddr= =0x42000000+ (A-0x40000000)*8*4 +n*4
这里位序号n有个取值范围为:0<=n<=7,为什么例程里n可以取10?
【无责任猜测:10*4=(10/8)*32+(10%8)*4,还请大家指点一下】
附上部分例程如下:
- // 把“位带地址+位序号”转换成别名地址的宏
- #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x000FFFFF)<<5)+(bitnum<<2))
- // 把一个地址转换成一个指针
- #define MEM_ADDR(addr) *((volatile unsigned long *)(addr))
- // 把位带别名区地址转换成指针
- #define BIT_ADDR(addr, bitnum) MEM_ADDR(BITBAND(addr, bitnum))
- #define GPIOH_ODR_Addr (GPIOH_BASE+20)
- #define PHout(n) BIT_ADDR(GPIOH_ODR_Addr,n) //输出
- PHout(10)= 0;
复制代码
|
|