在OMAP4460(Pandaboard ES) cortex A9平台上,我有一个程序,读取GLOBAL TIMER的值。根据OMAP4 TRM(4.4.1节)以及Cortex-A9 MPCore TRM(1.5节)。ARM9 上global timer寄存器在内存中映射的地址基址为0X48240200,文档中描述,GLOBAL TIMER是一个64-bit的寄存器,基于上述基址,偏移量0X00为其低32bit值,偏移量0X04为其高32bit值。
在Linux用户态,我使用如下代码读取GLOBAL TIMER的值,但读取到的一直为0。希望哪位专家能指出错误,给点意见。另外,请教如何在Linux 内核态读取 GLOBAL TIMER的值。
#define MAP_SIZE 4096UL
#define MAP_MASK (MAP_SIZE - 1)
target1 = 0X48240200;
target2 = 0X48240204;
fd = open("/dev/mem", O_RDWR | O_SYNC);
if(fd == -1)
{
printf("open failued\n");
return 1;
}
map_base = (char*)mmap(0,MAP_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd,target1 & (~ MAP_MASK));
if(map_base == NULL)
{
printf("map error\n");
return 1;
}
addr1 = (unsigned int *)(map_base + (target1 & MAP_MASK));
addr2 = (unsigned int *)(map_base + (target2 & MAP_MASK));
while(1)
{
printf("addr1:%u,addr2:%u\n\n",*addr1,*addr2);
sleep(1);
}