我編寫了一個程序來讀取OMAP4460(Pandaboard ES)的皮層A9上的全局定時器。從OMAP4 TRM [4.4.1節]和Cortex-A9 MPCore TRM section 1.5可以看出,ARM9全球定時器寄存器的基址爲0x4824 0200. Cortex-A9 MPCore TRM section 4.4.1表示「有兩個定時器計數器它們是偏移量爲0x00的低32位定時器計數器和偏移量爲0x04「的高32位定時器計數器。所以我寫的代碼如下,但是它會因段錯誤而中止。我沒有什麼問題?有誰知道如何精確讀取Linux上的cortex A9全局定時器?如何在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);
}
你在哪裏做?在'內核'或'用戶空間'中?也許不要標記** linux **使其更明顯。一切都使用Linux中的MMU,甚至內核。你需要確保地址被映射。通常,它被註冊爲資源,然後驅動程序聲明它。另外,我知道它是一個**手臂** CPU,但這個問題通常與**手臂**無關。 –