TI中文支持网
TI专业的中文技术问题搜集分享网站

请教高手解答HWREGBITW((GPIO_PORTA_BASE + GPIO_O_DATA+(GPIO_PIN_7<<2)), 7)

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页)。

xingpeng gu:

问题4 补充 : 每个gpio单元不是独立的吗 他的基址为什么不是0x00000000

Jian Zhou:

回复 xingpeng gu:

这句话的意思就是往GPIO寄存器中写入期望值以达到配置GPIO的目的,GPIO的寄存器基地址可以查看TRM的Table 2-2和Table 2-3

Steven Liu1:

你这个是哪个处理器的应用代码?这段程序源自于哪儿?给的信息不清楚,所以只能给你一个大概的描述。

总得来说,这上面只是为了改变GPIO对应的管脚的配置操作。

HWREG(x, b):一般是把x这个寄存器中的对应位,写成b这个数值。一般x,或者b都是一个看似复杂的表达式。

x一般会由一个base地址+一个地址偏移量来表示,其实就是方便你去确定对应的寄存器是哪一个,如果你在问题1的这个里面,我从字面推测,是要写GPIOD的7管脚的输出bit,具体的含义需要你对照寄存器进行确认。

b,一般是一个表达式一般会带有或运算(|),移位预算(<<),只是为了清楚的表达改变的比特是哪一位,数值是多少。

xingpeng gu:

回复 Steven Liu1:

您好,我用的是TM4C1233E6PM,用的ccs 5

您说的这个意思我明白,HWREGBITW((GPIO_PORTA_BASE + GPIO_O_DATA+(GPIO_PIN_7<<2)), 7)就是这个 到底是怎么算的呢,我是这么想的

基址参照上面我给出的 对应的PA端口的基址是GPIO_PORTA_BASE:0x4000.4000(假设是采用APB),GPIO_O_DATA是:0x00000000,对应的管脚GPIO_PIN_7的地址是0x00000080,左移两位是0x00000200,前面的全部加起来的这个地址是什么意思,还有无法理解的是这个里面为什么要左移2位这个是我最想不通的,如果按照以前学的51,好像是这么写的 sbit   x=  P1^7,  现在其他的我也想不明白了 我只想知道为什么左移两位 。

 

Yaoming Qin:

回复 xingpeng gu:

xingpeng gu

您好,我用的是TM4C1233E6PM,用的ccs 5

您说的这个意思我明白,HWREGBITW((GPIO_PORTA_BASE + GPIO_O_DATA+(GPIO_PIN_7<<2)), 7)就是这个 到底是怎么算的呢,我是这么想的

基址参照上面我给出的 对应的PA端口的基址是GPIO_PORTA_BASE:0x4000.4000(假设是采用APB),GPIO_O_DATA是:0x00000000,对应的管脚GPIO_PIN_7的地址是0x00000080,左移两位是0x00000200,前面的全部加起来的这个地址是什么意思,还有无法理解的是这个里面为什么要左移2位这个是我最想不通的,如果按照以前学的51,好像是这么写的 sbit   x=  P1^7,  现在其他的我也想不明白了 我只想知道为什么左移两位 。

 

赞(0)
未经允许不得转载:TI中文支持网 » 请教高手解答HWREGBITW((GPIO_PORTA_BASE + GPIO_O_DATA+(GPIO_PIN_7<<2)), 7)
分享到: 更多 (0)