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

本文详细介绍了在Linux-2.6.26环境下,如何使用S3C2440进行SPI驱动的基本测试。主要内容包括GPIO配置、寄存器读写、内核注册与配置等步骤,并通过实例展示了如何初始化SPI设备和进行简单的数据测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础请参考: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读写也成功,读写部分代码就不贴了,比较简单。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值