使用事件系統和DMA來(lái)消除中斷可實(shí)現超快響應時(shí)間和極低功耗
隨著(zhù)嵌入式系統與外圍環(huán)境的響應越來(lái)越多,需要捕獲和處理數據的外設數量也暴增。微控制器通常配備ADC、DAC、PWM、多個(gè)定時(shí)器/計數器,以及大量的TWI、SPI、CAN、USB和USART通信接口。外設的增加意味著(zhù)需要循環(huán)密集(cycle-intensive)的中斷,而在內存和外設之間移動(dòng)的數據量也會(huì )呈指數級增加。
一般來(lái)說(shuō),CPU負責處理中斷和移動(dòng)數據。在某些應用中,CPU的大多數時(shí)間都花費在這些活動(dòng)上。例如,管理兩個(gè)同步外設之間的通信和64Mbps速率的單一數據傳輸就需要200 CPU MIPS,并消耗240mA電流,原因是這涉及了廣泛的場(chǎng)景關(guān)聯(lián)轉換和中斷處理。要應對這些額外的計算負荷,就必須提高CPU時(shí)鐘速率,因而相應地增加了功耗。在極端情況下,還必須把設計從8/16位器件轉換成32位器件才能應付。
在多數情況下,一個(gè)外設上的信號除了要讓另一個(gè)外設知道它有事要做外,并不需要CPU做什么??上У氖?,兩個(gè)外設間的聯(lián)絡(luò )卻需要大量中斷處理時(shí)間。例如,在馬達控制應用中,為防止馬達過(guò)熱,必須不斷測量馬達上的電流,并在出現過(guò)流馬達停轉信號時(shí)觸發(fā)一個(gè)模擬比較器。這樣CPU便會(huì )隨之中斷,并關(guān)斷馬達驅動(dòng)電路的PWM輸出。這個(gè)過(guò)程需要耗費數十個(gè)時(shí)鐘周期,并需要另外的20~100個(gè)時(shí)鐘周期來(lái)恢復關(guān)聯(lián)。微控制器并沒(méi)真正被用于任何需要其處理能力的事情,只是從模擬比較器向PWM輸出傳遞了一個(gè)消息而已;換言之CPU時(shí)鐘資源基本上被浪費了。
除此之外,定時(shí)器/計數器為其它外設(ADC和DAC)的定時(shí)也會(huì )耗費CPU時(shí)鐘的資源。在這類(lèi)情況下,都要產(chǎn)生一個(gè)中斷來(lái)開(kāi)始一次轉換。在幾個(gè)kHz的抽樣速率下,這些定時(shí)器/計數器中斷會(huì )消耗掉1MIPS,大約是一個(gè)12MIPS CPU的8%的處理能力。
如果這些外設能夠無(wú)需中斷CPU而直接相互通信,每秒鐘就可輕易節省數百萬(wàn)個(gè)時(shí)鐘周期。8位微控制器不再適用于8位應用的一個(gè)原因,就是應用涉及的數據處理和中斷處理太多,CPU的MIPS大都耗費在這些活動(dòng)上。而外設和內存之間的傳輸數據更進(jìn)一步地增加了MCU的負擔。一個(gè)350kps的數據傳輸就要耗費22~25個(gè)CPU MIPS。
解決這個(gè)問(wèn)題的一個(gè)方法是采用一個(gè)帶8通道事件系統和直接內存訪(fǎng)問(wèn)(DMA)的低功耗8/16位單周期RISC MCU,讓事件系統和DMA來(lái)為CPU分擔這些工作。這種微控制器構架可同時(shí)處理多達8個(gè)外設間事件,以及4個(gè)速率為64Mps的數據傳輸,而且總體電流消耗低于10mA。由于事件系統和DMA可讓外設自主地相互通信,因此不再需要CPU時(shí)鐘周期或中斷,這樣CPU也就可以處于睡眠狀態(tài)了。
事件系統通過(guò)CPU數據總線(xiàn)和DMA控制器之外的一個(gè)專(zhuān)用網(wǎng)絡(luò )傳遞外設信號。這樣做的好處是外設間信號通信變得可預見(jiàn)和無(wú)延遲,并減少了CPU時(shí)間和釋放了中斷資源。有了事件系統,當一個(gè)外設出現了狀態(tài)變化,就會(huì )自動(dòng)觸發(fā)其它外設上的相應動(dòng)作。在前述馬達案例中,微控制器中的模擬比較器、定時(shí)器/計數器,I/O引腳或ADC可以在過(guò)流狀況的兩個(gè)時(shí)鐘周期內,直接關(guān)斷馬達驅動(dòng)電路的PWM輸出,不需占用任何中斷,也不耗費任何CPU時(shí)鐘資源,就可以為馬達提供更好的保護。
圖1,帶有事件系統總線(xiàn)的XMEGA微控制器:帶有事件系統和DMA的MCU通過(guò)CPU數據總線(xiàn)和DMA之外的一個(gè)專(zhuān)用網(wǎng)絡(luò )傳遞外設信號。這樣做的好處是外設間信號通信變成可預見(jiàn)和無(wú)延遲,并減少了CPU周期時(shí)間和釋放了中斷資源。
圖1,帶有事件系統總線(xiàn)的XMEGA微控制器。
可以觸發(fā)事件系統的外設事件包括:定時(shí)器/計數器比較匹配或溢出,模擬比較器觸發(fā),引腳狀態(tài)變化,ADC完成或比較,以及實(shí)時(shí)計數器溢出。在其它外設中被觸發(fā)的事件包括:ADC或 DAC轉換,輸入捕獲以記錄通信時(shí)間戳或ADC測量時(shí)間戳,外部頻率或脈寬測量,產(chǎn)生定時(shí)器/計數器時(shí)鐘信號,開(kāi)始一個(gè)DMA交易,或改變一個(gè)引腳輸出。
至于哪些事件應該觸發(fā)特定外設上的哪些動(dòng)作,完全可由設計人員進(jìn)行配置。事件系統配置可以是靜態(tài)鎖定的,也可在應用執行的不同階段動(dòng)態(tài)變化。事件通道并行運作,任何時(shí)刻都可有多達8對外設同時(shí)互聯(lián)。
采用事件系統能夠消除多個(gè)和/或頻繁的中斷觸發(fā)造成的瓶頸,而且無(wú)需軟件開(kāi)銷(xiāo),關(guān)鍵任務(wù)可獨立于CPU完成,而且也能大大降低功耗。一個(gè)沒(méi)有事件系統的傳統8位MCU要耗費16 MIPS才能完成響應馬達過(guò)流信號關(guān)斷PWM的動(dòng)作。在16 MHz,1 MIPS/MHz,以及0.6 mA/MHz的工作條件下,微控制器需要消耗8.6 mA才能完成這項任務(wù)。而一個(gè)帶有事件系統的同等MCU則不消耗MIPS,而且也不會(huì )增加功耗。
圖2,XMEGA微控制器的事件系統:有了事件系統,一個(gè)外設上出現狀態(tài)變化就會(huì )自動(dòng)觸發(fā)其它外設上的相應動(dòng)作,且不 占用任何中斷,也不耗費任何CPU時(shí)鐘資源??赏瑫r(shí)處理多達8個(gè)外設間事件,以及4個(gè)速率為64Mps的數據傳輸,而CPU處于睡眠模式,電流消耗僅10mA。
圖2,XMEGA微控制器的事件系統。
消除中斷后,處理響應延遲可獲減少,而且確保最多只要2個(gè)時(shí)鐘周期,或者說(shuō)在32 MHz 時(shí)鐘頻率下只需62.5 ns的時(shí)間;而最快響應時(shí)間可達到31.2 ns。實(shí)際上,在8/16位MCU上采用事件系統,響應時(shí)間較無(wú)事件系統的傳統32位MCU 縮短了37倍。
傳輸數據是另一個(gè)耗費時(shí)鐘周期和增加功耗的活動(dòng)。由于CPU本身每次只能傳輸1個(gè)位,因此用CPU傳輸數據會(huì )帶來(lái)巨大處理開(kāi)銷(xiāo)很大。8位微控制器必須執行22 MIPS,消耗14mA電流才能完成速率350Kbps的數據傳輸。SPI和USART傳輸的數據速率高達25Mbps,普通的8位MCU幾乎不可能支持這個(gè)最大速率。
只要在器件上增加一個(gè)外設DMA控制器,就可基本上解除CPU的所有這些工作負荷。當CPU數據總線(xiàn)空閑時(shí),DMA控制器便會(huì )用它來(lái)完成內存和外設間的數據傳輸,無(wú)需使用CPU資源。連接外設寄存器的內部總線(xiàn)(包括I/O引腳、內存映射EEPROM、內部SRAM,以及外部總線(xiàn)接口)是分開(kāi)的,因而DMA控制器和CPU可以同時(shí)進(jìn)行總線(xiàn)訪(fǎng)問(wèn)。這樣,始終有一個(gè)通信通道供DMA使用。
跟處理能力為22 MIPS、功耗為11mA但不帶DMA的8位MCU比較,使用DMA控制器傳輸350 Kbps數據,MIPS消耗可減少99%;電流消耗則低于1mA。
DMA控制器可以直接將數據從一個(gè)外設寄存器移到內部或外部SRAM,也可在SRAM的不同地址間,甚至不同外設寄存器之間移動(dòng)數據。4個(gè)DMA通道有著(zhù)各自的優(yōu)先級、來(lái)源、目的地、觸發(fā)方式、尋址模式,以及傳輸塊大小。由于RISC CPU中簡(jiǎn)單的線(xiàn)性?xún)却娴刂房臻g以及DMA控制器的自動(dòng)增/減和重新加載的特點(diǎn),DMA一次可傳送1到16M字節。
若事件系統與DMA控制器配合使用,就可按如下方式完成模數和數模轉換:任何I/O引腳上的狀態(tài)變化或任何定時(shí)器/計數器出現溢出,就會(huì )觸發(fā)ADC轉換,無(wú)需任何CPU開(kāi)銷(xiāo)。ADC轉換結果通過(guò)一個(gè)DMA通道傳送到SRAM。同時(shí),第二個(gè)定時(shí)器/計數器會(huì )觸發(fā)一個(gè)高速DAC轉換,并用第二個(gè)DMA通道傳輸相應的數據。事件系統會(huì )讓模擬比較器觸發(fā)輸入捕捉,以100%精度記錄時(shí)間戳,觸發(fā)自動(dòng)捕獲,記錄通信交易的起始時(shí)間戳,或在第二個(gè)ADC上掃描ADC轉換。4個(gè)事件通道仍是可使用的,它們可用于PWM輸出的故障保護,控制一個(gè)高壓驅動(dòng)級、定時(shí)器/計數器的級聯(lián),以及兩個(gè)通信通道,所有動(dòng)作均在同時(shí)進(jìn)行,而CPU則處于睡眠狀態(tài)。
圖3,XMEGA的事件處理:若事件系統與DMA控制器配合使用,就可按如下方式完成模數和數模轉換:任何I/O引腳上的狀態(tài)變化或任何定時(shí)器/計數器出現溢出,就會(huì )觸發(fā)ADC轉換,無(wú)需任何CPU開(kāi)銷(xiāo)。ADC轉換結果通過(guò)一個(gè)DMA通道傳送到SRAM。
圖3,XMEGA的事件處理
在微控制器中增加事件系統和DMA對功耗有很大改善。在某些應用中,這樣做可使MCU在大多數時(shí)間都處于睡眠模式,功率消耗僅80 uA/MHz,而所有的外設卻仍繼續工作。對一個(gè)有8個(gè)同時(shí)事件和4個(gè)350 Kbps數據傳輸的應用而言,一個(gè)帶有事件系統和DMA的8/16位MCU,每秒將有3160萬(wàn)個(gè)周期處于睡眠模式,而總電流消耗僅4mA。任何不帶事件系統和DMA的8/16位MCU則會(huì )消耗52 至 60 mA的電流。而一個(gè)32位MCU則會(huì )消耗34.8 mA的電流,幾乎是帶有事件系統和DMA處理器的10倍功耗。在一個(gè)中斷頻繁和數據量大的應用中,帶有事件處理器和DMA的微控制器可節省90%的功耗。
有/無(wú)事件系統和DMA之MCU的處理周期和功耗比較見(jiàn)表3。
表1,有/無(wú)事件系統之MCU的處理周期和響應時(shí)間比較
表2,有/無(wú)DMA的MCU傳輸350 KBps數據時(shí)的典型MIPS和功耗
表3,傳輸350Kbps 數據的中斷、MIPS和功耗比較
比較器相關(guān)文章:比較器工作原理
塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理
評論