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中域值变化有何关系?
1.XRST只有1位,不可能等于2.
2.或操作应该是同时置1的操作。 wangch_sh 发表于 2014-11-1 08:23 static/image/common/back.gif
1.XRST只有1位,不可能等于2.
2.或操作应该是同时置1的操作。
那这样的话,为什么#define MCBSP_XMIT_START(2u)
执行完MCBSP_start之后,SPCR2中的域XRDY与XRST都变成1了呢? 这个我也不明白。 这是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 */
但是我从源码中看出来SPCR1中RRST=1及SPCR2中XRST=1,但是还是看不出SPCR2中XRDY=1,希望哪位高手给解释一下吧。 今天终于找到为什么了,自己分享一下吧。在MCBSP的手册中,提到了:
When the transmitter is taken out of reset (XRST = 1), it is in a transmitterready (XRDY = 1 in SPCR2) and transmitter empty (XEMPTY = 0) state. yangmm11 发表于 2014-11-4 18:03 static/image/common/back.gif
今天终于找到为什么了,自己分享一下吧。在MCBSP的手册中,提到了:
When the transmitter is taken out of ...
感谢你的分享
页:
[1]