打印

请教高手解决MCBSP的DLB问题

[复制链接]
2712|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
adofu2008|  楼主 | 2009-12-15 11:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
* Copyright (C) 2003 Texas Instruments Incorporated
* All Rights Reserved
*/
/*
*---------main_mcbsp1.c---------
* In this example, the MCBSP is configured in digital loopback
* mode, with 32 bit data transfer, in multi-frame mode, using                                                   
* sample rate generator to sync frames                        
*/

#include <stdio.h>   
#include <csl.h>
#include <csl_mcbsp.h>
#include <csl_pll.h>
//---------Global constants---------
#define N 20                 
//---------Global data definition---------
/* Create a MCBSP configuration structure */
MCBSP_Config ConfigLoopBack32= {
   MCBSP_SPCR1_RMK(
    MCBSP_SPCR1_RRST_ENABLE,
    MCBSP_SPCR1_RRDY_YES,
    MCBSP_SPCR1_RFULL_NO,
    MCBSP_SPCR1_RSYNCERR_NO,
    MCBSP_SPCR1_RINTM_RRDY,
    MCBSP_SPCR1_ABIS_DISABLE,
    MCBSP_SPCR1_DXENA_NA,
    MCBSP_SPCR1_CLKSTP_DISABLE,
    MCBSP_SPCR1_RJUST_RZF,
    MCBSP_SPCR1_DLB_ON
   ),
   MCBSP_SPCR2_RMK(
    MCBSP_SPCR2_XRST_ENABLE,
    MCBSP_SPCR2_XRDY_YES,
    MCBSP_SPCR2_XEMPTY_NO,
    MCBSP_SPCR2_XSYNCERR_NO,
    MCBSP_SPCR2_XINTM_XRDY,
    MCBSP_SPCR2_GRST_CLKG,
    MCBSP_SPCR2_FRST_FSG,
    MCBSP_SPCR2_SOFT_NO,
    MCBSP_SPCR2_FREE_NO
   ),
   MCBSP_RCR1_RMK(
    MCBSP_RCR1_RWDLEN1_16BIT,
    MCBSP_RCR1_RFRLEN1_OF(0)
   ),
   MCBSP_RCR2_RMK(
    MCBSP_RCR2_RDATDLY_2BIT,
    MCBSP_RCR2_RFIG_YES,
    MCBSP_RCR2_RCOMPAND_MSB,
    MCBSP_RCR2_RWDLEN2_8BIT,
    MCBSP_RCR2_RFRLEN2_OF(0),
    MCBSP_RCR2_RPHASE_SINGLE
   ),
   MCBSP_XCR1_RMK(
    MCBSP_XCR1_XWDLEN1_16BIT,
    MCBSP_XCR1_XFRLEN1_OF(0)
   ),
   MCBSP_XCR2_RMK(
    MCBSP_XCR2_XDATDLY_2BIT,
    MCBSP_XCR2_XFIG_YES,
    MCBSP_XCR2_XCOMPAND_MSB,
    MCBSP_XCR2_XWDLEN2_8BIT,
    MCBSP_XCR2_XFRLEN2_OF(0),
    MCBSP_XCR2_XPHASE_SINGLE
   ),
   MCBSP_SRGR1_RMK(
    MCBSP_SRGR1_CLKGDV_OF(10),
    MCBSP_SRGR1_FWID_OF(1)
   ),
   MCBSP_SRGR2_RMK(
    MCBSP_SRGR2_FPER_OF(15),
    MCBSP_SRGR2_FSGM_DXR2XSR,
    MCBSP_SRGR2_CLKSM_INTERNAL,
    MCBSP_SRGR2_CLKSP_RISING,
    MCBSP_SRGR2_GSYNC_FREE
   ),
   MCBSP_MCR1_DEFAULT,
   MCBSP_MCR2_DEFAULT,
   MCBSP_PCR_RMK(
    MCBSP_PCR_CLKRP_FALLING,
    MCBSP_PCR_CLKXP_RISING,
    MCBSP_PCR_FSRP_ACTIVEHIGH,
    MCBSP_PCR_FSXP_ACTIVEHIGH,
    MCBSP_PCR_CLKRM_INPUT,
    MCBSP_PCR_CLKXM_INPUT,
    MCBSP_PCR_DRSTAT_0,
    MCBSP_PCR_DXSTAT_0,
    MCBSP_PCR_CLKSSTAT_0,
    MCBSP_PCR_SCLKME_NO,
    MCBSP_PCR_FSRM_INTERNAL,
    MCBSP_PCR_FSXM_INTERNAL,
    MCBSP_PCR_RIOEN_SP,
    MCBSP_PCR_XIOEN_SP,
    MCBSP_PCR_IDLEEN_RESET
   ),
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
};     
/* Create data buffers for transfer */
Uint16 xmt[N], rcv[N];
//---------Function prototypes---------
void taskFunc(void);
//---------main routine---------
void main() {
  Uint16 i;
  
  /* Initialize CSL library, this step is required */
  CSL_init();
  PLL_setFreq(1, 0xF, 0, 1, 3, 3, 0);
  /* Initilize data buffers. xmt will be 32 bit value      */
  /* with element number in lower 16 bits and 2 * element  */
  /* in upper 16 bits.  i.e.  0x00020001, 0x00040002, etc. */
  for(i=0;i<=N-1;i++) {
    xmt[i] = i;
    rcv[i] = 0;
  }
  /* Call example function to perform task */
  taskFunc();
}
void taskFunc(void) {
  MCBSP_Handle mhMcbsp;
  Uint16 i;
  Uint16 err = 0;
  
  /* Open MCBSP Port 0, this will return a MCBSP handle that will */
  /* be used in calls to other CSl functions.                     */
  mhMcbsp = MCBSP_open(MCBSP_PORT0, MCBSP_OPEN_RESET);
  /* Write configuration structure values to MCBSP control */
  /* registers                                             */
  MCBSP_config(mhMcbsp, &ConfigLoopBack32);
  /* Start Sample Rate Generator and Frame Sync */
  MCBSP_start(mhMcbsp,
    MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC,
    0x300
  );

  /* Enable MCBSP transmit and receive */
  MCBSP_start(mhMcbsp,
    MCBSP_RCV_START | MCBSP_XMIT_START,
    0
  );
   
  /* Begin data transfer loop. We will loop thru to transmit */
  /* and receive the data.                                   */  
  for (i=0; i<=N-1;i++) {

    /* Wait for XRDY signal before writing data to DXR */
    while (!MCBSP_xrdy(mhMcbsp));      
                 
    /* Write 32 bit data value to DXR */   
    MCBSP_write16(mhMcbsp,xmt[i]);      

    /* Wait for RRDY signal to read data from DRR */
    while (!MCBSP_rrdy(mhMcbsp));
    /* Read 32 bit value from DRR */
    rcv[i] = MCBSP_read16(mhMcbsp);               
  }   
  /* Check data to make sure transfer was successful */
  for(i=0; i<= N-1;i++) {
    if (xmt[i] != rcv[i]) {
       ++err;
       break;
    }
  }

  /* We are done with MCBSP, so close it */
  MCBSP_close(mhMcbsp);
  printf("%s\n",err?"TEST FAILED\n":"TEST PASSED\n");
                     
}
在运行程序时,程序指针一直停在   while (!MCBSP_rrdy(mhMcbsp));请问,为什么接收不到数据呢?谢谢!

相关帖子

沙发
sun1988227| | 2013-5-21 09:22 | 只看该作者
lz 这个问题弄明白了了!!我也想知道

使用特权

评论回复
板凳
zhangmangui| | 2013-5-21 09:30 | 只看该作者
sun1988227 发表于 2013-5-21 09:22
lz 这个问题弄明白了了!!我也想知道

几年前的问题啦   你可以发帖问   新帖看的人较多

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

142

帖子

1

粉丝