基于arm9(EP9302)的开发板运行一个wince系统,读写总线问题:
在wince上写了一个小的测试程序,
while循环读取一个虚拟地址(DI)的值,
再把这个值写到另一个虚拟地址(DO)上.
结果是:用示波器测得总线上的写信号正常,
读信号间隔时间有时要几秒钟才有一个.
调试了好几天,还没找出原因,希望各位兄弟多多帮忙.
wince里的应用程序读写虚拟内存,不管有没有读到数据,总线应该不停的有读写信号
和读什么设备应该没有关系吧
while(TRUE)
{
.....其他定义
byVal = *CPLD_EP9302_DI2;//读
*CPLD_EP9302_DO0 = byVal;//写
}
CPLD_EP9302_DI2和CPLD_EP9302_DO0对应一个虚拟地址
用示波器测得总线上的写信号正常,
读信号间隔时间有时要几秒钟才有一个.
虚拟空间在读写的时候,有可能只是访问自己的cach区域,并不访问真实的设备。尤其是内存空间。
你看看MMU和cach相关方面的东西,可能会找到答案
问题终于解决了!
简单说一下解决办法,其实非常简单,
arm9中运行的wince系统内存映射中从0x80000000~0x9FFFFFFF这个虚拟地址是会cache的,
即如果要从这段虚拟地址读取内容,
处理器会先从cache中查找地址,
如果在cache中就会直接读取,
在总线上就不会有读信号,
如果在cache中没有找到再在总线上发读信号从内存中读数据.
从0xA0000000~0xBFFFFFFF这个虚拟地址是不会cache的,
即如果要从这段虚拟地址读取内容,
处理器会直接发读信号从内存中直接读取,
所以在总线上就总会有读信号.
最后谢谢各位兄弟的提示和帮助!