寄存器地址與數據配置


寄存器地址說明

  • 存儲寄存器地址的大小為4位,也就是地址偏移相差0x4 ,每位存儲1字節數據,共4字節(32位)
  • 0x400  == 1K

  • 0x10 0000 == 1M

  • 0X4000 0000 == 1G 

  • 0X8000 0000 == 2G

 
賦值方式

  格式:寄存器地址 |= value(置1)、寄存器地址 &= value(置0)

  例子:

GPIOB_CRL &= ~(1111<<4*N); //左移4*N位,先復位

GPIOB_CRL |= (1101<<4*N); //左移4*N位,再置位

 含義:

      • 1101:寄存器配置的模式

      • 4*N:假設以每4位為一組,第N組

      • 1101<<4*2 = 1101 0000 0000

或者

HWREG(BASE + OFFSET) &=DATA

HWREG(BASE + OFFSET) |=DATA //置位

BASE:基地址,OFFSET:偏移地址 ,DATA:模式或者數據

 

#define HWREG(x) *((volatile unsigned int *)(x)))

  • 把x轉化為volatile unsigned int *(地址/指針)類型,並*取值(內容)

  • 對寄存器里面的內容進行操作

 

volatile

  • volatile是一個特征修飾符(type specifier).volatile的作用是作為指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值。

  • volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。

  • 精確地說就是,編譯器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。

  • #define __IO volatile

 

寄存器置1置0

#define setbit(x,y)   x |= (1<<y) //將x的第y位置1
#define clrbit(x,y)   x &= ~(1<<y) //將x的第y位清0
 
 
 


免責聲明!

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



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