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;

以上一般就是對芯片寄存器進行開發時常用的操作手段


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM