EFM32 系列LEUART使用指南 簡介: 本指南目的在于說明如何使用EFM32微控制器的低能耗 UART (LEUART?) 模塊。即使在器件處于深度休眠模式EM2的情況下,LEUART 也能進行全功能UART通信。與智能中斷功能及靈活的DMA 相結合,可實現簡單且節能的串行通信。 * 在低功耗模式下可使用DMA進行數據傳輸; * 9600波特率下接收數據僅消耗150nA電流; * 使用32.768kHz作為模塊時鐘源時擁有完整UART功能; * 可配置的接收數據匹配功能; * 可工作于EM0~EM2模式。 目錄 1 LEUART 原理........................................................................................................................... 3 1.1 一般原理 ......................................................................................................................... 3 2 LEUART 配置........................................................................................................................... 4 2.1 幀、傳輸和奇偶校驗 ..................................................................................................... 4 2.2 時鐘源 ............................................................................................................................. 4 2.3 波特率 ............................................................................................................................. 5 2.4 DMA集成 ........................................................................................................................ 5 2.5 脈沖發生器和擴展器 ..................................................................................................... 5 2.6 中斷 ................................................................................................................................ 6 2.7 凍結模式和低頻域同步 ................................................................................................. 6 2.8 DMA集成 ........................................................................................................................ 6 2.9 GPIO和引腳分配 ............................................................................................................ 6 1 LEUART 原理 LEUART:Low Energy Universal Asynchronous Receiver/Transmitter,低功耗通用異步收發器,是EFM32片上低功耗外設,能夠在滿足極低功耗的同時提供串口通信功能。 1.1 一般原理 EFM32的LEUART是一個獨特的低功耗UART,能在極為苛刻的功耗預算下提供雙向通信。僅需一個32.768 kHz 的時鐘源即可實現波特率高達9600的UART通信。這意味著EFM32的LEUART可在深度休眠模式EM2下工作,在消耗極低能量的情況下等待接收到來的UART幀。當一個UART幀被LEUART完全接收時,CPU可被快速喚醒。還可以選擇用DMA將多個幀傳送到存儲器中,然后再喚醒CPU。LEUART還具有處理更高層通信協議的能力。例如,可以選擇阻塞進入的幀,直到檢測到一個可配置的起始幀;還可以選擇檢測一個可配置的信號幀 (例如用于指示一次傳輸結束)。 與接收過程一樣,在EM2模式,可直接從CPU逐幀發送數據,也可以通過DMA來發送較大的幀組。EFM32 LEUART包含支持異步串行通信所需要的所有硬件,因而需要最少的軟件干預,而且消耗極低的能量。 LEUART的優勢在于能工作在EM2模式,此時大多數其他模塊都出于節能考慮而被關斷。低能耗串行通信選項與不需要CPU干預即可讀寫存儲器的DMA能力相結合,為系統設計人員在低能耗應用中使用EFM32提供了寬泛的功能。 2 LEUART 配置 2.1 幀、傳輸和奇偶校驗 LEUART使用幀來進行數據傳輸。一個 LEUART 幀由1個起始位、8或9個數據位、1個可選的奇偶校驗位和1個或2個停止位組成 (見圖2.1 )。一次傳輸由一個起始位啟動,起始位將數據線從空閑的高電平狀態拉為低電平。此后,數據位和奇偶校驗位被依序發送,直到幀傳輸被停止位結束,停止位將數據線保持在高電平。然后,數據線或者進入其高電平空閑狀態,或者發送一個新的起始位。當一個幀已準備好要被發送時,它被從發送寄存器傳送到移位寄存器,數據位在移位寄存器中被逐位發送,最低有效位在先。可將整個幀格式反相,(例如)以允許使用低電平作為空閑狀態。 在數據位結束后可以選擇添加奇偶校驗位來實現簡單的錯誤檢測。有3種不同的奇偶校驗模式:無校驗、偶校驗和奇校驗。奇偶校驗位的產生和校驗都由硬件完成,有中斷標志用于指示在幀中是否檢測到奇偶校驗錯誤。所希望的幀格式在所選LEUART的初始化期間設置。Emlib 提供一個初始化函數來定義使用LEUART進行串行通信時所需要的全部設置。通信通道的所有使用方都必須在通信幀格式上完全一致。有關LEUART寄存器和功能的詳細信息,請參見器件的參考手冊。 2.2 時鐘源 像EFM32微控制器中的其他低能耗外設一樣,LEUART可由三個不同的時鐘源驅動,即低頻RC振蕩器(LFRCO)、低頻晶體振蕩器(LFXO)和高頻內核時鐘2分頻(HFCORECLK_LE/2)。HFCORECLK_LE本身可由高頻RC振蕩器(HFRCO)、高頻晶體振蕩器(HFXO)或上述任何一個低頻振蕩器驅動。這種時鐘選擇的靈活性為系統設計人員使用LEUART功能提供了更寬范圍的可能性。這意味著除了在低能耗的EM2模式下使用一個低頻時鐘源工作外,LEUART還可以在需要更多UART通信通道的情況下作為UART的補充。不過,為使LEUART達到高于9600的波特率,所選時鐘源必須是HFCORECLK_LE/2,該選項不能在EM1-EM0模式下使用。 2.3 波特率 所選的LEUART時鐘源定義了能通過LEUART獲得的波特率。在標準低能耗工作模式,LEUART能基于32.768 kHz的時鐘提供300 ~ 9600的波特率。有關支持哪些波特率的詳細信息,請參見器件的參考手冊。Emlib包含一些用于計算可用波特率、獲取當前波特率以及設置波特率的方法。如果選擇HFCORECLK_LE/2作為LEUART的時鐘源,則可以獲得更高的波特率,但這也意味著LEUART將不能工作在EM1以下的模式,因而需要消耗更多的能量。此外,由于需要有一個高頻時鐘運行,所以UART和USART也都是可用的。 2.4 DMA集成 LEUART在EM2模式下具有全功能的DMA支持。與LEUART結合使用時,DMA是一個非常強大的工具,可以最小化CPU的干預。 ? LEUART可被配置為在發送緩沖器為空或發送緩沖區和移位寄存器均為空時向DMA請求數據。 ? LEUART 可被配置為在接收緩沖器為滿時請求DMA讀取數據。 ? 當在接收寄存器中檢測到一個有奇偶校驗錯誤的幀時,LEUARTn_CTRL寄存器中ERRSDMA位可被置1,不向DMA發出讀請求。 當MCU工作在EM2模式時,為了執行DMA傳送,必須將DMA控制器上電。對于讀操作,如果LEUARTn_CTRL中的RXDMAWU被置位,則上電過程是自動完成的;對于寫操作,如果LEUARTn_CTRL中的TXDMAWU被置位,該上電過程也是自動完成的。為確保DMA控制器在低能耗模式仍能與LEUART進行數據傳送,必須正確配置這些位。在EM2模式,DMA使用HFRCO運行,所以該高頻振蕩器也被自動喚醒和關斷。在使用DMA處理LEUART之前,還必須正確使能和配置DMA。有關如何初始化一次LEUART和DMA之間的交互的詳細信息,請參見所提供的軟件示例和器件的參考手冊。 2.5 脈沖發生器和擴展器 LEUART在發射器輸出端有一個可選的脈沖發生器,在接收器輸入還有一個可選的脈沖擴展器。脈沖發生器和擴展器可以將LEUART的輸入和輸出格式從NRZ變為RZI。來自脈沖發生器的脈沖的寬度可被配置為31.25 μs ~ 500 μs。在波特率為2400或更低的情況下,脈沖發生器還能產生與IrDA物理層規范兼容的RZI脈沖。 2.6 中斷 在數據接收和發送期間有大量的中斷可用,以支持中斷驅動應用的低能耗優勢。當接收或發送寄存器為空,或在傳輸期間檢測到任何錯誤時,都可以觸發中斷。LEUART還具有在檢測到特定的可配置幀時觸發中斷的能力。這就允許在LEUART之上構建更高層的通信協議。LEUART甚至還支持一種特殊的多處理器模式,可以進行單獨尋址和僅觸發所期望的MCU來接收并對發送的數據做出反應。這在多個UART芯片使用同一通道進行通信的系統中是一個非常有用的特性。有了這種功能,通過使用某些只能在所期望的接收器中觸發中斷的幀來啟動和結束數據傳輸,即可尋址所期望的接收器。在所提供的軟件示例中,信號幀中斷功能用于僅在檢測到一個特定幀時喚醒CPU。所有其他幀都被DMA加載到存儲器中,但CPU不產生任何響應,直到預設的信號幀被LEUART檢測到為止。 2.7 凍結模式和低頻域同步 為了修改一些LEUART寄存器,必須與低頻(LF)域實現同步。在需要修改多個寄存器時,為了避免不必要的等待延遲,所有的寄存器寫操作都應在同一個軟件模塊內部完成。該模塊由void LEUART_FreezeEnable(LEUART_TypeDef *leuart, bool enable)啟動,其中enable被設置為true;由相同的函數調用結束,不過此處enable被設置為false。這樣,所有的寄存器修改操作將會在一次同步中完成。有關訪問和修改異步寄存器的詳細信息,請參見器件的參考手冊。 2.8 半雙工操作 LEUART提供一個將發送數據本地環回到接收引腳的選項。該功能對調試非常有用,因為LEUART能接收它自己發送的數據。但該功能也用于允許LEUART讀和寫同一個引腳,這是某些半雙工通信模式所需要的。當進行全雙工通信時,LEUART提供兩條數據鏈路,允許同時發送和接收數據。在半雙工模式,某一時刻只能在一個方向發送數據。LEUART有多種可能的半雙工設置:單數據鏈路、雙數據鏈路或使用一個外部驅動器。在通過一個單數據鏈路通信的情況下,發送器在不發送數據時必須為三態。如果LEUARTn_CTRL寄存器中的AUTOTRI位被置位,則在發送器不處于活動狀態時,LEUART能自動將發送引腳置為三態。 2.9 GPIO和引腳分配 LEUART模塊具有將其TX和RX引線連接到幾個不同的預定義MCU引腳位置的能力。必須通過設置LEUARTn_ROUTE寄存器來使能和連接TX和RX引線到所期望的位置。 為使LEUART能與任何外部系統元件交互,例如RS232端口或另一外設IC,必須正確配置GPIO的I/O引腳。GPIO有多種不同的引腳模式。在官方所提供的代碼樣例中,TX引腳被配置為推挽輸出,RX引腳被使能為帶上拉的輸入。在數據線未被其他部件驅動為一個確定值的情況下,上拉使輸入有一個確定的狀態。這種情況往往發生在TX模塊被使能之前使能了RX模塊。有關GPIO模式設置的更多詳情,請參考器件的參考手冊。 |