毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> 嵌入式 >> 正文

C/++如何读取寄存器的值

更新时间:2012-12-31:  来源:毕业论文

C/++如何读取寄存器的值
想读取这两个寄存器的值 该怎么办呢
寄存器有地址的
应该是可以的,如果是类似于ARM的统一编址的话,访问内存和访问寄存器的汇编指令是一模一样的,在C/C++一级都是一样的写法。但如果是X86这种独立编址的话,访问内存和访问寄存器的汇编指令是不一样的,但不确定在C/C++一级也可以采用同一种写法,没有实际搞过不敢瞎说。

就统一编址的话说,访问寄存器和访问内存是一样的,你想想访问内存是怎么访问的,给出指针是吧,也就是地址是吧。查到寄存器的实际物理地址,例如定时器的控制寄存器T0TCR,地址为0x80001000,那么对应的定义
unsigned long *p = ((volatile unsigned long *) 0xE000401C);
那么读寄存器的话unsigned long ReadValue = *p;
写寄存器的话,unsigned long WriteValue = VALUE; *p = WriteValue ;

你也可以看一下相关CPU的寄存器地址头文件中的定义格式:
#define T0TCR           (*((volatile unsigned long *) 0xE0004004))

T0TCR只是个宏名而已。
你就理解这底层是怎么做的。

查一下VOLT的地址,同时注意位宽,因为ARM的是32的,所以寄存器一般也是32,所以用的是unsigend long。具体到实际的CPU要对应的改改。

例如VOLT的地址为 0xA0001200,CPU位宽为8BIT,具体的如果有问题,请自己试着改改,也就哪几种方式。
那么为方便使用,宏定义:
#define VOLT (*((volatile unsigned char *) 0xA0001200))

读寄存器 unsigned char ReadValue = VOLT ;
写寄存器 unsigned char WriteValue  = 0x5A; VOLT = WriteValue ;或直接点:
VOLT = 0x5A;

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。