1、中斷方式是在數(shù)據(jù)緩沖寄存區(qū)滿后,發(fā)中斷請求,CPU進行中斷處理。
2、DMA方式則是以數(shù)據(jù)塊為單位傳輸?shù)模谒髠魉偷臄?shù)據(jù)塊全部傳送結(jié)束時要求CPU進行中斷處理,這樣大大減少CPU進行中斷處理的次數(shù)。 DMA方式不需CPU干預(yù)傳送操作 ,不占用CPU任何資源, 整個數(shù)據(jù)傳輸操作在一個稱為"DMA控制器"的控制下進行的。CPU除了在數(shù)據(jù)傳輸開始和結(jié)束時做一點處理外,在傳輸過程中CPU可以進行其他的工作。這樣,在大部分時間里,CPU和輸入輸出都處于并行操作。因此,使整個計算機系統(tǒng)的效率大大提高。 中斷方式是程序切換,每次操作需要保護和恢復(fù)現(xiàn)場,中斷次數(shù)多,CPU需要花較多的時間處理中斷,中斷次數(shù)多也會導(dǎo)致數(shù)據(jù)丟失。 但是DMA是必須利用中斷的,否則CPU無法得到數(shù)據(jù)已經(jīng)傳輸結(jié)束,當(dāng)數(shù)據(jù)傳輸開始結(jié)束的時候,需要給CPU一個中斷信號,CPU進行處理.這個就大大的節(jié)約了CPU的資源。
3、中斷方式的數(shù)據(jù)傳送方向是由設(shè)備到CPU再到內(nèi)存,或者相反。
DMA方式的數(shù)據(jù)傳送則是將所傳輸?shù)臄?shù)據(jù)由設(shè)備直接送入內(nèi)存,或是由內(nèi)存直接送到設(shè)備。
可以實現(xiàn)DMA控制的接口:![pYYBAGKirlaAGRKrAALiWqpP6fk519.png](https://file.elecfans.com/web2/M00/4A/4E/pYYBAGKirlaAGRKrAALiWqpP6fk519.png)
![pYYBAGKivamAI3nzAAIk_RBMy5w859.png](https://file.elecfans.com/web2/M00/4A/53/pYYBAGKivamAI3nzAAIk_RBMy5w859.png)
代碼實現(xiàn) :
uint8_t SendBuff[SENDBUFF_SIZE];
uint8_t ReceiveBuff[RXBUFF_SIZE];
/**
* @brief USART1 TX DMA 配置,內(nèi)存到內(nèi)存
* @param 無
* @retval 無
*/
void DMA_Mem2Mem_Config(void)
{
DMA_InitTypeDef DMA_InitStructure;
/*開啟DMA時鐘*/
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);
/*設(shè)置DMA源地址*/
DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SendBuff;
/*設(shè)置DMA目的地址*/
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)ReceiveBuff;
/*方向:從內(nèi)存SendBuff到內(nèi)存ReceiveBuff*/
DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;
/*傳輸大小DMA_BufferSize=SENDBUFF_SIZE*/
DMA_InitStructure.DMA_BufferSize = SENDBUFF_SIZE;
/*ReceiveBuff地址自增*/
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable;
/*SENDBUFF_SIZE地址自增*/
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
/*ReceiveBuff數(shù)據(jù)單位*/
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
/*SENDBUFF_SIZE數(shù)據(jù)單位*/
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
/*DMA模式:正常模式*/
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;
/*優(yōu)先級:中*/
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;
/*使能內(nèi)存到內(nèi)存的傳輸 */
DMA_InitStructure.DMA_M2M = DMA_M2M_Enable;
/*配置DMA1的4通道*/
DMA_Init(DMA1_Channel4, &DMA_InitStructure);
/*失能DMA1的4通道,一旦使能就開始傳輸*/
DMA_Cmd (DMA1_Channel4,DISABLE);
}
DMA 中斷配置:
/**
* @brief DMA 中斷配置
* @param 無
* @retval 無
*/
void DMA_NVIC_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
/* 配置中斷源 */
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel4_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
/* 配置DMA發(fā)送完成后產(chǎn)生中斷 */
DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);
}
啟動傳輸:
DMA_Cmd (DMA1_Channel4,ENABLE);
審核編輯:湯梓紅
-
cpu
+關(guān)注
關(guān)注
68文章
10905瀏覽量
213032 -
中斷
+關(guān)注
關(guān)注
5文章
900瀏覽量
41758 -
dma
+關(guān)注
關(guān)注
3文章
566瀏覽量
100964
發(fā)布評論請先 登錄
相關(guān)推薦
求助關(guān)于DAQmx的中斷傳輸方式的例程
STM32 DMA方式和中斷方式查詢的區(qū)別 精選資料推薦
非中斷和非DMA方式
DMA通信編程與STM32串口中斷方式是什么
怎樣使用IDLE中斷+DMA接收的方式接收數(shù)據(jù)呢
能否在audio-loopback例程中增加收發(fā)DMA,配置成雙緩沖方式或者半滿中斷方式?
STM32 | 串口空閑中斷接收不定長數(shù)據(jù)(DMA方式)
![STM32 | 串口空閑<b class='flag-5'>中斷</b>接收不定長數(shù)據(jù)(<b class='flag-5'>DMA</b><b class='flag-5'>方式</b>)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
DMA通信編程與STM32串口中斷方式
![<b class='flag-5'>DMA</b>通信編程與STM32串口<b class='flag-5'>中斷</b><b class='flag-5'>方式</b>](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32中斷與DMA通信
![STM32<b class='flag-5'>中斷</b>與<b class='flag-5'>DMA</b>通信](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32 串口使用IDLE中斷+DMA接收(HAL庫函數(shù))
![STM32 串口使用IDLE<b class='flag-5'>中斷</b>+<b class='flag-5'>DMA</b>接收(HAL庫函數(shù))](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32 HAL庫開發(fā)學(xué)習(xí)筆記: USART1串口通訊(中斷方式) IDE-STM32CubeIDE
![STM32 HAL庫開發(fā)學(xué)習(xí)筆記: USART1串口通訊(<b class='flag-5'>中斷</b><b class='flag-5'>方式</b>) IDE-STM32CubeIDE](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評論