C语言:寄存器操作

C语言:寄存器操作

C语言:寄存器操作

在对芯片进行开发时,我们对芯片的操作本质上就是对芯片底层寄存器进行操作,在C语言中对寄存器进行操作则是通过寄存器的地址进行数据的赋值,那这个过程是如何实现的呢?

我们在学习单片机时,会使用到单片机厂商提供 SDK,会遇到如下的代码

/*

* CCM相关寄存器地址

*/

#define CCM_CCGR0 *((volatile unsigned int *)0X020C4068)

#define CCM_CCGR1 *((volatile unsigned int *)0X020C406C)

#define CCM_CCGR2 *((volatile unsigned int *)0X020C4070)

#define CCM_CCGR3 *((volatile unsigned int *)0X020C4074)

#define CCM_CCGR4 *((volatile unsigned int *)0X020C4078)

#define CCM_CCGR5 *((volatile unsigned int *)0X020C407C)

#define CCM_CCGR6 *((volatile unsigned int *)0X020C4080)

这些代码用宏定义来替换掉寄存器的地址,方便用户直接使用宏定义名称来操作寄存器,最关键的部分就是下面这段代码:

*((volatile unsigned int *)0X020C4068)

这部分代码就是用来映射寄存器,使用 volatile unsigned int * 来将一个寄存器地址强制转化为 unsigned int 的指针,同时使用 volatile 关键字对寄存器地址进行修饰,告诉编译器,该地址运行过程中随时可能变化,编译时不要过优化该地址!

关于 volatile 的用法可以看我之前的文章: C语言:volatile关键字

在将寄存器地址强制转化为指针地址后,在前面在加上 * 指向地址存放的值,之后我们直接调用宏定义就可以操作寄存器了,如下

CCM_CCGR0 = 0xffffffff;

CCM_CCGR1 = 0xffffffff;

CCM_CCGR2 = 0xffffffff;

CCM_CCGR3 = 0xffffffff;

CCM_CCGR4 = 0xffffffff;

CCM_CCGR5 = 0xffffffff;

CCM_CCGR6 = 0xffffffff;

以上一般就是对芯片寄存器进行开发时常用的操作手段

相关推荐

暗黑破坏神3什么装备好 暗黑3全实用装备盘点
365bet平台网址

暗黑破坏神3什么装备好 暗黑3全实用装备盘点

📅 07-20 👁️ 6433
什么什么鼻什么的成语
365体育投注提款

什么什么鼻什么的成语

📅 08-20 👁️ 4885
男生第一次秒正常吗
365体育投注提款

男生第一次秒正常吗

📅 09-21 👁️ 3950
半年大变样 最新Win10手机预览版评测
365bet平台网址

半年大变样 最新Win10手机预览版评测

📅 07-15 👁️ 5412
怎么炒,炒出来不发黑的香脆炒藕片
365体育投注提款

怎么炒,炒出来不发黑的香脆炒藕片

📅 07-14 👁️ 3121
半两白酒多少ml?25毫升背后的酒桌智慧
365bet平台网址

半两白酒多少ml?25毫升背后的酒桌智慧

📅 09-21 👁️ 1835
手机名片扫描软件排行榜TOP10推荐
365提款一直在审核

手机名片扫描软件排行榜TOP10推荐

📅 08-09 👁️ 5079
2024全国化学专业大学排名一览表,哪个大学最好?
365bet平台网址

2024全国化学专业大学排名一览表,哪个大学最好?

📅 08-25 👁️ 8777
文化中国行·年味非遗|以刀为弦 镌刻非遗“竹”光曲
365体育投注提款

文化中国行·年味非遗|以刀为弦 镌刻非遗“竹”光曲

📅 09-24 👁️ 8015