TI中文支持网
TI专业的中文技术问题搜集分享网站

I2C实验中MCBSP的配置问题

在I2C实验的数字回音实验中,程序中启动MCBSP0的程序为:

/*初始化McBSP0*/
hMcbsp = MCBSP_open(MCBSP_PORT0,MCBSP_OPEN_RESET);
/*设置McBSP0*/
MCBSP_config(hMcbsp,&Mcbsp1Config);
/*启动McBSP0*/
MCBSP_start (hMcbsp, MCBSP_RCV_START | MCBSP_XMIT_START, 0);

MCBSP_getConfig(hMcbsp,&Mcbsptest);

对于MCBPS_start这个API操作,手册中解释为:

Q1:程序中

#define MCBSP_RCV_START  (1u)
#define MCBSP_XMIT_START  (2u)

定义的MCBSP_RCV_START与MCBPD_XMIT_START的值,从手册中看出,对应的不应该是寄存器SPCR1中的域RRST=1及SPCR2中的域XRST=2吗?

但是运行MCBSP_start之后,寄存器中域值的变化情况为:

SPCR1中的RRST=1

SPCR2中的XRDY=1     XRST=1

这是为什么?

Q2:MCBSP_RCV_START | MCBSP_XMIT_START,  :中或‘|’操作是什么意思?这与Q1中域值变化有何关系?

Shine:

请问你用的是哪款DSP?

meng yang2:

回复 Shine:

TMS320VC5509A

Shine:

回复 meng yang2:

1. 运算结果是正确的,1u, 2u定义跟寄存器本身没有关系,看一下MCBSP_start的源码就一目了然了

CSLBool MCBSP_start(MCBSP_Handle hMcbsp, Uint16 StartMask, Uint32

SampleRateDelay) {

/* compiler should not optimize delay loop under -o3 switch */

volatile Uint32 count = SampleRateDelay;

MCBSP_ASSERT_HANDLE(hMcbsp,return FALSE);

if (StartMask & MCBSP_SRGR_START) {

MCBSP_FSETH(hMcbsp,SPCR2,GRST,1);

while (count > 0) {

–count;

}

}

if (StartMask & MCBSP_RCV_START) {

MCBSP_FSETH(hMcbsp,SPCR1,RRST,1);

}

if (StartMask & MCBSP_XMIT_START) {

MCBSP_FSETH(hMcbsp,SPCR2,XRST,1);

}

if (StartMask & MCBSP_SRGR_FRAMESYNC) {

MCBSP_FSETH(hMcbsp,SPCR2,FRST,1);

}

return TRUE;

}

#endif /* MCBSP_SUPPORT */2. "|"表示逻辑或

meng yang2:

回复 Shine:

从源码中,能够看出SPCR1中RRST=1及SPCR2中XRST=1,但是看不出SPCR2中XRDY=1啊?

meng yang2:

回复 Shine:

谢谢,终于解决这个问题了!

赞(0)
未经允许不得转载:TI中文支持网 » I2C实验中MCBSP的配置问题
分享到: 更多 (0)