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