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傳輸函數,用示波器測量時鐘和數據管腳的波形,若是傳輸的數據和時鐘能正確匹配,說明基本完成移植。

相關文章
相關標籤/搜索