目录
在进行MCU开发的时候,可能会遇到需要自己手写寄存器库的情况,以下整理了一些相关的示例以及注意事项。
一、寄存器的结构体定义
注意:在定义寄存器结构体的时候,需要注意MCU的字节序,看是
小端的芯片
还是
大端的芯片。
小端:低地址存放低位
大端:低地址存放高位
(1)例:用Renesas中RH850中的一个寄存器作为示例,
RH850为小端序
结构体定义如下:
一般定义成一个共用体,既可以设置整体值,又可以针对某一位进行设置。
typedef volatile unsigned int vuint32_t
// 小端序,低地址存放低位
typedef union
{
vuint32_t R;
struct
{
vuint32_t CFE :1;
vuint32_t CFRXIE :1;
vuint32_t CFTXIE :1;
vuint32_t :1;
vuint32_t CFPLS :3;
vuint32_t :1;
vuint32_t CFM :2;
vuint32_t CFITSS :1;
vuint32_t CFITR :1;
vuint32_t CFIM :1;
vuint32_t CFIGCV :3;
vuint32_t CFTML :5;
vuint32_t CFDC :3;
vuint32_t CFITT :8;
} B;
}RegCFDCFCCk_u;
(2)例:大端序MCU结构体定义示例
结构体定义如下:
// 大端序,低地址存放高位
typedef union
{
uint16_t R;
struct
{
uint16_t rw :2;
uint16_t addr :6;
uint16_t data :8;
}
}Cmd_t;
二、寄存器的地址的宏定义
寄存器地址宏定义如下:
#define RegRCFDC0_base ( 0xFFD00000ul )
#define RegCFDCFCCk(k) ((RegCFDCFCCk_u *)) (RegRCFDC0_base + 0x0118u + (0x04u * k))
版权声明:本文为laifengyuan1原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。