深入了解PSoC5:DMA使用基础
时间:08-06
来源:互联网
点击:
点击 Next后出现图5所示界面,根据工程实际要求进一步配置其余参数,然后点击Next,进入图6所示界面,自动生成DMA配置代码,将此代码拷入主程序中即可。
2)API配置法
在Creator中完成原理图绘制后,首先编译原理图,DMA器件将会产生两个API源程序文件,DmaInstanceName_dma.c和DmaInstanceName_dma.h。其中的c文件中包含有DMA初始化与配置的函数。配置过程主要步骤如下:
1、启动(Start)DMA通道
Channel_Handle = DMA_DmaInitialize(DMA_BYTES_PER_BURST, DMA_REQUEST_PER_BURST, HI16(Source Address), HI16(Destination Address))
2、创建一个 TD实例
TD_Handle = CyDmaTdAllocate();
3、设定 TD传输配置项
CyDmaTdSetConfiguration(TD_Handle,Transfer_Count,Next_TD,TD_Property);
4、设定TD传输数据源及目的地址
CyDmaTdSetAddress(TD_Handle, LO16(Source Address), LO16(Destination Address))
5、设定DMA通道的初始TD指针
CyDmaChSetInitialTd(Channel_Handle , TD_Handle)
6、允许(Enable)DMA通道
CyDmaChEnable(Channel_Handle, preserve_TD)
PSoC5平台上的ADC转换数据的DMA传输实例
对于参数缓慢变化且有干扰伴随的ADC应用来说,并不需要在每个转换周期完成后实时读取转换结果。比较好的解决方法是将一段时间内的采样结果自动存放在某个地方,然后再由CPU一次性读取,这样既可以节约CPU的资源,又可以进行一些滤波处理。DMA正好可以扮演自动将一组采样结果存放到RAM中的角色,示意图如图6所示。
ADC转换完成产生EOC信号时,DMA将2字节的ADC转换结果从ADC寄存器 搬至片内RAM的缓冲数组中,达到设定的数量时,DMA产生一个nrq完成信号触发中断,由CPU读取并处理这一组信号。相应的Creator原理图如图7所示。
可以采用上述两种DMA配置方法的任意一种。图8为DMA通道配置示意。由于ADC转换结果为10位,所以Burst Count为2;本实例设定为一次按键DMA搬运一个数据后即关闭,故Request Per Burst 为1;而后续burst传输必须和当前burst连续,所以Preserve TD为1。
图9为任务描述符TD配置示意。Transfer Count设定为N × Burst Count;在每个burst完成后,需要Increment Destination Address;且传输数量达到Transfer Count后,将会Generate DMA done event来触发中断程序。
值得注意的是,在这里只需要1个TD就可以完成任务了。如果DMA需要将ADC结果搬入RAM中两个独立的缓冲区,如图10所示意,由于两个缓冲区间的距离超过一个Burst Count,所以需要两个TD来完成任务。而这两个缓冲区的地址高16位都是相同的,所以共享一个DMA通道就可以了。
小结
本文主要介绍了PSoC5片内DMA的主要原理,配置过程与方法,以及如何使用DMA进行具体的工程设计。采用DMA进行数据直接传输与存储,可以不占用CPU的处理时间,极大地提高PSoC5的处理速度和效率。DMA可以在数据通讯与大规模现场数据采样应用中发挥关键作用,帮助用户使用PSoC5设计出简洁高效的产品。
SoC Cypress PSoC ARM Cortex 电压 电流 总线 Keil ADC 相关文章:
- 高带宽嵌入式应用中SoC微控制器的新型总线设计 (02-02)
- SoC前段(ARM)嵌入式系统开发实作训练(上) (02-28)
- SoC前段(ARM)嵌入式系统开发实作训练(下)(02-28)
- 采用灵活的汽车FPGA 提高片上系统级集成和降低物料成本(04-28)
- 开放源码硬件简史(05-21)
- 可配置处理器技术优势详解(05-15)