微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 深入了解PSoC5:DMA使用基础

深入了解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设计出简洁高效的产品。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top