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

 目录

一、寄存器的结构体定义

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


在进行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))
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不吃鱼的猫丿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值