STM32微控制器原理及應(yīng)用-直接存儲器存取DMA_第1頁
STM32微控制器原理及應(yīng)用-直接存儲器存取DMA_第2頁
STM32微控制器原理及應(yīng)用-直接存儲器存取DMA_第3頁
STM32微控制器原理及應(yīng)用-直接存儲器存取DMA_第4頁
STM32微控制器原理及應(yīng)用-直接存儲器存取DMA_第5頁
已閱讀5頁,還剩25頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1STM32原理及其應(yīng)用2直接存儲器存取DMA

教學(xué)基本內(nèi)容:DMA概述、DMA的應(yīng)用實例。重點:DMA的結(jié)構(gòu)及庫函數(shù)。難點:DMA寄存器原理。本章主要教學(xué)要求:了結(jié)DMA的作用及作用方式、DMA結(jié)構(gòu)及功能,了解DMA庫函數(shù)。3第一節(jié)DMA概述(了解)第二節(jié)

DMA的結(jié)構(gòu)及功能(重點)第三節(jié)DMA寄存器(理解)第四節(jié)DMA庫函數(shù)(重點)第五節(jié)應(yīng)用實例(了解)4第一節(jié)DMA概述

DMA方式可以形象地理解為,微機(jī)系統(tǒng)是個公司,其中微處理器(CPU)是經(jīng)理,外設(shè)是員工,內(nèi)存是倉庫,數(shù)據(jù)就是倉庫里存放的物品。公司規(guī)模較小時,經(jīng)理直接管理倉庫里的物品,員工若需要使用物品,就直接告訴經(jīng)理,然后經(jīng)理去倉庫?。∕OV)。員工若采購了物品,也先交給經(jīng)理,然后經(jīng)理將物品放進(jìn)倉庫(MOV)。公司規(guī)模較小時,經(jīng)理還忙得過來,但當(dāng)公司規(guī)模變大了,會有越來越多的員工(外設(shè))和物品(數(shù)據(jù))。此時若經(jīng)理的大部分時間都處理這些事情,就很少有時間做其他事情了,于是經(jīng)理雇了一個倉庫保管員,專門負(fù)責(zé)“入庫”和“出庫”,經(jīng)理只告訴保管員去哪個區(qū)域(源地址)要哪種類型的物品(數(shù)據(jù)類型)、數(shù)量多少(數(shù)據(jù)長度)、送到哪里去(目標(biāo)地址)等信息,其他事情就不管了;然后保管員完成任務(wù)回來,打斷一下正在做其他事情的經(jīng)理(中斷)并告訴他完成情況,或者不打斷經(jīng)理的工作而只是把完成任務(wù)牌(標(biāo)志位)掛到經(jīng)理面前即可,這個倉庫保管員正是DMA控制器。在PC中,硬盤工作在DMA下,CPU只需向DMA控制器下達(dá)指令,讓DMA控制器來處理數(shù)據(jù)的傳送,數(shù)據(jù)傳送完畢再把信息反饋給CPU,這樣在很大程度上減輕了CPU資源占有率。

前言

存儲器直接訪問(DirectMemoryAccess,DMA)是指一種高速的數(shù)據(jù)傳輸操作,允許在外部設(shè)備和存儲器之間利用系統(tǒng)總線直接讀/寫數(shù)據(jù),既不通過微處理器,也不需要微處理器干預(yù)。整個數(shù)據(jù)傳輸操作在一個稱為DMA控制器的控制下進(jìn)行。微處理器除了在數(shù)據(jù)傳輸開始和結(jié)束時控制一下外,在傳輸過程中微處理器可以進(jìn)行其他的工作。DMA的另一個特點是“分散—收集(Scatter—Gather)”,它允許在一次單一的DMA處理中傳輸大量數(shù)據(jù)到存儲區(qū)域。

