kaiyun官方注册
您所在的位置: 首页> 嵌入式技术> 业界动态> 基于TMS320VC5402多信道缓冲串口的DMA方式数据传输

基于TMS320VC5402多信道缓冲串口的DMA方式数据传输

2009-04-27
作者:刘东华 尹 军 梁光明

摘 要:介绍TMS320VC5402的多信道缓冲串口(McBSP)的基础上,分析了其控制寄存器的配置和工作过程,并给出了在直接存储器访问(DMA)方式下利用McBSP进行通信的方法及程序代码。

关键词:McBSP 子地址寄存器 DMA

  TMS320VC5402是TI公司C54x系列定点DSP芯片中的新产品。它集中了此系列早期产品的优点,并提供了许多新的功能,开发和使用更加方便。C5402具有灵活的指令系统和操作性能,它可选择助记符指令或算术指令作为编程指令,同时支持汇编语言和C语言的单独或混合编程。C5402采用改进的Harvard处理结构,指令流水线操作,计算和处理速度很高,系统单指令周期可达到10ns。在片内提供16K的RAM用作程序和数据存储,其最大可扩展寻址空间为1M字节。C5402提供的McBSP串口和DMA数据传送方式极大地方便了它在通信领域的应用和开发。C5402由于其高性能价格比而成为当前语音和静态图象处理的主流产品。本文主要介绍C5402的McBSP原理、配置以及DMA方式下如何实现利用McBSP的通信。

1 C5402 McBSP串口的特点

  C5402提供了两个多信道缓冲串口:McBSP0和McBSP1。McBSP基于54x系列DSP标准串口,它提供了以下功能:

  ·全双工同步或异步通信功能;

  ·实现连续的发送和接收数据流的功能;

  ·与工业标准编解码器、模拟接口芯片(AICs)以及其他串行连接A/D和D/A器件的直接接口;

  ·外部时钟输入或内部可编程时钟两种时钟控制方式;

  ·独立可编程的发送和接收帧同步

  此外,C5402的McBSP还具有以下功能:

  ·多信道数据传输,最多可扩展至128个信道;

  ·传输数据宽度可选为8、12、16、20、24或32位;

  ·μ律和A律压缩扩展,用于数据压缩;

  ·帧同步和数据时钟优先级可编程,实现不同信道数据流帧同步和传输优先级控制。

2 McBSP的工作过程

  C5402的McBSP的接口信号包括:接收数据DR、发送数据DX、发送时钟CLKX、接收时钟CLKR、接收帧同步FSR、发送帧同步FSX和外部输入时钟CLKS。其内部结构如图1所示。其中内部数据发送和接收控制器负责数据的发送和接收移位及缓存;时钟和帧同步生成与控制模块实现McBSP数据传输波特率设置以及同步传输时同步信号的产生和判断;C5402提供了多信道传输模式,通过多信道选择模块进行配置;CPU和DMA中断模块用于触发CPU或DMA控制器的中断响应。

  McBSP通过DX和DR实现DSP与外部设备的通信和数据交换。其中DX完成数据的发送,DR用来接收数据。同时通过CLKX、CLKR、FSR和FSX实现时钟和帧同步控制。DSP通过McBSP的16位控制寄存器接入内部外设总线。

  通过McBSP发送数据时,CPU或DMA控制器将被发送数据写入数据发送寄存器DXR[1,2]。若传输转移寄存器XSR[1,2]中没有数据,则DXR[1,2]中的值移向XSR[1,2],再由XSR[1,2]将数据移到DX上发送;若XSR[1,2]不为空,则等待将XSR[1,2]中的数据全部移到DX脚发送之后才将DXR[1,2]中的值复制到XSR[1,2],然后移位到DX。

  McBSP的接收缓冲寄存器包括三个:接收移位寄存器RSR[1,2]、接收缓冲寄存器RBR[1,2]和接收数据寄存器DRR[1,2]。到达DR接收脚的数据移存到RSR[1,2],一旦接收到一个字(可以是8、12、16、24或32位),检查RBR[1,2]是否为空,若为空则将RSR[1,2]中的数据复制到RBR[1,2],在CPU或DMA控制器没有对DRR[1,2]进行操作时可以将RBR[1,2]中的数据复制到DRR[1,2],CPU或DMA控制器通过读取DRR[1,2]中的数据来实现串口数据接入。

3 子地址控制寄存器及其配置

  McBSP通过一系列存储器映射控制寄存器来进行配置和操作。它采用子地址寻址方案。McBSP通过复接器将一组子地址寄存器复接到存储器映射的一个位置上。复接器由子块地址寄存器SPSAx控制。子块数据寄存器SPSDx用于指定子地址寄存器中数据的读写。其内部连接方式如图2所示。这种方法的好处是可以将多个寄存器映射到一个较小的存储空间。

为访问某个指定的子地址寄存器,首先要将相应的子地址写入SPSAx,SPSAx驱动复接器,使其与SPSDx相联,接入相应子地址寄存器所在的实际物理存储位置。当向SPSDx写入数据时,数据送入前面子块地址寄存器中所指定的内嵌数据寄存器;当从SPSDx读取数据时,也接入前面子块地址寄存器中所指定的内嵌数据寄存器。

  以配置McBSP0的控制寄存器(SPCR1_0和SPCR2_0)为例,代码如下:

  SPSA_0 .set 38h ;定义子块地址寄存器映射位置

  SPSD_0 .set 39h ;定义子块数据寄存器映射位置

  SPCR1_0  .set 00h ;定义SPCR1_0的映射子地址

  SPCR2_0  .set 01h ;定义SPCR2_0的映射子地址

  STM SPGR1_0 ,SPSA_0       ;将SPCR1_0的地址写入SPSA_0

