主题 : 关于SPI端口ioremap映射的问题 复制链接 | 浏览器收藏 | 打印
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
楼主  发表于: 2010-04-21 11:02

 关于SPI端口ioremap映射的问题

各位好
     我在做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 );
    
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
1楼  发表于: 2010-04-21 11:22
没人说,自己顶上去,哈哈
查看spi物理地址为/* SPI */
#define S3C2410_PA_SPI       (0x59000000)
按照devfs中听起始地址和长度来映射,应该是没有问题的
级别: 侠客
UID: 6147
精华: 0
发帖: 91
金钱: 640 两
威望: 241 点
综合积分: 182 分
注册时间: 2009-05-21
最后登录: 2011-06-23
2楼  发表于: 2010-04-21 15:20
直接用单个SPI寄存器进行映射,问题同样存在,如SPI_CON0 = ioremap(0x59000000,4);
#define spi_con0 *(volatile unsigned long *)(SPICON0)
写入值为0x19 读出来还是为0
级别: 新手上路
UID: 26612
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
综合积分: 2 分
注册时间: 2010-08-11
最后登录: 2010-08-20
3楼  发表于: 2010-08-20 14:55

 回 2楼(mikej) 的帖子

我也遇见了这个问题 不知道楼主解决了没有
*無鈳取玳
级别: 论坛版主
UID: 27
精华: 12
发帖: 5398
金钱: 40120 两
威望: 17929 点
综合积分: 11036 分
注册时间: 2008-01-16
最后登录: 2014-11-22
4楼  发表于: 2010-08-20 16:04
要操作SPI Controller的寄存器,至少要将CLKCON寄存器中bit18 SPI这一位置1以打开Controller的Clock
"If you have an apple and I have an apple and we exchange apples, then you and I will
still each have one apple. But if you have an idea and I have an idea and we exchange
these ideas, then each of us will have two ideas."