DMA方式可以形象地理解為,微機(jī)系統(tǒng)是個公司,其中微處理器(CPU)是經(jīng)理,外設(shè)是員工,內(nèi)存是倉庫,數(shù)據(jù)就是倉庫里存放的物品。公司規(guī)模較小時,經(jīng)理直接管理倉庫里的物品,員工若需要使用物品,就直接告訴經(jīng)理,然后經(jīng)理去倉庫?。∕OV)。員工若采購了物品,也先交給經(jīng)理,然后經(jīng)理將物品放進(jìn)倉庫(MOV)。公司規(guī)模較小時,經(jīng)理還忙得過來,但當(dāng)公司規(guī)模變大了,會有越來越多的員工(外設(shè))和物品(數(shù)據(jù))。此時若經(jīng)理的大部分時間都處理這些事情,就很少有時間做其他事情了,于是經(jīng)理雇了一個倉庫保管員,專門負(fù)責(zé)“入庫”和“出庫”,經(jīng)理只告訴保管員去哪個區(qū)域(源地址)要哪種類型的物品(數(shù)據(jù)類型)、數(shù)量多少(數(shù)據(jù)長度)、送到哪里去(目標(biāo)地址)等信息,其他事情就不管了;然后保管員完成任務(wù)回來,打斷一下正在做其他事情的經(jīng)理(中斷)并告訴他完成情況,或者不打斷經(jīng)理的工作而只是把完成任務(wù)牌(標(biāo)志位)掛到經(jīng)理面前即可,這個倉庫保管員正是DMA控制器。在PC中,硬盤工作在DMA下,CPU只需向DMA控制器下達(dá)指令,讓DMA控制器來處理數(shù)據(jù)的傳送,數(shù)據(jù)傳送完畢再把信息反饋給CPU,這樣在很大程度上減輕了CPU資源占有率。7一、DMA1.概念:DMA(DirectMemoryAccess,直接內(nèi)存存bai取)是所有現(xiàn)代du電腦的重要特色,它允許不同速度的硬件裝置來溝通,而不需要依賴于CPU的大量中斷負(fù)載。否則,CPU需要從來源把每一片段的資料復(fù)制到暫存器,然后把它們再次寫回到新的地方。在這個時間中,CPU對于其他的工作來說就無法使用。2.功能:通常的模數(shù)轉(zhuǎn)換器是將一個輸入電壓信號轉(zhuǎn)換為一個輸出的數(shù)字信號。8二、DMA的重要性分析

現(xiàn)在的手機(jī)大都具有照相功能,也可以攝制一些視頻短片,只要手機(jī)工作到照相機(jī)模式,就會將攝像頭的實時畫面顯示在屏幕上。如果沒有DMA功能,只能是編寫程序從攝像頭(CMOS傳感器)將實時畫面的圖像數(shù)據(jù)取回,然后將這些數(shù)據(jù)通過LED顯示,圖像數(shù)據(jù)從CMOS傳感器搬運到LCD的工作需要由程序來完成假如每次搬運一個點的顏色數(shù)據(jù),就算是完成QVGA/30幀這樣的效果,也需要一次搬運2304000(320×240×30)個點。完成一個點的數(shù)據(jù)搬運需要微處理器至少做下述工作:依據(jù)當(dāng)前點位置判斷是否向CMOS傳感器給出行場同步脈沖信號;向CMOS傳感器給出時鐘脈沖信號;讀當(dāng)前點的顏色數(shù)據(jù);依據(jù)當(dāng)前點位置判斷是否向LCD給出行場同步脈沖信號:向LCD給出時鐘脈沖信號;寫當(dāng)前點顏色數(shù)據(jù)到LCD;更新下一點繼續(xù)循環(huán)就算每一步平均需要2條指令,一個點就會耗費14條指令,完成實時圖像數(shù)據(jù)的搬運每秒需要執(zhí)行322560m(2304000×14)條指令(實際情況比這個數(shù)值會更大),無疑占用了太多的微處理器資源。

。。9

