資源描述:
《從零入手Kinetis系統(tǒng)開發(fā)10-eDMA模塊.pdf》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。
1、?【原創(chuàng)】從零入手Kinetis系統(tǒng)開發(fā)(十)之eDMA模塊?2012-05-1621:19發(fā)表系統(tǒng)分類:嵌入式系統(tǒng)自定義分類:Kinetis?標(biāo)簽:KinetisDMAUART離上次更新從零入手系列又是一個(gè)月了,哎,時(shí)間過(guò)的好快的來(lái),30個(gè)一睜眼一閉眼的日子就這么過(guò)去了,呵呵。不要怪俺更新的慢,的確是寫這個(gè)比較累人,另外為保證這個(gè)系列的質(zhì)量,還是要靠時(shí)間磨一磨的,當(dāng)然磨的好還是壞,群眾的眼光是雪亮雪亮的,哈哈~(本段是牢騷,嘿嘿,不想看的直接略過(guò),asm(jump“正題”))本來(lái)是想著昨天就寫出來(lái)的,結(jié)果15號(hào)貌似是個(gè)好日子的來(lái)
2、,一個(gè)是飛思卡爾的尋龍活動(dòng),一個(gè)是小米手機(jī)青春版發(fā)布,自己就等著這兩個(gè)較期待的事。果不其然,期望越大失望越大,哎...先說(shuō)說(shuō)第一個(gè)活動(dòng)吧,感覺那哪是尋龍啊,一打開網(wǎng)頁(yè)幾乎占滿半個(gè)窗口的火龍就赤裸裸的跳出來(lái)了,哪還用的著去“尋”,直接捉就是的嘛,木有難度,讓俺本來(lái)顆期待尋寶找刺激的心拔涼拔涼的了,哎,估計(jì)向來(lái)無(wú)緣獎(jiǎng)品的我是沒(méi)戲了。另一個(gè)更讓人窩火,苦苦等到10點(diǎn),結(jié)果最后出來(lái)還是買不起,說(shuō)是給俺們學(xué)生準(zhǔn)備的,結(jié)果價(jià)格有點(diǎn)高不說(shuō)還人人可以搶,哎,又讓小米賺了個(gè)噱頭了,俺們窮學(xué)生上哪說(shuō)理去...呼呼,又是一頓牢騷,嘿嘿,作為學(xué)生還是專心
3、搞自己的技術(shù)吧,下面進(jìn)入正題,asm(call"正題")。。。正題:歡迎跳轉(zhuǎn)到此,嘿嘿,是不是有點(diǎn)匯編編程的趕腳,有木有!言歸正傳,上次說(shuō)過(guò)要寫篇DMA的介紹來(lái),結(jié)果還是耽誤了,這次就補(bǔ)上了,另外這里預(yù)告一下,下篇的從零入手打算寫一下FlexBus的軟件部分(前面說(shuō)了說(shuō)它的硬件設(shè)計(jì)),如果有用到的話敬請(qǐng)期待,不會(huì)用到或者早就已經(jīng)熟用了就不用等了,當(dāng)然期間還會(huì)穿插一些其他的工程技巧的,不要錯(cuò)過(guò)哦,親...(咳咳,借用下淘寶體)下面就正式介紹下Kinetis的DMA:1.先介紹下DMA。DMA(DirectMemoryAccess)是
4、一種直接存儲(chǔ)器訪問(wèn)技術(shù),工作過(guò)程中不需要CPU干預(yù),也不需要像中斷處理方式那樣需要保留現(xiàn)場(chǎng)、恢復(fù)現(xiàn)場(chǎng)之類的麻煩事,簡(jiǎn)單理解為一條直接連通外設(shè)與RAM的硬件通道(這句話需要仔細(xì)琢磨,下面文章里會(huì)重點(diǎn)提一下),所以DMA技術(shù)可以提高系統(tǒng)運(yùn)行效率(即CPU可以干其他的事去,算是一種簡(jiǎn)單的并行模式吧)。而對(duì)Kinetis來(lái)說(shuō),我們會(huì)看到eDMA,其實(shí)就是多了個(gè)e(enhanced,即增強(qiáng)型),嘿嘿,至于為什么會(huì)多了個(gè)e,從下面對(duì)Kinetis的eDMA特性的分析就可以看出來(lái);2.Kinetis的eDMA包括兩部分,即DMAMuliplex
5、er(DMA多路轉(zhuǎn)換器,就是個(gè)矩陣開關(guān),路由DMA觸發(fā)源的)和DMAController(DMA控制器,這個(gè)是重點(diǎn),用來(lái)配置DMA控制引擎(Engine)和DMA傳輸控制描述區(qū)(TCD)),其內(nèi)部框圖如下所示:DMAMUX框圖DMAController框圖3.下面介紹下Kinetis的eDMA的一些特性,有點(diǎn)多,就挑重點(diǎn)和特色的來(lái)說(shuō)了:(1)16個(gè)獨(dú)立可配置的DMA通道,其中前四個(gè)通道可配置成周期性觸發(fā)(需要用到PIT模塊),如上圖DMAMUX框圖所示;(2)52個(gè)外設(shè)觸發(fā)slots(這個(gè)我擔(dān)心翻譯不好誤人子弟了就直接用該單詞替代
6、了,呵呵,用過(guò)Qt的人都這是個(gè)槽的概念,大家權(quán)當(dāng)觸發(fā)源來(lái)理解吧),10個(gè)直通slots,每一個(gè)slot可以通過(guò)軟件編程路由到16個(gè)DMA通道中的任意一個(gè)(這個(gè)通過(guò)配置DMAMUX_CONFIGn得到),這方面比STM32的M3好些,STM32是固定的,所以Kinetis靈活性好些(咳咳,該言論不代表貶低STM32,畢竟它還是很強(qiáng)大的);(3)獨(dú)立可編程的源地址、目標(biāo)地址和傳輸寬度(8bit,16bit,32bit,另外支持16byte的緩存),支持外設(shè)到RAM,RAM到外設(shè),RAM到RAM之間的傳輸;(4)每一個(gè)通道都有一個(gè)11個(gè)
7、寄存器的TCD(Tranfercontroldescripter),注意這11個(gè)寄存器(包括16位和32位寬度的寄存器)才是我們編寫驅(qū)動(dòng)的重點(diǎn)對(duì)象;(5)固定的優(yōu)先級(jí)模式和時(shí)間輪詢(round-robin)優(yōu)先級(jí)模式(注意:如果不通過(guò)軟件設(shè)置優(yōu)先級(jí)的話,系統(tǒng)默認(rèn)為每個(gè)通道的優(yōu)先級(jí)等于它的通道號(hào),即0通道的優(yōu)先級(jí)為0,且優(yōu)先級(jí)號(hào)越小,其優(yōu)先級(jí)越低);(6)每個(gè)通道包括了三個(gè)中斷標(biāo)志,即DMA半傳輸完成標(biāo)志、DMA傳輸完成標(biāo)志和DMA傳輸出錯(cuò)標(biāo)志,3個(gè)標(biāo)志邏輯或成一個(gè)中斷請(qǐng)求(所以如果都使能了,那可以通過(guò)查詢相關(guān)標(biāo)志寄存器來(lái)判斷當(dāng)前的
8、中斷類型);(7)可軟件中斷取消DMA傳輸(通過(guò)配置DMA_CR_CX位)。4.DMA工作流程,這里先給出清華的一個(gè)功能框圖,我覺著還是挺清晰的,便于理解,然后接下來(lái)的三幅圖分別代表了一個(gè)DMA完整傳輸?shù)牧鞒蹋@里一句兩句沒(méi)法說(shuō)清楚就只能上圖了,不