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
谢谢