基于PSoC3的多通信接口时的DMA设计
曳的DMA 会使用一个通道。DMA 模块的输入输出地址等需要在代码中进行配置,而通过原理图配置的都是控制管脚和控制信息。在原理图上DMA 模块的表现如下图7 所示。
图7 DMA 模块
它的输入输出的管脚共有三个。
nrq - 输出管脚。该管教用于表征DMA的传输完成,用来通知中断控制器产生中断或者用来触发其他逻辑。当完成传输之后DMA会生成一个2个总线周期的脉冲。
drq - 输入管脚(可选)。该管脚是可选管脚,只有在触发条件选择为硬件的时候才可见。该管脚可以连接到产生DMA事务请求的模块,触发条件可以配置成电平触发或边沿触发。
trq - 输入管脚(可选)。该管脚是可选管脚,只有在结束条件选为硬件时才可见。该管脚触发之后,DMA会停止数据传输。
在配置完成硬件连接以后,使用配置向导来完成对DMA的如下参数的配置:
·Byte Per Burst - 每次执行Burst传输传送的字节数
·Transaction Descriptor 的数量
·Endian (Big / Little)的配置
·传输的字节数
·目标地址
·源地址
·地址递增模式
·TD连接模式
在PSoC Creator中打开DMA向导,选择要配置的DMA,进入第一个页面如图8所示。
图8 DMA 向导1-配置
该界面主要配置目标和源地址的范围。支持地址段在SRAM,FLASH,EEPROM中。其次是配置Burst的字节数以及该DMA中的事务描述符的数量和连接关系。在完成该步骤之后,会进入下个配置界面,主要配置其他的详细参数。如图9 所示。
图9 DMA详细配置
在图9中输入事务描述符号的参数。其中最为常用而且重要的参数包括:源地址,目标地址,地址递增模式,以及事务描述符的连接模式。在完成该步骤之后,点击下一步,就会生成相应的配置代码,如图10所示。
图10 DMA 生成代码
复制上述代码到程序的初始化模块中,并对需要的地方进行细微的修改,就可以完成DMA的初始化。在程序运行时,DMA会根据请求自动把数据从源地址搬运到目标地址。
3.2 DMA应用于多通讯端口实例
DMA的数据传输可以极大提高基于PSoC3系统的吞吐率。以一个系统为例,该系统通过SPI接收别的系统的输入,并通过UART传送到主机系统中。图11给出了基于传统MCU和基于PSoC3 DMA的两种程序流程图进行比较(不考虑两种传送速率不匹配的情况)。
图11 (a) 传统MCU设计 (b) PSoC3 DMA的设计
传统的MCU需要初始化SPI和UART通讯模块,并配置两者的中断。当SPI的Buffer满了之后,就产生中断,中断程序首先中止新的SPI传输,然后检测UART的Buffer,如果不为空就等待旧的数据传送完。为空之后就把SPI的数据复制到TX Buffer 并打开SPI接收后续数据。
基于PSoC3 DMA的设计中,可以基于原理图实现上述的逻辑。如图12所示。
图12 系统逻辑图
当SPI的Full信号和UART的Empty信号同时有效的时候,触发DMA传输,把SPI Buffer中的数据传送到UART的Buffer中。不需要CPU的干预就能够完成多通讯口之间的数据共享。
该通讯实例只是为了表明DMA在多通讯端口数据传输中的作用。在实际的实现中,DMA可以操作的通讯端口包括:
·USB的端点
·UART的Buffer
·SPI的Buffer
·I2S的Buffer
·其他各种自定义的通讯协议
通过DMA可以高效的实现通讯接口之间的如下操作:
·各通讯端口之间的数据搬移
·通讯端口Buffer到PSoC3数字和模拟模块之间的传输
·通讯端口Buffer自动存放到内存之中
·内存到通讯口的数据搬移
·数字、模拟模块到通讯口的数据搬移
四、 总结
Cypress PSoC3处理器集成了多种可编程的数字模拟资源以及布线资源,以及一些专用的通讯和控制设备,可以极大地方便各种嵌入式系统的应用。PSoC Creator作为PSoC3的开发工具,能够提供基于原理图,功能组件的设计模式。使得用户能够用简单有效的方式来完成复杂的可编程系统设计。
通讯作为嵌入式系统的重要部分,在传统设计中需要占用一定的CPU时间来处理。本文介绍的基于PSoC3的新设计方式,采用DMA高效的处理嵌入式系统通讯而不占用CPU处理时间,同时还可以基于PSoC3的灵活配置实现多路DMA并行操作以降低系统硬件成本。这种新方式能够极大地提高基于PSoC3系统的吞吐能力和系统运行效率。
- DSP 与PC 机串行通讯的设计(01-13)
- DSP串行通信在减摇水舱试验台架控制系统中的应用(10-10)
- 基于DSP/ARM双核系统的通信接口设计(01-28)
- 基于DSP/ARM的双核系统的通信接口设计(04-03)
- 基于FPGA与DSP的高速通信接口设计与实现(05-20)
- 利用FPGA实现外设通信接口之:利用FPGA实现USB 2.0通信接口(06-05)