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语言:寄存器操作的主要内容,如果未能解决你的问题,请参考以下文章