STM #K_SPGR1_0_CONFIG,SPSD_0   ;将配置值写入SPSD_0

STM SPGR2_0 ,SPSA_0 ;将SPCR2_0的地址写入SPSA_0

STM    #K_SPGR2_0_CONFIG ,SPSD_0 ;将配置值写入SPSD_0

  在将SPCR1_0和SPCR2_0的子地址写入SPSA_0之后再将数据写入SPSD_0,内部复接器就自动将配置数K_SPGR1_0_CONFIG和K_SPGR2_0_CONFIG分别写入子地址寄存器SPGR1_0和SPGR2_0,完成寄存器配置。

4 实现DMA方式的数据传输

  C5402内部提供了DMA控制器,可以方便地实现McBSP的DMA方式的数据传输(发送或接收)。C5402的DMA有6个可编程的DMA信道,可独立实现读写等不同内容的操作。其控制寄存器包括信道优先级和使能控制寄存器(DMPREC)、子块地址寄存器(DMSA)和子块访问寄存器(DMSDN和DMSDI),每个信道的控制寄存器则采用子地址的形式,包括源地址寄存器(DMSRCx)、目的地址寄存器(DMDSTx)、记数寄存器(DMCTRx)、同步选择和帧记数寄存器(DMSFCx)以及传输模式控制寄存器(DMMCRx)。利用DMA方式通过McBSP进行数据传输时,首先要由McBSP产生一个事件报告DMA控制器,从而触发DMA模式进行数据传输,DMA将设定的数据传输完毕后,触发DMA中断,CPU响应DMA中断而进入中断服务程序。

  McBSP所能产生的事件包括DMA接收同步事件(REVT)和DMA发送同步事件(XEVT)。通过DMSFCx寄存器来选择。以一个DMA方式下的McBSP发送数据为例,其代码如下:

  ;McBSP初始化

stm SPCR1_0,SPSA_0 ;SPCR1_0初始化

stm #K_SPCR1_0_RESET,SPSD_0

stm SPCR2_0,SPSA_0 ;SPCR2_0初始化

stm #K_SPCR2_0_RESET,SPSD_0

stm PCR_0,SPSA_0

stm #K_PCR_0_RESET,SPSD_0   ;管脚控制寄存器PCR_0初始化

rsbx INTM ;中断使能

stm #K_IMR_RESET,IMR    ;中断屏蔽寄存器IMR初始化

stm RCR1_0,SPSA_0    ;接收控制寄存器RCR1_0初始化

stm #K_RCR1_0_RESET,SPSD_0

stm RCR2_0,SPSA_0    ;接收控制寄存器RCR2_0初始化

stm #K_RCR2_0_RESET,SPSD_0

stm XCR1_0,SPSA_0    ;发送控制寄存器XCR1_0初始化

stm #K_XCR1_0_RESET,SPSD_0

stm XCR2_0,SPSA_0    ;发送控制寄存器XCR2_0初始化

stm #K_XCR2_0_RESET,SPSD_0

stm SRGR1_0,SPSA_0 ;抽样率生成器SRGR1_0初始化

stm #K_SRGR1_0_RESET,SPSD_0

stm SRGR2_0,SPSA_0 ;抽样率生成器SRGR2_0初始化

stm #K_SRGR2_0_RESET,SPSD_0

nop

nop

  ;McBSP0使能

stm SPCR1_0,SPSA_0

stm #K_SPCR1_0_ENABLE,SPSD_0 ;接收使能

stm SPCR2_0,SPSA_0

stm #K_SPCR2_0_ENABLE,SPSD_0 ;发送使能

nop

nop

  ; 利用DMA信道0作为数据传输通道

stm DMSRC0,DMSA   ;设置数据源发送地址

stm #K_SOURCE-ADDR,DMSDN

stm DMDST0,DMSA     ;设置数据目的地址

stm #K_DST_ADDR,DMSDN

stm DMCTR0,DMSA   ;设置发送数据块的缓冲大小

stm #K_BUFFER_SIZE,DMSDN

stm DMSFC0,DMSA   ;设置同步事件和帧缓冲寄存器

stm #K_SFC_VALUE,DMSDN

stm DMMCR0,DMSA    ;设置传输模式寄存器

stm #K_MCR_VALUE,DMSDN

stm DMIDX0,DMSA   ;设置计数器累加值

stm #K_IDX_VALUE,DMSDN

stm #K_PREC_VALUE,DMPREC  ;设置信道优先级和信道使能

  DMA以后台形式进行数据传输,不需要CPU进行控制,可通过控制寄存器的设置使得在数据传输完成或发生错误时产生DMA中断,CPU响应进入中断服务程序。

参考文献

1 TMS320C54xDSP CPU And Peripherals. TI Reference Set Vol 1, April,1999:9-1~9-64

2 TMS320C54xDSP Applications Guide. TI Reference Set Vol 4, October,1996:3-1~3-43

3 TMS320C54xDSP Mnemonic Instruction Set. TI Reference Set,Vol 2, June,1998:4~176

4 TMS320C54xDSP Enhanced Peripherals.TI Reference Set Vol 5, June,1999:2-1~2-99

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306116;邮箱:aet@chinaaet.com。
Baidu
map