摘要:目錄工作原理硬件架構(gòu)硬件架構(gòu)通道的作用寄存器出現(xiàn)的目的出現(xiàn)的目的工作原理全拼直接內(nèi)存存取,在傳統(tǒng)的存取數(shù)據(jù)時(shí)會(huì)先將數(shù)據(jù)放到緩存寄存器中然后在寫(xiě)入到指定位置存取數(shù)據(jù)流程圖經(jīng)歷了三個(gè)步驟,先將內(nèi)存中指定位置
目錄
DMA全拼Direct Memory Access(直接內(nèi)存存取),在傳統(tǒng)的CPU存取數(shù)據(jù)時(shí)會(huì)先將數(shù)據(jù)放到緩存寄存器中然后在寫(xiě)入到指定位置
CPU存取數(shù)據(jù)流程圖:
CPU經(jīng)歷了三個(gè)步驟,先將內(nèi)存中指定位置上的數(shù)據(jù)取到數(shù)據(jù)緩存器中,然后在將數(shù)據(jù)緩存器中的內(nèi)容寫(xiě)入到內(nèi)存中,總共用了三步來(lái)完成內(nèi)存兩天不同地址上的數(shù)據(jù)寫(xiě)入
而使用DMA之后就會(huì)變得非常簡(jiǎn)單,DMA不會(huì)放入暫存器,而是直接寫(xiě)入寫(xiě)入內(nèi)存,你只需要設(shè)置好源地址,目標(biāo)地址,傳輸量,那么DMA就會(huì)開(kāi)始傳輸數(shù)據(jù),但DMA會(huì)占用你設(shè)備的總線,也就是這個(gè)過(guò)程中你無(wú)法使用總線,需要進(jìn)行一個(gè)控制權(quán)轉(zhuǎn)移,這樣雖然傳輸變快了但是傳輸期間CPU基本上做不了別的事情,但是有些架構(gòu)已經(jīng)為DMA提供了一套自己的總線,在DMA傳輸過(guò)程中CPU依然可以控制外設(shè),這個(gè)控制權(quán)轉(zhuǎn)移不是一直DMA有效的,為了保證CPU也能正常通過(guò)系統(tǒng)總線去控制外設(shè),一般會(huì)給DMA一定時(shí)間然后控制權(quán)在切回CPU,然后CPU處理一段時(shí)間在切回DMA直到DMA結(jié)束才會(huì)停止控制權(quán)轉(zhuǎn)移。
以下取自STM32芯片手冊(cè)中對(duì)DMA的框架描述
?
以下是兩個(gè)DMA控制器的結(jié)構(gòu)圖,可以清晰的看到每個(gè)通道用于做什么的
?DMA1
DMA2
通道是一個(gè)小型的IO控制器,每個(gè)通道對(duì)應(yīng)控制不同的外設(shè)、Memory,可以通過(guò)MCU數(shù)據(jù)手冊(cè)里查看你的DMA里的每個(gè)通道對(duì)應(yīng)控制的外設(shè)。
從上圖給出的通道結(jié)構(gòu)圖中可以看到每個(gè)通道IO都支持Uart、SPI、I2C外設(shè)功能,值得注意的是這里外設(shè)是有編號(hào)的,可以在上圖通道中看到,不同的外設(shè)由不同的通道程序來(lái)控制,如你使用I2C2外設(shè),則需要找到支持I2C2的通道并使用它,其中也可以看到SW trigger (MEM2MEM BIT)這個(gè)意思代表支持Memory到Memory之間的通訊,如內(nèi)部的Sram到Sram,也可以看到上圖中有HW request 4 意味著這個(gè)通道支持中斷通知,意思是當(dāng)這個(gè)通道開(kāi)始工作時(shí)會(huì)設(shè)置對(duì)應(yīng)寄存器里的值,然后產(chǎn)生中斷,我們可以在對(duì)應(yīng)的中斷標(biāo)志寄存器里讀到哪個(gè)通道產(chǎn)生了中斷,以及做了什么事情
如果是對(duì)外設(shè)進(jìn)行控制的話記得,如果是內(nèi)部的Memory到Memory之間傳輸數(shù)據(jù)的話可以隨便選擇一個(gè)通道,因?yàn)閺纳蠄D的結(jié)構(gòu)可以看出每個(gè)通道IO都支持內(nèi)部Memory
通道可以理解成一個(gè)小型的程序,它是一個(gè)簡(jiǎn)單的IO控制程序,只能處理對(duì)應(yīng)外設(shè)之間的數(shù)據(jù)傳輸,工作之前需要配置DMA里使用哪個(gè)通道,可以選擇多個(gè)通道,也可以選擇一個(gè)通道,這些通道是支持同時(shí)工作的。
?可以看到可以通過(guò)上面的通道來(lái)配置Uart、SPI、I2C的一些功能,同時(shí)看到Internal/Request是內(nèi)部帶有中斷功能的,具體如何配置還需要看寄存器功能
寄存器介紹
① 中斷類
寄存器名 | 作用 |
---|---|
DMA_ISR | 中斷狀態(tài)寄存器 |
DMA_IFCR | DMA中斷標(biāo)志位清除寄存器 |
② 控制傳輸類
寄存器名 | 作用 |
---|---|
DMA_CCRx | DMA通道x配置寄存器 |
DMA_CNDTRx | DMA通道x數(shù)據(jù)數(shù)量寄存器 |
DMA_CPARx | DMA通道x外設(shè)地址寄存器 |
DMA_CMARx | DMA通道x內(nèi)存地址寄存器 |
需要注意上面的寄存器針對(duì)DMA1與DMA2都有對(duì)應(yīng)的一組,它們倆不使用一組寄存器控制
可以簡(jiǎn)單把DMA理解成CPU的一個(gè)傳輸小幫手,CPU通過(guò)告訴DMA該傳輸哪些數(shù)據(jù),然后由DMA去完成傳輸工作
DMA是一個(gè)獨(dú)立的控制器,內(nèi)部有小型芯片來(lái)控制的,也有自己的一套架構(gòu),一般集成在MCU內(nèi)部與CPU緊密貼合
DMA的出現(xiàn)就是為了解決CPU在處理大量數(shù)據(jù)傳輸時(shí)的時(shí)間耗費(fèi)成本,在傳輸大數(shù)據(jù)時(shí)CPU會(huì)先放到暫存器中這樣的速度會(huì)影響效率,速度較慢,同時(shí)CPU如果一直忙于傳輸數(shù)據(jù)就不能去做別的事情了,所以DMA的誕生解決了這個(gè)問(wèn)題,需要值得注意的是在使用DMA之前要看下架構(gòu),DMA是否與CPU使用同一總線,若同一總線的情況下是會(huì)影響CPU工作效率而非傳輸效率
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/119147.html
摘要:當(dāng)輸入的時(shí)候,設(shè)備先將輸入的信息放到控制器中的數(shù)據(jù)寄存器中,等到攢到一定數(shù)量或者輸入完成后,一次性將數(shù)據(jù)拿走,提高了的運(yùn)行效率。設(shè)別狀態(tài)識(shí)別控制器會(huì)識(shí)別設(shè)備的工作狀態(tài),將工作狀態(tài)保存到狀態(tài)寄存器中,供查用。 ...
摘要:異步通信與同步通信異步通信異步通信是指通信的發(fā)送與接收設(shè)備使用各自的時(shí)鐘控制數(shù)據(jù)的發(fā)送和接收過(guò)程。同步通信同步通信時(shí)要建立發(fā)送方時(shí)鐘對(duì)接收方時(shí)鐘的直接控制,使雙方達(dá)到完全同步。配置串口設(shè)置為異步通信基礎(chǔ)參數(shù)波特率為。 ...
摘要:為了可靠工作,在總線狀態(tài)切換時(shí)需要做適當(dāng)延時(shí),再進(jìn)行數(shù)據(jù)收發(fā)。 一、實(shí)現(xiàn)效果 ????????基于ucosii實(shí)時(shí)操作系統(tǒng)的RS485通信,采用USART + DMA進(jìn)行收發(fā), ?二、開(kāi)發(fā)環(huán)境 開(kāi)發(fā)工具:KEIL V5開(kāi)發(fā)板: STM32f107RC采用方式:USART + DMA使用系統(tǒng):...
摘要:計(jì)算機(jī)組成原理是大學(xué)中的專業(yè)必修課,也是程序員需要掌握的專業(yè)知識(shí)。所以說(shuō)計(jì)算機(jī)組成原理是非常重要的一門(mén)課程,本文總結(jié)了五十個(gè)組原中的重要概念,供大家學(xué)習(xí)。通道程序通道程序由通道指令組成,他完成某種外圍設(shè)備與主存?zhèn)魉托畔⒌牟僮鳌? 計(jì)算機(jī)組成原理是大學(xué)中的專業(yè)必修課,也是程序員需要掌握的專業(yè)...
摘要:是數(shù)據(jù)平面開(kāi)發(fā)工具包,由用于加速在各種架構(gòu)上運(yùn)行的數(shù)據(jù)包處理的庫(kù)組成。機(jī)制采用提供機(jī)制,可以旁路,將所有報(bào)文處理的工作在用戶空間完成。數(shù)據(jù)路徑為網(wǎng)卡輪詢模式基礎(chǔ)庫(kù)業(yè)務(wù)零拷貝通過(guò)實(shí)現(xiàn)數(shù)據(jù)零拷貝是的特點(diǎn)之一。 DPDK(Data Plane Development Kit)是數(shù)據(jù)平面開(kāi)發(fā)工具包,由用于加速在各種CPU架構(gòu)上運(yùn)行...
閱讀 1264·2021-09-23 11:51
閱讀 1369·2021-09-04 16:45
閱讀 626·2019-08-30 15:54
閱讀 2075·2019-08-30 15:52
閱讀 1592·2019-08-30 11:17
閱讀 3098·2019-08-29 13:59
閱讀 2010·2019-08-28 18:09
閱讀 380·2019-08-26 12:15