1 / 51

DSP McBSP 设计

专题. DSP McBSP 设计. 制作: DSP 技术中心 主讲:李玉柏 WWW.DSPSOLUTION.COM. PART ONE : McBSP 基础. McBSP 基本特性 McBSP 概述 串口的基本配置 串口的 接收控制 串口的 发送控制 采样率发生器及采样率发生控制器寄存器 多通道工作模式. 一、 McBSP 基本特性 McBSP 设计是基于 TMS320C2X 、 C20X 、 C5X 、 C54X 的标准串口上扩展的, McBSP 提供:  全速双工通信  双缓存发送和三缓存接收数据寄存器,以支持连续传送

rehan
Download Presentation

DSP McBSP 设计

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 专题 DSP McBSP设计 制作:DSP技术中心 主讲:李玉柏 WWW.DSPSOLUTION.COM

  2. PART ONE:McBSP基础 • McBSP基本特性 • McBSP概述 • 串口的基本配置 • 串口的接收控制 • 串口的发送控制 • 采样率发生器及采样率发生控制器寄存器 • 多通道工作模式

  3. 一、McBSP基本特性 • McBSP设计是基于TMS320C2X、C20X、C5X、C54X的标准串口上扩展的,McBSP提供:  全速双工通信  双缓存发送和三缓存接收数据寄存器,以支持连续传送  收和发使用独立的帧和时钟  直接与多媒体数字信号编解码器的工业标准接口,以及有模拟接口和与串行ADC/DAC的接口  外部变速时钟发生器,内部可编程时钟发生器

  4. McBSP还有下列功能 •  直接与下列格式接口 • _ T1/E1 framers • _ MVIP switching compatible and ST-BUS compliant devices including: • _ MVIP framers • _ H.100 framers • _ SCSA framers • _ IOM-2 compliant devices • _ AC97 compliant devices • _ IIS compliant devices • _ SPI_ devices  多通道收发,通道数达128  字宽可选: 8, 12, 16, 20, 24, and 32 bits  U-Law and A-Law 压缩与扩展 8位传输时可选先传: LSB or MSB  帧信号与时钟信号极性可编程

  5. 二、McBSP概述

  6. McBSP与外设进行数据传输是通过(DX)脚来发送,(RX)脚来接收,通信的时钟与帧信号是由CLKX, CLKR, FSX, and FSR脚来控制。  DSP的CPU或DMA从数据接收寄存器(DRR[1,2])读取接收数据,发送时向数据发送寄存器(DXR[1,2])写数据。  数据写入(DXR[1,2])后通过传输移位寄存器(XSR[1,2]) 移位输出到DX上,同样,从DR上接收的数据移位存储到接收移位寄存器(RSR[1,2]) 并拷贝到接收缓存寄存器(RBR[1,2]) ,然后,再由(RBR[1,2])拷贝到DRR[1,2],DRR[1,2]就可以由CPU或DMA来读出。多级寄存器允许在通信时内部和外部数据同时传输。  C54XX对McBSP的控制由16位的控制寄存器实现。

  7. 三、串口的基本配置 1、McBSP的中断和事件

  8. 2、McBSP控制寄存器

  9. 3、串口控制寄存器1的详细说明(SPCR1) SPCR1设置McBSP串口的数字环回模式、 接收符号扩展和校验模式、Clock Stop模式、DX是否允许、A-bis 模式、接收中断模式等,并给出接收同步错误、接收移位寄存器(RSR[1,2])空、接收准备好等状态。此外可以进行接收复位。

  10. 4、串口控制寄存器2的详细说明(SPCR2) SPCR2设置McBSP自由运行模式、SOFT 模式、发送中断模式,并给出发送同步错误、发送移位寄存器(XSR[1,2])空、发送准备好等状态。此外可以进行发送复位、采样率发生器复位、帧同步发生电路复位。

  11. 5、引脚控制寄存器的详细说明(PCR) PCR设置McBSP传输帧同步模式、接收帧同步模式、发送时钟模式、接收时钟模式、发送帧同步信号的极性、接收帧同步信号的极性、发送时钟极性、接收时钟极性,并给出CLKS、DX、DR脚的状态。此外PCR还定义发送和接收部分在复位时相应引脚是否配置为通用 I/O。

  12. 四、串口的接收控制 1、接收控制寄存器1(RCR1)说明 RCR1设置McBSP接收时第一相(FIRST PHASE)的接收帧长度(从1个字到128个字、接收字长度(8、12、16、20、24、32bits)。

  13. 2、接收控制寄存器2(RCR2)说明 RCR2设置McBSP接收时是否允许第二相(RPHASE=1)。如果允许,设置McBSP接收时第二相的接收帧长度(从1个字到128个字、接收字长度(8、12、16、20、24、32bits)。此外, RCR2设置McBSP接收时的接收压缩模式、接收同步帧忽略模式、接收数据延迟。

  14. 五、串口的发送控制 1、发送控制寄存器1(XCR1)说明 XCR1设置McBSP发送时第一相(FIRST PHASE)的发送帧长度(从1个字到128个字、发送字长度(8、12、16、20、24、32bits)。

  15. 2、发送控制寄存器2(XCR2)说明 XCR2设置McBSP发送时是否允许第二相(XPHASE=1)。如果允许,设置McBSP时第二相的发送帧长度(从1个字到128个字、发送字长度(8、12、16、20、24、32bits)。此外, XCR2设置McBSP发送时的发送压缩模式、发送同步帧忽略模式、发送数据延迟。

  16. 六、采样率发生器及采样率发生控制器寄存器

  17. 1、采样率发生器概述  采样率发生器由三级分频电路产生数据移位时钟 (CLKG)和帧信号(FSG)。这两个McBSP内部信号CLKG 和FSG被用作收发时钟(CLKR/X)和帧时钟(FSR/X) (如果选择内部采样率发生器)。  采样率发生器的输入时钟可以是CPU始终或外部时 钟(CLKS),受(SRGR2)的CLKSM位控制。  采样率发生器的三级分频分别是: 数据位时钟分频(CLKGDV) 帧周期分频(FPER) 帧脉冲宽度分频(FWID)  采样率发生器的工作模式由采样率发生器控制寄 存器控制。

  18. 2、采样率发生器控制寄存器(SRGR1/2) 采样率发生器寄存器1(SRGR1)设置帧正脉冲宽度(必须小于WDLEN指出的字的长度)和数据位时钟分频( CLKG与输入CLK频率之比,约定值为1)。 采样率发生器寄存器2(SRGR2)设置采样率发生器时钟同步模式、CLKS的极性、采样率发生器输入时钟选择、帧周期分频。

  19. 七、McBSP的多通道工作 1、多通道工作模式的控制寄存器 1)、多通道控制寄存器1(MCR1) MCR1设置McBSP在多通道工作模式时的接收PART-B的块结构、接收PART-A的块结构、当前可接收块、接收多通道选择。

  20. 2)、多通道控制寄存器2(MCR2)说明 MCR2设置McBSP在多通道工作模式时的发送PART-A块结构、发送PART-B块结构、当前发送块、发送多通道选择。 3)、接收、发送通道使能寄存器说明(图中各位:置1-使能,置0-不允许)

  21. 2、多通道工作模式设置 • 设置(R/X)PHASE = 0选择单相工作模式 • 设置FRLEN1 = ???选择帧长(字数,也是多通道工作模式下的通道数,最多可达128) • 设置字长WDLEN1 = ???(每通道传输多少bits) • 如果是单通道连续工作,置RMCM=0X和MCM=0 • 如果是多通道工作,设置RP(A/B)BLK,XP(A/B)BLK,RCER(A/B)、XCER(A/B),并置RMCM=1、XMCM位非0

  22. PART TWO:McBSP编程 • McBSP的复位操作与初始化 • McBSP的中断与DMA事件 • McBSP的帧与时钟编程 • McBSP的接收流程 • McBSP的发送流程 • a-law/u-law数据压扩 • 编程举例

  23. 一、McBSP串口的复位 • 1、McBSP串口的复位方式 • 设备复位(/RS=0):即整个串口复位,此时,/RRST和/XRST为零,DR、CLKR/X、FSR/X为输入信号,DX为输出信号,输出高祖态。同时/GRST也为零,CLKG=CPU时钟/2,不产生FSG信号。/RS放开后,/RRST、/XRST、/GRST、/FRST仍为零,此时,McBSP配置寄存器赋值和变成,复位进入McBSP复位。 • McBSP复位:McBSP串口发送器和接收器可以分别复位(/RRST=0、/XRST=0、/FRST=0)。不论是接收还是发送的复位,相应部分都将停止串口操作,而相应引脚当作I/O脚使用,由PCR的XIOEN、RIOEN决定。

  24. 特殊说明 • 采样率发生器复位:设备复位或置/GRST为零可以复位采样率发生器。采样率发生器复位时,CLKG等于CPU-CLK/2,而FSG驱动为低。当/RS放开(延迟)/GRST放开后,CLKG按SRGR1编程产生;如果,/FRST也放开,则经过FPER个CLKG,FSG驱动为高。 • 2、下面给出串口初始化的处理过程 • 1) Set XRST = RRST = FRST = 0 in SPCR[1,2]. If coming out of device re-set, this step is not required. • 2) Program only the McBSP configuration registers (and not the data regis-ters) listed in Table-1 McBSP Registers, as required when the serial port is in reset state (XRST = RRST = FRST = 0).

  25. 3)Wait for two bit clocks. This is to ensure proper • synchronization internally. • 4) Set up data acquisition as required such as writing to DXR. • 5) Set XRST = RRST= 1 to enable the serial port. Note that the value written to SPCR[1,2] at this time should have only the reset bits changed to 1, and the remaining bit-fields should have the same value as in step 2 above. • 6) Set FRST = 1, if internally generated frame sync is required. • 7) Wait two bit clocks for the receiver and transmitter to become active. • Alternatively, on either write (steps 1 and 5), the transmitter and receiver may be placed in or taken out of reset individually by modifying the desired bit. Note that the necessary duration of the active-low period of XRST or RRST is at least two bit-clocks (CLKR/CLKX) wide.

  26. 二、McBSP串口产生的中断与事件 • 1、串口与CPU之中断 • (R/X)INTM=00:每传送一个字,(R/X)RDY 响应一次,就产生响应串口中断一次。(此时,同时产生DMA事件) • (R/X)INTM=01:在多通道模式中,一个帧内出现16通道的块(PARTITION)边界就产生中断。此时CPU可以检测是哪个PARTITION。 • (R/X)INTM=10:检测到帧同步脉冲就产生(R/X)INT。 • (R/X)INTM = 11:当出现帧同步错误时产生中断。

  27. 2、McBSP的准备好之状态 • 接收准备好(RRDY、REVT、RINT):串口复位时RRDY清为0,当RBR[1,2]内容拷贝到DRR[1,2]时,RRDY有效,该数据可以被CPU or DMA读,一旦CPU or DMA读走数据RRDY又清为0。RRDY直接驱动McBSP接收事件给DMA (REVT)。同时如果SPCR1中的RINTM = 00,RRDY将驱动McBSP的接收中断(RINT)给CPU。 • 发送准备好(XRDY、XEVT、XINT):XRDY = 1说明DXR[1,2]的数据已拷贝到XSR[1,2]中,DXR[1,2]可以装入新的数据。串口复位放开时(/XRST从0到1),XRDY从0变到1已说明DXR[1,2]可以装入新数据,一旦有新数据装入,XRDYJIU 就清为0。XRDY直接驱动发送同步事件到DMA (XEVT or XEVTA),同时,如果SPCR2中XINTM = 00,XRDY 还直接驱动发送中断(XINT) 给CPU。

  28. 三、帧与时钟配置 • McBSP串口的帧和时钟配置包含下列关键项的设置: • 设置FSR, FSX, CLKX, and CLKR的极性 • 选择单相或双相帧结构 • 对每一相,设置字数(每帧该相有多少字) • 对每一相,设置字宽(字的比特位数) • 设置连续帧同步工作模式,还是除第一个帧脉冲后忽略帧同步脉冲工作模式 • 设置相对帧脉冲,第一位传输数据的延迟为0、1、2位(CLKG) • 对串口接收,设置左或右效验和符号扩展或0填充模式 • 如果采用内部采样率发生器产生帧脉冲信号,设置帧信号脉宽、周期、CLKG时钟分频等

  29. 四、u-LAW/A-LAW压缩操作 McBSP通过(R/X)COMPAND的控制支持是否进行压缩传输,如果支持压缩传输,(R/X)WDLEN[1,2]必须设置位00,而传送给CPU或DMA 的数据至少是16位

  30. 利用串口的压缩功能可以实现数据的内部压缩,而不占用很多DSP的资源。其方法有二:利用串口的压缩功能可以实现数据的内部压缩,而不占用很多DSP的资源。其方法有二: • 1)当串口接收和发送都复位时,串口的压缩和扩展逻辑电路是内部连接的,即DXR1与DRR1通过压缩/扩展电路相连,如下图4所示。此时设置XCOMPAND或RCOMPAND之一就可以实现数据的压缩和解压。向DXR1发送的数据经过4个CPU周期后,就可以从DRR1上读出。该方法的优点是速度快,缺点是没有帧同步以便CPU或DMA进行流程控制。 • 2)采用数据环回模式,设置XCOMPAND或RCOMPAND之一也可以实现数据的压缩和解压。此时CPU的中断或DMA的事件可以进行传输的流程控制,并且,传输速度可调。

  31. 五、编程举例 下面给出一个McBSP串口实验程序  这是一个串口自测试程序,除检验串口的功能外, 该程序还利用串口完成数据的内部压缩,通过设置 XCOMPAND或RCOMPAND之一可以实现内部数据A-law 或u-law的压缩和解压  程序的流程是:  修改中断向量表  初始化McBSP串口 设置BLD=1,即支持数字回环方式 设置RCOMPAND=10,即采用u-law扩展 ar3指向发送数据缓冲区 ar4指向接收数据缓冲区,初始化将接收数据缓冲 区全部清为0

  32.  编写接收与发送中断程序 关于A-law/u-law数据压缩与扩展说明 1、u-law数据压缩公式(其中对于美国和日本的标准,u取255) 2、 u-law数据压缩曲线

  33. 3、 u-law数据压缩编码 4、 u-law数据扩展公式

  34. 5、 u-law数据扩展解码

  35. 6、A-law数据压缩公式( A-law是CCITT推荐的标准,欧洲采用A=87.6) 7、A-law数据压缩曲线

  36. 8、 A-law数据压缩编码 9、 A-law数据扩展公式

  37. 10、 A-law数据扩展解码

  38. 11、 u-law或A-law数据编码特殊说明: 符号位:1--代表正,0--代表负(与计算机对数据的 正负号表示相反) PCM编码时,正负数的编码是以绝对值进行二进制编码 TI的DSP在进行u-law或A-law数据压缩后先异或0x55, 在进行传输

  39. 详细程序及说明 ;; This is McBSP test program. The work-mode of McBSP Series: ;; BLD=1 (Digital loop back mode enabled) ;; RCOMPAND=10 or 11 (u-law/A-law Expand: 8bits -> 16bits) ;; (R/X)INTM=00 (generate an interrupt every word traxsmitted) ;; ar3 -> Transmit data buffer(buffer_1) ;; ar4 -> receive data buffer(buffer_2) ;; The program is applicable for VC5409 ;; Designed by liyubai ;; Modifing 1.0 Time 2001,6,28 .title "Test McBSP Program" .mmregs .global mainstart .global interrupt_vector drr11 .set 41h ;McBSP1 receive data register dxr11 .set 43h ;McBSP1 transmit data register spsa1 .set 48h ;McBSP1 sub_bank address register

  40. spcd1 .set 49h ;McBSP1 sub_bank data register .bss stack_memory,500 .bss buffer_1,1000 .bss buffer_2,1000 interrupt_vector: ;interrupt vector table .text rs b mainstart nop nop nmi b __ret .word 0,0 sint17 b __ret .word 0,0 sint18 b __ret .word 0,0 sint19 b __ret .word 0,0 sint20 b __ret .word 0,0

  41. sint21 b __ret .word 0,0 sint22 b __ret .word 0,0 sint23 b __ret .word 0,0 sint24 b __ret .word 0,0 sint25 b __ret .word 0,0 sint26 b __ret .word 0,0 sint27 b __ret .word 0,0 sint28 b __ret .word 0,0 sint29 b __ret .word 0,0 sint30 b __ret .word 0,0 int0 b __ret .word 0,0 int1 b __ret .word 0,0 int2 b __ret .word 0,0 tint b __ret .word 0,0 brint0 b __ret .word 0,0 bxint0 b __ret .word 0,0 dmac0 b __ret .word 0,0 dmac1 b __ret .word 0,0 int3 b __ret .word 0,0 hpint b __ret .word 0,0

  42. brint1 b McBSP1_receive_int nop nop bxint1 b McBSP1_transmit_int nop nop q28 .word 0,0,0,0 q29 .word 0,0,0,0 q30 .word 0,0,0,0 q31 .word 0,0,0,0 mainstart: ssbx intm ;close all interrupt stm #0ffffh,ifr ;cleare all interrupt_flag stm #0,clkmd ;switch to DIV mode ts: ldm clkmd,a and #01b,a bc ts,aneq stm #5207h,clkmd ;clkout=clkin X 6 rpt #100 ;waits enough clocks

  43. nop stm #stack_memory,sp ;sp => stack_memory stm #0ff80h,pmst ;vector table start: 0xff80 stm #3610h,swwsr ;I/O wait: 3clks, data_0x8000- ;0xffff wait:3clks ;program_0x8000-0xffff ;wait:2clks call Clear_McBSP1_receive_buf call McBSP1_initializing rpt #0ffh nop stm #buffer_1,ar3 stm #buffer_2,ar4 ld #799,b ;pre_put numberS of McBSP interrupt stm #1800h,imr ;enable RINT1,XINT1 rsbx intm ;enable all int wait_McBSP_int: nop

  44. nop bc __ret,beq nop nop b wait_McBSP_int nop __ret: nop rete McBSP1_initializing: stm #0,spsa1 ;choose SPCR11 stm #08000h,spcd1 ;1000000000000000 => SPCR11. ;DLB(15)=1(Digital loop back moden enabled) ;RJUST(14-13)=00;CLKSTP(12-11)=00 ;RES(10-8)=000,DXENA(7)=0,ABIS(6)=0 ;RINTM(5-4)=00,RSYNCERR(3)=0,RFULL(2)=0 ;RRDY(1)=0,RRST(0)=0 stm #1,spsa1 ;choose spcr21

  45. stm #0h,spcd1 ;0000000000000000 => SPCR21. ;RES(15-10)=000000,FREE(9)=0,SOFT(8)=0 ;FRST(7)=0,GRST(6)=0,XINT(5-4)=00,XSYNCERR(3)=0 ;XFULL(2)=0,XRDY(1)=0,XRST(0)=0 stm #2,spsa1 ;choose RCR11 stm #0,spcd1 ;0000000000000000 => RCR11. ;RES(15)=0,RFRLEN1(14-8)=000 0000 ;RWDLEN1(7-5)=000,RES(4-0)=0 0000 stm #3,spsa1 ;choose RCR21 stm #10H,spcd1 ;0000000000010000 => RCR21. ;RPHASE(15)=0,RFRLEN2(14-8)=000 0000 ;RWDLEN2(7-5)=000,RCOMPAND(4-3)=10(u-law EXPAND) ;RFIG(2)=0,RDATDLY(1-0)=00 stm #4,spsa1 ;choose XCR11 stm #0,spcd1 ;0000000000000000 => XCR11. ;RES(15)=0,XFRLEN1(14-8)=000 0000 ;XWDLEN1(7-5)=000,RES(4-0)=0 0000 stm #5,spsa1 ;choose XCR21 stm #0,spcd1 ;0000000000000000 => XCR21. ;XPHASE(15)=0,XFRLEN2(14-8)=000 0000

  46. ;XWDLEN2(7-5)=000,XCOMPAND(4-3)=00(No compand) ;XFIG(2)=0,XDATDLY(1-0)=00 stm #6,spsa1 ;choose SRGR11 stm #10fh,spcd1 ;0000000100001111 => SRGR11 ;FWID(15-8)=0000 0001,CLKGDV(7-0)=0000 1111 stm #7,spsa1 ;choose SRGR21 stm #0300FH,spcd1 ;0011000000010011 => SRGR21 ;GSYNC(15)=0,CLKSP(14)=0,CLKSM(13)=1(use CPU_clk) ;FSGM(12)=1(Internal SRG generate Transmit FS) ;FPER(11-0)=0000 0000 1111 stm #0eh,spsa1 ;choose PCR1 stm #0c01h,spcd1 ;0000101000000001 => PCR1 ;RES(15-14)=00,XIOEN(13)=0,RIOEN(12)=0 ;FSXM(11)=1,FSRM(10)=0,CLKXM(9)=1,CLKRM(8)=0 ;RES(7)=0,CLKS_STAT(6)=0,DX_STAT(5)=0,RX_STAT(4)=0 ;FSXP(3)=0,FSRP(2)=0,CLKXP(1)=0,CLKRP(0)=1 rpt #0ffh nop stm #055h,dxr11 ;first data writed to dxr11

  47. stm #0,spsa1 ;choose SPCR11 stm #08001h,spcd1 ;1000000000000001 => SPCR11. ;McBSP1 receive enabled. stm #1,spsa1 ;choose spcr21 stm #0c1h,spcd1 ;0000000011000001 => SPCR21. ;McBSP1 sample rate generator,transmit enabled. nop nop rete Clear_McBSP1_receive_buf: stm #buffer_2,ar4 rpt #999 st #0,*ar4+ nop nop rete

  48. McBSP1_receive_int: sub #1,b ldm drr11,a stl a,*ar4+ nop rete McBSP1_transmit_int: ld *ar3+,a xor #055h,a stlm a,dxr11 nop rete .end

More Related