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

📄 csl_mcbsphwsetup.c

📁 Dm6455 driver,magbe useful to you!
💻 C
字号:
/*  ============================================================================
 *   Copyright (c) Texas Instruments Inc 2002, 2003, 2004, 2005
 *
 *   Use of this software is controlled by the terms and conditions found in the
 *   license agreement under which this software has been supplied.
 *   ===========================================================================
 */
 
/** ============================================================================
 *   @file  csl_mcbspHwSetup.c
 *
 *   @path  $(CSLPATH)\src\mcbsp
 *
 *   @desc  File for functional layer of CSL API CSL_mcbspHwSetup()
 *
 */

/*  ============================================================================
 *  Revision History
 *  ================
 *  July 04, 2005 ds       - Removed support for DX Mode. Hence removed
 *                           dxState from CSL_McbspHwSetup 
 *                         - Removed support for enhanced sample clock mode
 *  Feb 02 , 2006 ds       - Supported the Transmit & Receive Int Mode
 *  ============================================================================ 
 */

#include <csl_mcbsp.h>

/** ============================================================================
 *   @n@b CSL_mcbspHwSetup
 *
 *   @b Description
 *   @n Configures the MCBSP using the values passed in the setup structure.
 *
 *   @b Arguments
 *   @verbatim
            hMcbsp          MCBSP handle returned by successful 'open'
 
            setup           Pointer to setup structure
     @endverbatim
 *
 *   <b> Return Value </b>  CSL_Status 
 *   @li                    CSL_SOK            - Hwsetup successful
 *   @li                    CSL_ESYS_INVPARAMS - The param passed is invalid
 *   @li                    CSL_ESYS_BADHANDLE - The handle passed is invalid
 *                                                
 *   <b> Pre Condition </b>
 *   @n  CSL_mcbspInit() and CSL_mcbspOpen() must be called successfully
 *       in that order before CSL_mcbspHwSetup() can be called.
 *
 *   <b> Post Condition </b>
 *   @n  Mcbsp registers are configured according to the hardware setup 
 *       parameters
 *       
 *   @b Modifies
 *   @n MCBSP registers
 *
 *   @b Example
 *   @verbatim
            CSL_mcbspHandle     hMcbsp;
            CSL_McbspObj        mcbspObj;
            CSL_McbspHwSetup    hwSetup = CSL_MCBSP_HWSETUP_DEFAULTS;
            CSL_Status          status;
            
            // Init Successfully done
            CSL_mcbspInit (NULL);
            
            // Open Successfully done
            hMcbsp = CSL_mcbspOpen (&mcbspObj, CSL_MCBSP_0, NULL, &status);
            
            CSL_mcbspHwSetup(hMcbsp, &hwSetup);
            ...

     @endverbatim
 * =============================================================================
 */
#pragma CODE_SECTION (CSL_mcbspHwSetup, ".text:csl_section:mcbsp");
CSL_Status  CSL_mcbspHwSetup (
    CSL_McbspHandle     hMcbsp,
    CSL_McbspHwSetup    *setup
)
{
    CSL_Status        status    = CSL_SOK;
    CSL_McbspRegsOvly mcbspRegs =  hMcbsp->regs; 
    
    if(setup == NULL) {
        status = CSL_ESYS_INVPARAMS;
    }
    else if (hMcbsp == NULL) {
        status = CSL_ESYS_BADHANDLE;
    }
    else {
        /* 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);
                    
            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)
                          | 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.numPhases )                         
                     | 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 );
                    
            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.numPhases )
                         | 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 );
    
            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_XMCM, multiChCfg.txMulChSel) 
                             | CSL_FMK( MCBSP_MCR_XMCME, multiChCfg.txPartition)
                             | CSL_FMK( MCBSP_MCR_XPABLK, multiChCfg.txPartABlk)
                             | CSL_FMK( MCBSP_MCR_XPBBLK, multiChCfg.txPartBBlk);       
        }  
    }

    return(status);
}

⌨️ 快捷键说明

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