参考文件:
- ti\TivaWare_C_Series-2.1.4.178\inc\hw_types.h
- ti\TivaWare_C_Series-2.1.4.178\inc\hw_memmap.h
- tm4c123gh6pz datasheet
TIVA程序的编写中常看到这样的操作,比如HWREG((UART0_BASE+UART_O_CTL)或者HWREG(0x12345678)这样的形式
HWREG()的意思就是操作硬件寄存器的意思,里面的参数是tm4c芯片的硬件外设寄存器地址,可以在芯片手册memory地址分配找到。HWREG()是在hw_types.h中定义的,对应的还有其他几个函数,原型如下所示:
// Macros for hardware access, both direct and via the bit-band region.
//
//*****************************************************************************
#define HWREG(x) \
(*((volatile uint32_t *)(x)))
#define HWREGH(x) \
(*((volatile uint16_t *)(x)))
#define HWREGB(x) \
(*((volatile uint8_t *)(x)))
#define HWREGBITW(x, b) \
HWREG(((uint32_t)(x) & 0xF0000000) | 0x02000000 | \
(((uint32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2))
#define HWREGBITH(x, b) \
HWREGH(((uint32_t)(x) & 0xF0000000) | 0x02000000 | \
(((uint32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2))
#define HWREGBITB(x, b) \
HWREGB(((uint32_t)(x) & 0xF0000000) | 0x02000000 | \
(((uint32_t)(x) & 0x000FFFFF) << 5) | ((b) << 2))
HWREG的参数是tm4c芯片的硬件外设寄存器地址.
附: tm4c123gh6pz 寄存器地址
手册2.4节 (92页)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223171909833.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM1MjYwNTY1,size_16,color_FFFFFF,t_70)
本表格写明了每个外设的寄存器起始地址
对应于相应外设的每个寄存器,又有相应的地址偏移及寄存器描述(见下文)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223172326658.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM1MjYwNTY1,size_16,color_FFFFFF,t_70)
The Code, SRAM, and external RAM regions can hold programs. However, it is recommended that
programs always use the Code region because the Cortex-M4F has separate buses that can perform
instruction fetches and data accesses simultaneously.
在手册中每一个外设章节,均有Register Map
例:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223172622811.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM1MjYwNTY1,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223172707410.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2JhaWR1XzM1MjYwNTY1,size_16,color_FFFFFF,t_70)
上图所示的寄存器描述中, 每个外设的寄存器都写明了外设基地址和偏移量
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200223172844591.png)
以ADCRIS寄存器操作为例,函数表示为:
HWREG(0x40038000+0x00000004)
在 hw_adc. h中,对相应的寄存器地址均进行了宏定义
#define ADC_O_ACTSS 0x00000000 // ADC Active Sample Sequencer
#define ADC_O_RIS 0x00000004 // ADC Raw Interrupt Status
……
在hw_memmap.h中,对外设寄存器的基地址进行了宏定义
#define ADC0_BASE 0x40038000 // ADC0
#define ADC1_BASE 0x40039000 // ADC1
……
所以
HWREG(ADC0_BASE+ADC_O_RIS) 即与上式表示相同的意义。
综上所述:HWREG 就是用来取外设寄存器地址
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)