基于PSoC3的多通信接口时的DMA设计

发布者:legend9最新更新时间:2011-07-08 关键字:通信接口  DMA 手机看文章 扫描二维码
随时随地手机看文章
     随着上层应用软件的日趋多样化,现在的便携式电子产品对嵌入式芯片的功能需求越来越高,单一或仅可以局部定制的传统芯片已经不能满足需要。因此数字系统和模拟系统都可以根据需要灵活定制成为芯片设计、开发的发展方向。Cypress为满足业界需要继PSoC1之后开发了PSoC3和PSoC5全新可编程模拟和数字嵌入式芯片。其中PSoC3使用基于单循环流水线的高性能8051内核(67MHz/33MIPS),PSoC5则是基于32位ARM Cortex-M3的内核(80MHz/100MIPS);两者都内置闪存、SRAM,支持片外存储器访问,在8、16和32bit应用中同时实现了高集成度和高灵活性。本文重点讲述了PSoC3在多通讯接口设计中的应用,以及如何使用多DMA技术提高通讯的速度和效率。

  一、 Cypress PSoC3芯片介绍

  Cypress PSoC3使用基于单循环流水线的高性能8051内核 (67MHz/33MIPS),提供业界广泛采用的5.5V至0.5V电压范围和低至200nA的休眠电流,可以满足极低功耗的应用场合。PSoC3的高性能模拟子系统和数字系统都拥有可编程通路,允许将任何模拟或数字信号(包括可编程时钟)分配到任何通用I/O引脚,这为使用者提供了真正的“系统级”可编程能力。

  Cypress PSoC3的芯片编号是CY8C38xx,该系列芯片依据功能模块的不同包含多种芯片。表1是CY8C38xx系列的选型指南,除了表中列出的特性外,每个CY8C38xx芯片还包含:1.024V±0.1%的精密片上电压参考源,带PLL的1~66MHz±1%的精密可编程时钟源,有ECC(错误校正码)功能的Flash,DMA(直接存储器访问),4KB可调试跟踪的RAM,JTAG/SWD编程/调试接口,支持片外存储器访问等。

  Cypress PSoC3 内部采用CPLD的结构实现了完全的数字可编程电路。图1显示了CY8C38xx系列内部的可编程逻辑图。从图1中可以看出,外设和逻辑部分可以彼此互联,也可以连接到任何引脚。数字可编程逻辑包括了以下部分。

   UDB(Universal Digital Blocks)形成了可编程数字系统的核心功能,由PLD和Data path组成,可以创建各种通用外设和定制化功能。

  UDB Array由多个UDB通过矩阵和可编程互联组成,支持UDB和DSI(Digital System Interconnect)之间很灵活的扩展。

  DSI是数字信号的集中互联,包括UDB,固定功能外设,I/O,中断,DMA和其它部分的数字信号。

  强大的模拟资源以及灵活的模拟布线资源也是PSoC3的一大亮点之一。图2是CY8C38系列芯片的片内模拟资源图,通过这些可编程的模拟电路,可以构成标准的模拟信号处理模块。并且这些模拟资源可以通过内部的模拟互连子系统进行连接,提供高度的模拟设计自由度以及IP资源的保护。模拟子系统有以下系统构成。

  ·有模拟全局和局部总线,模拟开关构成的高度可配置的结构。

  ·高精度的Delta-Sigma ADC.

  ·支持8位的电压或者电流DAC.

  ·四路比较器并且可以有选择性的互联到LUT中.

  ·多达四个的SC/CT模块可以构成OPAMP等模拟电路

  ·多达四个内部的OPAMP,可以连接到GPIO作为大电流输出的缓冲器。

  ·CapSense子系统支持电容触摸的检测。

  ·内部高精度参考电压源。

 CY8C38系列芯片的片内可编程数字系统图

图1 CY8C38系列芯片的片内可编程数字系统图

表1 PSoC3 选型指南

PSoC3 选型指南
 

PSoC3 内部模拟资源图
 

图2 PSoC3 内部模拟资源图

  除了模拟和数字可编程逻辑外,CY8C38 系列芯片都包含了一个专用于数字滤波的硬件加速器DFB(Digital Filter Block),它内部的专用乘法器和加速器可以在一个系统时钟内计算一个24 位数与24 位数的乘法。使用DFB 可以方便的实现FIR 和IIR 数字滤波器,而且几乎不占用MCU 的资源。在实现滤波器之外,DFB 还可以作为PSoC3 的算法加速器,可以很方便快捷的实现各种数字算法,而且不需要占用PSoC3 的CPU 资源。

  图3 是DFB 的模块框图,典型应用是将某个片内数据源(例如ADC 或某个DMA)的数据连接到DFB,经DFB 处理后将结果输出到另一个片内数据源(例如DAC 或另一个DMA)。数据的移入和移出可以设定由特定的DMA 控制,也可以由MCU 直接移动。

 DFB 结构图

