SylixOS 里NUC970平台上SPI总线驱动移植

  1. 概述

    本文档是移植SPI总线驱动到NUC970平台过程的总结,提供一些SylixOS SPI驱动相关的框架理解和移植心得。

     

  2. SPI总线框架流程图

    NUC970平台上SPI总线驱动框架如图 21所示,SPI总线框架可分为两个部分,

    总线相关初始化和数据传输流程。

    21 SPI驱动流程图

  3. 技术实现

    SPI总线驱动可分为两个部分:总线相关初始化和数据传输,下面对这两个部分的流程和代码编写做详细介绍。

  4. 总线相关初始化流程

    SPI总线初始化主要有:SPI管脚复用、SPI控制器初始化、创建SPI操作函数集和创建SPI总线适配器。

  5. SPI管脚复用

    SPI管脚复用是将SPI总线相关的管脚使能,如:SPI片选引脚CS、SPI时钟引脚SCLK、SPI数据输出引脚MOSI和数据输入引脚MISO。如图 31所示,通过通道号uiChannel判断是初始化SPI0总线还是初始化SPI1总线的管脚复用。

    31 SPI管脚复用

  6. SPI控制器初始化

    SPI控制器初始化主要工作是对SPI数据传输的方式和频率的设置,如图 32所示。

    32 SPI控制器初始化函数

  7. 创建SPI操作函数集

    创建包含SPI操作函数集的结构体,如图 33所示。

    33 SPI总线函数集

  8. 创建SPI总线适配器

    如图 34所示,创建SPI总线适配器是将SPI总线加入系统的总线层。pSpiFuncs是LW_SPI_FUNCS(SPI操作函数结构体)类型,每个SPI设备通过挂载在一个SPI总线适配器上,获得SPI总线操作函数。

    34 创建SPI总线适配器

  9. 数据传输流程

    如图 35所示,数据传输时,先将数据写到SPI_Tx寄存器中,通过调用__spiStartTx函数开始数据传输,等待传输完成后调用__spiStartRx函数将接收到的数据从SPI_Rx寄存器中读取出来。循环这一过程直到数据发送完成。

    35 数据传输流程

     

  10. __trySpiTransfer函数

    NUC970开发板的SPI总线,可以通过配置SPI_CNTRL寄存器,设置单次传输的数据的字节数。这里以单个字节传输为例。如图 36所示。

    36 __trySpiTransfer函数实现

  11. __spiStartTx函数

    如图 37所示,将SPI_CNTRL寄存器的"Go_Busy位"置1,数据传输开始,等到传输完成,"Go_Busy位"会被清零。所以每次数据传输,都要将"Go_Busy位"置1,等到"Go_Busy位"被清零后,再进行下一步操作。

    37 __spiStartTx函数实现

  12. __spiStartRx函数

    如图 38所示,当调用__spiStartTx函数数据传输完成后,会调用__spiStartRx函数将接收到的数据从SPI_Rx寄存器中读取出来,到这一步SPI的一次数据传输就完成了。

    38 __spiStartRx函数实现

  13. 测试

    SPI驱动正常启动和加载的情况下,调用SPI传输函数,用示波器测量时钟和数据管脚的波形,如果传输的数据和时钟能正确匹配,说明基本完成移植。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值