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;