Windows CE外部设备虚拟地址映射问题
开发平台:ARM + S3C2440
外设驱动:SM501 图形显示芯片(带二维图形加速功能,暂时没用到)
遇到的问题:通过KITL调试,返回的信息提示DATA ABORT。以为是显示缓存设的太小,在注册表中更改缓存的大小为8M,并在config.bib中添加此部分声明。仍然提示上述错误。
着手驱动程序(添加驱动程序的时候根本没有看源代码,只是将生成的dll文件添加进去,汗!!!)
发现里面虚拟地址和实际的物理地址对应有问题。
原因是这样的:比如501的MMIO_BASE+60寄存器为Device ID,高4位为设备ID号,这个ID号在我调试硬件的时候已经确定了,是正确的,和手册上一样为0x501。
而程序中得到的结果不对。
源程序如下:
pss->m_pREG = (unsigned char *)VirtualAddress(pss->m_nREGPhysical, pss->RegMemorySize());
RETAILMSG(1, (TEXT("m_pREG = 0x%08X 0x%08X\r\n"), pss->m_pREG, *(volatile unsigned long *)(pss->m_pREG + 0x60)));
其中pss->m_nREGPhysical为寄存器段物理起始地址,由注册表获得。
输出的结果为:
m_pREG = 0x44300000 0x23E00FF2