关于PCI板卡内存读写的问题

PCI板卡中BAR0是内存映射的。已经获得BAR0的基地址F5011000H,现在想对其偏移地址8102H处的内存进行操作,请问应该如何操作?
以下是我的操作,不知是否正确。
//memory map
uint32_t *ptr0;
ptr0 = mmap_device_memory(0, inf.BaseAddressSize[0],PROT_READ|PROT_WRITE|PROT_NOCACHE, 0,(uint64_t)BAR0);
//BAR0 = F5011000H
//inf.BaseAddressSize[0] = 4996D
if (ptr0 == MAP_FAILED )
{
perror( “mmap_device_memory for physical address BAR0 failed” );
exit( EXIT_FAILURE );
}

//access memory
volatile uint32_t *tp;
tp = ptr0 + 0x8102;
*tp = 0xff;

不正确

不要用BAR0,用PCI_MEM_ADDR(inf.CpuBaseAddress[0])
ptr0 = mmap_device_memory(0, inf.BaseAddressSize[0],PROT_READ|PROT_WRITE|PROT_NOCACHE, MAP_SHARED, PCI_MEM_ADDR(inf.CpuBaseAddress[0]);

*ptr0为32位指针, ptr0 + 0x8102的话偏移地址为(0x8102 * 4)
*tp定义为位32指针,一般来说偏移地址0x8102的内存或为16位8或为位,你查一下用户手册.

我的BAR0就是经过PCI_MEM_ADDR处理过的地址
0x8012的地址确实是16位的,你的意思是应该将tp定义位16位?
具体应该怎么操作?另外,如果是要访问一个32位的地址(例如0x10),又当如何操作?

问题已经解决。
谢谢。