工作经验总结:MCU寄存器库的开发

  • Post author:
  • Post category:其他



目录


一、寄存器的结构体定义


二、寄存器的地址的宏定义


在进行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 版权协议,转载请附上原文出处链接和本声明。