分享

第2节 多通道缓存串行口(McBSP)及其应用

 曦若至宝 2013-10-22
13.2.1  McBSP的功能特点
        TMS320VC5410是TI生产的第二代低功耗TMS320C5000系列定点数字信号处理器,它提供了三个高速、全双工、多通道缓存串行口(McBSP),每个串行口可以支持128通道,速度达每秒100兆位。McBSP是在标准串行接口的基础之上对功能进行扩展,因此它具有与标准串行接口相同的基本功能:
        1)    全双工通讯;
        2)    拥有两级缓冲发送和三级缓冲接收数据寄存器,允许连续数据流传输;
        3)    为数据发送和接收提供独立的帧同步脉冲和时钟信号;
        4)    能够与工业标准的解码器、模拟接口芯片(AICs)和其它串行A/D和D/A设备直接连接;
        5)    支持外部移位时钟或内部、频率可编程移位时钟
        此外,McBSP还具有以下特殊功能:
        1)    可以与IOM-2兼容设备、SPI兼容设备、AC97兼容设备等设备直接连接;
        2)    支持多通道发送和接收,每个串行口最多支持128通道;
        3)    串行字长度可选,包括8、12、16、20、24和32位;
        4)    支持μ-Law和A-Law数据压缩扩展;
        5)    进行8位数据传输时,可以选择LSB或MSB为起始位;
        6)    帧同步脉冲和时钟信号的极性可编程;
        7)    内部时钟和帧同步脉冲的产生可编程,具有相当大的灵活性。

13.2.2  McBSP寄存器的访问
        TMS320VC5410包含三组多通道缓存串行口,每组多通道缓存串行口有23个寄存器与之相关,除RBR[1,2]、RSR[1,2]、XSR[1,2]之外,其中15个寄存器是可寻址寄存器。由于数据页0的存储空间限制,有些寄存器必须通过子地址寻址方式来访问。SPSA_x是子地址寄存器,欲访问指定的寄存器,只要把相应的子地址写入SPSA_x就可以了。表13-3列出了McBSP的子地址寄存器。

表13-3  McBSP子地址寄存器


        假如要对McBSP1的发送控制寄存器2(XCR2_1)进行设置。首先,将子地址0x0005写入子地址寄存器(SPSA_1),与此同时,存储单元0x0049就映射为发送控制寄存器2(XCR2_1)。然后,对存储单元0x0049的读写操作,就相当于对发送控制寄存器2(XCR2_1)进行操作。
        例:设置McBSP1的发送控制寄存器2(XCR2_1)
                XCR2_1    .set    05h ; 发送控制寄存器2的子地址
                SPSA_1    .set    48h ; 串行口1的子地址寄存器地址
                REG_1    .set    49h ; 存储单元0x0049,在此被映射为发送控制寄存器2
                                                    ; 将发送控制寄存器2的子地址写入子地址寄存器(SPSA_1)
                STM     #XCR2_1,SPSA_1    ; 将控制字0041h写入存储单元0x0049
                STM     #0041h, REG_1

13.2.3  McBSP的SPI接口设计
        McBSP的时钟停止模式与SPI协议兼容。当McBSP处于时钟停止模式时,发送器和接收器是内部同步的,因此可以将McBSP作为SPI主设备或从设备。当设置McBSP为主设备时,发送端输出信号(BDX)就作为SPI协议的MOSI信号,接收端输入信号(BDR)就作为SPI协议的MISO信号。发送帧同步脉冲信号(BFSX)作为从设备片选信号( ),而发送时钟信号(BCLKX)就与SPI协议的串行时钟信号(SCK)相对应。由于接收时钟信号(BCLKR)和接收帧同步脉冲信号(BFSR)与发送端的相应部分(BCLKX和BFSX)在内部相互连接,因此这些信号不用于时钟停止模式。McBSP设置为主设备时,SPI协议连接如图13-6所示。


图13-6  McBSP设置为主设备

13.2.4  McBSP接口举例

1.高精度数模转换器MAX541
        MAX541是16位串行输入、电压输出数模转换器,+5V单电源供电。DAC输出非缓冲,因此只有0.3mA的低供电电流和1LSB的低漂移误差。DAC输出范围为0V至 。MAX541采用3线串行接口,兼容于SPI?/QSPI?/MICROWIRE?等串行通讯协议。MAX541最高可以获得500K(采样点/秒)的通过率,基本上满足大多数应用的要求。MAX541采用8引脚DIP或SO封装,MAX541各引脚描述如表13-4。

表13-4  MAX541引脚说明


2. McBSP与MAX541的接口电路
        图13-7所示为TMS320VC5410与MAX541的接口电路。


图13-7  TMS320VC5410与MAX541的接口电路

        为使MAX541获得高分辨率和高精度,可以由MAX873提供高精度的+2.5V低阻抗基准电压源。为了消除高频和低频干扰,必须在REF引脚与模拟地之间接入退耦电容。由于MAX541的数字输入DIN与TTL/CMOS逻辑电平兼容,因此可以与TMS320VC5410的串行输出BDX直接连接。此外,必须严格隔离模拟地AGND和数字地DGND,最后在MAX541的AGND引脚上将模拟地和数字地连接在一起,构成星形的地线系统。在MAX541的输出端接入电压跟随型运算放大器MAX495。表13-5是数字输入代码与模拟输出电压之间的对应关系。

表13-5  MAX541单极性接口


        DSP的发送帧同步脉冲信号(BFSX)作为MAX541的片选信号(),而发送时钟信号(BCLKX)作为MAX541的串行时钟输入。MAX541的三线接口电路时序图,如图13-8所示。


