位带操作HWREGBITW(x, b) 理解

1、位带操作

位带区域分直接位带区(bit-band region)和位带别名区(bit-band alias)。直接位带区是一块直接对应寄存器的地址(地址表见芯片手册Memory Map);位带别名区是直接位带区的映射,将每一位膨胀成了一个32位的字。

2、HWREG()宏

HWREG()宏可以直接操作硬件寄存器,里面的参数是tm4c芯片的硬件外设寄存器地址

#define HWREG(x)                                                              
     	   (*((volatile uint32_t *)(x)))
#define HWREGH(x)                                                             
    	    (*((volatile uint16_t *)(x)))
#define HWREGB(x)                                                             
    	    (*((volatile uint8_t *)(x)))

3、HWREGBITW()宏

HWREGBITW()宏定义的是tm4c芯片的位带操作,对应地址范围是SRAM/Peripheral bit-band alias。宏定义中的“| 0x02000000”则锁定了位带别名区。

#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))

(1)位带区

TM4C芯片中位带区域包含SRAM和Peripheral,如下图所示。

(2)参数说明

HWREGBITW(x,b)宏中的x是所填位带区的地址,b是偏移量。 

原文地址:https://www.cnblogs.com/shuoguoleilei/p/15103226.html