主题 : 关于SPI驱动的问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 10225
精华: 0
发帖: 4
金钱: 25 两
威望: 8 点
综合积分: 8 分
注册时间: 2009-10-28
最后登录: 2017-04-20
楼主  发表于: 2010-05-20 22:45

 关于SPI驱动的问题

大家好!我用的是友善的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);
    ...
}

级别: 新手上路
UID: 21867
精华: 0
发帖: 18
金钱: 90 两
威望: 18 点
综合积分: 36 分
注册时间: 2010-05-23
最后登录: 2011-05-12
1楼  发表于: 2010-06-04 21:23
交流一下啊,373284369
级别: 侠客
UID: 5071
精华: 0
发帖: 50
金钱: 390 两
威望: 297 点
综合积分: 100 分
注册时间: 2009-04-09
最后登录: 2013-12-20
2楼  发表于: 2010-06-04 23:47
linux/drivers/spi/spi_s3c24xx.c