图3 DFB 结构图

  除了可编程的资源之外,PSoC3内部还提供了特定功能的模块。这些模块可以不占用模拟,数字可编程以及MCU资源,完成相应的功能。这些模块包括:

  ·支持高达1MBPS的Can总线控制器,兼容ISO-11898-1标准。

  ·全速USB2.0控制器,支持8个端点和DMA数据传输控制。

  ·支持50k/100k/400k/1M BPS的I2C主/从总线控制器,兼容Philips ‘The I2C Specification’ Version 2.1。

  ·16 Bit专用的定时,计数和PWM等常用的嵌入式系统模块。

  二、 Cypress PSoC®Creator™ 集成开发环境

  Cypress PSoC Creator 开发环境是Cypress 为PSoC3 / PSoC5可编程片上系统提供的高效,易用的继承开发环境。

  该独特的新型设计软件使得工程师能够按照自己的思维方式进行设计。使用基于电路图的方式完成对可编程模拟,数字以及布线资源的设计。该软件还提供了特有的嵌入式系统的组件库来应用其内部的资源,通过在组件库中选择组件并使用基于电路图的方式可以使得整个开发过程就像搭积木一样,简单高效的实现工程师的设计。该软件工具通过电路综合可以自动的把用户的设计转化成对可编程电路的配置,使得用户即使不了解芯片的细节也可以完成复杂的电路设计。使用PSoC Creator进行设计的时候,客户是根据应用需求急性设计,而不是目标器件的限制。重新构建设计就像修改程序一样,不需要复杂的电路板级修改。

  PSoC Creator将一个最新的软件开发IDE与一个*性的图形设计编辑器结合在一起,构成一个独特的强有力的软硬件同步设计环境。它提供内容丰富的、存有几十个预先配置过的模拟和数字外设库,可以方便地拖放进电路图设计界面并组成强大的系统。该工具还可以自动为所有片上信号分配管脚,如有需要,甚至还能将I/O分配到最佳管脚。每个外设元件的参数均经过仔细的配置,以保证应用效果能最好地满足设计者的要求,且没有资源浪费。构建过程会为每一个元件产生一个一致的、容易记住的API系列,这样,软件开发者即可控制硬件,而无需为基本执行指令操心。 定制的设计及其相关的API还可以方便地存储在库中,用于将来的项目或在组织内部分享。

  PSoC Creator内部包含了全功能免费的编译器,其独特的综合布线工具能够自动综合客户的设计输入,并生成相应的API。PSoC3的工程采用了工业界常用的Keil CA51编译器,而GNU GCC-ARM编译器也包含其中,能够针对PSoC5的设计进行编译。在综合,编译等完成之后,生成兼容Intel Hex格式的配置文件对芯片进行配置。[page]

  PSoC Creator目前的版本是: PSoC Creator 1.0 Production. 该软件运行界面如下图4。

PSoC Creator 运行界面

图4 PSoC Creator 运行界面

  PSoC Creator提供给用户的设计入口如下:

  ● 原理图编辑器:该编辑器是创建设计的主要工具。支持对设计进行原理图编辑。

  ● 文本编辑器:该工具允许用户编辑C,汇编,Verilog, C#等语言代码。

  ● 设计资源编辑器:该工具用于配置整个设计的参数,包括电源,编译开关,调试开关,FLASH保护信息,以及管脚分配等。

  ● 图标编辑器:允许用户创建自己的模块图标

  ● 其他工具:

  - 原理图宏编辑器:允许用户对原理图设置不同的宏以完成不同的功能。

  - 原理图模板编辑器:允许用户对原理图的模板进行编辑

  - 图标形状编辑器:允许用户在创建模块以及原理图中使用自定义的形状。

  PSoC Creator在用户通过设计入口完成设计之后,对设计进行一系列的处理并完成最终的结果输出。该工具的对工程的构建过程如图5所示。

PSoC Creator工程构建过程

