我想请教一下如果我想对一个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 这是我在另一个论坛贴的帖子,里面有图可以看看
共2条
1/1 1 跳转至页
at91rm9200+vxworks的问题?? 请高手进来看
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也有。
愚见。。。仅供参考。
如果你的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 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |