OMAP4460 (Pandaboard ES) の cortex 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);
}