而DMA功能會將每秒32256000條指令全部省掉。這類手機(jī)為了支持CMOS傳感器和LCD,芯片會提供專用接口,該接口能自動完成同步信號和時鐘信號的處理,同時將輸人數(shù)據(jù)寫進(jìn)指定位置,或者從指定位置讀出并輸出?,F(xiàn)在只要程序通過微處理器設(shè)定好CMOS傳感器和LCD的工作參數(shù),讓攝像頭和屏幕工作起來,這些參數(shù)包含有CMOS傳感器和LCD設(shè)定數(shù)據(jù)緩沖區(qū)的起始地址,圖像的寬和高,以及圖像的顏色深度等信息。有了這些設(shè)定,當(dāng)CMOS傳感器開始工作時,就會由硬件自動將數(shù)據(jù)填人所設(shè)定的數(shù)據(jù)緩沖區(qū)地址中,LCD對應(yīng)數(shù)據(jù)緩沖區(qū)的數(shù)據(jù)則會由硬件自動讀出并輸出給LCD液晶屏。只要二者參數(shù)相互適應(yīng)且數(shù)據(jù)緩沖區(qū)地址相同,CMOS傳感器的實時畫面就可以不受微處理器干預(yù)而自動在屏幕上顯示出來。DMA傳輸?shù)?個要素①傳輸源:DMA控制器從傳輸源讀出數(shù)據(jù)。②傳輸目標(biāo):數(shù)據(jù)傳輸?shù)哪繕?biāo)地址。③觸發(fā)信號:用于觸發(fā)一次數(shù)據(jù)傳輸?shù)膭幼鳎瑘?zhí)行一個單位的傳輸源至傳輸目標(biāo)的數(shù)據(jù)傳輸;可用于控制傳輸?shù)臅r機(jī)。一個完整的DMA傳輸過程如7-1圖所示。具體過程如下所述。(1)I/O準(zhǔn)備好后,向DMAC發(fā)出DMA請求信號DMARQ。(2)DMAC向微處理器發(fā)出總線請求信號BUSRQ。圖7-1DMA傳送過程(3)按照預(yù)定的DMAC占用總線方式,微處理器響應(yīng)BUSRQ向DMAC發(fā)出BUSRK。從這時起,微處理器交出總線控制權(quán),而由DMAC接管,開始進(jìn)入DMA有效周期,如圖7-1中陰影部分所示。(4)DMAC接管總線后,先向I/O設(shè)備發(fā)出DMA請求的響應(yīng)信號DMAC(相當(dāng)于設(shè)備選擇信號,表示允許外設(shè)進(jìn)行DMA傳送),然后按事先設(shè)置的初始地址和需要傳送的字節(jié)數(shù),依次發(fā)送地址和寄存器或I/O的讀/寫命令,使得在RAM和I/O設(shè)備之間直接交換數(shù)據(jù),直至全部數(shù)據(jù)傳送完畢。(5)DMA傳送結(jié)束后,自動撤銷向微處理器總線請求信號BUSRQ,從而使總線響應(yīng)信號BUSRK和DMA響應(yīng)信號DACK也相繼變?yōu)闊o效,微處理器又重新控制總線,恢復(fù)正常工作若需要,DMAC還可用“計數(shù)到”信號引發(fā)一個中斷請求,由微處理器以中斷服務(wù)形式進(jìn)行DMA傳送結(jié)束后的有關(guān)處理。由此可見,DMA傳輸方式無須微處理器直接控制傳輸,也沒有像中斷處理方式那樣保留現(xiàn)場和恢復(fù)現(xiàn)場的過程,而是通過硬件為RAM與I/O設(shè)備開辟了一條直接傳送數(shù)據(jù)的通路,使微處理器的效率大為提高。在前面的比喻中,一個倉庫保管員也可以管理多個倉庫,即DMA可以有多個通道。DMA傳送方式與程序終端的區(qū)別:DMA傳送方式的優(yōu)先級高于程序中斷,二者的主要區(qū)別是對微處理器的干擾程度不同中斷請求并不會使微處理器停下來,而是要求微處理器轉(zhuǎn)去執(zhí)行中斷服務(wù)程序,這個請求包括了對斷點和現(xiàn)場的處理,以及微處理器和外設(shè)的傳送,所以微處理器資源消耗很大;DMA請求僅使微處理器暫停一下,不需要對斷點和現(xiàn)場進(jìn)行處理,并且由DMA控制外設(shè)與主存之間的數(shù)據(jù)傳送,無須微處理器干預(yù),DMA只是借用了很短的微處理器時間而已。另一個區(qū)別就是微處理器對這兩個請求的響應(yīng)時間不同,對中斷請求一般都在執(zhí)行完一條指令的時鐘周期末尾處響應(yīng),而對DMA請求,由于考慮它的高效性,微處理器在每條指令執(zhí)行的各個階段中都可以讓給DMA使用。

