Windows CE外部设备虚拟地址映射问题

graduated graduated 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
开发平台: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
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
graduated
嵌入开发(WinCE) 19,524 成员 41,565 内容