C语言:寄存器操作

Posted JeckXu666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;

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

以上是关于C语言:寄存器操作的主要内容,如果未能解决你的问题,请参考以下文章

20160206.CCPP体系具体解释(0016天)

20160206.CCPP体系详解(0016天)

C语言-常用寄存器位操作总结

C语言代码片段

修改寄存器的位操作方法

51单片机汇编中的寄存器R0、R1、R2如果用c语言写的话怎么表示