This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

C5509A 如何使用mcbsp2

Other Parts Discussed in Thread: TMS320VC5509A

请问我要将mcbsp0端口的正确程序变成使用mcbsp2端口,只需将 hMcbsp = MCBSP_open(MCBSP_PORT0,MCBSP_OPEN_RESET);中的0变成2就行了吗?还是mcbsp2端口得初始化配置和mcbsp0端口不一样?谢谢大家

  • MCBSP_PORT0改成MCBSP_PORT2就可以了,具体mcbsp2各个寄存器的值配置看你的应用。

  •  我就是将MCBSP_PORT0改成MCBSP_PORT2的 可是我使用 MCBSP_write16(hMcbsp,55)函数发送数据在MCBSP2端口的S23(数据发送口)没有波形数,而我改回成MCBSP_PORT0以后,在MCBSP0端口确有数据,怎么回事呢?改到MCBSP_PORT1也是一样对应的数据发送口没有波形数据。

  • 看一下EBSR.54有没有设成00,使能mcbsp2.

    3.5.1 External Bus Selection Register (EBSR)

    http://www.ti.com/lit/ds/symlink/tms320vc5509a.pdf

     

  • MCBSP_SPCR1_RMK(
    MCBSP_SPCR1_DLB_OFF, /* DLB = 0,禁止自闭环方式 */
    MCBSP_SPCR1_RJUST_LZF, /* RJUST = 2 */
    MCBSP_SPCR1_CLKSTP_DISABLE, /* CLKSTP = 0 */
    MCBSP_SPCR1_DXENA_ON, /* DXENA = 1 */
    0, /* ABIS = 0 */
    MCBSP_SPCR1_RINTM_RRDY, /* RINTM = 0 */
    0, /* RSYNCER = 0 */
    MCBSP_SPCR1_RRST_DISABLE /* RRST = 0 */
    ),
    MCBSP_SPCR2_RMK(
    MCBSP_SPCR2_FREE_NO, /* FREE = 0 */
    MCBSP_SPCR2_SOFT_NO, /* SOFT = 0 */
    MCBSP_SPCR2_FRST_FSG, /* FRST = 0 */
    MCBSP_SPCR2_GRST_CLKG, /* GRST = 0 */
    MCBSP_SPCR2_XINTM_XRDY, /* XINTM = 0 */
    0, /* XSYNCER = N/A */
    MCBSP_SPCR2_XRST_DISABLE /* XRST = 0 */
    ),
    /*单数据相,接受数据长度为16位,每相2个数据*/
    MCBSP_RCR1_RMK(
    MCBSP_RCR1_RFRLEN1_OF(1), /* RFRLEN1 = 1 */
    MCBSP_RCR1_RWDLEN1_16BIT /* RWDLEN1 = 2 */
    ),
    MCBSP_RCR2_RMK(
    MCBSP_RCR2_RPHASE_SINGLE, /* RPHASE = 0 */
    MCBSP_RCR2_RFRLEN2_OF(0), /* RFRLEN2 = 0 */
    MCBSP_RCR2_RWDLEN2_8BIT, /* RWDLEN2 = 0 */
    MCBSP_RCR2_RCOMPAND_MSB, /* RCOMPAND = 0 */
    MCBSP_RCR2_RFIG_YES, /* RFIG = 0 */
    MCBSP_RCR2_RDATDLY_1BIT /* RDATDLY = 1 */
    ),
    MCBSP_XCR1_RMK(
    MCBSP_XCR1_XFRLEN1_OF(1), /* XFRLEN1 = 1 */
    MCBSP_XCR1_XWDLEN1_16BIT /* XWDLEN1 = 2 */

    ),
    MCBSP_XCR2_RMK(
    MCBSP_XCR2_XPHASE_SINGLE, /* XPHASE = 0 */
    MCBSP_XCR2_XFRLEN2_OF(0), /* XFRLEN2 = 0 */
    MCBSP_XCR2_XWDLEN2_8BIT, /* XWDLEN2 = 0 */
    MCBSP_XCR2_XCOMPAND_MSB, /* XCOMPAND = 0 */
    MCBSP_XCR2_XFIG_YES, /* XFIG = 0 */
    MCBSP_XCR2_XDATDLY_1BIT /* XDATDLY = 1 */
    ),
    MCBSP_SRGR1_DEFAULT,
    MCBSP_SRGR2_DEFAULT,
    MCBSP_MCR1_DEFAULT,
    MCBSP_MCR2_DEFAULT,
    MCBSP_PCR_RMK(
    MCBSP_PCR_IDLEEN_RESET, /* IDLEEN = 0 */
    MCBSP_PCR_XIOEN_SP, /* XIOEN = 0 */
    MCBSP_PCR_RIOEN_SP, /* RIOEN = 0 */
    MCBSP_PCR_FSXM_EXTERNAL, /* FSXM = 0 */
    MCBSP_PCR_FSRM_EXTERNAL, /* FSRM = 0 */
    0, /* DXSTAT = N/A */
    MCBSP_PCR_CLKXM_INPUT, /* CLKXM = 0 */
    MCBSP_PCR_CLKRM_INPUT, /* CLKRM = 0 */
    MCBSP_PCR_SCLKME_NO, /* SCLKME = 0 */
    MCBSP_PCR_FSXP_ACTIVEHIGH, /* FSXP = 0 */
    MCBSP_PCR_FSRP_ACTIVEHIGH, /* FSRP = 1 */
    MCBSP_PCR_CLKXP_FALLING, /* CLKXP = 1 */
    MCBSP_PCR_CLKRP_RISING /* CLKRP = 1 */
    ),
    MCBSP_RCERA_DEFAULT,
    MCBSP_RCERB_DEFAULT,
    MCBSP_RCERC_DEFAULT,
    MCBSP_RCERD_DEFAULT,
    MCBSP_RCERE_DEFAULT,
    MCBSP_RCERF_DEFAULT,
    MCBSP_RCERG_DEFAULT,
    MCBSP_RCERH_DEFAULT,
    MCBSP_XCERA_DEFAULT,
    MCBSP_XCERB_DEFAULT,
    MCBSP_XCERC_DEFAULT,
    MCBSP_XCERD_DEFAULT,
    MCBSP_XCERE_DEFAULT,
    MCBSP_XCERF_DEFAULT,
    MCBSP_XCERG_DEFAULT,
    MCBSP_XCERH_DEFAULT,
    };

    这个初始化配置里面没有EBSR寄存器的配置啊!而且技术手册也说了默认是mcbsp2模式呢。如果我要配置EBSR寄存器怎么弄?

  • 先查看一下EBSR寄存器的值是多少?是不是配成了mcbsp2模式,如果没有的话,添加下面的代码。


    #define EBSR            (*(volatile ioport unsigned short*)0x6c00)
    EBSR =xxxx;

  • 按你说的设置了 我把EBSR设置成0x0000u  还是不行。还有我要怎么查看EBSR寄存器当前的值呢?add to watch window吗?

  • ccs memory里面查看I/O空间地址0x6c00

  • 为什么我的CCS3.3 点击View memory添加地址后什么东西都没有显示?

  • 看到了,我的0x6c00地址寄存器里面的值是0x0203。

  • 那mcbsp2使能了。

    查看一下McBSP2的各个寄存器的值有没有配好?

    有没有两个MCBSP2口的时序?

  • MCBSP2口寄存器配置和MCBSP0口完全一样的,改回MCBSP0口程序就是对的,DX也有数据波形,但是将MCBSP_PORT0改成MCBSP_PORT2 对应的端口确没有数据波形,MCBSP各个口的配置不一样吗?

  • 是运行配置程序后看到的寄存器值跟mcbsp0完全一样么?

  • 我按照你的方式来查看mcbsp2寄存器的值,确实是使用mcbsp2配置的时候寄存器的值和mcbsp0不一样,然后我手动指定寄存器往里面写和mcbsp0寄存器一样的值,数据还是从mcbsp0的DX口出来的,请问有哪个寄存器是控制数据发送端口的?我手动配置了SPCR1/2   ,PCR1/2   ,XCR1/2  ,PCR这几个寄存器。

  • 先查一下为什么配置出来的值跟mcbsp0不一样。

    如果怀疑硬件连接问题,先用DLB模式内环一下,看mcbsp2能否传输数据。

  • 我看了mcbsp0和mcbsp1、mcbsp2口配置出来的寄存器值是一样的,只有SPCR1和SPCR2这2个寄存器有一点差别,比如mcbsp0的SPCR1是0x00c3,而mcbsp1的SPCR1是0x00c1,mcbsp2的SPCR1是0x00c5,同样mcbsp0的SPCR2是0x4083,mcbsp1的SPCR2是0x4081,mcbsp2的SPCR2是0x4081就这2个寄存器不一样,配置出来。请问哪个文档有关于这2个寄存器具体某位代表什么意思的?数据手册上面没有介绍。

  • 我看了哈SPCR1/SPCR2的寄存器定义,我配置出来的SPCR1/2寄存器的值其实只有第1位不同,SPCR1第1位表示接受准备好没,SPCR2第1位表示发送准备好没,我的都是0,表示没准备好!当使用mcbsp0口时这2个位都是1表示准备好了,是不是这里的原因?这个值应该是自动产生的啊!什么情况下会存在没准备好的情况?

  • MCBSP_start函数里会将它们置1, 你看一下执行完MCBSP_start后,XRST, RRST应该=1。

  • 我不是XRST和RRST有问题,这2位一直是1的。是SPCR1的RRDY和SPCR2的XRDY这2位使用MCBSP1/2口的时候总是0。而且这2位应该是硬件自动产生的,怎么老是没准备好?我手动置1完全没用。

  • 是不是我没有配置成I2S模式原因?我要把MCBSP口配置成I2S模式需要配置那些个寄存器?

  • 这跟I2S模式没有关系。

    如果XRST=1的话,XRDY应该是1, 如果是0的话,怀疑是不是芯片本身的问题。

    你用的是EVM板还是自己的板子?