SylixOS NUC970平台SPI总线驱动移植

  1. 概述

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

     

  2. SPI总线框架流程图

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

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

    图21 SPI驱动流程图ui

  3. 技术实现

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

  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控制器初始化函数im

  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传输函数,用示波器测量时钟和数据管脚的波形,若是传输的数据和时钟能正确匹配,说明基本完成移植。

相关文章
相关标签/搜索