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

1、中断方式是在数据缓冲寄存区满后,发中断请求,cpu进行中断处理。
2、dma方式则是以数据块为单位传输的,在所要求传送的数据块全部传送结束时要求cpu进行中断处理,这样大大减少cpu进行中断处理的次数。 dma方式不需cpu干预传送操作 ,不占用cpu任何资源, 整个数据传输操作在一个称为dma控制器的控制下进行的。cpu除了在数据传输开始和结束时做一点处理外,在传输过程中cpu可以进行其他的工作。这样,在大部分时间里,cpu和输入输出都处于并行操作。因此,使整个计算机系统的效率大大提高。 中断方式是程序切换,每次操作需要保护和恢复现场,中断次数多,cpu需要花较多的时间处理中断,中断次数多也会导致数据丢失。 但是dma是必须利用中断的,否则cpu无法得到数据已经传输结束,当数据传输开始结束的时候,需要给cpu一个中断信号,cpu进行处理.这个就大大的节约了cpu的资源。
3、中断方式的数据传送方向是由设备到cpu再到内存,或者相反。
dma方式的数据传送则是将所传输的数据由设备直接送入内存,或是由内存直接送到设备。
可以实现dma控制的接口:
代码实现 :
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);} 启动传输:


在射频芯片封装过程中,什么参数会影响封装的灵敏度?
MySQL 批量插入不重复数据的解决方法
希捷科技发布2021财年第一财季财务报告
美国研制电池环保回收方法,未来可用于制造和回收锂离子电池
GE公司发布工业互联网服务技术 助力医疗高效运营
中断方式和DMA方式有什么不同
普通电机为啥不能当变频电机使用?变频电机和普通电机的区别
无纺布表面污点检测仪的工作原理及功能特点
AI正在落地 未来建设硬件和软件才是重点
工业聚合物3D打印机和金属3D打印机在2018年的出货量情况总结
苹果又搞鬼?iPhone X用发烫后狂降频:性能跌到3成
美高森美与Broadcom合作扩展下一代宽带产品组合
半导体硅晶圆厂合晶宣布,合晶上海厂将在本月底开始迁厂!
今日看点丨传华为推“三折机” 最快Q2问世;比亚迪秦 L 工信部“证件照”公布:预计搭载第 5 代 DM-i 混动技
荣耀20和荣耀20 Pro对比究竟谁更好
什么是内压测试?环境温度对电池性能有何影响?
广州这家公司疑被苹果弃用,起底歌尔股份欧菲光等“果链”巨头发展如何?
差分晶振在实际应用中有哪些优势
平交路口安全提升与交通安全固本强基,路口哨兵雷达解决方案精准施策
2019年Q3季度第三方移动支付环比升高5.68%,支付宝排名第一