linux-2.6.26下SPI1(4) S3C2440 spi驱动简单测试

来源:互联网 发布:搜索引擎优化建议指南 编辑:程序博客网 时间:2024/05/14 09:21

基础请参考:linux-2.6.26下SPI1(3) S3C2440 spi驱动简单测试


说明:

1、GPIO控制使用相关的宏即可,不用wirte read相关函数

2、寄存器读写推荐使用ioread iowrite相关函数,不推荐直接操作指针

3、内核源码需添加SPI相关注册

4、内核配置需添加SPI


static int io_init(void)
{
    unsigned char cmd;
//     struct resource *res;
//     int size;
    
    //2: 端口功能配置
    
    // RST1
    s3c2410_gpio_cfgpin(S3C2410_GPG8, S3C2410_GPG8_OUTP);
    s3c2410_gpio_setpin(S3C2410_GPG8, 1);
    
    // RST2
    s3c2410_gpio_cfgpin(S3C2410_GPA11, S3C2410_GPA11_OUT);
    s3c2410_gpio_setpin(S3C2410_GPA11, 1);
    
    // CS1
    s3c2410_gpio_cfgpin(S3C2410_GPA1, S3C2410_GPA1_OUT);
    s3c2410_gpio_setpin(S3C2410_GPA1, 1);
    
    // CS2
    s3c2410_gpio_cfgpin(S3C2440_GPJ12, S3C2440_GPJ12_OUTP);
    s3c2410_gpio_setpin(S3C2440_GPJ12, 1);
    
    
    // GPG 5 6 7配置为SPI接口 SPI1
    s3c2410_gpio_cfgpin(S3C2410_GPG5, S3C2410_GPG5_SPIMISO1);
    s3c2410_gpio_cfgpin(S3C2410_GPG6, S3C2410_GPG6_SPIMOSI1);
    s3c2410_gpio_cfgpin(S3C2410_GPG7, S3C2410_GPG7_SPICLK1);
    
    //     SPPRE1 = 0x10; // PCLK/2/(X+1) 应小于25M PCLK=400M X=0x10 BAUD=11.8M X最小为7
    cmd =0x18;
    iowrite8(cmd,spi_sppre1);// 波特率设置
    mdelay(10);
    cmd=ioread8(spi_sppre1);// 读取错误
    printk(KERN_EMERG "spi_sppre1=%#x  readb :%#x \n",(int )spi_sppre1,cmd);
    
    cmd=ioread8(spi_spcon1);//
    cmd=(0<<6)|(0<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);
    iowrite8((char)cmd,spi_spcon1);//


    cmd=ioread8(spi_sppin1);//
    cmd=(0<<2)|(0<<0);
    iowrite8((char)cmd,spi_sppin1);//

    return 0;

}


int spi_init_test(void)
{
    unsigned char tmp=0;

    
    spi_spcon1 = (int *)ioremap(0x59000020,1);
    spi_spsta1 = (int *)ioremap(0x59000024,1);
    spi_sppin1 = (int *)ioremap(0x59000028,1);
    spi_sppre1 = (int *)ioremap(0x5900002c,1);
    spi_sptdat1 = (int *)ioremap(0x59000030,1);
    spi_sprdat1 = (int *)ioremap(0x59000034,1);
    printk("Init spi success!\n");

    tmp=0;
    *spi_sppre1=0x18;
    tmp=*spi_sppre1;
    printk("readByte=%#x \n",tmp);

    tmp=0x55;
    iowrite8(tmp,spi_sppre1);
    tmp=0;
    tmp=ioread8(spi_sppre1);
    printk("ioread8=%#x \n",tmp);

    io_init();
    spi_data_test();

    return 0;
}

 

调试读写寄存器打印正确。SPI读写也成功,读写部分代码就不贴了,比较简单。




原创粉丝点击