图5 PSoC Creator工程构建过程

  从图5中可以看出,工程构建过程包括以下步骤:

  ·通过设计输入接口完成设计

  ·综合器完成对电路图的综合,并进行布局,布线,映射等工作

  ·代码生成器生成对应电路的API控制接口

  ·构建器准备设计源文件,读取构建数据库,获得构建配置,库文件等信息

  ·编译器完成编译,链接器对生成的文件进行链接

  ·输出配置Hex文件。

  三、 Cypress PSoC3应用于多通讯接口的DMA设计

  DMA是PSoC3中用于处理快速数据搬运的模块。DMA的控制器可以在不需要CPU干预的情况下处理数据的传输。通过DMA处理数据传输可以有效地降低CPU的负担,同时也能够提高数据传输的时间。PSoC3内置的DMA可以完成四种基本的数据传输:

  ·内存到内存

  ·内存到外设

  ·外设到内存

  ·外设到外设

  PSoC3中,采用PHUB来连接各个内部设备。DMA和CPU都需要使用PHUB来完成数据传输。PHUB上的两个主设备分别是DMA和CPU,而从设备是内存,外设以及控制和配置寄存器。PSoC3支持多个DMA的通道,DMA主控制器对通道的请求按照优先级进行仲裁。单个DMA的通道可以传输高达64KB的数据。

  PSoC3的DMA控制器支持如下特性:

  ·支持24个DMA通道

  ·8优先级判决

  ·128个事务描述符

  8/16/32 位的数据传输

  ·完全可配置的源和目标地址

  ·兼容不同数端

  ·在完成数据传输之后能够生成中断

  ·DMA 向导能够加速基于DMA 的开发

  ·DMA 事务可以有可编程数字逻辑或者CPU 触发

  ·支持多个DMA 通道和描述符的级联以完成复杂的功能。

  3.1 在PSoC Creator 中使用DMA

  PSoC Creator 做为PSoC3 和PSoC5 开发的设计工具,其内部集成了DMA 模块来配置DMA 和生成相关的控制代码,同时提供的DMA 向导实现了图形化操作界面。

  DMA 模块位于组件窗口的System 目录下,如图所示。

DMA 模块位置

图6 DMA 模块位置

 

  通过拖曳到原理图编辑器可以放置DMA 模块,每次拖曳的DMA 会使用一个通道。DMA 模块的输入输出地址等需要在代码中进行配置,而通过原理图配置的都是控制管脚和控制信息。在原理图上DMA 模块的表现如下图7 所示。

DMA 模块

图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所示。

DMA 向导1-配置

图8 DMA 向导1-配置

  该界面主要配置目标和源地址的范围。支持地址段在SRAM,FLASH,EEPROM中。其次是配置Burst的字节数以及该DMA中的事务描述符的数量和连接关系。在完成该步骤之后,会进入下个配置界面,主要配置其他的详细参数。如图9 所示。

DMA详细配置

图9 DMA详细配置

  在图9中输入事务描述符号的参数。其中最为常用而且重要的参数包括:源地址,目标地址,地址递增模式,以及事务描述符的连接模式。在完成该步骤之后,点击下一步,就会生成相应的配置代码,如图10所示。

DMA 生成代码

图10 DMA 生成代码

  复制上述代码到程序的初始化模块中,并对需要的地方进行细微的修改,就可以完成DMA的初始化。在程序运行时,DMA会根据请求自动把数据从源地址搬运到目标地址。

  3.2 DMA应用于多通讯端口实例

  DMA的数据传输可以极大提高基于PSoC3系统的吞吐率。以一个系统为例,该系统通过SPI接收别的系统的输入,并通过UART传送到主机系统中。图11给出了基于传统MCU和基于PSoC3 DMA的两种程序流程图进行比较(不考虑两种传送速率不匹配的情况)。

(a) 传统MCU设计 (b) 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系统的吞吐能力和系统运行效率。

关键字:通信接口  DMA 引用地址:基于PSoC3的多通信接口时的DMA设计

上一篇:PSoC3内部模拟布线和管脚选择
下一篇:LIFO或FIFO:测量数据中心以太网时延方法探讨

推荐阅读最新更新时间:2024-05-02 21:28

