基于arm9的开发板运行一个wince系统,读写总线问题

shxjzwldx   2009-4-15 08:39 楼主
基于arm9(EP9302)的开发板运行一个wince系统,读写总线问题:
在wince上写了一个小的测试程序,
while循环读取一个虚拟地址(DI)的值,
再把这个值写到另一个虚拟地址(DO)上.
结果是:用示波器测得总线上的写信号正常,
读信号间隔时间有时要几秒钟才有一个.
调试了好几天,还没找出原因,希望各位兄弟多多帮忙.

回复评论 (8)

条件太少比较难判断
点赞  2009-4-15 08:48
读什么设备?会不会该设备响应速度慢?
点赞  2009-4-15 09:20
wince里的应用程序读写虚拟内存,不管有没有读到数据,总线应该不停的有读写信号
和读什么设备应该没有关系吧
点赞  2009-4-15 10:55
while(TRUE)
{
.....其他定义
        byVal = *CPLD_EP9302_DI2;//读
        *CPLD_EP9302_DO0 = byVal;//写
}
CPLD_EP9302_DI2和CPLD_EP9302_DO0对应一个虚拟地址
用示波器测得总线上的写信号正常,
读信号间隔时间有时要几秒钟才有一个.
点赞  2009-4-15 11:00
UP
点赞  2009-4-16 10:19
虚拟空间在读写的时候,有可能只是访问自己的cach区域,并不访问真实的设备。尤其是内存空间。
你看看MMU和cach相关方面的东西,可能会找到答案
点赞  2009-4-16 20:38
引用: 引用 4 楼 xumaojun 的回复:
while(TRUE)
{
.....其他定义
byVal = *CPLD_EP9302_DI2;//读
*CPLD_EP9302_DO0 = byVal;//写
}
CPLD_EP9302_DI2和CPLD_EP9302_DO0对应一个虚拟地址
用示波器测得总线上的写信号正常,
读信号间隔时间有时要几秒钟才有一个.


能正常工作吗?

wince调试的确让人费神。
点赞  2009-4-16 20:45
问题终于解决了!
简单说一下解决办法,其实非常简单,
arm9中运行的wince系统内存映射中从0x80000000~0x9FFFFFFF这个虚拟地址是会cache的,
即如果要从这段虚拟地址读取内容,
处理器会先从cache中查找地址,
如果在cache中就会直接读取,
在总线上就不会有读信号,
如果在cache中没有找到再在总线上发读信号从内存中读数据.
从0xA0000000~0xBFFFFFFF这个虚拟地址是不会cache的,
即如果要从这段虚拟地址读取内容,
处理器会直接发读信号从内存中直接读取,
所以在总线上就总会有读信号.

最后谢谢各位兄弟的提示和帮助!
点赞  2009-4-24 15:55
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复