⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csl_mcbspgethwsetup.c

📁 TI达芬奇dm644x各硬件模块测试代码
💻 C
字号:
/** \file csl_mcbspGetHwSetup.c
 *
 *  \brief    File for functional layer of CSL API \a CSL_mcbspGetHwSetup()
 *
 *  Description
 *    - The \a CSL_mcbspGetHwSetup() function contains definition of the 
 *      functional layer API
 *
 *  Path: \\(CSLPATH)\\ipmodules\\mcbsp\\src
 *
 */

#include <csl_mcbsp.h>

/**
 * Gets the status of some or all of the setup-parameters of MCBSP.
 * To get the status of complete MCBSP h/w setup, all the sub-structure
 * pointers inside the main HwSetup structure, should be non-NULL. 
 * 
 * <b> Usage Constraints: </b>
 * Both @a CSL_mcbspInit() and @a CSL_mcbspOpen() must be called successfully
 * in that order before @a CSL_mcbspGetHwSetup() can be called. 
 * 
 * @b Example:
 * @verbatim
  
   CSL_McbspHandle hMcbsp;
   CSL_Status status;

   CSL_McbspGlobalSetup gblSetup;
   CSL_McbspClkSetup clkSetup;
   CSL_McbspEmu emuMode;
   CSL_McbspHwSetup readSetup = {
       &gblSetup,
       NULL,    // RX Data-setup structure is not required
       NULL,    // TX Data-setup structure is not required
       &clkSetup,
       NULL,    // Multichannel-setup structure is not required
       emuMode
   };
   ...
   status = CSL_mcbspGetHwSetup(hMcbsp, &readSetup);
   
   @endverbatim
 * 
 * @return Status of the operation
 * 
 */
