- 论坛徽章:
- 0
|
原帖由 emmoblin 于 2009-3-25 23:04 发表 ![]()
我觉得可能是驱动写的有问题吧。得仔细查查,你要坚信一点,加上操作系统不会引入硬件的错误。
再仔细查查怎么映射的,这很关键
我相信你说的是正确的,加上操作系统不会引入硬件的错误,可就是总感觉操作系统的引入把时序搞乱了。现在我要操作的物理地址是
0x30000000,0x30000002,0x30000004,0x30000006,0x30000008,0x3000000a,
0x30000010,0x30000012,0x30000014,0x30000016,0x30000018, 0x3000001a,
其中0x30000000这个地址是我的一个片选ncs2的基地址,这些地址应该都要指向双字节(半字)的外设寄存器。
我要在linux下先是用vbase=(unsigned long)ioremap_nocache(0x30000000,0x18)做了个映射返回一个虚拟地址
vbase,然后就可以操作vbase,vbase+2,vbae+4,vbase+6,vbase+8,vbase+0xa,vbase+x10,vbase+0x12,vbase+0x14,vbase+0x16,vbase+0x18,vbase+0x1a来达到操作对应的那几个物理地址了吧!(操作的时候把这些值都做了强制类型转换(unsigned short int *))
上面的操作应该是正确的吧!可以看出我的编码的地址用的是板子对齐(A0没用)。在应用程序读写的时候发现了一个很奇怪的问题,竟然我arm数据总线那边的读写使能信号NRD和NWR0同时有效了。 |
|