我编写了一个程序来读取 OMAP4460 (Pandaboard ES) 的皮质 A9 上的全局计时器。从 OMAP4 TRM [第 4.4.1 节] 和 Cortex-A9 MPCore TRM第 1.5 节,我可以看出 ARM9 全局定时器寄存器的基地址是 0x4824 0200。Cortex-A9 MPCore TRM第 4.4.1 节说“那里是两个定时器计数器寄存器。它们是偏移量 0x00 处的低 32 位定时器计数器和偏移量 0x04" 处的高 32 位定时器计数器。所以我写的代码如下,但它因段错误而中止。我不知道怎么了?有谁知道如何在 Linux 中准确读取 cortex A9 上的全局计时器?
#define GLOBAL_TIMER_BASE 0X48240200U
void rdGlobalTimer()
{
unsigned int _low,_high;
unsigned int addr = GLOBAL_TIMER_BASE;
__asm__ __volatile__("ldr %0, [%1]\n\t"\
: "=&r"(_low)
: "r" (addr)
: "memory");
__asm__ __volatile__("ldr %0, [%1]\n\t"\
: "=&r"(_high)
: "r" (addr + 4)
: "memory");
printf("low:%x,high:%x\n",_low,_high);
}