图13-8  MAX541的接口电路时序图

        如上图所示,在片选信号 由高电平转变为低电平的同时,串行数据按照从最高有效位到最低有效位的顺序,在串行时钟的每个上升沿逐位移入片内的输入寄存器。
3.软件设计
        下面通过产生一个锯齿波的例子来说明TMS320VC5410与MAX541之间的软件设计。
        当McBSP作为SPI通讯的主设备,由它为从设备提供时钟信号,并控制数据的传输过程。CLKX引脚上的时钟信号必须在数据包传输器件使能,当没有数据包传输时,时钟信号根据所采用的极性保持高电平或者低电平。通常,通过McBSP的采样率发生器产生10MHz时钟信号,由BCLKX引脚输出,作为MAX541的串行时钟输入信号。McBSP利用BFSX引脚为MAX541提供片选信号,因此必须正确设置帧脉冲发生器,使之在每个数据包传输期间产生帧同步脉冲,即在数据包传输的第一位转变为有效状态(在本例中为低电平有效,取决于MAX541的片选信号 ) ,然后维持有效状态直到数据包发送完毕。此外,根据SPI传输协议,必须正确设置数据发送延迟时间(XDATDLY=01b),由图13-8可知,在帧同步脉冲有效之后,大约延迟了一个时钟周期才进行串行数据的发送。根据图13-8所示的时序图,为McBSP选择一种合适的时钟方案,即设置McBSP的时钟停止模式。在本例中采用时钟停止模式3(CLKSTP=10b、CLKXP=1),其时钟方案如图13-9所示。


图13-9  时钟停止模式3(CLKSTP=10b、CLKXP=1)

        表13-6列出了一些与SPI设置相关的寄存器位。
表13-6  与SPI设置相关的一些寄存器位


        程序首次初始化TMS320VC5410,使数据页指针(DP)为0,并且禁止中断。由于TMS320VC5410外接10Hz的时钟频率发生器,通过锁相环电路倍频至100MHz。接着对初始化 TMS320VC5410的多通道缓存串行口McBSP。最后,响应XRDY中断发送数据。
        .width     80
        .length  100
        .title  "transmit.asm"
        .mmregs
        .def START
        .def BSPR0
        .def BSPX0
        .include  "periphral.asm"
        .text       
START: 
        ; 初始化DSP
        STM #00E0h,PMST    ; IPTR=000000001b,MP/MC=1,OVLY=1,DROM=0
LD #0,DP
        LD #0,ARP
        SSBX INTM            ; 禁止所有可屏蔽中断
        STM #0FFFFh,IFR    ; 清除所有中断标志
        STM #0020h,IMR        ; 允许BSPX0 中断
            STM #0010h,TCR    ; 关闭DSP计时器,以便降低功耗
         ; 锁相环(PLL)倍频*10->CLKOUT:100MHz
        STM #1001000110000111b,CLKMD
Tststatus:   
LDM CLKMD,A
        AND #01h,A
        BC Tststatus,AEQ
        STM #1001000110000111b,CLKMD       
        ; 初始化McBSP
        STM SPCR1_1,SPSA_1   
        STM #1000h,REG_1        ; CLKSTP=10(选择SPI 时钟停止模式3)
        STM SPCR2_1,SPSA_1   
STM #0000h,REG_1        ; 置McBSP于复位态时,以便对控制寄存器进行设置
           
        STM PCR_1,SPSA_1   
        STM #0A0Fh,REG_1      ; CLKX->CLKR, FSX->FSR, DX->DR
; FSXM=1(输出),CLKXM=1(输出),FSXP=1(低电平有效)
        ; CLKXP=1 (在CLKX的下降沿发送数据)
           
        STM RCR1_1,SPSA_1   
        STM #0040h,REG_1        ; 每帧1个字,每个字16位
        STM RCR2_1,SPSA_1
        STM #0041h,REG_1        ; 单帧, RFIG=0, RDATDLY=01(1位数据延迟)
        STM XCR1_1,SPSA_1   
        STM #0040h,REG_1        ; 每帧1个字,每个字16位
        STM XCR2_1,SPSA_1   
        STM #0041h,REG_1        ; 单帧, XFIG=0, XDATDLY=01(1位数据延迟)
       
        STM SRGR1_1,SPSA_1   
        STM #0009h,REG_1        ;CLKGDV=9,CLKG=(CLKOUT)/(1+CLKGDV)=10MHz
       
        STM SRGR2_1,SPSA_1   
        STM #2313h,REG_1        ; GSYNC=0,CLKSP=0,CLKSM=1, FSGM=0
        RPT #2                ; 等待2个CLKSRG周期(CLKSRG=100MHz)
        NOP
               
        STM SPCR2_1,SPSA_1   
        STM #0040h,REG_1        ; 启动McBSP0采样率发生器,/GRST=1
        RPT #20                ; 等待2个CLKG周期(CLKG=10MHz)
        NOP

        STM SPCR2_1,SPSA_1
        STM #0041h,REG_1        ; 启动McBSP0发送端, /XRST=1
        STM SPCR2_1,SPSA_1
        STM #00C1h,REG_1    ; 启动帧同步脉冲, /FRST=1       
        RPT #80                ; 等待 8 CLKG
        NOP

        STM #08000h,AR1
        RSBX INTM            ; 打开可屏蔽中断
        MVMD AR1,DXR1_1        ; 向DXR送数
WAIT:    IDLE 1
        B WAIT       
BSPX0:       
        STM #0h,IFR
        MAR *AR1+
        MVDM AR1,DXR1_1
        RETE
        NOP
        NOP  
        .end




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多