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

深入了解PSoC5:DMA使用基础

时间:08-06 来源:互联网 点击:
引言
PSoC5是Cypress可编程片上系统PSoC(Programmable System on Chip)家族中功能最强大的一个产品系列;采用工作频率高达 80 MHz 的 32 位三段流水线式 ARM Cortex-M3 处理器构建, 提供业界广泛采用的0.5V至5.5V宽电压范围和低至200nA的休眠电流。此外,PSoC5片内提供了极其丰富和业内独一无二的高性能可编程模拟和数字外设子系统,允许将任何模拟或数字信号(包括可编程时钟)分配到任何通用I/O引脚,这为使用者提供了真正的“系统级”可编程能力。DMA(直接存储器存储:Direct Memory Access)就是其中一种功能强大的外设模块。

本文以PSoC5平台为例,介绍了DMA的主要原理,配置过程方法及具体的典型工程设计。

PSoC5外设架构及DMA简介

PSoC5芯片内部集成了丰富的模拟与数字外设子系统,如图1所示,由外设集线器PHUB(Peripheral Hub)负责将不同的外设子系统之间以及外设子系统与CPU连接起来。PHUB内的连接数据总线共有8条,称之为spoke, 有16位和32位两种数据宽度。每个spoke都可以通过PHUB连接至不同的外设子系统或CPU。PHUB内包含的DMAC(DMA控制器:DMA Controller)能够使不同的外设子系统间通过spoke传递数据而不需要CPU的介入,可以极大的节省CPU资源,提高处理速度。

PSoC片内通过PHUB的数据传递可以分为两种:CPU与外设子系统之间的数据传递;不同的外设子系统之间的数据传递,这类传递可以在DMAC的控制下直接通过spoke进行,不需要CPU的主动介入。因此,CPU与DMAC可以在同一时刻访问不同的spoke;如果二者在同一时刻访问同一spoke,将会产生一个spoke仲裁(arbitration)。


DMAC主要通过24个DMA通道(Channel)和128个任务描述符TD(Transaction Descriptor)来实现外设子系统间数据直接存储任务的设定与管理。

DMA通道:每个DMA通道定义一个DMA传输类型,包括数据源和目的外设子系统的类型及高16位地址,每次传输的字节数等。

任务描述符TD:在DMA通道配置定义的基础上,TD进一步定义了一个DMA传输的总字节数(或重复传输的次数),传输过程中及结束时需要执行的动作。此外,每个TD配置中还定义了在本TD任务结束后指向的下一个TD的指针。

由上述定义不难看出,DMA通道配置主要在大的范围内限定了数据源和目的外设子系统的类型,以及所传输数据的长度。DMA传输任务的具体细节主要由任务描述符TD进行配置。每个DMA通道可以有多个TD,构成一个TD链表来完成比较复杂的多数据DMA传输。

图2所示为一个比较简单的DMA通道与其TD链表的示意图。对于一个特定的任务,如何确定需要几个DMA通道,以及每个DMA通道需要几个任务描述符TD将在下面的章节中进行论述。


DMA配置原理与方法说明

由上一节简介可知,外设子系统间数据的DMA传输任务配置应该分为DMA通道配置与任务描述符TD配置两个方面。

① DMA通道配置

图3-1所示为DMA通道配置的主要内容和参数。

      

Burst Count(1 to 255):DMA传输一次数据称为一个burst。此参数定义了DMA每次待传输数据的宽度,单位为字节。传输开始后,DMA应将此参数定义的所有字节全部传输完,才能释放相应的spoke.

Request Per Burst (0 or 1): 若一个DMA任务需要传输的总数据量超过一个burst时,应分成多次发送。当此参数设为0时,所有后续的burst将会在其前一个burst完成后自动进行而不再需要单独的request请求。因此只有在第一个burst开始时需要唯一的request请求。当此参数设为1时,每个burst传输时都需要独立的request请求。

First TD of Channel: 每个DMA通道拥有1个TD或由多个TD构成的链表,此参数为指向单个TD,或多TD链表首个TD的指针。

Preserve TD (0 or 1): 在一个request请求完成后,下一个request请求开始时可能会需要其TD的一些信息。此参数为0不保存TD的实时信息,为1则在每request请求结束后保存TD的所有中间状态及配置信息。

② 任务描述符TD配置

图3-2所示为任务描述符TD配置的主要内容和参数。

Transfer Count(1 to 4095):此参数定义了一个DMA任务需要传输数据包含的总字节数。若待传输单个数据的宽度(由 Burst Count定义)为N,需要传输的数据个数(即burst数量)为M,那么Transfer Count参数应当为M * N。

TD Property:此参数包含多个配置项,如下所示:

Increment Source Address: 在每个burst传输结束后递增源数据地址。

Increment Destination Address: 在每个burst传输结束后递增目的数据地址。在DMA传输任务的源数据或目的数据地址超过1个时,这两个命令项必须被配置。

Swap Enable:此选项只针对PSoC3应用。由于PSoC3的外设寄存器采用小端(Little Endian)格式,而PSoC3应用程序的Keil编译器对存储器内的变量采用大端(Big Endian)格式。因此当DMA在外设寄存器与存储器间传输2字节或4字节数据时,DMA必须交换传输数据的高低字节。

Swap Size:当Swap Enable配置为1时,此选项有效。0表示2字节,1表示4字节。

Auto Executive Next TD:当DMA通道含有多个TD时,须配置此选项。1表示当前TD完成后,指针指向的下一个TD自动执行;0表示当前TD完成后,下一个TD的执行需要另外的独立request请求。

DMA Completion Event:当DMA通道含有多个TD时,须配置此选项。1表示当前TD完成后,指针指向的下一个TD自动执行;0表示当前TD完成后,下一个TD的执行需要另外的独立request请求。

Next TD:指向TD链表中相邻的后续TD的指针。

③ 具体配置方法

DMA通道与任务描述符TD的各项参数配置共有两种方法,一是通过菜单栏的DMA向导(Wizard)提供的选项进行设置,另一种是通过Creator提供的应用程序接口API函数来进行配置。关于PSoC Creator集成开发环境的使用与编程方法,请参考本文的参考文献和登陆Cypress网站。

1)DMA向导配置法

首先将DMA器件( component)放入Creator 2.2 的原理图界面中,并完成系统原理图后,点击菜单栏 Tools -> DMA Wizard,打开配置对话框,点击 Next,出现如图4所示界面。在此界面中可以配置数据源及目的地址等参数;

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

网站地图

Top