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.

MCBSP数据接收

Other Parts Discussed in Thread: TMS320VC5416, CCSTUDIO

MCBSP怎么连续的接收数据???利用

while(!MCBSP_rrdy(mhMcbsp));

MCBSP_read16(mhMcbsp,rcv[size]);每次只能接收size个数据,怎么样设置可以多次的接收size个数据呢?

  • 你好看到你发了三个贴,您的设计思路是什么?能否整体说下思路吗?

  • TMS320VC5416与AD73360间的数据传输,DSP利用MCBSP向AD发送7个控制命令,对AD的寄存器进行设置,然后DSP通过MCBSP读取AD的数据,MCBSP的数据接收用的是查询的方式,

    代码如下:

    /* 发送控制命令时:

    输入输出时钟由外部源决定:4.2MHz

     输出帧同步由外部源决定:与外部源同步*/

    /******************************************************************************/

    #include <stdio.h>

    #include <csl.h>

    #include <csl_mcbsp.h>

    #include <csl_irq.h>

    //#include "reg.h"

    /*----------------------------------------------------------------------------*/

    #define N 7

    #define M 6              

    //int kkk=0;

    static MCBSP_Config ConfigLoopBack16= {

      MCBSP_SPCR1_RMK(

        MCBSP_SPCR1_DLB_OFF,                    /* DLB    = 0 */

        MCBSP_SPCR1_RJUST_RZF,                 /* RJUST  = 0 */

        MCBSP_SPCR1_CLKSTP_DISABLE,            /* CLKSTP = 0 */

        MCBSP_SPCR1_DXENA_OFF,                  /* DXENA  = 0 */

        MCBSP_SPCR1_ABIS_DEFAULT,              /* ABIS   = 0 */

        MCBSP_SPCR1_RINTM_RRDY,                /* RINTM  = 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_RESET,                  /* FRST   = 0*/

        MCBSP_SPCR2_GRST_RESET,                 /* GRST   = 0*/

        MCBSP_SPCR2_XINTM_XRDY,                /* XINTM  = 0 */

        MCBSP_SPCR2_XRST_DISABLE               /* XRST   = 0 */

      ),

      MCBSP_RCR1_RMK(

       0,                                      /* RFRLEN1 = 0 一帧数据 */

       2                                       /* RWDLEN1 = 2 16位*/

      ),

      MCBSP_RCR2_RMK(    

        MCBSP_RCR2_RPHASE_SINGLE,              /* RPHASE  = 0 */

        MCBSP_RCR2_RFRLEN2_OF(0),              /* RFRLEN2 = 0 */

        MCBSP_RCR2_RWDLEN2_8BIT,              /* RWDLEN2 = 2 */

        MCBSP_RCR2_RCOMPAND_MSB,               /* RCOMPAND = 0 */

        MCBSP_RCR2_RFIG_YES,                   /* RFIG    = 0  */

        MCBSP_RCR2_RDATDLY_1BIT                /* RDATDLY = 0 */

      ),  

      MCBSP_XCR1_RMK(

       MCBSP_XCR1_XFRLEN1_OF(0),              /* XFRLEN1 = 0 */

       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 = 2 */

        MCBSP_XCR2_XCOMPAND_MSB,               /* XCOMPAND = 0 */

        MCBSP_XCR2_XFIG_YES,                   /* XFIG    = 0 */

        MCBSP_XCR2_XDATDLY_1BIT                /* XDATDLY = 0 */

      ),            

      MCBSP_SRGR1_RMK(

        MCBSP_SRGR1_FWID_OF(0),                /* FWID    = 0 */

        MCBSP_SRGR1_CLKGDV_OF(0)               /* CLKGDV  = 0 CLKG的分频系数*/

      ),  

     MCBSP_SRGR2_RMK(  

        MCBSP_SRGR2_GSYNC_FREE,                /* FREE    = 0 */

        MCBSP_SRGR2_CLKSP_RISING,              /* CLKSP   = 0 */

        MCBSP_SRGR2_CLKSM_CLKS,            /* CLKSM   = 1 采样率生成器的时钟外部源决定 */

        MCBSP_SRGR2_FSGM_FSG,              /* FSGM    = 0 发送帧同步信号由采样率生成器决定*/

        MCBSP_SRGR2_FPER_OF(16)                /* FPER    = 16*/

     ),  

     MCBSP_MCR1_DEFAULT,

     MCBSP_MCR2_DEFAULT,

     MCBSP_PCR_RMK(

       MCBSP_PCR_XIOEN_SP,                   /* XIOEN    = 0  */

       MCBSP_PCR_RIOEN_SP,                   /* RIOEN    = 0  */

       MCBSP_PCR_FSXM_INTERNAL,              /* FSXM     = 1  帧同步信号由内部的采样率生成器时钟产生*/

       MCBSP_PCR_FSRM_EXTERNAL,              /* FSRM     = 0  */

       MCBSP_PCR_SCLKME_BCLK,                /* SCLKME   = 0  */    

       MCBSP_PCR_CLKXM_INPUT,               /* CLKXM    = 0  */

       MCBSP_PCR_CLKRM_INPUT,                /* CLKRM    = 0  */

       MCBSP_PCR_FSXP_ACTIVEHIGH,            /* FSXP     = 0  */

       MCBSP_PCR_FSRP_ACTIVEHIGH,            /* FSRP     = 0  */

       MCBSP_PCR_CLKXP_RISING,               /* CLKXP    = 0  */

       MCBSP_PCR_CLKRP_FALLING               /* CLKRP    = 0  */

     ),

     MCBSP_RCERA_DEFAULT,                                /* RCERA */

     MCBSP_RCERB_DEFAULT,                                /* RCERB */

     MCBSP_RCERC_DEFAULT,                                /* RCERC */

     MCBSP_RCERD_DEFAULT,                                /* RCERD */

     MCBSP_RCERE_DEFAULT,                                /* RCERE */

     MCBSP_RCERF_DEFAULT,                                /* RCERF */

     MCBSP_RCERG_DEFAULT,                                /* RCERG */

     MCBSP_RCERH_DEFAULT,                                /* RCERH */

     MCBSP_XCERA_DEFAULT,                                /* XCERA */

     MCBSP_XCERB_DEFAULT,                                /* XCERB */

     MCBSP_XCERC_DEFAULT,                                /* XCERC */

     MCBSP_XCERD_DEFAULT,                                /* XCERD */

     MCBSP_XCERE_DEFAULT,                                /* XCERE */

     MCBSP_XCERF_DEFAULT,                                /* XCERF */

     MCBSP_XCERG_DEFAULT,                                /* XCERG */

     MCBSP_XCERH_DEFAULT                                 /* XCERH */

    };    

    /* Create data buffers for transfer */

    Uint16 xmt[N],rcv[N],data[M];

    void taskFunc(void);

    /*----------------------------------------------------------------------------*/

    void main() {

    Uint16 i;

     /* Initialize CSL library, this step is required */

     CSL_init();

    //PLL_setFreq (1,1);

    // xmt[0]=0xaa0a;

    xmt[0]= 0x8103;

    xmt[1]=0x8201;

    xmt[2]=0x838f;

    xmt[3]=0x863f;

    xmt[4]=0x873f;

    xmt[5]=0x8001;

    xmt[6]=0x7fff;//这7个数为控制命令,AD收到数据后会进行寄存器的配置

     for(i=0;i<=N-1;i++) {

     rcv[i]=0;

     }

     taskFunc();

    }

    void taskFunc(void){

    Uint16 i;

    MCBSP_Handle mhMcbsp;

     mhMcbsp = MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET);

     MCBSP_config(mhMcbsp, &ConfigLoopBack16);

     MCBSP_start(mhMcbsp,

       MCBSP_RCV_START | MCBSP_XMIT_START,

       0

     );

    while(!MCBSP_xrdy(mhMcbsp));

      MCBSP_write16(mhMcbsp,xmt[0]);

     MCBSP_start(mhMcbsp,

       MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC,

       0xFFFF

     );

    while(!MCBSP_rrdy(mhMcbsp));

     rcv[0]= MCBSP_read16(mhMcbsp);

    for (i=0;i<=N-1;i++) {

     while(!MCBSP_xrdy(mhMcbsp));

       MCBSP_write16(mhMcbsp,xmt[i]);

    while(!MCBSP_rrdy(mhMcbsp));

     rcv[i]= MCBSP_read16(mhMcbsp);

    }//AD每收到一个数据就会给DSP返回一个数(此时的数不是需要的)

    for(i=0;i<M;i++){

    while(!MCBSP_rrdy(mhMcbsp));

     rcv[i]= MCBSP_read16(mhMcbsp);

    }//发完工作命令后,又接收了6个数(来自AD的6个通道采集的数)

    //不知道上述的对数据接收的理解对不对

    MCBSP_close(mhMcbsp);

    }

    1、有什么办法可以控制发送的帧同步信号的个数,就是每次发送数据的时候才产生帧同步信号,即可以再BFSX以及BDX端观察到,7个帧同步信号,7个数据。(现在的现象是帧同步信号一直存在,而且数据不止7个,有好几个出现重复)

    2、怎么连续的接收数据,上述程序只能收到6个,如何修改可以使接收端一直收到数据??即xc[6]中的数不断的变化?

    感谢你的解答~~~

  • 楼主,请问你用的CCS是哪一个版本?您手里有DSP5416的片上支持库软件吗?急求、

  • CCS安装目录下:C:\CCStudio_v3.3\C5400\csl\lib