SPI_MASTER驱动

SPI Master驱动

参考文件:spi-s3c24xx.c (drivers\spi)

(1) 编写框架

  1. 声明spi_master结构体,并在init函数中定义(使用函数定义);exit函数;注册init、exit函数;头文件暂时直接拷贝spi-s3c24xx.c的;



    —头文件

  2. 参考spi-s3c24xx.c文件中probe函数,写出上述所需创建spi_master的函数;继而写出exit所需的destory函数

    —create_ spi_ master函数

    —这里还需要自己定义一个s3c_spi_info结构体

    —destory_ spi_ master函数

    1/27/2018 12:01:55 AM

(2) 实现master结构体下的setup子函数

  1. 写setup函数之前,写一个对spi控制器的初始化函数(参考裸板代码),并在create_spi_master函数中调用;

    —函数代码

    —调用函数

  2. setup函数

    —传输模式(手册–>代码)

    —频率(手册–>代码)

    —所需的变量

    1/29/2018 7:32:50 PM

(3) 实现master结构体下的transfer子函数

  1. 框架

    • 1.1 选中芯片

    • 1.2 发数据

    1.2.1 发送第一个spi_transfer前先setup;

    1.2.2 从spi _ message逐个取出spi_transfer,执行(发送/接收)它;

    —补充


    1.2.3 唤醒等待的进程;

    • 1.3 取消选中

  2. 申请中断,并写出相应的中断函数

    2.1 在create_spi_master 函数中申请中断(并将irq保存到s3c_spi_info结构体中),并给spi_master_init函数中调用的create_spi_master函数添加传入参数;


    2.2 中断函数


    —s3c_spi_info结构体新添加的成员,并在s3c2440_spi_transfer函数中进行初始化


  3. 最后在destory_spi_master函数中释放中断


    2/2/2018 9:45:42 PM

(4) 测试及调试

  1. 修改内核目录/drivers/spi下的Makefile,去掉系统自带的spi master主控程序;并重新编译内核(make uImage);

    —修改/drivers/spi下的Makefile

    —重新编译内核后,并重命名为uImage_3.4.2_nospimaster

  2. 上传文件并添加Makefile,进行初次编译;

    —修改Makefile

    —初次编译,出现一些错误

  3. 根据错误提示,修改文件,解决错误;将编译成功的ko文件拷贝到根文件系统目录下;

    —修改文件




    —编译成功

    —将ko文件拷贝到根文件系统目录下
    cp spi_master_s3c2440.ko /work/nfs_root/fs_mini_mdev_new

  4. 测试

    4.1 nfs下载新内核uImage_3.4.2_nospimaster,并用其启动

    nfs 30000000 192.168.0.3:/work/nfs_root/uImage_3.4.2_nospimaster
    bootm 30000000
    

    4.2 加载master驱动,出现段错误;查看文件,并解决错误

    —段错误

    —按照提示查看create_spi_master函数,查找问题,在文件中添加如图代码;

    —再次编译,重新加载驱动,又出现新的段错误;根据提示在s3c2440_spi_irq函数中加入“防误触”代码;

    —再次编译,重新加载驱动,加载成功

    4.3 再加载之前的oled驱动和flash驱动,进行测试验证

    —加载spi_oled驱动,验证

    —加载spi_flash驱动,验证

补充:测试完发现,当卸载master驱动后,重新加载master驱动,会出现如图段错误;

—重新加载出现段错误

—修改驱动中的destory_spi_master函数中的代码,解决该错误

2/5/2018 2:38:23 PM

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值