野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 7282|回复: 0

[讨论]关于位带别名区地址的问题

[复制链接]
发表于 2022-6-29 23:25:09 | 显示全部楼层 |阅读模式
本帖最后由 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,还请大家指点一下

附上部分例程如下:
  1. // 把“位带地址+位序号”转换成别名地址的宏
  2. #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+((addr & 0x000FFFFF)<<5)+(bitnum<<2))

  3. // 把一个地址转换成一个指针
  4. #define MEM_ADDR(addr)  *((volatile unsigned long  *)(addr))

  5. // 把位带别名区地址转换成指针
  6. #define BIT_ADDR(addr, bitnum)   MEM_ADDR(BITBAND(addr, bitnum))

  7. #define GPIOH_ODR_Addr    (GPIOH_BASE+20)

  8. #define PHout(n)   BIT_ADDR(GPIOH_ODR_Addr,n)  //输出

  9. PHout(10)= 0;               
复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 01:05 , Processed in 0.025101 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表