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

發佈了27 篇原創文章 · 獲贊 50 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章