在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:
谢谢,终于解决这个问题了!