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

📄 csl_mcbsphwsetup.c

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

/** ==========================================================
 *   @modif    SPCR1, SPCR2, RCR1, RCR2, XCR1, XCR2, SRGR1, SRGR2, MCR1,
 */

#include <csl_mcbsp.h>

/**
 * Configures the MCBSP using the values passed in the setup structure.
 *
 * <b> Usage Constraints: </b>
 * Both @a CSL_mcbspInit() and @a CSL_mcbspOpen() must be called successfully 
 * in that order before this function can be called. The setup structure
 * consists of the logically grouped sub-structures. The main setup structure
 * as well as these sub-structures must be filled up before calling this
 * function
 *
 * @b Example:
 * @verbatim

     CSL_mcbspHandle hMcbsp;
     CSL_McbspHwSetup hwSetup = CSL_MCBSP_HWSETUP_DEFAULTS;
     ...

     // Init Successfully done
     ...
     // Open Successfully done
     ...
     CSL_mcbspHwSetup(hMcbsp, &hwSetup);
   @endverbatim
 *
 * @return Status of the setup operation
 *
*/
#pragma CODE_SECTION (CSL_mcbspHwSetup, ".text:csl_section:mcbsp");
CSL_Status  CSL_mcbspHwSetup(
    /** MCBSP handle returned by successful 'open' */   
    CSL_McbspHandle                         hMcbsp,
    /** Pointer to the intialized setup structure  */
    CSL_McbspHwSetup                        *setup
)
{
    CSL_McbspRegsOvly mcbspRegs =  hMcbsp->regs; 
    if(setup == NULL) return (CSL_ESYS_INVPARAMS);

    if (hMcbsp == NULL)
        return CSL_ESYS_BADHANDLE;

    /* Set Emulation Mode Configuration */
    CSL_FINS(mcbspRegs->SPCR, MCBSP_SPCR_SOFT, setup->emumode );
    CSL_FINS(mcbspRegs->SPCR, MCBSP_SPCR_FREE, setup->emumode >> 1);

    /*Clock and Frame Sync Configuration*/
    if(setup->clkset != NULL ){
       CSL_McbspClkSetup clkCfg = *(setup->clkset);

        mcbspRegs->PCR =  CSL_FMK( MCBSP_PCR_FSRM, clkCfg.frmSyncRxMode )|
                     CSL_FMK( MCBSP_PCR_FSXM, clkCfg.frmSyncTxMode )|
                     CSL_FMK( MCBSP_PCR_FSRP, clkCfg.frmSyncRxPolarity )|
                     CSL_FMK( MCBSP_PCR_FSXP, clkCfg.frmSyncTxPolarity )|
                     CSL_FMK( MCBSP_PCR_CLKRM, clkCfg.clkRxMode )|
                     CSL_FMK( MCBSP_PCR_CLKXM, clkCfg.clkTxMode )|
                     CSL_FMK( MCBSP_PCR_CLKRP, clkCfg.clkRxPolarity )|
                     CSL_FMK( MCBSP_PCR_CLKXP, clkCfg.clkTxPolarity)|
                     CSL_FMK( MCBSP_PCR_SCLKME, clkCfg.srgInputClkMode >> 0x1 );
        
        
        mcbspRegs->SRGR = CSL_FMK( MCBSP_SRGR_FWID, clkCfg.srgFrmPulseWidth )|
                     CSL_FMK( MCBSP_SRGR_CLKGDV, clkCfg.srgClkDivide )|
                     CSL_FMK( MCBSP_SRGR_FPER, clkCfg.srgFrmPeriod )|
                     CSL_FMK( MCBSP_SRGR_GSYNC, clkCfg.srgClkSync )|
                     CSL_FMK( MCBSP_SRGR_CLKSM, clkCfg.srgInputClkMode & 0x1)|
                     CSL_FMK( MCBSP_SRGR_CLKSP, clkCfg.srgClkPolarity )|
                     CSL_FMK( MCBSP_SRGR_FSGM, clkCfg.srgTxFrmSyncMode );
         
    }

    /*McBSP Global Configuration*/
    if(setup->global!= NULL)
    {
        CSL_McbspGlobalSetup globalCfg = *(setup->global);
        CSL_FINS( mcbspRegs->SPCR, MCBSP_SPCR_DLB, globalCfg.dlbMode );
        CSL_FINS( mcbspRegs->SPCR, MCBSP_SPCR_CLKSTP, globalCfg.clkStopMode );
        CSL_FINS( mcbspRegs->PCR, MCBSP_PCR_RIOEN, globalCfg.ioEnableMode & 0x1 );
        CSL_FINS( mcbspRegs->PCR, MCBSP_PCR_XIOEN, globalCfg.ioEnableMode >> 1 );

    }


    /*Transmitter Configuration*/

    if(setup->txdataset != NULL)
    {
        CSL_McbspDataSetup transmitterCfg = *(setup->txdataset);

        CSL_FINS( mcbspRegs->SPCR, MCBSP_SPCR_XRST, 0 );
        
        mcbspRegs->XCR = CSL_FMK( MCBSP_XCR_XWDLEN1, transmitterCfg.wordLength1 )|
                 CSL_FMK( MCBSP_XCR_XWDREVRS, transmitterCfg.wordReverse)|
                 CSL_FMK( MCBSP_XCR_XPHASE, transmitterCfg.phaseNum )|
                 CSL_FMK( MCBSP_XCR_XWDLEN2, transmitterCfg.wordLength2 )|
                 CSL_FMK( MCBSP_XCR_XFRLEN2, (transmitterCfg.frmLength2 - 1) )|
                 CSL_FMK( MCBSP_XCR_XFIG, transmitterCfg.frmSyncIgn )|
                 CSL_FMK( MCBSP_XCR_XCOMPAND, transmitterCfg.compand )|
                 CSL_FMK( MCBSP_XCR_XDATDLY, transmitterCfg.dataDelay );
        
        if (setup->mulCh && setup->mulCh->tx512channel) {
          CSL_FINS ( mcbspRegs->XFLR, MCBSP_XFLR_XFRLEN3, (transmitterCfg.frmLength1 - 1)); 
        } else {
          CSL_FINS( mcbspRegs->XCR, MCBSP_XCR_XFRLEN1, (transmitterCfg.frmLength1 - 1) );   
        }
        CSL_FINS( mcbspRegs->SPCR, MCBSP_SPCR_DXENA, transmitterCfg.rjust_dxenable );
        CSL_FINS( mcbspRegs->SPCR, MCBSP_SPCR_XINTM, transmitterCfg.IntEvent );
    }

    /*Receiver Configuration*/
    if(setup->rxdataset != NULL)
    {
        CSL_McbspDataSetup receiverCfg = *(setup->rxdataset);

        CSL_FINS( mcbspRegs->SPCR, MCBSP_SPCR_RRST, 0 );
        mcbspRegs->RCR = CSL_FMK( MCBSP_RCR_RWDLEN1, receiverCfg.wordLength1 )|
                 CSL_FMK( MCBSP_RCR_RWDREVRS, receiverCfg.wordReverse )| 
                 CSL_FMK( MCBSP_RCR_RPHASE, receiverCfg.phaseNum )|
                 CSL_FMK( MCBSP_RCR_RWDLEN2, receiverCfg.wordLength2 )|
                 CSL_FMK( MCBSP_RCR_RFRLEN2, (receiverCfg.frmLength2 - 1) )|
                 CSL_FMK( MCBSP_RCR_RFIG, receiverCfg.frmSyncIgn )|
                 CSL_FMK( MCBSP_RCR_RCOMPAND, receiverCfg.compand )|
                 CSL_FMK( MCBSP_RCR_RDATDLY, receiverCfg.dataDelay );
        
        
        if (setup->mulCh && setup->mulCh->rx512channel) {
          CSL_FINS ( mcbspRegs->RFLR, MCBSP_RFLR_RFRLEN3, (receiverCfg.frmLength1 - 1));    
        } else {
          CSL_FINS( mcbspRegs->RCR, MCBSP_RCR_RFRLEN1, (receiverCfg.frmLength1 - 1) );  
        }
       
        CSL_FINS( mcbspRegs->SPCR, MCBSP_SPCR_RJUST, receiverCfg.rjust_dxenable );
        CSL_FINS( mcbspRegs->SPCR, MCBSP_SPCR_RINTM, receiverCfg.IntEvent );
    }

    /* Multi Channel Configuration */
    if(setup->mulCh != NULL)
    {
        CSL_McbspMulChSetup multiChCfg = *(setup->mulCh);
        mcbspRegs->MCR = CSL_FMK( MCBSP_MCR_RMCM, multiChCfg.rxMulChSel )|
                  CSL_FMK( MCBSP_MCR_RMCME, multiChCfg.rxPartition )|
                  CSL_FMK( MCBSP_MCR_RPABLK, multiChCfg.rxPartABlk )|
                  CSL_FMK( MCBSP_MCR_RPBBLK, multiChCfg.rxPartBBlk )|
                  CSL_FMK( MCBSP_MCR_REMODE, multiChCfg.rx512channel)|
                  CSL_FMK( MCBSP_MCR_XMCM, multiChCfg.txMulChSel  )|
                  CSL_FMK( MCBSP_MCR_XMCME, multiChCfg.txPartition )|
                  CSL_FMK( MCBSP_MCR_XPABLK, multiChCfg.txPartABlk )|
                  CSL_FMK( MCBSP_MCR_XPBBLK, multiChCfg.txPartBBlk )|
                  CSL_FMK( MCBSP_MCR_XEMODE, multiChCfg.tx512channel)|
                  CSL_FMK( MCBSP_MCR_DX, setup->dxState);
       
    }
  
    mcbspRegs->RSYNCCNT = setup->rxsynccount;
    mcbspRegs->XSYNCCNT = setup->txsynccount;
    return(CSL_SOK);
}

⌨️ 快捷键说明

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