刚接触到DMA的时候,一头雾水,只知道方便、快捷,但不知道该怎么使用,后来弄明白原理之后就轻松了很多,但理解的还不是很透,所以希望把自己的理解写出来,和大家分享一下!
形象的说,DMA就像一个快递中转站,负责把数据从始发地搬到目的地,只要他负责的仓库有货,他就开始搬运,没货就等着,除非你把它关了。就像机器人搬东西一样,首先要告诉它从哪搬,搬到哪?东西有多大?需要搬几趟?需要搬运的东西是不是都在一起?搬完后是不是扔在那就行了,还是要放好?
到芯片里,数据就是货物,把数据从一个地方移到另一个地方。你只要告诉它怎么移到就行了,就像控制一个机器人一样。并不是多有的外设都能有机会使用DMA通道,而且,一条通道上被外设使用后,通道上的其他外设就不能使用了。那么,哪些外设可以使用DMA呢?
比方说:现在我需要使用串口发送,那么只能选择通道4,如果接收就使用通道5。
(这里只拿DMA1举例,DMA2原理相同)
在知道大概的原理之后,我们来看一下DMA的一些寄存器。
1):中断状态寄存器
2):中断标志清除寄存器
3):通道配置寄存器
注:当通道配置为非循环模式时,传输结束后(即传输计数变为0)将不再产生DMA操作。要开始新的
DMA传输,需要在关闭DMA通道的情况下,在DMACNDTRx寄存器中重新写入传输数目
4):接下来的几个寄存器配置传输数据的次数、数据源地址,数据存放地址。
/**********中断函数**************/
/*这里只提供通道4发送完成中断
*/
void DMA1_Channel4_IRQHandler(void){ if(DMA_GetITStatus(DMA1_FLAG_TC4)==SET) { DMA_ClearFlag(DMA1_FLAG_TC4); DMA_Cmd(DMA1_Channel4, DISABLE); //在非循环模式下,若 想再次填写传输次数,必须先关闭通道 DMA1_Channel->CNDTR = 10; DMA_Cmd(DMA1_Channel4, ENABLE);
}
设计资源 培训 开发板 精华推荐
- EVAL-AD7173-8SDZ,用于评估 AD7173-8、24 位、31.25 kSPS、Sigma-Delta ADC、集成模拟输入缓冲器的评估板
- LTC3897IFE 高效两相 48V 升压转换器的典型应用电路,具有浪涌电流控制、输入电压浪涌保护和过流保护
- 使用 Analog Devices 的 AD9832 的参考设计
- DER-709 - 适用于使用 InnoSwitch3-TN 的设备的 10 W 单输出开放式电源
- LTC2990 的典型应用 - 四路 I2C 电压、电流和温度监视器
- LTC3858IUH 演示板、低 IQ、双通道、2 相同步降压控制器
- ESP32 星核
- 红外测温枪STM32F1
- LTC3454 1A 同步降压-升压型大电流 LED 驱动器的典型应用
- 光立方
- MPS e-store清空购物车2020
- 【EEWORLD第三十四届】2012年01月社区明星人物揭晓!
- 月度原创精选评选:有料,够精彩,要的就是它!
- 医用/工业CT医疗影像探测器芯片应用与解决方案
- TI有奖直播|借助Sitara™ AM263x MCU 创造电气化的未来
- 免费申请|兆易创新GD32L233尝鲜体验,开启节能“芯”时代!
- 力源带你了解安森美半导体开发神器——高度灵活的物联网开发套件( IDK )!看视频轻松答题享好礼!
- MPS电机研究院 让电机更听话的秘密! 第一站:电机应用知识大考!
- TE Connectivity 提供更懂你的连接解决方案
- 一起分享,共同成长!EEWORLD月月有奖优秀主题/回复第29期