DMA的作用方式

在監(jiān)控系統(tǒng)中,往往需要對ADC采集到的一批數(shù)據(jù)進(jìn)行濾波處理(如中值濾波)。ADC先高速采集,通過DMA把數(shù)據(jù)填充到RAM中,填充到一定數(shù)量后,再傳給微控制器使用,這樣處理會比較好。DMA允許外設(shè)直接訪問內(nèi)存,從而形成對總線的獨占,這是DMA技術(shù)的缺點。如果DMA傳輸數(shù)據(jù)量大,會造成中斷延時過長,在一些實時性強(qiáng)(硬實時)的嵌人式系統(tǒng)中這是不允許的。第二節(jié)DMA的功能及結(jié)構(gòu)(**)

STM32的兩個DMA控制器有12個通道(DMA1有7個通道,DMA2有5個通道),每個通道專門用來管理來自于一個或多個外設(shè)對存儲器訪問的請求,還有一個仲裁器來協(xié)調(diào)各個DMA請求的優(yōu)先權(quán)。STM32的DMA基本功能如下所述:(1)7個可配置的獨立通道。(2)每個通道都可以硬件請求或軟件觸發(fā),這些功能及傳輸?shù)拈L度、傳輸?shù)脑吹刂泛湍繕?biāo)地址都可以通過軟件來配置。(3)在7個請求之間的優(yōu)先權(quán)可以通過軟件編程設(shè)置(分為4級,即很高、高、中等和低)。在優(yōu)先權(quán)相等時,由硬件決定誰更優(yōu)先(請求0優(yōu)先于請求1,依次類推)。(4)每個通道有3個事件標(biāo)志(DMA半傳輸、DMA傳輸完成和DMA傳輸出錯),這3個事件標(biāo)志通過邏輯“或”形成一個單獨的中斷請求。(5)獨立的源和目標(biāo)數(shù)據(jù)區(qū)的傳輸寬度(8位字節(jié)、16位半字、32位全字),源地址和目標(biāo)地址按數(shù)據(jù)傳輸寬度對齊,支持循環(huán)的緩沖器管理。(6)最大可編程數(shù)據(jù)傳輸數(shù)量為65536。(7)STM32的DMA可在如下區(qū)域傳輸:外設(shè)到存儲器(I2C/UART等獲取數(shù)據(jù)并送入SRAM);SRAM的兩個區(qū)域之間;存儲器到外設(shè)(如SRAM中預(yù)先保存的數(shù)據(jù)送入DAC產(chǎn)生各種波形);外設(shè)到外設(shè)(如從ADC讀取數(shù)據(jù)后送到TIM1控制其產(chǎn)生不同的PWM占空比);允許將Flash、SRAM、APB1外設(shè)和APB2外設(shè)作為訪問的源和目標(biāo)。16DMA傳送的三個操作STM32的每次DMA傳送由以下3個操作組成:【取數(shù)據(jù)】從外設(shè)數(shù)據(jù)寄存器或當(dāng)前外設(shè)/存儲器地址寄存器指示的存儲器地址取數(shù)據(jù),第1次傳輸時的開始地址是DMA_CPARx或DMA_CMARx寄存器指定的外設(shè)基地址或存儲器單元?!敬鏀?shù)據(jù)】存數(shù)據(jù)到外設(shè)數(shù)據(jù)寄存器或當(dāng)前外設(shè)/存儲器地址寄存器指示的存儲器地址,第1次傳輸時的開始地址是DMA_CPARx或DMA_CMARx寄存器指定的外設(shè)基地址或存儲器單元?!拘薷脑椿蚰康闹羔槨繄?zhí)行一次DMA_CNDTRx寄存器的遞減操作,該寄存器包含未完成的操作數(shù)目??傊?,編寫DMA程序主要包括確定數(shù)據(jù)來源,確定數(shù)據(jù)目的地,選擇使用通道,設(shè)定傳輸數(shù)據(jù)量,設(shè)定數(shù)據(jù)傳遞模式等。

