首页 » 通讯 » 嵌入式C措辞中芯片底层特殊寄存器的封装设备方法_存放器_端口

嵌入式C措辞中芯片底层特殊寄存器的封装设备方法_存放器_端口

少女玫瑰心 2024-12-29 16:52:00 0

扫一扫用手机浏览

文章目录 [+]

我们还是结合一个实际的例子来看一下这个问题,下面是NXP S32K的端口寄存器PORTA的构造定义和地址映射。

/ PORT - Register Layout Typedef /typedef struct { __IO uint32_t PCR[PORT_PCR_COUNT]; /< Pin Control Register n, array offset: 0x0, array step: 0x4 / __O uint32_t GPCLR; /< Global Pin Control Low Register, offset: 0x80 / __O uint32_t GPCHR; /< Global Pin Control High Register, offset: 0x84 / uint8_t RESERVED_0[24]; __IO uint32_t ISFR; /< Interrupt Status Flag Register, offset: 0xA0 / uint8_t RESERVED_1[28]; __IO uint32_t DFER; /< Digital Filter Enable Register, offset: 0xC0 / __IO uint32_t DFCR; /< Digital Filter Clock Register, offset: 0xC4 / __IO uint32_t DFWR; /< Digital Filter Width Register, offset: 0xC8 /} PORT_Type, PORT_MemMapPtr;/ Peripheral PORTA base address /#define PORTA_BASE (0x40049000u)/ Peripheral PORTA base pointer /#define PORTA ((PORT_Type )PORTA_BASE)

全体PORTA干系寄存器的首地址,实际上对应的32位物理地址便是0x40049000。
个中,我们单独看一下, 端口掌握寄存器PCR(Pin Control Register)的32个数据位。

嵌入式C措辞中芯片底层特殊寄存器的封装设备方法_存放器_端口 嵌入式C措辞中芯片底层特殊寄存器的封装设备方法_存放器_端口 通讯

我们一样平常都须要配置个中的MUX(Pin Mux Control)数据位,也便是端口复用功能掌握位。
由于单片机的端口一样平常除了可以作为普通口(GPIO)外,还复用其他分外掌握功能。
比如,AD、SPI、CAN之类的分外功能。

嵌入式C措辞中芯片底层特殊寄存器的封装设备方法_存放器_端口 嵌入式C措辞中芯片底层特殊寄存器的封装设备方法_存放器_端口 通讯
(图片来自网络侵删)

根据上面MUX配置解释,我们可以通过以下操作,将其PA1口配置成GPIO,

#define PORT_PCR_MUX_MASK 0x700u#define PORT_PCR_MUX_SHIFT 8u#define PORT_PCR_MUX_WIDTH 3u#define PORT_PCR_MUX(x) (((uint32_t)(((uint32_t)(x))<<PORT_PCR_MUX_SHIFT))&PORT_PCR_MUX_MASK)PORTA->PCR[0] |= PORT_PCR_MUX(1);

结合宏函数PORT_PCR_MUX()和位或操作,将32位的PCR寄存器的MUX数据位授予了对应的数值,而完备不影响其他数据位的值。
个中,这个宏函数包含3个宏定义常量,这里分别解释一下:

PORT_PCR_MUX_MASK:位掩码

PORT_PCR_MUX_SHIFT:位偏移

PORT_PCR_MUX_WIDTH:位宽

像类似这样的定义,还有很多,用起来也非常方便,而且“顾名思义”。
一看就知道在配置什么,不须要让驱动代码编程职员,一手拿着芯片手册,一手做编码。

标签:

相关文章