STM32笔记---DMA(USART)的演示
 这里有个小小的例子,来演示DMA模块与系统程序并行工作。   用串口以低波特率发送一个10K的数据,花费近10s时间,此时按照以往方法,CPU要不断等待数据发送、送数据;或者送数据、进中断、送数据,处理起来比较消耗时间。   使用了DMA功能以后,用户程序中只需配置好DMA,开启传输后,再也不需要操心,10K数据完成后会有标志位或中断产生,期间可以做任何想做的事,非常方便。   这个是相应的代码例子,基于STM32F103VBT6 /****************************************************************************** * 本文件实现串口发送功能(通过重构
[单片机]
STM32八路ADC采用DMA方式
STM32八路ADC采用DMA方式 采集的数据如下 程序打包地址 有DMA方式和非DMA 方式 https://download.csdn.net/download/qq_36958104/11352188 #include adc.h #include sys.h #define ADC1_DR_Address ((u32)0x4001244C) __IO u16 ADC_ConvertedValue; /*配置采样通道端口 使能GPIO时钟 设置ADC采样PA0端口信号*/ void ADC1_GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitS
[单片机]
浅谈 STM32 硬件I2C的使用 (中断方式 无DMA 无最高优先级)
引子 STM32的硬件I2C很多人都对它望而却步。因为很多电工都说,STM32 硬件 I2C有BUG、不稳定、死机等等……最后都使用GPIO模拟I2C。 的确,模拟I2C好用。但是在我看来在一个72M的Cortex-M3的MCU上这样做非常不妥。一般来说I2C是一种慢速总线,就算工作在400kHz的快速模式上,I2C传送每个字节仍需要至少23us——还没有计算地址、起始信号和结束信号的发送。如果使用GPIO模拟的I2C,这23us的CPU时间都在空转中浪费了,而这23us已经可以做不少的事情了,所以在STM32上I2C还是使用硬件为佳——虽然它多多少少有点缺陷。 这篇文章不是给完全没有接触过STM32 硬件I2C的新手看的,看这篇
[单片机]
浅谈 STM32 硬件I2C的使用 (中断方式 无<font color='red'>DMA</font> 无最高优先级)
什么是DMA? STM32如何配置DMA
一、DMA简介 1、DMA简介 DMA(Direct Memory Access:直接内存存取)是一种可以大大减轻CPU工作量的数据转移方式。 CPU有转移数据、计算、控制程序转移等很多功能,但其实转移数据(尤其是转移大量数据)是 可以不需要CPU参与 。比如希望外设A的数据拷贝到外设B,只要给两种外设提供一条数据通路,再加上一些控制转移的部件就可以完成数据的拷贝。 DMA就是基于以上设想设计的,它的作用就是解决大量数据转移过度消耗CPU资源的问题。有了DMA使CPU更专注于更加实用的操作--计算、控制等。 2、DMA的工作原理 DMA的作用就是实现数据的直接传输,而去掉了传统数据传输需要CPU寄存器参与的环节 ,主要涉及
[单片机]
解决串口开启DMA接受却只能接收到第一个字节的问题
设备: 单片机:STM32G070 MDK:V5.25 问题描述: 发现串口接受不到数据,只能接受到第一个字节。 MX_USART4_UART_Init(); HAL_Delay(200); HAL_UART_Receive_DMA(&huart4, UART_DMA_RXBuf, UART_RX_BUF_SIZE); 原因分析: 在单片机执行完串口初始化之后,并没有立马开启DMA接收,在这个时间差之内如果有数据发过来就会导致这个问题 解决方案: 在完成串口初始化之后,立马开启DMA接收,中间不能有较大的空挡时间差即可。 MX_USART4_UART_Init(); // HAL_Delay(200);
[单片机]
STM32F404的ADC之DMA的单通道
这里是接前面的文章 PA3 ADC1的通道3 下面是完整的程序 __IO uint16_t AdcValue =0; /**************************************************************************************** *函 数 名:bsp_InitAdc *函数功能:ADC1初始化 *形 参:无 *返 回 值:无 *****************************************************************************************/ void bsp_InitAdcDMA(void);
[单片机]
STM32F404的ADC之<font color='red'>DMA</font>的单通道
利用89C51单片机实现红外线通信接口电路控制
  在通信系统中,常利用非电信号来传递控制信号和数据,以实现遥控或遥测的功能红外通信,具有控制简单、实施方便,传输可靠性高的特点,是一种较为常用的通信方式。红外通信利用950 nm近红外波段的红外线作为传递信息的媒体,发送端采用脉时调制方式,将二进制数字信号调制成某一频率的脉冲序列,并驱动红外发射管以光脉冲的形式发送,接收端将收到的光脉冲转换成电信号。再经过放大、滤波处理后送给解调电路,还原为二进制数字信号后输出。   1 系统的总体构成   红外通信系统采用红外光传输及无限工作机制,其组成结构主要包括:红外发射器,通信信道,红外接收器三大部分组成。   (1)完成信号的电光变换并向空间发射红外脉冲   红外发射器的关键是红
[单片机]
利用89C51单片机实现红外线<font color='red'>通信接口</font>电路控制
HAL库无法实现UART的DMA传输真是这样吗?
有人使用STM32H7芯片做些事情,发现基于ST公司的HAL库开发UART1的DMA收发时可以轻松实现,而当使用ST的LL库组织代码时,却没法实现UART的DMA传输。 感觉上就是使用HAL库编写代码功能正常而基于LL库则不行。真是这样吗? 使用STM32CubeMx进行图形化配置,并生成基于HAL库的初始代码,要实现UART收发功能的DMA传输的话,除了安排好的收发缓冲内存外,再就只需调用下面两个HAL库的API函数即可进行功能验证。 从功能实现上讲,使用HAL库及相应API还是很方便、很简单的。每个API函数就像个黑盒子,对于里面的内容,如果你不点进去阅读是不会知晓的。 不过,建议尽可能地多点进去瞧瞧,那里往往别有洞天。
[单片机]
HAL库无法实现UART的<font color='red'>DMA</font>传输真是这样吗?
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved