canGIM寄存器配置详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

canGIM寄存器配置详解
Canxxx寄存器地址说明
存储寄存器地址的大小为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。

相关文档
最新文档