从FPGA视角来看DMA中断

题外话

从学习一些高档的单片机就能看到DMA的作用。DMA可以让外设不经过CPU的干预,直接把数据搬运到内存。这样做不仅仅是体现在不需要CPU干涉,而且能够极大的提高外设数据的吞吐量。举个简单的例子,我们需要用AD转换器去采集50Hz的交流信号,假设采样率是1024次/T。那么需要的AD转换器的采样率是50*1024=51200。在非突发,并行采集的条件下,AD转换器每秒需要中断CPU 51200次。对于百兆的CPU来讲,这个速度还是可以接受的,但是如果要在保证数据不丢失,又要对数据做一些FIR,FFT等操作呢?显然,每次数据采集完成中断CPU的方法已经不能满足这种场景。这时候就可以利用DMA接收完成中断来触发数据处理。再引入一种乒乓操作:
A:
在这里插入图片描述
B:
在这里插入图片描述
如上图所示,我们需要在内存中开辟两块缓冲区,在写入A缓冲区的时候去读取B缓冲区,在写入B缓冲区的时候,去读取A缓冲区。对于缓冲,总会想到一个例子,当我们去食堂盛饭,总是需要一个餐具的,食堂工作人员需要先把饭盛到你的盘子中,而不是直接把饭让你去吃掉。想想下如果没有餐具的缓冲,食堂的拥挤程度会翻多少倍,对于数据通常也是这个样子。
言归正传,有个这两个缓冲区, == 我们把DMA的接收完成中断length’设置成51200,那么这个时候,DMA控制器以20ms的周期去中断CPU,加上每次中断切换缓冲区,最终我们为数据处理创造了将近20ms的时间。== 由此可见,在这个方面,DMA给单片机、DSP带来的好处是革命性的。

DMA控制器如何产生中断信号?

上一篇写了在zynq上实现的DMA数据的发送,对于发送来讲,DMA接收显得更加重要,接收属于异步事件,如果没有一种机制让CPU知道这个事件的来临,那么CPU需要一直去检测这个信号。这种资源的浪费是灾难性的,说道这里突然想起以前学习MCU时候的一个疑问,“在两个外设同时中断CPU情况下,优先级高的中断被处理,优先级低的中断有可能被flush掉吗?”现在来看这个问题可以分为两种情况了,地址优先级低的外设中断速度不是那么高,优先级高的中断服务程序执行时间不是那么长。也就是 低优先级外设两次中断间隔时间>高优先级中断的中断服务程序执行时间(这里不考虑中断响应时间)。这种情况下,低优先级中断标志是不会被flush掉的。
在这里插入图片描述看图,外设的中

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值