我使用的CPU是ATMEL 9200,ARM920核;操作系统为2.4内核。 外部片选NCS2接一个FPGA,地址为0x30000000;在__initdata中把改物理地址映射成一个虚拟地址。 定义一个结构体来访问FPGA中的RAM. typedef struct _AT91S_FPGA_RAM { unsigned short int adr[2048]; }AT91S_FPGA_RAM,*AT91PS_FPGA_RAM; 在驱动ioctl()中对RAM进行写操作,如果写入值0x55aa,读出为0x5555;写入0x1234,读出为0x1212. 代码简要如下: AT91PS_FPGA_RAM pdata_a = (AT91PS_FPGA_RAM) FPGA_B_RAM_BASE; pdata_a->adr[0]=0x55aa; pdata_a->adr[1000]=0x1234 printk("ram0=%x
",pdata_a->adr[0]); printk("ram1=%x
",pdata_a->adr[1000]); 如果我把结构体改成: typedef struct _AT91S_FPGA_RAM { unsigned int adr[2048]; }AT91S_FPGA_RAM,*AT91PS_FPGA_RAM; 即是按照32位地址操作的话,读写就完全正确!
请问:是否在Linux中还需要设置读写IO的宽度?(注:CPU寄存器的NCS2的宽度已经设成16位)。 请高手解答啊 ...
|