基于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