MCBSP怎么连续的接收数据???利用
while(!MCBSP_rrdy(mhMcbsp));
MCBSP_read16(mhMcbsp,rcv[size]);每次只能接收size个数据,怎么样设置可以多次的接收size个数据呢?
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怎么连续的接收数据???利用
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]中的数不断的变化?
感谢你的解答~~~