打印

关于往地址里写数据的这个函数HWREGBITW()

[复制链接]
4450|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sayato|  楼主 | 2014-10-27 22:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
HWREGBITW((GPIO_PORTA_BASE + GPIO_O_DATA+(GPIO_PIN_7<<2)), 7)
问题1,结合下面的资料解释这句话??

#define GPIO_PIN_7              0x00000080  // GPIO pin 7
#define GPIO_O_DATA           0x00000000    问题2,这个是什么意思


#define HWREGBITW(x, b)                                                      
        HWREG(((unsigned long)(x) & 0xF0000000) | 0x02000000 |               
              (((unsigned long)(x) & 0x000FFFFF) << 5) | ((b) << 2))  
问题3,这个是什么意思??


GPIO 数据寄存器 (GPIODATA)
GPIO 端口 A (APB) 基址: 0x4000.4000    问题4, 这个基址  是什么意思??
GPIO 端口 A (AHB) 基址: 0x4005.8000
GPIO 端口 B (APB) 基址: 0x4000.5000
GPIO 端口 B (AHB) 基址: 0x4005.9000
GPIO 端口 C (APB) 基址: 0x4000.6000
GPIO 端口 C (AHB) 基址: 0x4005.A000
GPIO 端口 D (APB) 基址: 0x4000.7000
GPIO 端口 D (AHB) 基址: 0x4005.B000
GPIO 端口 E (APB) 基址: 0x4002.4000
GPIO 端口 E (AHB) 基址: 0x4005.C000
GPIO 端口 F (APB) 基址: 0x4002.5000
GPIO 端口 F (AHB) 基址: 0x4005.D000
偏移量 0x000
类型 R/W, 复位 0x0000.0000


                                   32位数据寄存器
位/域        名称      类型          复位                                                 描述                                                                        
31:8        保留          RO        0x0000.00                              软件不应该依赖保留位的值。为了兼容未来的器件,保留位的值在读-
                                                                                                 修改-写操作过程中应当保持不变。
7:0         DATA        R/W        0x00                                      GPIO数据寄存器
                                                                                          该寄存器被虚拟地映射到地址空间的256 个单元中。为便于通过单独的
                                                                                         驱动器读写这些寄存器,从这些寄存器读取的值和写入这些寄存器的值
                                                                                         可以通过八条地址线 [9:2] 屏蔽。读取该寄存器将返回其当前状态。写入
                                                                                            该寄存器仅影响那些没有被 ADDR[9:2] 屏蔽的位和被配置成输出的位。
                                                                                           关于读写操作的实例,请参考 “数据寄存器的操作”(580页)。

相关帖子

沙发
dirtwillfly| | 2014-10-28 21:15 | 只看该作者
问题1、HWREGBITW()是针对cortex-M3和M4架构里特有的bit-band的操作,你可以先了解一下bit-band的操作就好理解了。
ps:HWREGBITW()不是一个函数,原因见问题3的回答。
问题2、GPIO_O_DATA 寄存器的宏定义,数值为0x00000000   
问题3、HWREGBITW(x, b)的宏定义
问题4、基址,就是基础地址的意思,这里说的比较详细:http://baike.baidu.com/view/105417.htm?fr=aladdin

使用特权

评论回复
板凳
sayato|  楼主 | 2014-10-28 21:52 | 只看该作者
dirtwillfly 发表于 2014-10-28 21:15
问题1、HWREGBITW()是针对cortex-M3和M4架构里特有的bit-band的操作,你可以先了解一下bit-band的操作就好 ...

那这个函数的意思是往这个端口地址写7  是什么意思 还是往这个管脚写7   这是什么意思 是使能这个管脚位还是 设置这个管脚位 等等

使用特权

评论回复
地板
dirtwillfly| | 2014-10-28 22:08 | 只看该作者
sayato 发表于 2014-10-28 21:52
那这个函数的意思是往这个端口地址写7  是什么意思 还是往这个管脚写7   这是什么意思 是使能这个管脚位 ...

向GPIO_PORTA_BASE + GPIO_O_DATA+(GPIO_PIN_7<<2))这个寄存器地址写7,具体这个寄存器功能,你翻手册吧。我用手机不方便查

使用特权

评论回复
5
sayato|  楼主 | 2014-11-1 00:20 | 只看该作者
dirtwillfly 发表于 2014-10-28 22:08
向GPIO_PORTA_BASE + GPIO_O_DATA+(GPIO_PIN_7

这个就是数据寄存器,手册上跟ccs里面定义都不一样的 真的很头痛,   就算这样 我还是不知道 这个函数到底是怎么实现的  还望指教

使用特权

评论回复
6
dirtwillfly| | 2014-11-1 08:53 | 只看该作者
sayato 发表于 2014-11-1 00:20
这个就是数据寄存器,手册上跟ccs里面定义都不一样的 真的很头痛,   就算这样 我还是不知道 这个函数到 ...

这个宏函数的定义就在这里:
#define HWREGBITW(x, b)                                                      
         HWREG(((unsigned long)(x) & 0xF0000000) | 0x02000000 |               
               (((unsigned long)(x) & 0x000FFFFF) << 5) | ((b) << 2))  
你把这句弄明白了就懂了

使用特权

评论回复
7
sayato|  楼主 | 2014-11-1 10:12 | 只看该作者
dirtwillfly 发表于 2014-11-1 08:53
这个宏函数的定义就在这里:
#define HWREGBITW(x, b)                                                 ...

哥关键就是这句不明白

使用特权

评论回复
8
leon0820| | 2015-4-1 11:24 | 只看该作者
HWREGBITW(x,b):以“Bit-banding”方式访问全字寄存器x当中的第b位。
推荐看周立功的“Luminary《Stellaris驱动库》编程入门”

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

39

帖子

0

粉丝