精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MindSDK應用基礎—SPI模塊樣例簡介

靈動MM32MCU ? 來源:靈動MM32MCU ? 2023-08-10 17:14 ? 次閱讀

引言

MindSDK為MM32主流的微控制器,實現了一系列SPI驅動的樣例工程。本文通過講解 SPI 模塊的樣例工程,介紹 SPI 模塊的功能和用法。關于 SPI 模塊對應的驅動程序,以及 SPI 外設模塊硬件的實現細節,可具體查閱 MindSDK 工程的源文件,以及 MM32 微控制器(例如MM32F5270)的用戶手冊。

樣例工程

MindSDK 中為 SPI 驅動設計的樣例工程包括:

spi_master_basic

spi_master_tx_dma

spi_master_xfer_dma

spi_master_b2b_interrupt

spi_master_b2b_polling

spi_slave_b2b_interrupt

其中,spi_master_basic、spi_master_tx_dma 與 spi_master_xfer_dma 分別演示了 SPI 做主機的典型數據傳輸方式,包括:基礎數據傳輸、SPI 使用 DMA 發送數據、SPI 使用 DMA 收發數據。另外,還有一些 SPI 板級通信的樣例,通過將一塊 SPI 做主機,另一塊 SPI 做從機的方式進行一系列板對板的基礎數據傳輸,主機樣例與從機樣例結合使用,包括:SPI做主機進行中斷數據傳輸,SPI做主機進行輪詢數據傳輸,SPI做從機進行中斷數據傳輸(SPI從機引腳與SPI主機引腳相連進行數據傳輸)。

spi_master_basic

spi_master_basic 描述了 SPI 模塊最基本的數據傳輸方式,輪詢方式。在樣例工程中,通過 SPI_InitMaster() 函數,配置 SPI 為主模式,選定一個 SPI 數據采樣時序,為空閑時時鐘線為低電平、下降沿時數據有效的 SPI_PolPha_Alt0 ,并指定傳輸數據寬度為 SPI_DataWidth_8b 、SPI 的波特率為 BOARD_LOOP_SPI_BAUDRATE ,選定 SPI 的傳輸方向為 SPI_XferMode_TxRx 。然后,通過 SPI_Enable() 函數啟動 SPI,使 SPI 能夠進行數據傳輸。

每當 SPI 發送緩沖區未滿時,可進行數據發送,數據由 MOSI 引腳傳出;當 SPI 接收緩沖區接收有效數據時,可讀取有效的接收數據。

在最終運行程序時,需要將 SPI 的 MOSI 引腳與 MISO 引腳使用杜邦線相連,通過向 PC 機上的串口通信終端輸入任意按鍵,使 SPI 進行 APP_SPI_BUFF_LEN 次數據發送并接收到數據,主循環對接收數據和發送數據進行驗證,若存在驗證失敗數據,則可看到串口打印出錯信息 spi loopback xfer error. app_spi_xfer_err_count = ,若驗證成功,則可看到串口打印 spi loopback xfer done. ,從而驗證 SPI 做主機的數據輪詢傳輸情況。

spi_master_tx_dma

spi_master_tx_dma 相較于 spi_master_basic 樣例工程,實現通過 DMA 進行 SPI 的數據發送功能。

其實現原理,是在 spi_master_basic 的基礎上,增加對于 DMA 的初始化,通過 DMA_InitChannel() 函數,選定所使用的 DMA 通道為 BOARD_SPI_TX_DMA_CHANNEL ,配置 DMA 數據搬運方向為存儲器到外設 DMA_XferMode_MemoryToPeriph ,數據寬度為 DMA_XferWidth_8b ,通過 SPI_GetTxDataRegAddr() 函數獲取外設地址并進行配置,設定存儲器地址為 (uint32_t)app_spi_tx_buf ,外設地址自增模式為不自增 DMA_AddrIncMode_StayAfterXfer ,存儲器地址自增模式為 DMA_AddrIncMode_IncAfterXfer。然后,啟用選定 SPI 外設的 DMA 發送通道對應的 NVIC 中斷。最后,通過 DMA_EnableChannelInterrupts()函數,在 BOARD_SPI_TX_DMA_CHANNEL 通道使能 DMA_CHN_INT_XFER_DONE 中斷,每次在 DMA_EnableChannel() 啟動 DMA 數據傳輸后,DMA 傳輸完成時,會觸發中斷。

