主题 : Mini2440+LInux2.6.32:ioremap 怎么不能写SPI和IIC寄存器呢 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 23855
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
综合积分: 34 分
注册时间: 2010-06-28
最后登录: 2017-09-13
楼主  发表于: 2010-07-30 11:10

 Mini2440+LInux2.6.32:ioremap 怎么不能写SPI和IIC寄存器呢

Mini2440
Linux2.6.32

在内核驱动中我想直接读写SPI和IIC寄存器,但通过ioremap后,无法写寄存器,请各位帮忙看看

/*=====================================================================================
函数:spi0_init
功能:
=======================================================================================*/
void spi0_init(void)
{
#ifdef _SPI0_C_DEBUG_
UDWORD temp;
#endif
    
s3c2440a_spi0_base = ioremap(0x59000000,0x40);
if(s3c2440a_spi0_base==NULL)
{
    printk(KERN_ERR "K:Failed to remap spi0 register block\n");
    return;
}

//RC522最大速率10M,PCLK=FCLK/4=50.7M
__raw_writeb(2,s3c2440a_spi0_base + S3C2410_SPPRE1);    //PCLK/2/(value+1) -> 50.7/6 = 8.45Mhz
//S3C2410_SPPRE1 = 0x02;
#ifdef _SPI0_C_DEBUG_
temp = __raw_readl(s3c2440a_spi0_base + S3C2410_SPPRE1);//
printk("\nS3C2410_SPPRE1:%x",temp);//
#endif
//
__raw_writeb(0x18,s3c2440a_spi0_base + S3C2410_SPCON1); //polling mode, enable sck, master,active high,format a,normal  
//S3C2410_SPCON1 = 0x18;
#ifdef _SPI0_C_DEBUG_
temp = __raw_readl(s3c2440a_spi0_base + S3C2410_SPCON1);//
printk("\nS3C2410_SPCON1:%x",temp);//
#endif
//
__raw_writeb(0x02,s3c2440a_spi0_base + S3C2410_SPPIN1);
//S3C2410_SPPIN1 = 0x02;
#ifdef _SPI0_C_DEBUG_
temp = __raw_readl(s3c2440a_spi0_base + S3C2410_SPPIN1);//
printk("\nS3C2410_SPPIN1:%x",temp);//
#endif
//
return;
}

其中S3C2410_SPXXXX 等为2440 SPI端口偏移量, 例如:S3C2410_SPCON1为0x20
我打印出来的SPI寄存器的值都是0,why?
S3C2410_SPPRE1:0
S3C2410_SPCON1:0
S3C2410_SPPIN1:0

谢谢
级别: 新手上路
UID: 23855
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
综合积分: 34 分
注册时间: 2010-06-28
最后登录: 2017-09-13
1楼  发表于: 2010-08-02 09:33
麻烦各位了!
级别: 新手上路
UID: 18127
精华: 0
发帖: 14
金钱: 70 两
威望: 14 点
综合积分: 28 分
注册时间: 2010-04-06
最后登录: 2016-09-06
2楼  发表于: 2010-08-02 09:44
CLKCON这个寄存器需要设置 spi和i2c的pclk使能 否则这些寄存器不能设置
而且你的寄存器偏移量好像也搞错了吧
[ 此帖被科长大叔在2010-08-02 10:02重新编辑 ]
级别: 新手上路
UID: 23855
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
综合积分: 34 分
注册时间: 2010-06-28
最后登录: 2017-09-13
3楼  发表于: 2010-08-04 17:17
寄存器偏移量好像也搞错???
请问是那个寄存器?怎么个搞错法?
级别: 新手上路
UID: 23855
精华: 0
发帖: 17
金钱: 85 两
威望: 17 点
综合积分: 34 分
注册时间: 2010-06-28
最后登录: 2017-09-13
4楼  发表于: 2010-08-05 10:52
谢谢科长大叔啊
正解: CLKCON这个寄存器需要设置 spi和i2c的pclk使能 否则这些寄存器不能设置

内核中我把iic和spi都干掉了,直接读写iic和spi寄存器时必须在clkcon中使能iic和spi “control PCLK into iic/spi block"

谢谢!