需要說明的是DMA控制器執(zhí)行直接存儲器數(shù)據(jù)傳輸時和CM3核共享系統(tǒng)數(shù)據(jù)線。因此一個DMA請求使得CPU停止訪問系統(tǒng)總線的時間至少為2個周期。為了保證CM3核的代碼執(zhí)行的最小帶寬,在2個連續(xù)的DMA請求之間,DMA控制器必須至少釋放系統(tǒng)總線一個周期。每個DMA通道都可以在DMA傳輸過半、傳輸完成和傳輸錯誤時產(chǎn)生中斷,見表7-1。為應(yīng)用的靈活性考慮,可以通過設(shè)置寄存器的不同位來打開這些中斷。每個通道都有3個事件標(biāo)志(DMA半傳輸、DMA傳輸完成和DMA傳輸出錯),這3個事件標(biāo)志邏輯或成為一個單獨的中斷請求。表7-1DMA中斷請求中斷事件事件標(biāo)志位使能控制位傳輸過半HTIFHTIE傳輸完成TCIFTCIE傳輸錯誤TEIFTEIEDMA的結(jié)構(gòu)STM32芯片的DMA結(jié)構(gòu)框圖如圖7-2所示。從圖中可以看出,STM32有兩個DMA控制器,DMA1有7個通道,DMA2有5個通道。其中,DMA2控制器及相關(guān)請求僅存在于大容量的F103和互聯(lián)型F105、F107中。中小容量的F103系列只有DMA1。DMA1控制器的7個通道見圖7-2。從外設(shè)(TIMx(x=1、2、3、4)、ADC1、SPI1、SPI/12S2、12Cx(x=1、2)和USARTx(x=1、2、3))產(chǎn)生的7個請求,通過邏輯或輸人到DMAI控制器,這意味著同時只能有一個請求有效外設(shè)的DMA請求可以通過設(shè)置相應(yīng)外設(shè)寄存器中的DMA控制位,被獨立地開啟或關(guān)閉。表7-2是各個通道的DMAI請求。圖7-2DMA結(jié)構(gòu)框圖表7-2各個通道的DMAI請求外設(shè)通道1通道2通道3通道4通道5通道6通道7ADC1ADC1

SPI/I2S

SPI1_RXSPI1_TXSPI/I2S2_RXSPI/12S2_TX

USART

USART3_TXUSART3_RXUSART1_TXUSART1_RXUSARPT2_RXUSART2_TXI2C

I2C2_TXI2C2_RXI2C1_TXI2Cl_RXTIM1

TIM1_CH1TIM1_CH2TIM1_TX4TIM1_TRIGTIM1_COMTIM1_UPTIM1_CH3

TIM2TIM2_CH3TIM2_UP

TIM2_CH1

TIM2_CH2TIM2_CH4TIM3

TIM3_CH3TIM3_CH4TIM3_UP

TIM3_CHlTIM3_TRIG

TIM4TIM4_CH1

TIM4_CH2TIM4_CH3

TIM4_UP

20第三節(jié)DMA寄存器

DMA1通過30(2+4×7)個寄存器進(jìn)行操作,DMA寄存器如表7-3所示(DMA1的基地址是0x40020000),其中4個中斷狀態(tài)位和4個中斷標(biāo)志清除位分別如表7-4和表7-5所示,通道配置寄存器(CCRx)如表7-6所示(7個通道配置寄存器的偏移地址依次是0x08、0xlC、0x30、0x44、0x58、Ox6C和0x80)。偏移地址名稱類型復(fù)位值說明0x00ISR讀0x0000000中斷狀態(tài)寄存器:1個通道4位(詳見表7-5)0x04IFCR讀/寫0x0000000中斷標(biāo)志清除寄存器:1個通道4位(詳見7-6)0x08CCR1讀/寫0x000

0000通道1配置寄存器(詳見表7-7)0x0CCNDTR1讀/寫0x000

0000通道1傳輸數(shù)據(jù)數(shù)量寄存器(16位)0x10CPAR1讀/寫0x000

0000通道1外設(shè)地址寄存器0x14CMAR1讀/寫0x000