實際運行程序時,將 SPI 的 MOSI 引腳與 MISO 引腳使用杜邦線相連后,用戶在串口調試終端中每次輸入任意字符,程序均會調用一次 DMA_EnableChannel() 函數,啟動 DMA 傳輸,在 SPI 進行一次 DMA 傳輸并完成后,DMA 輸標志位`app_dma_xfer_done`將在中斷處理函數中被設置為true,主程序循環等待,當標志位為 true 時,打印 spi tx dma xfer done. 到串口終端界面。

spi_master_xfer_dma

spi_master_xfer_dma 相較于 spi_master_tx_dma 樣例工程,實現通過 DMA 進行 SPI 的數據收發功能。

其實現原理,是在 spi_master_tx_dma 的基礎上,增加對于 SPI 使用 DMA 接收通道的初始化,選定使用的 SPI DMA 接收通道為 BOARD_SPI_RX_DMA_CHANNEL ,在初始化 DMA 發送通道后,繼續使用 DMA_InitChannel() 函數初始化 DMA 接收通道,修改傳輸方向為 DMA_XferMode_PeriphToMemory ,設定存儲器地址為 (uint32_t)app_spi_rx_buf ,通過 SPI_GetRxDataRegAddr() 函數獲取外設地址并配置。然后啟用選定 SPI 外設的 DMA 接收通道對應的 NVIC 中斷。最后,在 BOARD_SPI_RX_DMA_CHANNEL 通道使能 DMA_CHN_INT_XFER_DONE 中斷,每次在 DMA_EnableChannel() 啟動 DMA 數據傳輸后,當 DMA 傳輸完成,會觸發對應通道的中斷。

實際運行時,將 SPI 的 MOSI 引腳與 MISO 引腳使用杜邦線相連后,用戶在串口調試終端中每次輸入任意字符,程序均會調用一次 DMA_EnableChannel() 函數,啟動 DMA 的發送與接收通道,在 SPI 進行一次 DMA 發送并完成后,DMA 發送完成標志位 app_dma_tx_done 將在發送通道所對應的中斷處理函數中被設置為 true,再進行 SPI 的 DMA 接收操作,DMA 接收數據完成后,DMA 接收完成標志位 app_dma_rx_done 將在接收通道所對應的中斷處理函數中被設置為 true,主程序循環等待,當發送完成標志位為 true 時,打印 spi tx dma done. 到串口終端界面,當接收完成標志位未 true 時,打印 spi rx dma done with data: 以及接收數據到串口終端界面。

spi_master_b2b_interrupt

spi_master_b2b_interrupt 實現的是一個使用 SPI 主模式中斷傳輸的樣例工程,在主從機的從屬關系中做主機,需與從機結合使用。

其實現原理,是在 spi_master_basic 的基礎上,增加 SPI 傳輸所使用的結構體,通過 SPI_EnableInterrupts() 函數使能發送完成中斷 SPI_INT_TX_DONE 與接收完成中斷 SPI_INT_RX_DONE 中斷,當發送或接收數據完成時,產生對應中斷,在中斷處理函數中,傳輸次數達到所設定的 rx_idx 或 tx_idx ,將通過 SPI_EnableInterrupts() 函數關閉對應的接收完成中斷或發送完成中斷,接收完成后調用 spi_rx_done_callback() 回調函數,并將全局標志位 app_spi_xfer_flag 置為true。

實際運行此程序時,需令一塊開發板下載此樣例工程,另一塊開發板下載 spi_slave_b2b_interrupt 樣例工程,使用杜邦線連接兩開發板的 MOSI、MISO、NSS、SCK 引腳,通過串口終端界面輸入任意按鍵,進行 SPI 的數據收發,串口終端打印發送數據與接收數據。

