2481|0

59

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

TI DSP McBSP 如何从UART接受数据 [复制链接]

大家好,
  本人写了一个 McBSP uart 程序 在 TMS320VC5402 上运行.
  代码参考了TMS320C620x/C642x McBSP: UART(spra633c.pdf), 但是我没有用DMA.
  连上PC测试了程序. McBSP 发数据到PC是正确的. 但是 McBSP 从PC  受数据怎么也不正确。

代码:

/* Include files */
#include

#include
#include
#include

/* Create buffers and aligning them on an L2 cache line boundary. */
#pragma DATA_SECTION(xmitbuf,"xmit_buf");
unsigned short xmitbuf[0x0400];     

#pragma DATA_SECTION(recvbuf,"recv_buf");
unsigned short recvbuf[0x0400];      

/* Declare CSL objects */
MCBSP_Handle hMcbsp1;            /* handle for McBSP1  */

#define BUFFER_SIZE    27                /* total number of UART data words    */

/* Global Variables    */
char xmit_msg[BUFFER_SIZE] = "McBSP does UART on C5000!\n";
char recv_msg[BUFFER_SIZE] = "Transmission didn't work!\n";

/* Get referenc to start of interrupt vector table */
/* This symbol is defined in file, vectors.s54     */
extern void VECSTART(void);

/* Prototypes    */
void ConfigMcBSP(void);
void ProcessTransmitData();
void ProcessReceiveData();
int CheckTestCase(void);
short VoteLogic(unsigned short value);


/* Create a MCBSP configuration structure */
static MCBSP_Config ConfigMcBspUart= {
   /* SPCR Setup */
   MCBSP_SPCR1_RMK(
     MCBSP_SPCR1_DLB_OFF,                   /* DLB   */
     MCBSP_SPCR1_RJUST_RZF,                 /* RJUST   */
     MCBSP_SPCR1_CLKSTP_DISABLE,            /* CLKSTP  */
     MCBSP_SPCR1_DXENA_NA,                  /* DXENA  */
     MCBSP_SPCR1_RINTM_RRDY,                /* RINTM   */
     MCBSP_SPCR1_RRST_DEFAULT               /* RRST   */
   ),
   MCBSP_SPCR2_RMK(
     MCBSP_SPCR2_FREE_NO,                   /* FREE  */
     MCBSP_SPCR2_SOFT_NO,                   /* SOFT   */
     MCBSP_SPCR2_FRST_DEFAULT,                  /* FRST  */
     MCBSP_SPCR2_GRST_DEFAULT,                 /* GRST  */
     MCBSP_SPCR2_XINTM_XRDY,                /* XINTM   */
     MCBSP_SPCR2_XRST_DEFAULT               /* XRST  */
   ),

   /* RCR Setup */
   MCBSP_RCR1_RMK(
    MCBSP_RCR1_RFRLEN1_OF(8),                                      /* RFRLEN1 */
    MCBSP_RCR1_RWDLEN1_16BIT                                       /* RWDLEN1  */
   ),
   MCBSP_RCR2_RMK(   
     MCBSP_RCR2_RPHASE_DUAL,              /* RPHASE  */
     MCBSP_RCR2_RFRLEN2_OF(1),              /* RFRLEN2 */
     MCBSP_RCR2_RWDLEN2_8BIT,              /* RWDLEN2  */
     MCBSP_RCR2_RCOMPAND_MSB,               /* RCOMPAND  */
     MCBSP_RCR2_RFIG_NO,                   /* RFIG   */
     MCBSP_RCR2_RDATDLY_1BIT                /* RDATDLY */
   ),

   /* XCR */
   MCBSP_XCR1_RMK(
    MCBSP_XCR1_XFRLEN1_OF(8),              /* XFRLEN1 */
    MCBSP_XCR1_XWDLEN1_16BIT               /* XWDLEN1 */
   ),  
   MCBSP_XCR2_RMK(  
     MCBSP_XCR2_XPHASE_DUAL,              /* XPHASE  */
     MCBSP_XCR2_XFRLEN2_OF(1),              /* XFRLEN2 */
     MCBSP_XCR2_XWDLEN2_8BIT,              /* XWDLEN2  */
     MCBSP_XCR2_XCOMPAND_MSB,               /* XCOMPAND  */
     MCBSP_XCR2_XFIG_YES,                   /* XFIG   */
     MCBSP_XCR2_XDATDLY_0BIT                /* XDATDLY  */
   ),     

   /* SRGR */
   MCBSP_SRGR1_RMK(
     MCBSP_SRGR1_FWID_DEFAULT,                /* FWID   */
     MCBSP_SRGR1_CLKGDV_OF(56)               /* CLKGDV  */
   ),  
  MCBSP_SRGR2_RMK(
     MCBSP_SRGR2_GSYNC_FREE,                /* FREE   */
     MCBSP_SRGR2_CLKSP_RISING,              /* CLKSP  */
     MCBSP_SRGR2_CLKSM_INTERNAL,            /* CLKSM  */
     MCBSP_SRGR2_FSGM_DXR2XSR,              /* FSGM    */
     MCBSP_SRGR2_FPER_DEFAULT                /* FPER   */
  ),

  /* MCR */
  MCBSP_MCR1_DEFAULT,
  MCBSP_MCR2_DEFAULT,

  /* PCR */
  MCBSP_PCR_RMK(
    MCBSP_PCR_XIOEN_SP,                   /* XIOEN    */
    MCBSP_PCR_RIOEN_SP,                   /* RIOEN      */
    1,              /* FSXM     = 1  */
    0,              /* FSRM     = 0  */
    1,               /* CLKXM    = 1  */
    1,                /* CLKRM    = 1  */
    1,            /* FSXP     = 1  */
    1,            /* FSRP     = 1  */
    MCBSP_PCR_CLKXP_RISING,               /* CLKXP      */
    MCBSP_PCR_CLKRP_FALLING               /* CLKRP     */
  ),
  MCBSP_RCERA_DEFAULT,
  MCBSP_RCERB_DEFAULT,
  MCBSP_XCERA_DEFAULT,
  MCBSP_XCERB_DEFAULT,
};   


