导言
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所示界面。在此界面中能够装备数据源及意图地址等参数;
点击 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规划出简练高效的产品。