寄存器地址与数据配置

寄存器地址与数据配置寄存器地址说明存储寄存器地址的大小为4位,也就是地址偏移相差0x4,每位存储1字节数据,共4字节(32位)0x400==1K0x100000==1M0X40000000==1G0X80000000==2G赋值方式格式:寄存器地址|=value(置1)、寄存器

大家好,欢迎来到IT知识分享网。寄存器地址与数据配置

寄存器地址说明

  • 存储寄存器地址的大小为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
 
 
 

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/33274.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信