/*******************************************************************/
/* void main(void)                                                 */
/*******************************************************************/
void main(void)
{
    // int waittime = 0;
    // int works = FALSE;
    unsigned short * xmitbufptr;
    unsigned short * recvbufptr;
    unsigned short val;
    unsigned short * ptr;
    int i;
   
    /* initialize the CSL library */
    CSL_init();                  
   
      /* Set IPTR to start of interrupt vector table */
      IRQ_setVecs((Uint16)(&VECSTART));
   
    /* process transmit data */
    printf("Processing Transmit string...\n");
    ProcessTransmitData();  
    printf("String transmitted: %s \n", xmit_msg);

           
   
    /* Open the McBSP channel 1 */
    hMcbsp1 = MCBSP_open(MCBSP_PORT1, MCBSP_OPEN_RESET);
   
    /* Setup for McBSP */
    ConfigMcBSP();

     /* Start the MCBSP and Sample Rate Generator */
      MCBSP_start(hMcbsp1,
        MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC |
        MCBSP_RCV_START | MCBSP_XMIT_START,
        0x200
      );


    // send data for test
     /* point to Transmit Buffer    */
    xmitbufptr = (unsigned short *)xmitbuf;
    for( i = 0; i< BUFFER_SIZE * 11; i++ )
    {
        while (!MCBSP_xrdy(hMcbsp1));
        MCBSP_write16(hMcbsp1,xmitbufptr);
        //printf("====write 16bit : %d\n",xmitbufptr);
    }

    // receive test data
    recvbufptr = (unsigned short *) recvbuf;
    for( i = 0; i< (BUFFER_SIZE * 11); i++ )
    {
        /* Wait for RRDY signal to read data from DRR */
        while (!MCBSP_rrdy(hMcbsp1));

        /* Read 16 bit value from DRR */
        recvbufptr = MCBSP_read16(hMcbsp1);
    }
                  
    /* process received data */
    printf("Processing Receive string...\n");
    ProcessReceiveData();
    printf("String received: %s \n", recv_msg);
   
   
    MCBSP_close(hMcbsp1);    /* close McBSP 1 */
   
    printf("============ completed =============\n");
}    /* End of main() */
  
                  
/*******************************************************************/
/* void ConfigMcBSP(void): Setup for McBSP Configuration           */
/*******************************************************************/
void ConfigMcBSP(void)
{
   
    MCBSP_config(hMcbsp1, &ConfigMcBspUart);
   
}    /* end of Config_McBSP(void) */
......


请教各位大侠我的程序问题在那,多谢了
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表