一種提高軟件方式SPI通信速率的方法,基于DMA操作,在不通過CPU干預的方式下,將數據直接從存儲器寫到GPIO數據寄存器。通信速率不再取決于CPU性能,而是由DMA搬運數據的速度和GPIO的翻轉速度決定。因此,軟件SPI的通信速率可大大提高,系統工作效率也得到提高。
【技術實現步驟摘要】
本專利技術涉及一種提高軟件方式SPI通信速率的方法,尤其適用于時鐘速率有上限或產品芯片已經選定,電路結構不易改變的系統。
技術介紹
SPI接口的全稱是‘、erial Peripheral Interface”,意為串行外圍接口,是一種高速、全雙工、同步的通信總線,并且連線簡單,節省電路空間,近年來得到了非常廣泛的應用。目前SPI通信中,有很大一部分應用是主機采用軟件的方式(即通過GPI0(通用輸入輸出)端口產生高低電平)模擬SPI通信協議與從設備進行通信。尤其是一些比較低端的通用單片機控制器芯片MCU中常常不集成SPI模塊,主機用軟件方式模擬SPI端口的應用方式就更為普遍。圖1是目前普遍采用的軟件方式SPI方法的示意圖,目前普遍采用的軟件方式SPI 通信是首先將待發送SPI通信數據通過CPU逐位比較的方式轉換成串行數據(0/1),然后根據串行數據在GPIO端口產生SPI通信需要的時鐘驅動和數據驅動(GPI0端口翻轉),這整個過程需要在CPU控制下完成,占用了大量CPU資源。這種方法方便可行,省去了對控制器集成SPI模塊的要求也降低了硬件成本,縮短了開發周期。但是由于通過軟件方式模擬SPI通信在GPIO端口上產生翻轉需要花費大量的CPU處理時間,系統最快通信速率受限于系統工作頻率和CPU處理性能,通信速度很難提高,成為這種應用方式的瓶頸。
技術實現思路
本專利技術提供了一種提高軟件方式SPI通信速率的方法,大大提高了軟件方式SPI 通信速率和系統的工作效率。為了達到上述目的,本專利技術提供一種提高軟件方式SPI通信速率的方法,包含以下步驟步驟1、對單片機MCU系統進行初始化; 步驟2、設定SPI通訊協議;步驟3、建立用于將待發送SPI數據解析成GPIO端口驅動數據的解析數組; 步驟4、將待發送的SPI數據通過步驟3中的解析數組解析成用于驅動GPIO端口的驅動數組;步驟5、為DMA傳輸創建連續的存儲區; 步驟6、對DMA模塊進行正確配置,為SPI數據發送做好準備; 步驟7、啟動DMA傳輸,在GPIO端口上產生軟件模擬的SPI數據通信波形; 步驟8、檢查待發送數據是否已經全部發送完成,如果發送完成則程序退出,否則返回步驟4準備開始下一次數據傳輸。所述的步驟1中,初始化包括配置堆載、配置時鐘頻率、中斷設置、配置外設接口 GPIO和DMA模塊。所述的步驟2中,設定為在系統時鐘CLK的上升沿或者下降沿讀取SPI數據線 MOSI線上的數據,設定發送的數據是LSB低位在先或者是MSB高位在先。所述的步驟3中,解析數組是專門用于將待發送的SPI數據變換成GPIO端口驅動數據的一個映射方法。所述的步驟5中,存儲區創建于靜態隨機存儲器SRAM中。所述的步驟6中,使能DMA模塊及DMA中斷,每發送一個字節可產生一個完成中斷,然后再通過查步驟3中的解析數組表發送另一個字節。本專利技術大大提高了軟件方式SPI通信速率和系統的工作效率。附圖說明圖1是
技術介紹
中軟件方式SPI方法的示意圖; 圖2是通用單片機控制器芯片MCU的模塊框圖3是本專利技術的功能示意圖; 圖4是本專利技術的流程圖; 圖5是對本專利技術進行驗證的波形圖。具體實施例方式以下根據圖2 圖5,具體說明本專利技術的較佳實施例。其中圖2給出了一個通用 MCU的模塊框圖,包括CPU、只讀存儲器ROM、靜態隨機存儲器SRAM、閃存Flash、通用輸入輸出接口 GPI0、通用異步收發器UART、串行外圍接口 SPI、直接訪問存儲器DMA、計時器TIMER 和看門狗電路Watchdog等。在很多應用中,除了使用單片機MCU自帶的SPI接口模塊,也會通過GPIO來模擬其他串行總線,如SPI接口來實現某些功能。通常MCU中的模擬串行總線,如SPI,采用CPU控制GPIO方式,效率和性能比較低, 本專利技術提出一種提高軟件方式SPI通信速率的方法,基于DMA操作,在不通過CPU干預的方式下,將數據直接從存儲器寫到GPIO數據寄存器。Direct Memory Access (直接訪問存儲器)是一種高速的數據傳輸操作,允許在外部設備和存儲器之間直接讀寫數據,既不通過CPU,也不需要CPU干預,整個數據傳輸操作在一個稱為"DMA控制器“的模塊控制下進行。CPU除了在數據傳輸開始和結束時做一點處理工作外,在通信過程中CPU可以繼續進行其他的工作。這樣,在大部分時間里,CPU和 DMA、GPIO模塊處于并行操作,通信速率不再取決于系統工作頻率,而是由DMA搬運數據的速度和GPIO的翻轉速度決定。因此,軟件SPI的通信速率可大大提高,系統工作效率也得到提高。圖3是本專利技術在SPI通信應用中所處的位置,即本專利技術是對軟件方式模擬SPI方法的改進,可以代替SPI發送模塊實現高速SPI數據發送,并且可在系統時鐘不變的情況下提高軟件方式SPI發送的通信速率。如圖4所示,本專利技術提供一種提高軟件方式SPI通信速率的方法,包含以下步驟 步驟1、對單片機MCU系統進行初始化;通常MCU系統初始化包括配置堆載、配置時鐘頻率(如48MHz)、中斷設置,及部分外設接口初始化;本專利技術中,外設接口使用了 GPIO和DMA,故需要配置GPIO和DMA模塊; 步驟2、設定SPI通訊協議;系統時鐘CLK的上升沿讀取SPI數據線MOSI線上的數據,低位在先; 本專利技術以SPI模擬為例,SPI接口有4個信號M0SI (主出從入),MIS0 (主入從出),CLK (SPI時鐘),SS (從設備選擇),SPI協議中可以規定為在CLK上升沿或者下降沿讀取MOSI 線上的數據,也可以選擇發送的數據是LSB (低位)在先還是MSB (高位)在先;步驟3、建立用于將待發送SPI數據解析成GPIO端口驅動數據的解析數組; 這個解析數組是專門用于將待發送的SPI數據變換成GPIO端口驅動數據的一個映射方法,是DMA搬運之前對待發送數據進行預處理的一個關鍵步驟,建立這個數組的步驟如下模擬SPI發送4bit數據0000b,GPI0數據寄存器(假設GPIO共8個引腳,本專利技術的實施例中用了 GPIO的第3、4號引腳,分別為時鐘線CCK、數據線M0SI,如果一個0x00表示GPIO 的8個引腳輸出,可以看到本實施例中只有第3、4號信號在翻轉)應該順序寫入的數據為 0x00,0x04,0x00,0x04,0x00,0x04,0x00,0x04,對于小端 MCU,DMA 源數據區用字方式訪問時應該存儲的源數據為0x04000400,0x04000400,而對于大端MCU,DMA源數據區用字方式訪問時應該存儲的源數據為0x00040004,0x00040004。發送l_f可類推,創建DMA模擬SPI 發送4bit (Ο-f)的解析數組查表如下(OxOO-Oxff可由下表組合而成,下表以小端MCU為例)權利要求1.一種提高軟件方式SPI通信速率的方法,其特征在于,該方法包含以下步驟步驟1、對單片機MCU系統進行初始化;步驟2、設定SPI通訊協議;步驟3、建立用于將待發送SPI數據解析成GPIO端口驅動數據的解析數組;步驟4、將待發送的SPI數據通過步驟3中的解析數組解析成用于驅動GPIO端口的驅動數組;步驟5、為DMA傳輸創建連續的存儲區;步驟6、對DMA模塊進行正確配置,為SPI數據發送做好本文檔來自技高網...
【技術保護點】
【技術特征摘要】
【專利技術屬性】
技術研發人員:陳誠,陳玲,
申請(專利權)人:上海愛信諾航芯電子科技有限公司,
類型:發明
國別省市:
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。