Technical discussions about the TI C55x DSPs (including the c5501, c5502, c5503, c5507, c5509, c5510 and OMAP5910).
I believe I have got the answer with your and TI tech support's help. The problem of
MCBSP_write16() is that it only sent data to DXR, and a long way from XSR to DX is left
unsupervised by the code. If one want to write one UINT16 by McBsp and then close the McBsp. I
believe the following is the best way to do it.
while (!MCBSP_xrdy(hMcbsp1));
MCBSP_write16(hMcbsp1, 0x3579); // 0x3579, data intended to write, goes to XSR
while (!MCBSP_xrdy(hMcbsp1));
MCBSP_write16(hMcbsp1, 0x1111); // 0x1111, dummy data, to DXR; 0x3579 goes to XSR
while (!MCBSP_xrdy(hMcbsp1)); // dummy data goes to XSR, and 0x3579 is shipped out by DX
MCBSP_close(hMcbsp1);
Thanks to Jeff and Dileepan.
Li Wei- > I believe I have got the answer with your and TI tech support's help. The > problem of MCBSP_write16() is that it only sent data to DXR, and a long > way from XSR to DX is left unsupervised by the code. If one want to write > one UINT16 by McBsp and then close the McBsp. I believe the following is > the best way to do it. > > while (!MCBSP_xrdy(hMcbsp1)); > MCBSP_write16(hMcbsp1, 0x3579); // 0x3579, data intended to write, > goes to XSR > while (!MCBSP_xrdy(hMcbsp1)); > MCBSP_write16(hMcbsp1, 0x1111); // 0x1111, dummy data, to DXR; > 0x3579 goes to XSR > while (!MCBSP_xrdy(hMcbsp1)); // dummy data goes to XSR, and 0x3579 > is shipped out by DX > MCBSP_close(hMcbsp1); Yes this looks very reasonable. My one comment would be to add some time-out (escape) to the while loop in case the serial link breaks (other end disconnects). From a high-level system perspective, at the time of "closing" the McBSP port, anything could be happening. -Jeff