0000通道1存儲器地址寄存器表7-3DMA寄存器DMA相關(guān)寄存器功能見表7-4。注意,在以下列舉的所有寄存器中,所有與通道6和通道7相關(guān)的位,對DMA2都不適用,因為DMA2只有5個通道。寄存器功能DMA中斷狀態(tài)寄存器(DMA-ISR)用于反映各DMA通道是否產(chǎn)生了中斷DMA通道x配置寄存器(DMA-CCRx)(x=1,…,7)用于清除DMA中斷標(biāo)志DMA中斷標(biāo)志清除寄存器(DMA-IFCR)用于配置各DMA通道DMA通道x存儲器地址存儲器(DMA_CMARx,x=1,…,7)用于設(shè)置DMA傳輸時存儲器的地址DMA通道x傳輸數(shù)量寄存器(DMA_CNDTRx,x=1,…,7)用于設(shè)置各通道的傳輸數(shù)據(jù)量,這個寄存器只能在通道不工作時寫人。通道開啟后,該寄存器變?yōu)橹蛔x,指示剩余的待傳輸?shù)淖止?jié)數(shù)目寄存器內(nèi)容在每次DMA傳輸后遞減。數(shù)據(jù)傳輸結(jié)束后,寄存器的內(nèi)容或者變?yōu)?,或者被自動重新加載為之前配置的數(shù)值(當(dāng)該通道配置為自動重加載模式時)。若寄存器的內(nèi)容為0,無論通道是否開啟,都不會發(fā)生任何數(shù)據(jù)傳輸

表7-5中斷狀態(tài)位位名稱類型復(fù)位值說明0GIF1讀0通道1全局中斷標(biāo)志1TCIF1讀0通道1傳輸完成中斷標(biāo)志2HTIF1讀0通道1全局中斷標(biāo)志3TEIF1讀0通道1全局中斷標(biāo)志表7-4DMA相關(guān)寄存器功能表7-6中斷標(biāo)志清除位位名稱類型復(fù)位值說明0CGIF1讀/寫0清除通道1全局中斷標(biāo)志1CTCIF1讀/寫0清除通道1傳輸完成中斷標(biāo)志2CHTIF1讀/寫0清除通道1傳輸過半中斷標(biāo)志3CTEIF1讀/寫0清除通道1傳輸錯誤中斷標(biāo)志

表7-7通道配置寄存器(CCRx)位名稱類型復(fù)位值說明0EN讀/寫0通道使能1TCIE讀/寫0傳輸完成中斷使能2HTIE讀/寫0傳輸過半中斷使能3TEIE讀/寫0傳輸錯誤中斷使能4DIR讀/寫0數(shù)據(jù)傳輸方向:0一外設(shè)讀,1一存儲器讀5CIRC讀/寫0循環(huán)模式:0一不重裝CNDTR,1一重裝CNDTR6PINC讀/寫0外設(shè)地址增量:0一無增量,1一有增量7MINC讀/寫0存儲器地址增量:0一無增量,1一有增量9:8PSIZE[1:0]讀/寫0外設(shè)數(shù)據(jù)寬度:00—8位,01一16位,10一32位11:10MSIZE[1:0]讀/寫0存儲器數(shù)據(jù)寬度:00一8位,01一16位,1伊一32位13:12PL[1:0]讀/寫0通道優(yōu)先級:0一低,01一中,1一高,11一最高14MEM2MEM讀/寫0存儲器到存儲器模式23第四節(jié)DMA庫函數(shù)(**)