spi_master_b2b_polling

spi_master_b2b_polling 實現的是一個使用 SPI 主模式輪詢傳輸的樣例工程,在主從機的從屬關系中做主機,需與從機結合使用。

該實現原理與 spi_master_basic 基本相同,通過 while 循環等待當前達到發送或接收數據所需的傳輸條件,達到后進行數據收發,設定發送 APP_SPI_BUF_LEN 個數據并接收。

實際運行此程序時,需令一塊開發板下載此樣例工程,另一塊開發板下載 spi_slave_b2b_interrupt 樣例工程,使用杜邦線連接兩開發板的 MOSI、MISO、NSS、SCK 引腳,通過串口終端界面輸入任意按鍵,進行 SPI 的數據收發,串口終端打印發送數據與接收數據。

spi_slave_b2b_interrupt

spi_slave_b2b_interrupt 實現的是一個使用 SPI 從模式中斷的樣例工程,在主從機的從屬關系中做從機,需與主機結合使用。

在樣例工程中,通過 SPI_InitSlave() 函數配置 SPI 為從模式,設置傳輸方向為 SPI_XferMode_TxRx ,SPI 從機的數據采樣時序需要與主機的數據采樣時序配置相同,為 SPI_PolPha_Alt0 ,設定數據寬度為 SPI_DataWidth_8b 。通過 SPI_EnableInterrupts() 函數使能 SPI_INT_RX_DONE 中斷,并啟用選定 SPI 外設對應的 NVIC 中斷。最后,啟動 SPI,SPI 作為從機,等待主機的命令。當 SPI 接收完成數據后,產生接收完成中斷,并執行中斷處理函數,在中斷處理函數中將已接收的數據發送出去。

在最終運行程序時,需令一塊開發板下載此樣例工程,另一塊開發板下載 spi_master_b2b_polling 樣例工程或 spi_master_b2b_interrupt 樣例工程,使用杜邦線連接兩開發板的 MOSI、MISO、NSS、SCK 引腳,在 spi_master_b2b_xxx 工程中對應的串口終端界面下輸入任何字符,在 spi_slave_b2b_interrupt 工程中對應的串口終端界面中可以看到對應的內容。






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7496

    瀏覽量

    151083
  • 存儲器
    +關注

    關注

    38

    文章

    7455

    瀏覽量

    163621
  • 數據傳輸
    +關注

    關注

    9

    文章

    1853

    瀏覽量

    64498
  • SPI
    SPI
    +關注

    關注

    17

    文章

    1701

    瀏覽量

    91344
  • dma
    dma
    +關注

    關注

    3

    文章

    559

    瀏覽量

    100446

原文標題:靈動微課堂 (第267講)|MindSDK應用基礎——SPI模塊樣例

