TMS320C6678 EDMA传输配置

配置步骤:
注:以下的参考章节均为文末的参考文献内容
Step1 启动DMA/QDMA通道
(a)确定要使用的信道类型(QDMA或DMA)。
(b)通道映射
(i)如果使用QDMA通道,则使用通道映射到的参数集号和触发字编程QCHMAP。
(ii)如果使用DMA通道,则使用通道映射到的参数集编号对DCHMAP进行编程。
©如果通道在阴影区域的上下文中被使用,确保该区域的DRAE/DRAEH被正确地设置,以允许对阴影区域内存映射中的事件寄存器和中断寄存器中的位进行读写访问。这个过程中的后续步骤应该使用各自的阴影区域寄存器来完成。(阴影区域的描述和用法见第2.7.1节)
(d)确定所使用的触发方式。
(i)如果外部事件被用于触发(DMA通道),通过写入EESR/EESRH使EER/EERH中相应的事件生效。
(ii)如果使用QDMA信道,通过写入QEESR使能QEER中的信道。
(e)队列设置
(i)如果使用QDMA通道,设置QDMAQNUM将通道映射到相应的事件队列。
(ii)如果使用DMA通道,设置DMAQNUM将事件映射到相应的事件队列。
Step2 参数设置设置程序与通道相关联的PaRAM集合号。
这是EDMA配置的最关键的步骤具体配置参考文末TI的官方文档。
Step3 中断设置
(a)通过写入IESR/IESRH,使IER/IERH中断。
(b)确保设备中断控制器中正确启用EDMA3CC完成中断(这是指全局中断或阴影区中断)。
©正确设置中断控制器以接收预期的EDMA3中断。
Step4。这个步骤高度依赖于事件触发源:
(a)如果源是一个来自外设的外部事件,外设将能够开始生成相关的EDMA3事件,可以锁存到ER传输。
(b)对于QDMA事件,写入到触发字(上面的步骤2-a)将启动传输。
©手动触发的传输将通过写入事件集寄存器(ESR/ESRH)来启动。
(d)当前一个传输返回一个与所连接的信道号相等的传输完成代码时,链触发器事件启动。
Step5 等待完成
(a)如果中断是在上述步骤3中提到的,那么EDMA3CC将产生一个完成中断DSP传输完成结果在中断挂起寄存器(IPR/IPRH)中设置相应的位。IPR/IPRH中的设置位必须写入ICR/ICRH中的对应位来清除。
(b)如果轮询完成(中断未在设备控制器中启用),那么应用程序代码可以等待在IPR/IPRH中设置的预期位。同样,在为相同的传输完成代码值执行下一组传输之前,IPR/IPRH中的设置位必须通过ICR/ICRH手动清除。

Cache一致性问题:
C6678架构图
EDMA是独立于CPU功能模块,EDMA搬运数据CPU并不知道,这里就有了一个非常容易忽略的cache一致性的问题。这部分参考了michaelcao1980大佬的文章,笔者针对C6678做一个简单的总结:
DDR之间数据搬运寄存器设置,DDR和SRAM间搬运的寄存器设置,SRAM间搬运的寄存器设置是相同的。只需要更改源和目的地址即可。但是一旦目的地址是DDR就设置到DDR和SRAM一致性的问题。
Cache无效:由于EDMA是在CPU不干扰的情况下进行数据搬运,但是CPU读取数据的时候是通过Cache来读取数据的,当EDMA将目的地址设置为DDR时,CPU并不知道DDR的数据已经改变,当然也不会去更新Cache中的内容,于是当CPU读取该块DDR内容的时候仍然是Cache中原来没有更新的数据,这种情况的时候需要将原来的DDR那块数据对应的Cache置位无效,从新写入Cache的值,就可以保证DDR和Cache的一致性了。而对应的Cache无效函数是:Cache_Invalid();
Cache 回写:同样DMA在搬运数据的时候还可能存在另一种情况,处理器在处理数据的时候会将数据先存放到Cache 中,此时Cache中的数据可能还没有来的急写入到内存中去,这时候DMA要向外设写入由处理器提供的数据的时候,DMA会直接从DDR中获得数据,搬运到外设,而这个数据并不是想要搬运的数据,这种情况下要调用Cache回写函数,在DMA进行数据搬运之前要将Cache中的数据回写到DDR中,保证DDR和Cache 的数据的一致性。
也就是说,在EDMA搬运完数据之后,要告诉CPU:Cache现在那块区域数据已经无效了。
参考文献:https://www.ti.com/lit/ug/sprugs5b/sprugs5b.pdf?ts=1623898720056

  • 0
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值