每個通道都可以在有固定地址的外設(shè)寄存器和存儲器地址之間執(zhí)行DMA傳輸。DMA傳輸?shù)臄?shù)據(jù)量是可編程的,可以通過DMA-CCRx寄存器中的PSIZE和MSIZE位進(jìn)行編程,最大數(shù)據(jù)傳輸數(shù)量為65536。存儲數(shù)據(jù)傳輸數(shù)量的寄存器在每次傳輸后遞減。通過設(shè)置DMA-CCRx寄存器中的PINC和MINC標(biāo)志位,外設(shè)和存儲器的指針在每次傳輸后,可以有選擇地完成自動增量當(dāng)設(shè)置為增量模式時,下一個要傳輸?shù)牡刂穼⑹乔耙粋€地址加上增量值,增量值取決與所選的數(shù)據(jù)寬度為1、2或4。第一個傳輸?shù)牡刂肥谴娣旁贒MA-CPARx/DMA-CMARx寄存器中的地址。在傳輸過程中,這些寄存器保持它們初始的數(shù)值不變,軟件不能改變和讀出當(dāng)前正在傳輸內(nèi)部外設(shè)/存儲器地址寄存器中的地址。當(dāng)通道配置為非循環(huán)模式時,傳輸結(jié)束后(即傳輸計數(shù)變?yōu)?)將不再產(chǎn)生DMA操作。若要開始新的DMA傳輸,需要在關(guān)閉DMA通道的情況下,在DMA-CNDTRx寄存器中重新寫人傳輸數(shù)目。在循環(huán)模式下,最后一次傳輸結(jié)束時,DMA-CNDTRx寄存器的內(nèi)容會自動地被重新加載為其初始數(shù)值,內(nèi)部的當(dāng)前外設(shè)/存儲器地址寄存器也被重新加載為DMA-CPARx/DMA-CMARx寄存器設(shè)定的初始基地址。DMA寄存器初始化相關(guān)數(shù)據(jù)結(jié)構(gòu)在庫文件STM32f10x-dma.h中:typedefstruct{uint32_tDMA_PeripheralBaseAddr;//DMA通道外設(shè)地址uint32-tDMA_MemoryBaseAddr; //DMA通道存儲器地址uint32_tDMA_DIR; //設(shè)定外設(shè)是作為數(shù)據(jù)傳輸?shù)哪康牡剡€是來源uint32_tDMA_BufferSize; //DMA緩存的大小,單位在下邊設(shè)定uint32_tDMA_PeripheralInc; //外設(shè)地址寄存器是否遞增uint32_tDMA_Memorylnc;//內(nèi)存地址是否遞增uint32_tDMA_PenpheralDataSize;//外設(shè)數(shù)據(jù)傳輸單位uint32_tDMA_MemoryDataSize;//存儲器數(shù)據(jù)傳輸單位uint32_tDMA_Mode;//設(shè)定工作模式uint32_tDMA_Priority;//設(shè)定優(yōu)先級uint32_tDMA_M2M;//是否從內(nèi)存到內(nèi)存DMA_InitTypeDef;上述結(jié)構(gòu)體部分參數(shù)說明如下。(1)DMA-DIR設(shè)置外設(shè)是作為數(shù)據(jù)傳輸?shù)哪康倪€是來源表7-8給出了該參數(shù)的取值范圍。DMA_DIR描述DMA_DIR_PenpheralDST外設(shè)作為數(shù)據(jù)傳輸?shù)哪康牡刂稤MA_DIR_PeripheralSRC外設(shè)作為數(shù)據(jù)傳輸?shù)膩碓矗?)DMA-BufferSize用于定義指定DMA通道的緩存大小,單位為數(shù)據(jù)單位。根據(jù)傳輸方向,數(shù)據(jù)單位等于結(jié)構(gòu)中參數(shù)DMA-PeripheraIDataSize或DMA-MemoryDataSize的值。(3)DMA-Peripherallnc用于設(shè)定外設(shè)地址寄存器遞增與否。表7-9給出了該參數(shù)的取值范圍。DMA—PenpheralInc描述DMA_PeripheralInc_Enable外設(shè)地址寄存器遞增DMA_PeripheralInc—Disable外設(shè)地址寄存器不變表7-9DMAPeripheralInc值表7-8DMA_DIR值(4)DMA-Memorylnc用于設(shè)定內(nèi)存地址寄存器遞增與否,表7-10給出了該參數(shù)的取值范圍。DMA_MemoryInc描述DMA_Memorylnc_Enable內(nèi)存地址寄存器遞增DMA_Memorylnc_Disable內(nèi)存地址寄存器不變(5)DMA-PeripheralDataSize用于設(shè)定外設(shè)數(shù)據(jù)寬度。表7-11給出了該參數(shù)的取值范圍。DMA_PeripheralDataSize描述DMA_PenpheralDataSize—Byte數(shù)據(jù)寬度為8位DMA_PeripheralDataSlze_HalfWord數(shù)據(jù)寬度為16位DMA_PenpheralDataSize_Word數(shù)據(jù)寬度為32位(6)DMA-MemoryDataS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論