0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

中断方式和DMA方式有什么不同

嵌入式应用开发 来源:嵌入式应用开发 作者:嵌入式应用开发 2022-06-10 11:44 次阅读

1、中断方式是在数据缓冲寄存区满后,发中断请求,CPU进行中断处理。

2、DMA方式则是以数据块为单位传输的,在所要求传送的数据块全部传送结束时要求CPU进行中断处理,这样大大减少CPU进行中断处理的次数。 DMA方式不需CPU干预传送操作 ,不占用CPU任何资源, 整个数据传输操作在一个称为"DMA控制器"的控制下进行的。CPU除了在数据传输开始和结束时做一点处理外,在传输过程中CPU可以进行其他的工作。这样,在大部分时间里,CPU和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。 中断方式是程序切换,每次操作需要保护和恢复现场,中断次数多,CPU需要花较多的时间处理中断,中断次数多也会导致数据丢失。 但是DMA是必须利用中断的,否则CPU无法得到数据已经传输结束,当数据传输开始结束的时候,需要给CPU一个中断信号,CPU进行处理.这个就大大的节约了CPU的资源。

3、中断方式的数据传送方向是由设备到CPU再到内存,或者相反。

DMA方式的数据传送则是将所传输的数据由设备直接送入内存,或是由内存直接送到设备。

可以实现DMA控制的接口pYYBAGKirlaAGRKrAALiWqpP6fk519.png
pYYBAGKivamAI3nzAAIk_RBMy5w859.png

代码实现 :

uint8_t SendBuff[SENDBUFF_SIZE];
uint8_t ReceiveBuff[RXBUFF_SIZE];
/**
  * @brief  USART1 TX DMA 配置,内存到内存
  * @param  无
  * @retval 无
  */
void DMA_Mem2Mem_Config(void)
{
        DMA_InitTypeDef DMA_InitStructure;
    
        /*开启DMA时钟*/
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);    

        /*设置DMA源地址*/
        DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)SendBuff;

        /*设置DMA目的地址*/
        DMA_InitStructure.DMA_PeripheralBaseAddr =  (uint32_t)ReceiveBuff;       

        /*方向:从内存SendBuff到内存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数据单位*/    
        DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;

        /*SENDBUFF_SIZE数据单位*/
        DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;     

        /*DMA模式:正常模式*/
        DMA_InitStructure.DMA_Mode = DMA_Mode_Normal ;

        /*优先级:中*/    
        DMA_InitStructure.DMA_Priority = DMA_Priority_Medium;  

        /*使能内存到内存的传输    */
        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发送完成后产生中断 */            
    DMA_ITConfig(DMA1_Channel4,DMA_IT_TC,ENABLE);
}

启动传输:

DMA_Cmd (DMA1_Channel4,ENABLE); 

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10409

    浏览量

    206463
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41020
  • dma
    dma
    +关注

    关注

    3

    文章

    535

    浏览量

    98971
收藏 人收藏

    评论

    相关推荐

    STM32 DMA方式中断方式查询的区别 精选资料推荐

    CPU控制完成,如CPU程序查询或中断方式。利用中断进行数据传送,可以大大提高CPU的利用率。 2:中断传送是由CPU通过中断服务程序来传送
    发表于 08-16 08:41

    中断和非DMA方式

    中断和非DMA方式可以用于特殊场景,比如其它外设占据DMA负担比较重而CPU又比较清闲的时候。1. STM32F429的AD转换最高12bit12位分辨率意味着我们采集电压的精度可以
    发表于 08-17 08:26

    请问stm32f407 adc的dma中断方式是什么?

    请问stm32f407 adc的dma中断方式是什么?
    发表于 11-16 06:49

    请问STM32 DMA方式中断方式查询之间什么区别?

    请问STM32 DMA方式中断方式查询之间什么区别?
    发表于 11-16 08:10

    中断和非DMA方式可以用于哪些特殊场景?

    中断和非DMA方式可以用于哪些特殊场景?
    发表于 11-18 07:16

    DMA通信编程与STM32串口中断方式是什么

    目录DMA通信原理DMA的基本介绍DMA工作原理STM32的DMA结构DMA的主要特性DMA寄存
    发表于 12-10 06:04

    怎样使用IDLE中断+DMA接收的方式接收数据呢

    怎样使用IDLE中断+DMA接收的方式接收数据呢?怎样使用IDLE中断去判断串口线是否空闲呢?
    发表于 01-27 06:20

    用外中断方式读按键,控制灯的亮灭

    用外中断方式读按键,控制灯的亮灭 这一颗,我们学习外中断的用法。也
    发表于 08-09 23:14 6705次阅读

    中断方式闪烁【汇编版】

    中断方式闪烁【汇编版】中断方式闪烁【汇编版】中断方式闪烁【汇编版】
    发表于 12-29 10:50 0次下载

    单片机的串口通信---查询和中断

    一、单片机与外设的通信有三种方法:查询,中断DMA,这三种方式中,查询的话你可以理解为循环检测。在学8位单片机时我没遇到过DMADMA
    发表于 11-11 09:51 16次下载
    单片机的串口通信---查询和<b class='flag-5'>中断</b>

    单片机I/O控制方式(UART中断DMA中断的区别)

    单片机I/O设备的控制方式主要有三种:程序循环检测、中断驱动和直接内存访问。
    发表于 11-23 17:51 3次下载
    单片机I/O控制<b class='flag-5'>方式</b>(UART<b class='flag-5'>中断</b>和<b class='flag-5'>DMA</b><b class='flag-5'>中断</b>的区别)

    DMA通信编程与STM32串口中断方式

    目录DMA通信原理DMA的基本介绍DMA工作原理STM32的DMA结构DMA的主要特性DMA寄存
    发表于 11-26 19:21 12次下载
    <b class='flag-5'>DMA</b>通信编程与STM32串口<b class='flag-5'>中断</b><b class='flag-5'>方式</b>

    STM32中断DMA通信

    结果Ⅲ-DMA向上位机发送数据DMA1.创建STM32CubeMX工程2.keil代码修改3.结果小结链接Ⅰ-中断方式点灯中断
    发表于 11-26 19:21 20次下载
    STM32<b class='flag-5'>中断</b>与<b class='flag-5'>DMA</b>通信

    STM32中断DMA通信编程

    接一个开关(用杜邦线模拟代替)。采用中断模式编程,当开关接高电平时,LED亮灯;接低电平时,LED灭灯。(2) 采用串口中断方式重做上周的串口通信作业。(3) STM32采用串口DMA
    发表于 11-26 19:21 11次下载
    STM32<b class='flag-5'>中断</b>与<b class='flag-5'>DMA</b>通信编程

    STM32F4系列HAL库DMA中断方式的串口输出

    本项目代码利用HAL库中DMA中断方式,向串口1发送大量数据,芯片为STM32F407,通过串口助手来接收并显示数据。具体步骤如下: 1、配置MCU的引脚功能。 2、初始化DMA
    发表于 12-04 16:21 14次下载
    STM32F4系列HAL库<b class='flag-5'>DMA</b><b class='flag-5'>中断</b><b class='flag-5'>方式</b>的串口输出