ARM Linux的IO操作怪现象

[复制链接]
 楼主| branch 发表于 2007-1-22 10:04 | 显示全部楼层 |阅读模式
我使用的CPU是ATMEL&nbsp;9200,ARM920核;操作系统为2.4内核。<br />外部片选NCS2接一个FPGA,地址为0x30000000;在__initdata中把改物理地址映射成一个虚拟地址。<br />定义一个结构体来访问FPGA中的RAM.<br />typedef&nbsp;struct&nbsp;_AT91S_FPGA_RAM&nbsp;{<br />&nbsp;&nbsp;unsigned&nbsp;short&nbsp;int&nbsp;adr[2048];<br />}AT91S_FPGA_RAM,*AT91PS_FPGA_RAM;<br />在驱动ioctl()中对RAM进行写操作,如果写入值0x55aa,读出为0x5555;写入0x1234,读出为0x1212.<br />代码简要如下:<br />AT91PS_FPGA_RAM&nbsp;pdata_a&nbsp;=&nbsp;(AT91PS_FPGA_RAM)&nbsp;FPGA_B_RAM_BASE;<br />pdata_a-&gtadr[0]=0x55aa;<br />pdata_a-&gtadr[1000]=0x1234<br />printk(&quot;ram0=%x
&quot;,pdata_a-&gtadr[0]);<br />printk(&quot;ram1=%x
&quot;,pdata_a-&gtadr[1000]);<br />如果我把结构体改成:<br />typedef&nbsp;struct&nbsp;_AT91S_FPGA_RAM&nbsp;{<br />&nbsp;&nbsp;unsigned&nbsp;int&nbsp;adr[2048];<br />}AT91S_FPGA_RAM,*AT91PS_FPGA_RAM;<br />即是按照32位地址操作的话,读写就完全正确!<br /><br />请问:是否在Linux中还需要设置读写IO的宽度?(注:CPU寄存器的NCS2的宽度已经设成16位)。<br />请高手解答啊&nbsp;...<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

2

主题

3

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部