这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » at91rm9200+vxworks的问题?? 请高手进来看

共2条 1/1 1 跳转至

at91rm9200+vxworks的问题?? 请高手进来看

菜鸟
2008-09-25 17:25:59     打赏
我想请教一下如果我想对一个16位数据总线的外部静态存储设备进行读写,应该怎么设置SMC的CSR寄存器?我所访问的16位器件没有字节访问,我想进行半字的写访问,我的设置如下:AT91C_BASE_SMC2->SMC2_CSR[7]=0x0|0x01<<7|0x1<<8|1<<12|0x1<<13; 但是我进行写的时候发现每次写信号出现后有两次的地址输出,第二次是第一次地址加1的地址。这种情况好像字访问模式.
如果我想实现半字传输,该如何设置呢??
补充一下:我的电路A0地址不接,实际地址线为A1~A4。
上面第一张图里面出现的是两次读信号,而我只出现一次读信号,但却有两次的地址输出!!请问这是为什么?
还有当我用这个地址写数据时有数据输出 *((volatile unsigned int*)0x80000000)=0x00FF,
但用这个地址写数据时就没有数据输出 *((volatile unsigned int*)0x80000002)=0x0055  
出现这种情况的原因有是什么??

希望各位兄弟姐妹帮帮我,我已经被这个困了好几天了,实在没办法了!!!!
http://bbs.cedn.cn/viewthread.php?tid=18476&extra=page%3D1  这是我在另一个论坛贴的帖子,里面有图可以看看



关键词: at91rm9200+vxworks     问题     高手         

菜鸟
2008-09-26 19:30:37     打赏
2楼
CPU应该提供了字节槽(Byte lane)控制线,每一个8位都有对应控制线。
如果你的16位静态存储设备没有字节槽控制线,那是进行不了以字节为单位的访问的,因为硬件上就没有相应实现。如果你的设备是可以缓存的(亦即读一次,写一次,读多次,写多次效果一样),那么可以采用读出再写入的方式实现字节为单位的写入。
*((volatile unsigned int*)0x80000000)=0x00FF,是应该有数据输出的。
*((volatile unsigned int*)0x80000002)=0x0055 是应该没有数据输出的,而且还可能发生数据异常,因为整型是4位的,向一个为不可被4整除的地址写入4位,CPU不知道怎么去发起总线传输,不知道到底如何驱动总线--本来就不好驱动,除非CPU聪明到通过多次总线操作完成这个操作。可是ARM不像x86那么聪明,可以帮我们发起多次传输再把数据拼起来,还放缓存里,快得很。有的书上叫这个叫这个叫自然对齐,大端(Big Endian)的CPU有自然对齐的要求,部分小端(Little endian)的CPU也有。
愚见。。。仅供参考。


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]