大家好!我用的是友善的micro2440开发板,由于想要调试一下SPI的驱动,但是在内核源码里没有找到有相关的例子,所以只好自己写。在调试的过程中遇到了问题,请大家帮帮忙指点一下:
由于到设置SPI控制寄存器,但是在Linux里无法直接访问控制器的物理地址,所以需要使用ioremap函数,我的ioremap函数如下:
struct spi_dev _t
{
...
void __iomem *regs;
...
};
static struct spi_dev_t spi_dev;
//初始化SPI控制器
static void spi_register_init( struct spi_dev_t *dev)
{
unsigned char tmp;
...
dev->regs = ioremap( S3C2410_PA_SPI, S3C24xx_SZ_SPI);
...
tmp = readb(dev->regs + S3C2410_SPCON); //读SPCON
tmp |= 0x1c;
writeb(tmp, dev->regs + S3C2410_SPCON); //写SPCON,问题就出现在这里,我读SPI控制器的值是它的默认设置,
//我也读过SPRDAT寄存器,读到的值是0XFF,所以SPI控置器的读应该是
//对的,但是把设置好的值写进控制器时却写不进去,读到的值还是默
//认值,不知道是为什么,请各位帮帮忙,多谢了
...
}
static int __init spi_init(void)
{
...
spi_register_init(&spi_dev);
...
}