#pragma CODE_SECTION (CSL_mcbspGetHwSetup, ".text:csl_section:mcbsp");
CSL_Status  CSL_mcbspGetHwSetup(
    /** MCBSP handle returned by successful 'open' */   
    CSL_McbspHandle                         hMcbsp,
    /** Pointer to @a CSL_McbspHwSetup structure to read the setup parameters*/
    CSL_McbspHwSetup                       *myHwSetup
)
{
    CSL_Status status = CSL_SOK;
    CSL_McbspRegsOvly mcbspRegs = hMcbsp->regs;
    if (myHwSetup->global != NULL)
    {
        CSL_McbspGlobalSetup *gbl = myHwSetup->global;

        gbl->dlbMode = (CSL_McbspDlbMode) CSL_FEXT(mcbspRegs->SPCR, 
                                                   MCBSP_SPCR_DLB);
        gbl->clkStopMode = (CSL_McbspClkStp) CSL_FEXT(mcbspRegs->SPCR, 
                                                      MCBSP_SPCR_CLKSTP);
        gbl->ioEnableMode = (CSL_McbspIOMode) (   CSL_FEXT(mcbspRegs->PCR, 
                                                           MCBSP_PCR_RIOEN)
                                                | (CSL_FEXT(mcbspRegs->PCR, 
                                                           MCBSP_PCR_XIOEN)
                                                   << 1)
                                              );
    }
    if (myHwSetup->rxdataset != NULL)
    {
        CSL_McbspDataSetup *data = myHwSetup->rxdataset;

        data->phaseNum = (CSL_McbspPhase) CSL_FEXT(mcbspRegs->RCR, 
                                                   MCBSP_RCR_RPHASE);
        data->wordLength1 = (CSL_McbspWordLen) CSL_FEXT(mcbspRegs->RCR, 
                                                        MCBSP_RCR_RWDLEN1);
        data->wordLength2 = (CSL_McbspWordLen) CSL_FEXT(mcbspRegs->RCR, 
                                                        MCBSP_RCR_RWDLEN2);
        data->frmLength1 =   CSL_FEXT(mcbspRegs->RCR, MCBSP_RCR_RFRLEN1)
                           + 1;
        data->frmLength2 =   CSL_FEXT(mcbspRegs->RCR, MCBSP_RCR_RFRLEN2) 
                           + 1;
        data->frmSyncIgn = (CSL_McbspFrmSync) CSL_FEXT(mcbspRegs->RCR, 
                                                       MCBSP_RCR_RFIG);
        data->compand = (CSL_McbspCompand) CSL_FEXT(mcbspRegs->RCR, 
                                                    MCBSP_RCR_RCOMPAND);
        data->dataDelay = (CSL_McbspDataDelay) CSL_FEXT(mcbspRegs->RCR, 
                                                        MCBSP_RCR_RDATDLY);
        data->rjust_dxenable = 
           (CSL_McbspRjustDxena) CSL_FEXT(mcbspRegs->SPCR, 
                                          MCBSP_SPCR_RJUST);
        data->IntEvent = (CSL_McbspIntMode) CSL_FEXT(mcbspRegs->SPCR,
                                                     MCBSP_SPCR_RINTM);
        data->wordReverse = (CSL_McbspBitReversal)CSL_FEXT (mcbspRegs->RCR,
                                                            MCBSP_RCR_RWDREVRS);
    }
    if (myHwSetup->txdataset != NULL)
    {
        CSL_McbspDataSetup *data = myHwSetup->txdataset;

        data->phaseNum = (CSL_McbspPhase) CSL_FEXT(mcbspRegs->XCR, 
                                                   MCBSP_XCR_XPHASE);
        data->wordLength1 = (CSL_McbspWordLen) CSL_FEXT(mcbspRegs->XCR,
                                                        MCBSP_XCR_XWDLEN1);
        data->wordLength2 = (CSL_McbspWordLen) CSL_FEXT(mcbspRegs->XCR, 
                                                        MCBSP_XCR_XWDLEN2);
        data->frmLength1 =   CSL_FEXT(mcbspRegs->XCR, MCBSP_XCR_XFRLEN1)
                           + 1;
        data->frmLength2 =   CSL_FEXT(mcbspRegs->XCR, MCBSP_XCR_XFRLEN2)
                           + 1;
        data->frmSyncIgn = (CSL_McbspFrmSync) CSL_FEXT(mcbspRegs->XCR,
                                                       MCBSP_XCR_XFIG);
        data->compand = (CSL_McbspCompand) CSL_FEXT(mcbspRegs->XCR,
                                                    MCBSP_XCR_XCOMPAND);
        data->dataDelay = (CSL_McbspDataDelay) CSL_FEXT(mcbspRegs->XCR, 
                                                        MCBSP_XCR_XDATDLY);
        data->rjust_dxenable = 
           (CSL_McbspRjustDxena) CSL_FEXT(mcbspRegs->SPCR,
                                          MCBSP_SPCR_DXENA);
        data->IntEvent = (CSL_McbspIntMode) CSL_FEXT(mcbspRegs->SPCR, 
                                                     MCBSP_SPCR_XINTM);
        data->wordReverse = (CSL_McbspBitReversal)CSL_FEXT (mcbspRegs->XCR,
                                                            MCBSP_XCR_XWDREVRS);                                                     
    }
    if (myHwSetup->clkset != NULL)
    {
        CSL_McbspClkSetup *clk = myHwSetup->clkset;

        clk->frmSyncRxMode = (CSL_McbspFsClkMode) CSL_FEXT(mcbspRegs->PCR,
                                                           MCBSP_PCR_FSRM);
        clk->frmSyncTxMode = (CSL_McbspFsClkMode) CSL_FEXT(mcbspRegs->PCR, 
                                                           MCBSP_PCR_FSXM);
        clk->frmSyncRxPolarity = (CSL_McbspFsPol) CSL_FEXT(mcbspRegs->PCR,
                                                           MCBSP_PCR_FSRP);
        clk->frmSyncTxPolarity = (CSL_McbspFsPol) CSL_FEXT(mcbspRegs->PCR,
                                                           MCBSP_PCR_FSXP);
        clk->clkRxMode = (CSL_McbspTxRxClkMode) CSL_FEXT(mcbspRegs->PCR,
                                                         MCBSP_PCR_CLKRM);
        clk->clkTxMode = (CSL_McbspTxRxClkMode) CSL_FEXT(mcbspRegs->PCR, 
                                                         MCBSP_PCR_CLKXM);
        clk->clkRxPolarity = (CSL_McbspClkPol) CSL_FEXT(mcbspRegs->PCR,
                                                        MCBSP_PCR_CLKRP);
        clk->clkTxPolarity = (CSL_McbspClkPol) CSL_FEXT(mcbspRegs->PCR,
                                                        MCBSP_PCR_CLKXP);
        clk->srgFrmPulseWidth = CSL_FEXT(mcbspRegs->SRGR, MCBSP_SRGR_FWID);
        clk->srgFrmPeriod = CSL_FEXT(mcbspRegs->SRGR, MCBSP_SRGR_FPER);
        clk->srgClkDivide = CSL_FEXT(mcbspRegs->SRGR, MCBSP_SRGR_CLKGDV);
        clk->srgClkSync = (CSL_McbspClkgSyncMode) CSL_FEXT(mcbspRegs->SRGR,
                                                           MCBSP_SRGR_GSYNC);
        clk->srgInputClkMode = 
           (CSL_McbspSrgClk) (  CSL_FEXT(mcbspRegs->SRGR, MCBSP_SRGR_CLKSM)
                              | (CSL_FEXT(mcbspRegs->PCR, MCBSP_PCR_SCLKME)
                                 >> 0x1 )
                             );
        clk->srgClkPolarity = (CSL_McbspClkPol) CSL_FEXT(mcbspRegs->SRGR,
                                                         MCBSP_SRGR_CLKSP);
        clk->srgTxFrmSyncMode = 
           (CSL_McbspTxFsMode) CSL_FEXT(mcbspRegs->SRGR, MCBSP_SRGR_FSGM);
    }
    if (myHwSetup->mulCh != NULL)
    {
        CSL_McbspMulChSetup *mulch = myHwSetup->mulCh;

        mulch->rxMulChSel = CSL_FEXT(mcbspRegs->MCR, MCBSP_MCR_RMCM);
        mulch->txMulChSel = CSL_FEXT(mcbspRegs->MCR, MCBSP_MCR_XMCM);
        mulch->rxPartition = (CSL_McbspPartMode) CSL_FEXT(mcbspRegs->MCR,
                                                          MCBSP_MCR_RMCME);
        mulch->rxPartABlk = (CSL_McbspPABlk) CSL_FEXT(mcbspRegs->MCR,
                                                      MCBSP_MCR_RPABLK);
        mulch->rxPartBBlk = (CSL_McbspPBBlk) CSL_FEXT(mcbspRegs->MCR, 
                                                      MCBSP_MCR_RPBBLK);
        mulch->txPartition = (CSL_McbspPartMode) CSL_FEXT(mcbspRegs->MCR,
                                                          MCBSP_MCR_XMCME);
        mulch->txPartABlk = (CSL_McbspPABlk) CSL_FEXT(mcbspRegs->MCR,
                                                      MCBSP_MCR_XPABLK);
        mulch->txPartBBlk = (CSL_McbspPBBlk) CSL_FEXT(mcbspRegs->MCR, 
                                                      MCBSP_MCR_XPBBLK);
        mulch->rx512channel = CSL_FEXT (mcbspRegs->MCR, MCBSP_MCR_REMODE); 
        mulch->tx512channel = CSL_FEXT (mcbspRegs->MCR, MCBSP_MCR_XEMODE);                                                               
    }
    {
        Uint16 tempValue;
          
        tempValue =   CSL_FEXT( mcbspRegs->SPCR, MCBSP_SPCR_SOFT)
                   | (CSL_FEXT( mcbspRegs->SPCR, MCBSP_SPCR_FREE) << 1);
        if (tempValue == 3) tempValue = 2;
        myHwSetup->emumode = (CSL_McbspEmu) tempValue;
    }
 
    myHwSetup->dxState = (CSL_McbspDxState)CSL_FEXT( mcbspRegs->MCR,
                                                     MCBSP_MCR_DX); 
    myHwSetup->rxsynccount = mcbspRegs->RSYNCCNT;
    myHwSetup->txsynccount = mcbspRegs->XSYNCCNT;
    myHwSetup->extendSetup = NULL;
    return(status);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -