OK6410如何使用SPI驱动

一:在arch/arm/mach-s3c64XX/mach-smdk6410.c中中增加如下代码:

static void  cs_set_level(unsigned line_id, int lvl) {
    gpio_direction_output(line_id, lvl);
};

static struct s3c64xx_spi_csinfo s3c64xx_spi0_csinfo = {
  .fb_delay=100,
  .line=S3C64XX_GPC(3),
  .set_level=cs_set_level,
};

static struct spi_board_info s3c6410_spi0_board[] = { 
[0] = { 
.modalias = "spidev", 
.bus_num= 0, 
.chip_select= 0, //必须小于s3c6410_spi0_platdata.num_cs 
.irq =IRQ_SPI0, 
.max_speed_hz= 500*1000, 
.mode=SPI_MODE_0,
.controller_data=&s3c64xx_spi0_csinfo,
}, 
};

static struct s3c64xx_spi_csinfo s3c64xx_spi1_csinfo = {
  .fb_delay=100,
  .line=S3C64XX_GPC(7),
  .set_level=cs_set_level,
};

static struct spi_board_info s3c6410_spi1_board[] = { 
[0] = { 
.modalias = "spidev", 
.bus_num= 1,//代表使用芯片的第二个spi模块 
.chip_select= 0, //必须小于s3c6410_spi1_platdata.num_cs 
.irq = IRQ_SPI1, 
.max_speed_hz = 500*1000, 
.mode=SPI_MODE_0,
.controller_data=&s3c64xx_spi1_csinfo,
}, 
};


在mach-smdk6410.c最后在函数 mini6410_machine_init中添加:

s3c64xx_spi_set_info(0,0,1);
s3c64xx_spi_set_info(1,0,1);
spi_register_board_info(s3c6410_spi0_board, ARRAY_SIZE(s3c6410_spi0_board)); 
spi_register_board_info(s3c6410_spi1_board, ARRAY_SIZE(s3c6410_spi1_board));

mach-smdk6410.c头文件里面添加了:
#include <linux/spi/spidev.h>
#include <linux/spi/spi.h>
#include <plat/s3c64xx-spi.h>重点的来了:
在此目录中找到:Makefile,打开
修改成

# device support

obj-y    += dev-uart.o
obj-y    += dev-audio.o
obj-y    += dev-spi.o


现在编译make zImage,成功
放到板子上安装,就可以在dev下看到spidev0.0,spidev1.0了:

spi_board_info 结构体说明:

static struct spi_board_info at_spi_board_info_all_devices[] =
{
    {    /* DataFlash chip mc13783*/
        .modalias    = "mtd_dataflash", //driver name

        .bus_num            = 0,  //表示用第几个spi控制器
        .chip_select        = 0, //表示spi控制器的第几个片选信号
        .max_speed_hz       = 20000000,
        .irq                = INT_NUM_MIX1,

    },

static void  cs_set_level(unsigned line_id, int lvl) {
    gpio_direction_output(line_id, lvl);
};

static struct s3c64xx_spi_csinfo s3c64xx_spi1_csinfo = {
      .fb_delay=0x3,
      .line=S3C64XX_GPC(7),//片选信号 GPC7  SPI_CSn[1]
      .set_level=cs_set_level,
};



}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值