📄 mcbsp_mulchannel_example.c
字号:
/* Initialize the MCBSP CSL module */
status = CSL_mcbspInit(&pContext);
if (status != CSL_SOK) {
printf("Mcbsp initialization failed\n");
return;
}
/* Open the CSL module */
hMcbsp = CSL_mcbspOpen (&mcbspObj, CSL_MCBSP_0, NULL, &status);
if ((hMcbsp == NULL) || (status != CSL_SOK)) {
printf ("MCBSP: Opening instance... Failed.\n");
printf ("\tReason: Error opening the instance. \
[status = 0x%x, hMcbsp = 0x%x]\n", status, hMcbsp);
exit(1);
}
/* Put SRG, Frame-sync, XMT and RCV in reset */
ctrlMask = CSL_MCBSP_CTRL_SRG_DISABLE
| CSL_MCBSP_CTRL_FSYNC_DISABLE
| CSL_MCBSP_CTRL_TX_DISABLE
| CSL_MCBSP_CTRL_RX_DISABLE;
status = CSL_mcbspHwControl(hMcbsp, CSL_MCBSP_CMD_RESET_CONTROL, &ctrlMask);
if (status != CSL_SOK) {
printf("Mcbsp CSL_MCBSP_CMD_RESET_CONTROL command failed\n");
return;
}
/* Program MCBSP control registers */
status = CSL_mcbspHwSetup(hMcbsp, &myHwSetup);
if (status != CSL_SOK) {
printf ("MCBSP: Hardware setup... Failed.\n");
exit(1);
}
/* Get the mcbsp control register values */
status = CSL_mcbspGetHwSetup (hMcbsp , &readHwSetup);
if (status != CSL_SOK) {
printf ("MCBSP: Get Hardware setup... Failed.\n");
exit(1);
}
/* Compare the hardware setup parameter values passed in the
* "hwSetup" structure by comparing them with the actual values read from
* the Mcbsp registers
*/
status = hwSetupVerify (&myHwSetup, &readHwSetup);
if (status != CSL_SOK){
printf ("MCBSP: Hardware setup and Read Hardware setup parameter ");
printf ("comparision ... Failed.\n");
exit(1);
}
/* Enabling the channels- 0 & 31 */
channel.channelNo = 0;
channel.operation = CSL_MCBSP_CHCTRL_RX_ENABLE;
CSL_mcbspHwControl (hMcbsp, CSL_MCBSP_CMD_CHANNEL_CONTROL, &channel);
channel.channelNo = 31;
channel.operation = CSL_MCBSP_CHCTRL_RX_ENABLE;
CSL_mcbspHwControl (hMcbsp, CSL_MCBSP_CMD_CHANNEL_CONTROL, &channel);
channel.channelNo = 0;
channel.operation = CSL_MCBSP_CHCTRL_TX_ENABLE;
CSL_mcbspHwControl (hMcbsp, CSL_MCBSP_CMD_CHANNEL_CONTROL, &channel);
channel.channelNo = 31;
channel.operation = CSL_MCBSP_CHCTRL_TX_ENABLE;
CSL_mcbspHwControl (hMcbsp, CSL_MCBSP_CMD_CHANNEL_CONTROL, &channel);
/* Start sample rate generator and wait for 2 clock cycles */
ctrlMask = CSL_MCBSP_CTRL_SRG_ENABLE | CSL_MCBSP_CTRL_FSYNC_ENABLE;
CSL_mcbspHwControl(hMcbsp, CSL_MCBSP_CMD_RESET_CONTROL, &ctrlMask);
/* Give small delay to start sample rate generator */
WAIT_FOR_2_CLK;
/* Enable MCBSP transmit and receive */
ctrlMask = CSL_MCBSP_CTRL_TX_ENABLE | CSL_MCBSP_CTRL_RX_ENABLE;
CSL_mcbspHwControl(hMcbsp, CSL_MCBSP_CMD_RESET_CONTROL, &ctrlMask);
/* Give small delay to enable transmit and receive */
WAIT_FOR_2_CLK;
printf("Waiting for transmission to Complete\n");
/* Begin data transfer loop. We will loop through to transmit
* and receive the data.
*/
for (loopIndex = 0; loopIndex <= NumOfWords - 1; loopIndex++) {
/* Wait for XRDY signal before writing data to DXR */
response = 0;
while (!(response & CSL_MCBSP_XRDY)) {
CSL_mcbspGetHwStatus(hMcbsp, CSL_MCBSP_QUERY_DEV_STATUS, &response);
}
/* Write 32 bit data value to DXR */
CSL_mcbspWrite (hMcbsp, CSL_MCBSP_WORDLEN_32, &xmt[loopIndex]);
/* Wait for RRDY signal to read data from DRR */
response = 0;
while (!(response & CSL_MCBSP_RRDY)) {
CSL_mcbspGetHwStatus(hMcbsp, CSL_MCBSP_QUERY_DEV_STATUS, &response);
}
/* Read 32 bit value from DRR */
CSL_mcbspRead (hMcbsp, CSL_MCBSP_WORDLEN_32, &rcv[loopIndex]);
}
/* Check data to make sure transfer was successful */
for(loopIndex = 0; loopIndex <= NumOfWords - 1; loopIndex++) {
if (xmt[loopIndex] != rcv[loopIndex]) {
printf("xmt[%d] != rcv[%d]\n", loopIndex, loopIndex);
++err;
}
else {
printf("xmt[%d] == rcv[%d]\n",loopIndex, loopIndex);
}
}
printf("\n%s",err?"TRANSMISSION: EXAMPLE FAILED\n":"TRANSMISSION SUCCESS\n");
/* We are done with MCBSP, so close it */
CSL_mcbspClose(hMcbsp);
return;
}
/*
* ============================================================================
* @func hwSetupVerify
*
* @desc
* This function compare the hardware setup parameter values passed in the
* "hwSetup" structure by comparing them with the actual values read from
* the Mcbsp registers.
*
* @arg hwSetup
* Pointer to the buffer containing the hardware setup parameters that
* are needed to be compare
* @arg hwSetupRead
* Pointer to the buffer containing the get hardware setup parameters that
* are needed to be compared with setup parameters
*
* ============================================================================
*/
CSL_Status hwSetupVerify (
CSL_McbspHwSetup *hwSetup,
CSL_McbspHwSetup *hwSetupRead
)
{
CSL_Status status = CSL_SOK;
/* Check the mcbsp global setup parameters */
if (hwSetupRead->global != NULL) {
if(!((hwSetup->global->dlbMode == hwSetupRead->global->dlbMode)
&&(hwSetup->global->clkStopMode == \
hwSetupRead->global->clkStopMode)
&&(hwSetup->global->ioEnableMode == \
hwSetupRead->global->ioEnableMode))) {
status = CSL_ESYS_FAIL;
}
}
/* Check the mcbsp receive data setup parameters */
if (hwSetupRead->rxdataset != NULL) {
if (!((hwSetup->rxdataset->numPhases == \
hwSetupRead->rxdataset->numPhases)
&&(hwSetup->rxdataset->wordLength1 == \
hwSetupRead->rxdataset->wordLength1)
&&(hwSetup->rxdataset->wordLength2 == \
hwSetupRead->rxdataset->wordLength2)
&&(hwSetup->rxdataset->frmLength1 == \
hwSetupRead->rxdataset->frmLength1)
&&(hwSetup->rxdataset->frmSyncIgn == \
hwSetupRead->rxdataset->frmSyncIgn)
&&(hwSetup->rxdataset->compand == \
hwSetupRead->rxdataset->compand)
&& (hwSetup->rxdataset->dataDelay == \
hwSetupRead->rxdataset->dataDelay)
&&(hwSetup->rxdataset->rjust_dxenable == \
hwSetupRead->rxdataset->rjust_dxenable)
&&(hwSetup->rxdataset->intEvent == \
hwSetupRead->rxdataset->intEvent)
&&(hwSetup->rxdataset->wordReverse == \
hwSetupRead->rxdataset->wordReverse))) {
status = CSL_ESYS_FAIL;
}
}
/* Check the mcbsp transmit data setup parameters */
if (hwSetupRead->txdataset != NULL) {
if (!((hwSetup->txdataset->numPhases == \
hwSetupRead->txdataset->numPhases)
&&(hwSetup->txdataset->wordLength1 == \
hwSetupRead->txdataset->wordLength1)
&&(hwSetup->txdataset->wordLength2 == \
hwSetupRead->txdataset->wordLength2)
&&(hwSetup->txdataset->frmLength1 == \
hwSetupRead->txdataset->frmLength1)
&&(hwSetup->txdataset->frmSyncIgn == \
hwSetupRead->txdataset->frmSyncIgn)
&&(hwSetup->txdataset->compand == \
hwSetupRead->txdataset->compand)
&&(hwSetup->txdataset->dataDelay == \
hwSetupRead->txdataset->dataDelay)
&&(hwSetup->txdataset->rjust_dxenable == \
hwSetupRead->txdataset->rjust_dxenable)
&&(hwSetup->txdataset->intEvent == \
hwSetupRead->txdataset->intEvent)
&&(hwSetup->txdataset->wordReverse == \
hwSetupRead->txdataset->wordReverse))) {
status = CSL_ESYS_FAIL;
}
}
/* Check the mcbsp clock setup parameters */
if (hwSetupRead->clkset != NULL) {
if (!((hwSetup->clkset->frmSyncRxMode == \
hwSetupRead->clkset->frmSyncRxMode)
&&(hwSetup->clkset->frmSyncTxMode == \
hwSetupRead->clkset->frmSyncTxMode)
&&(hwSetup->clkset->frmSyncRxPolarity == \
hwSetupRead->clkset->frmSyncRxPolarity)
&&(hwSetup->clkset->frmSyncTxPolarity == \
hwSetupRead->clkset->frmSyncTxPolarity)
&&(hwSetup->clkset->clkRxMode == \
hwSetupRead->clkset->clkRxMode)
&&(hwSetup->clkset->clkTxMode == \
hwSetupRead->clkset->clkTxMode)
&&(hwSetup->clkset->clkRxPolarity == \
hwSetupRead->clkset->clkRxPolarity)
&&(hwSetup->clkset->clkTxPolarity == \
hwSetupRead->clkset->clkTxPolarity)
&&(hwSetup->clkset->srgFrmPulseWidth == \
hwSetupRead->clkset->srgFrmPulseWidth)
&&(hwSetup->clkset->srgFrmPeriod == \
hwSetupRead->clkset->srgFrmPeriod)
&&(hwSetup->clkset->srgClkDivide == \
hwSetupRead->clkset->srgClkDivide)
&&(hwSetup->clkset->srgClkSync == \
hwSetupRead->clkset->srgClkSync)
&&(hwSetup->clkset->srgInputClkMode == \
hwSetupRead->clkset->srgInputClkMode)
&&(hwSetup->clkset->srgClkPolarity == \
hwSetupRead->clkset->srgClkPolarity)
&&(hwSetup->clkset->srgTxFrmSyncMode == \
hwSetupRead->clkset->srgTxFrmSyncMode))) {
status = CSL_ESYS_FAIL;
}
}
/* Check the mcbsp multichannel setup parameters */
if (hwSetupRead->mulCh != NULL) {
if(!((hwSetup->mulCh->rxMulChSel == hwSetupRead->mulCh->rxMulChSel)
&&(hwSetup->mulCh->txMulChSel == hwSetupRead->mulCh->txMulChSel)
&&(hwSetup->mulCh->rxPartition == hwSetupRead->mulCh->rxPartition)
&&(hwSetup->mulCh->rxPartABlk == hwSetupRead->mulCh->rxPartABlk)
&&(hwSetup->mulCh->rxPartBBlk == hwSetupRead->mulCh->rxPartBBlk)
&&(hwSetup->mulCh->txPartition == hwSetupRead->mulCh->txPartition)
&&(hwSetup->mulCh->txPartABlk == hwSetupRead->mulCh->txPartABlk)
&&(hwSetup->mulCh->txPartBBlk == \
hwSetupRead->mulCh->txPartBBlk))) {
status = !CSL_SOK;
}
}
/* Check the mcbsp emulation mode setup parameters */
if(!((hwSetup->emumode == hwSetupRead->emumode ) &&
(hwSetup->extendSetup == hwSetupRead->extendSetup))) {
status = CSL_ESYS_FAIL;
}
return status;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -