Download presentation
Presentation is loading. Please wait.
1
专题 DSP McBSP设计 制作:DSP技术中心 主讲:李玉柏
2
PART ONE: McBSP基础 McBSP基本特性 McBSP概述 串口的基本配置 串口的接收控制 串口的发送控制
采样率发生器及采样率发生控制器寄存器 多通道工作模式
3
一、McBSP基本特性 McBSP设计是基于TMS320C2X、C20X、C5X、C54X的标准串口上扩展的,McBSP提供:
全速双工通信 双缓存发送和三缓存接收数据寄存器,以支持连续传送 收和发使用独立的帧和时钟 直接与多媒体数字信号编解码器的工业标准接口,以及有模拟接口和与串行ADC/DAC的接口 外部变速时钟发生器,内部可编程时钟发生器
4
McBSP还有下列功能 直接与下列格式接口 多通道收发,通道数达128
_ 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控制寄存器
10
3、串口控制寄存器1的详细说明(SPCR1) SPCR1设置McBSP串口的数字环回模式、 接收符号扩展和校验模式、Clock Stop模式、DX是否允许、A-bis 模式、接收中断模式等,并给出接收同步错误、接收移位寄存器(RSR[1,2])空、接收准备好等状态。此外可以进行接收复位。
11
4、串口控制寄存器2的详细说明(SPCR2) SPCR2设置McBSP自由运行模式、SOFT 模式、发送中断模式,并给出发送同步错误、发送移位寄存器(XSR[1,2])空、发送准备好等状态。此外可以进行发送复位、采样率发生器复位、帧同步发生电路复位。
12
5、引脚控制寄存器的详细说明(PCR) PCR设置McBSP传输帧同步模式、接收帧同步模式、发送时钟模式、接收时钟模式、发送帧同步信号的极性、接收帧同步信号的极性、发送时钟极性、接收时钟极性,并给出CLKS、DX、DR脚的状态。此外PCR还定义发送和接收部分在复位时相应引脚是否配置为通用 I/O。
13
四、串口的接收控制 1、接收控制寄存器1(RCR1)说明
RCR1设置McBSP接收时第一相(FIRST PHASE)的接收帧长度(从1个字到128个字、接收字长度(8、12、16、20、24、32bits)。
14
2、接收控制寄存器2(RCR2)说明 RCR2设置McBSP接收时是否允许第二相(RPHASE=1)。如果允许,设置McBSP接收时第二相的接收帧长度(从1个字到128个字、接收字长度(8、12、16、20、24、32bits)。此外, RCR2设置McBSP接收时的接收压缩模式、接收同步帧忽略模式、接收数据延迟。
15
五、串口的发送控制 1、发送控制寄存器1(XCR1)说明
XCR1设置McBSP发送时第一相(FIRST PHASE)的发送帧长度(从1个字到128个字、发送字长度(8、12、16、20、24、32bits)。
16
2、发送控制寄存器2(XCR2)说明 XCR2设置McBSP发送时是否允许第二相(XPHASE=1)。如果允许,设置McBSP时第二相的发送帧长度(从1个字到128个字、发送字长度(8、12、16、20、24、32bits)。此外, XCR2设置McBSP发送时的发送压缩模式、发送同步帧忽略模式、发送数据延迟。
17
六、采样率发生器及采样率发生控制器寄存器
18
1、采样率发生器概述 采样率发生器由三级分频电路产生数据移位时钟 (CLKG)和帧信号(FSG)。这两个McBSP内部信号CLKG
和FSG被用作收发时钟(CLKR/X)和帧时钟(FSR/X) (如果选择内部采样率发生器)。 采样率发生器的输入时钟可以是CPU始终或外部时 钟(CLKS),受(SRGR2)的CLKSM位控制。 采样率发生器的三级分频分别是: 数据位时钟分频(CLKGDV) 帧周期分频(FPER) 帧脉冲宽度分频(FWID) 采样率发生器的工作模式由采样率发生器控制寄 存器控制。
19
2、采样率发生器控制寄存器(SRGR1/2) 采样率发生器寄存器1(SRGR1)设置帧正脉冲宽度(必须小于WDLEN指出的字的长度)和数据位时钟分频( CLKG与输入CLK频率之比,约定值为1)。 采样率发生器寄存器2(SRGR2)设置采样率发生器时钟同步模式、CLKS的极性、采样率发生器输入时钟选择、帧周期分频。
20
七、McBSP的多通道工作 1、多通道工作模式的控制寄存器 1)、多通道控制寄存器1(MCR1)
MCR1设置McBSP在多通道工作模式时的接收PART-B的块结构、接收PART-A的块结构、当前可接收块、接收多通道选择。
21
3)、接收、发送通道使能寄存器说明(图中各位:置1-使能,置0-不允许)
2)、多通道控制寄存器2(MCR2)说明 MCR2设置McBSP在多通道工作模式时的发送PART-A块结构、发送PART-B块结构、当前发送块、发送多通道选择。 3)、接收、发送通道使能寄存器说明(图中各位:置1-使能,置0-不允许)
23
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
24
PART TWO: McBSP编程 McBSP的复位操作与初始化 McBSP的中断与DMA事件 McBSP的帧与时钟编程
a-law/u-law数据压扩 编程举例
25
一、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决定。
26
特殊说明 采样率发生器复位:设备复位或置/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).
27
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.
28
二、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:当出现帧同步错误时产生中断。
29
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。
30
三、帧与时钟配置 McBSP串口的帧和时钟配置包含下列关键项的设置: 设置FSR, FSX, CLKX, and CLKR的极性
选择单相或双相帧结构 对每一相,设置字数(每帧该相有多少字) 对每一相,设置字宽(字的比特位数) 设置连续帧同步工作模式,还是除第一个帧脉冲后忽略帧同步脉冲工作模式 设置相对帧脉冲,第一位传输数据的延迟为0、1、2位(CLKG) 对串口接收,设置左或右效验和符号扩展或0填充模式 如果采用内部采样率发生器产生帧脉冲信号,设置帧信号脉宽、周期、CLKG时钟分频等
31
四、u-LAW/A-LAW压缩操作 McBSP通过(R/X)COMPAND的控制支持是否进行压缩传输,如果支持压缩传输,(R/X)WDLEN[1,2]必须设置位00,而传送给CPU或DMA 的数据至少是16位
32
利用串口的压缩功能可以实现数据的内部压缩,而不占用很多DSP的资源。其方法有二:
1)当串口接收和发送都复位时,串口的压缩和扩展逻辑电路是内部连接的,即DXR1与DRR1通过压缩/扩展电路相连,如下图4所示。此时设置XCOMPAND或RCOMPAND之一就可以实现数据的压缩和解压。向DXR1发送的数据经过4个CPU周期后,就可以从DRR1上读出。该方法的优点是速度快,缺点是没有帧同步以便CPU或DMA进行流程控制。 2)采用数据环回模式,设置XCOMPAND或RCOMPAND之一也可以实现数据的压缩和解压。此时CPU的中断或DMA的事件可以进行传输的流程控制,并且,传输速度可调。
33
五、编程举例 下面给出一个McBSP串口实验程序 这是一个串口自测试程序,除检验串口的功能外,
该程序还利用串口完成数据的内部压缩,通过设置 XCOMPAND或RCOMPAND之一可以实现内部数据A-law 或u-law的压缩和解压 程序的流程是: 修改中断向量表 初始化McBSP串口 设置BLD=1,即支持数字回环方式 设置RCOMPAND=10,即采用u-law扩展 ar3指向发送数据缓冲区 ar4指向接收数据缓冲区,初始化将接收数据缓冲 区全部清为0
34
关于A-law/u-law数据压缩与扩展说明
编写接收与发送中断程序 关于A-law/u-law数据压缩与扩展说明 1、u-law数据压缩公式(其中对于美国和日本的标准,u取255) 2、 u-law数据压缩曲线
35
3、 u-law数据压缩编码 4、 u-law数据扩展公式
36
5、 u-law数据扩展解码
37
6、A-law数据压缩公式( A-law是CCITT推荐的标准,欧洲采用A=87.6)
38
8、 A-law数据压缩编码 9、 A-law数据扩展公式
39
10、 A-law数据扩展解码
40
11、 u-law或A-law数据编码特殊说明:
符号位:1--代表正,0--代表负(与计算机对数据的 正负号表示相反) PCM编码时,正负数的编码是以绝对值进行二进制编码 TI的DSP在进行u-law或A-law数据压缩后先异或0x55, 在进行传输
41
详细程序及说明 ;; 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 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
42
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 nmi b __ret .word 0,0 sint17 b __ret sint18 b __ret sint19 b __ret sint20 b __ret
43
sint21 b __ret .word 0,0 sint22 b __ret sint23 b __ret sint24 b __ret sint25 b __ret sint26 b __ret sint27 b __ret sint28 b __ret sint29 b __ret sint30 b __ret int0 b __ret .word 0,0 int1 b __ret int2 b __ret tint b __ret brint0 b __ret bxint0 b __ret dmac b __ret dmac b __ret int b __ret hpint b __ret
44
bc ts,aneq brint1 b McBSP1_receive_int nop
bxint1 b McBSP1_transmit_int q word 0,0,0,0 q word 0,0,0,0 q word 0,0,0,0 q 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 # ;waits enough clocks
45
nop stm #stack_memory,sp ;sp => stack_memory stm #0ff80h,pmst ;vector table start: 0xff80 stm #3610h,swwsr ;I/O wait: 3clks, data_0x ;0xffff wait:3clks ;program_0x8000-0xffff ;wait:2clks call Clear_McBSP1_receive_buf call McBSP1_initializing rpt #0ffh 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:
46
nop bc __ret,beq b wait_McBSP_int __ret: nop rete McBSP1_initializing: stm #0,spsa1 ;choose SPCR11 stm #08000h,spcd1 ; => 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
47
stm #0h,spcd1 ; => 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 ; => RCR11. ;RES(15)=0,RFRLEN1(14-8)= ;RWDLEN1(7-5)=000,RES(4-0)=0 0000 stm #3,spsa1 ;choose RCR21 stm #10H,spcd1 ; => RCR21. ;RPHASE(15)=0,RFRLEN2(14-8)= ;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 ; => XCR11. ;RES(15)=0,XFRLEN1(14-8)= ;XWDLEN1(7-5)=000,RES(4-0)=0 0000 stm #5,spsa1 ;choose XCR21 stm #0,spcd1 ; => XCR21. ;XPHASE(15)=0,XFRLEN2(14-8)=
48
;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 ; => SRGR11 ;FWID(15-8)= ,CLKGDV(7-0)= stm #7,spsa1 ;choose SRGR21 stm #0300FH,spcd1 ; => SRGR21 ;GSYNC(15)=0,CLKSP(14)=0,CLKSM(13)=1(use CPU_clk) ;FSGM(12)=1(Internal SRG generate Transmit FS) ;FPER(11-0)= stm #0eh,spsa1 ;choose PCR1 stm #0c01h,spcd1 ; => 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
49
stm #0,spsa1 ;choose SPCR11 stm #08001h,spcd1 ; => SPCR11. ;McBSP1 receive enabled. stm #1,spsa1 ;choose spcr21 stm #0c1h,spcd1 ; => SPCR21. ;McBSP1 sample rate generator,transmit enabled. nop rete Clear_McBSP1_receive_buf: stm #buffer_2,ar4 rpt #999 st #0,*ar4+
50
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 .end
51
谢谢大家! 联系电话:(028)
Similar presentations