各位好
我在做spi端口映射时,调用ioremap将spi0的物理地址转换成虚拟地址,返回的__iomem *adr是不为空的,但是用其地址加上寄存器操作时出现了问题,写一个值进寄存器后,读出来的还是0,很明显,io口映射没有成功,但是在内核中spi_24xx.c中也是类似做的,是不是在spi_24xx.c中已经做了类似的端口映射,而现在再做一次,会出现问题,也只有这个原因才会出现这个问题,请教下大家(再说下,spi_24xx.c文件我在内核配置中并没有包括进来,启动也没有调用这个文件,所以说应该不存在二次io映射的问题)!
spi_res = request_mem_region( s3c_device_spi0.resource[0].start,(s3c_device_spi0.resource[0].end - s3c_device_spi0.resource[0].start)+1,
PRINT_DEVICE_NAME);
if (spi_res == NULL) {
printk("Cannot reserve region\n");
return -ENXIO;
}
spi_regs = ioremap( s3c_device_spi0.resource[0].start, (s3c_device_spi0.resource[0].end - s3c_device_spi0.resource[0].start)+1);
if (spi_regs == NULL) {
printk("Cannot map IO\n");
return -ENXIO;
}
writeb( 0x3 , spi_regs+S3C2410_SPPRE ) ;/* baud rate = (PCLK / 2 ) / (PRESCALER VALUE + 1 )*/
addr = readb( spi_regs+S3C2410_SPPRE );
printk("spi freq : %d \n",addr );