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