文章出處:【微信號:MindMotion-MMCU,微信公眾號:靈動MM32MCU】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于FPGA的SPI自動發送模塊的設計

    基于FPGA的SPI自動發送模塊的設計:一、摘要:SPI 接口應用十分廣泛,在很多情況下,人們會用軟件模擬的方法來產生SPI 時序或是采用帶SPI
    發表于 10-04 08:44 ?25次下載

    SPI、IIC、IIS、UART、SDIO、GPIO 簡介

    SPI、IIC、IIS、UART、SDIO、GPIO 簡介
    發表于 10-29 17:00 ?0次下載

    常見總線簡介CAN、USART、SPI、SCI等

    常見總線簡介,包括CAN、USART、SPI、SCI等
    發表于 11-30 14:08 ?0次下載

    SPI接口的應用與基于FPGA的SPI自動發送模塊設計

    SPI 接口應用十分廣泛,在很多情況下,人們會用軟件模擬的方法來產生SPI 時序或是采用帶SPI 功能模塊的MCU。但隨著可編程邏輯技術的發展,人們往往需要自己設計簡單的
    發表于 10-19 10:33 ?19次下載
    <b class='flag-5'>SPI</b>接口的應用與基于FPGA的<b class='flag-5'>SPI</b>自動發送<b class='flag-5'>模塊</b>設計

    fireflyAIO-3288C主板SPI接口簡介

    SPI是一種高速的,全雙工,同步串行通信接口,用于連接微控制器、傳感器、存儲設備等,本文以指紋識別模塊簡單介紹SPI使用。
    的頭像 發表于 12-16 14:11 ?1225次閱讀
    fireflyAIO-3288C主板<b class='flag-5'>SPI</b>接口<b class='flag-5'>簡介</b>

    SPI總線接口在OLED模塊中的應用詳細說明

    針對OLED模塊應用中8位數據并行接口占用單片機I/O管腳較多的問題,本文介紹了SPI總線接口在OLED模塊中的應用,并以VGG12864L-S002顯示模塊
    發表于 11-21 16:39 ?7次下載
    <b class='flag-5'>SPI</b>總線接口在OLED<b class='flag-5'>模塊</b>中的應用詳細說明

    SPI基礎,SPI是怎么的?

    SPI是一種簡單的接口,允許一個芯片與一個或多個其他芯片進行通信。 1,SPI是怎么的? 讓我們從一個簡單的示例開始,其中只有兩個芯片必須一起通信。 SPI要求在兩個芯片之間使用4條
    的頭像 發表于 11-19 18:06 ?4916次閱讀

    SPI Nand Flash簡介

    1.SPI Nand Flash簡介SPI Nand Flash顧名思義就是串行接口的Nand Flash,它和普通并行的Nand Flash相似,比如:SLC Nand Flash。2.SP
    發表于 12-02 10:51 ?34次下載
    <b class='flag-5'>SPI</b> Nand Flash<b class='flag-5'>簡介</b>

    SPI通信簡介

    目錄(?)[-]SPI簡介SPI特點1采用主-從模式Master-Slave 的控制方式2采用同步方式Synchronous傳輸數據3數據交換Data Exchanges4 SPI有四
    發表于 12-22 19:14 ?9次下載
    <b class='flag-5'>SPI</b>通信<b class='flag-5'>簡介</b>

    MindSDK概述、使用方法及應用案例

    MindSDK(mm32-mcu-sdk)是由靈動官方的軟件團隊開發和維護的基于靈動微控制器的軟件開發平臺。
    的頭像 發表于 08-12 09:10 ?1351次閱讀

    MindSDK中FlexCAN驅動程序及工程

    和MM32F0140微控制器,其中就有FlexCAN外設模塊的驅動程序以及工程,以及對CAN總線通信協議CANopen的適配工程。本文將介紹MindSDK中FlexCAN驅動程序及
    的頭像 發表于 06-23 15:41 ?1174次閱讀
    <b class='flag-5'>MindSDK</b>中FlexCAN驅動程序及<b class='flag-5'>樣</b><b class='flag-5'>例</b>工程

    MindSDK應用基礎—TIM模塊

    MindSDK為MM32使用星辰處理器內核的系列微控制器,實現了一組TIM工程,MindSDK中的TIM模塊對應硬件定時器TIM外設。
    的頭像 發表于 06-29 17:16 ?824次閱讀

    MindSDK為MM32實現了一組TIM工程

    MindSDK為MM32使用星辰處理器內核的系列微控制器,實現了一組TIM工程,MindSDK中的TIM模塊對應硬件定時器TIM外設。
    的頭像 發表于 06-30 17:32 ?866次閱讀

    MindSDK應用基礎—ADC模塊

    MindSDK為MM32主流的微控制器,實現了一組ADC工程。本文通過講解ADC模塊
    的頭像 發表于 08-17 17:16 ?901次閱讀

    MindSDK應用基礎——TIM模塊

    MindSDK應用基礎——TIM模塊
    的頭像 發表于 10-25 16:25 ?556次閱讀