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

📄 bbu_dd_mcbspadl.c

📁 本源代码为TI 公司TMS320C6416 DSP芯片自检测程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************
* COPYRIGHT (C)             中国普天研究院									   *
********************************************************************************
* 源文件名: BBU_DD_McbspAdl.c                                                  *
* 功能描述:Mcbsp Port Operation Module                                        *
* 编写者:louyajun                                                             *
* 版本:1.0.0                                                                  *
* 编制日期:07/21/2004                                                         *
* 说明:                                                                       *
* 修改历史:                                                                   *
*                                                                              *
*******************************************************************************/
#include "BBU_DD_McbspCsl.h"
#include "BBU_DD_EdmaCsl.h"
#include "BBU_DD_Post.h"

/******************************************************************************\
* McBSP Static Global Variable Definitions
\******************************************************************************/
#pragma DATA_SECTION(edmaMcbspXHandle,".gvariable");
EDMA_Handle  edmaMcbspXHandle[MCBSP_PORT_CNT];

#pragma DATA_SECTION(edmaMcbspRHandle,".gvariable");
EDMA_Handle  edmaMcbspRHandle[MCBSP_PORT_CNT];

#pragma DATA_SECTION(edmaMcbspRLHandle1,".gvariable");
EDMA_Handle  edmaMcbspRLHandle1[MCBSP_PORT_CNT];

#pragma DATA_SECTION(edmaMcbspRLHandle2,".gvariable");
EDMA_Handle  edmaMcbspRLHandle2[MCBSP_PORT_CNT];

#pragma DATA_SECTION(mcbspPortHandle,".gvariable");
static MCBSP_Handle mcbspPortHandle[MCBSP_PORT_CNT] = {MCBSP_DEVICE_ENTRY(0),
                                                       MCBSP_DEVICE_ENTRY(1),
                                                       MCBSP_DEVICE_ENTRY(2)
                                                      };         

#pragma DATA_SECTION(mcbspConfig,".gvariable");
#if MCBSP_LOOPBACK_MODE
    /* McBSP port config structures for CPB external digital loopback operation */
    static MCBSP_Config mcbspConfig[MCBSP_PORT_CNT] = { 
                        { /*  SPCR        RCR         XCR         SRGR  */
                            0x01302030, 0x00050FA0, 0x00050FA0, 0x12000000,
                          /*  MCR         RCERE0      RCERE1      RCERE2*/  
                            0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  RCERE3      XCERE0      XCERE1      XCERE2*/    
                            0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  XCERE3      PCR                           */  
                            0x00000000, 0x00000A00,                        },
                        { /*  SPCR        RCR         XCR         SRGR  */
                            0x01302030, 0x00050FA0, 0x00050FA0, 0x12000000,
                          /*  MCR         RCERE0      RCERE1      RCERE2*/  
                            0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  RCERE3      XCERE0      XCERE1      XCERE2*/    
                            0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  XCERE3      PCR                           */  
                            0x00000000, 0x00000A00,                        },
                        { /*  SPCR        RCR         XCR         SRGR  */
                            0x01302030, 0x00050FA0, 0x00050FA0, 0x12000000,
                          /*  MCR         RCERE0      RCERE1      RCERE2*/  
                            0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  RCERE3      XCERE0      XCERE1      XCERE2*/    
                            0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  XCERE3      PCR                           */  
                            0x00000000, 0x00000A00,                        }}; 
#else
    /* McBSP port config structures for CPB internal digital loopback operation */
    static MCBSP_Config mcbspConfig[MCBSP_PORT_CNT] = { 
                        { /*  SPCR        RCR         XCR         SRGR  */
                            0x0130A030, 0x00050FA0, 0x00050FA0, 0x32000005,
                          /*  MCR         RCERE0      RCERE1      RCERE2*/  
                            0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  RCERE3      XCERE0      XCERE1      XCERE2*/    
                            0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  XCERE3      PCR                           */  
                            0x00000000, 0x00000F00,                        },
                        { /*  SPCR        RCR         XCR         SRGR  */
                            0x0130A030, 0x00050FA0, 0x00050FA0, 0x32000005,
                          /*  MCR         RCERE0      RCERE1      RCERE2*/  
                            0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  RCERE3      XCERE0      XCERE1      XCERE2*/    
                            0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  XCERE3      PCR                           */  
                            0x00000000, 0x00000F00,                        },
                        { /*  SPCR        RCR         XCR         SRGR  */
                            0x0130A030, 0x00050FA0, 0x00050FA0, 0x32000005,
                          /*  MCR         RCERE0      RCERE1      RCERE2*/  
                            0x00010001, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  RCERE3      XCERE0      XCERE1      XCERE2*/    
                            0x00000000, 0x0000FFFF, 0x00000000, 0x00000000,
                          /*  XCERE3      PCR                           */  
                            0x00000000, 0x00000F00                         }}; 
#endif                                                                  
/*----------------------------------------------------------------------------*/

/******************************************************************************\
* MCBSP API Function Declarations
\******************************************************************************/
CSLAPI void MCBSP_config(MCBSP_Handle *hMcbsp, MCBSP_Config *config);
CSLAPI void MCBSP_getConfig(MCBSP_Handle *hMcbsp, MCBSP_Config *config);
CSLAPI void MCBSP_reset(MCBSP_Handle *hMcbsp);
CSLAPI MCBSP_Handle *MCBSP_open(Sint32 portNum);
CSLAPI void MCBSP_close(MCBSP_Handle *hMcbsp);
CSLAPI MCBSP_Handle *MCBSP_init(Sint32 portNum);
CSLAPI void MCBSP_startEdmaX(EDMA_Handle hEdma,EDMA_McbspXConfig *config);
CSLAPI void MCBSP_startEdmaR(EDMA_Handle hEdma,EDMA_McbspRConfig *config);

/******************************************************************************\
* MCBSP API Function Definitions
\******************************************************************************/
/*******************************************************************************
* 函数名称: MCBSP_config      				            			           *
* 函数描述: Setup the McBSP Device using the configuration structure           *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* hMcbsp       MCBSP_Handle*       in		Handle for Mcbsp Device            *
* config	   MCBSP_Config*       in		Configuration structure for Mcbsp  *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void MCBSP_config(MCBSP_Handle *hMcbsp, MCBSP_Config *config)
{
Uint32 gie;
volatile Uint32 *base = (volatile Uint32 *)(hMcbsp->baseAddr);
register Uint32 x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13;

    gie = IRQ_globalDisable();

    /* the compiler generates more efficient code if the loads */
    /* and stores are grouped together rather than intermixed  */
    x0  = config->spcr;
    x1  = config->rcr;
    x2  = config->xcr;
    x3  = config->srgr;
    x4  = config->mcr;
    x5  = config->rcere0;
    x6  = config->rcere1;
    x7  = config->rcere2;
    x8  = config->rcere3;
    x9  = config->xcere0;
    x10 = config->xcere1;
    x11 = config->xcere2;
    x12 = config->xcere3;
    x13 = config->pcr;

    base[MCBSP_SPCR_OFFSET]   = MCBSP_SPCR_DEFAULT;
    base[MCBSP_RCR_OFFSET]    = x1;
    base[MCBSP_XCR_OFFSET]    = x2;
    base[MCBSP_SRGR_OFFSET]   = x3;
    base[MCBSP_MCR_OFFSET]    = x4;
    base[MCBSP_RCERE0_OFFSET] = x5;
    base[MCBSP_RCERE1_OFFSET] = x6;
    base[MCBSP_RCERE2_OFFSET] = x7;
    base[MCBSP_RCERE3_OFFSET] = x8;
    base[MCBSP_XCERE0_OFFSET] = x9;
    base[MCBSP_XCERE1_OFFSET] = x10;
    base[MCBSP_XCERE2_OFFSET] = x11;
    base[MCBSP_XCERE3_OFFSET] = x12;
    base[MCBSP_PCR_OFFSET]    = x13;
    base[MCBSP_SPCR_OFFSET]   = x0;

    IRQ_globalRestore(gie);
}
/*----------------------------------------------------------------------------*/

/*******************************************************************************
* 函数名称: MCBSP_getConfig      				            		           *
* 函数描述: Get a McBSP Device Configuration                                   *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* hMcbsp       MCBSP_Handle*       in		Handle for Mcbsp Device            *
* config	   MCBSP_Config*       out		Configuration structure for Mcbsp  *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void MCBSP_getConfig(MCBSP_Handle *hMcbsp, MCBSP_Config *config)
{
Uint32 gie;
volatile Uint32 *base = (volatile Uint32 *)(hMcbsp->baseAddr);
volatile MCBSP_Config *cfg = (volatile MCBSP_Config*)config;
register Uint32 x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13;

  gie = IRQ_globalDisable();

    /* the compiler generates more efficient code if the loads */
    /* and stores are grouped together rather than intermixed  */
    x0  = base[MCBSP_SPCR_OFFSET];
    x1  = base[MCBSP_RCR_OFFSET];
    x2  = base[MCBSP_XCR_OFFSET];
    x3  = base[MCBSP_SRGR_OFFSET];
    x4  = base[MCBSP_MCR_OFFSET];
    x5  = base[MCBSP_RCERE0_OFFSET];
    x6  = base[MCBSP_RCERE1_OFFSET];
    x7  = base[MCBSP_RCERE2_OFFSET];
    x8  = base[MCBSP_RCERE3_OFFSET];
    x9  = base[MCBSP_XCERE0_OFFSET];
    x10 = base[MCBSP_XCERE1_OFFSET];
    x11 = base[MCBSP_XCERE2_OFFSET];
    x12 = base[MCBSP_XCERE3_OFFSET];
    x13 = base[MCBSP_PCR_OFFSET];

    cfg->spcr   = x0;
    cfg->rcr    = x1;
    cfg->xcr    = x2;
    cfg->srgr   = x3;
    cfg->mcr    = x4;
    cfg->rcere0 = x5;
    cfg->rcere1 = x6;
    cfg->rcere2 = x7;
    cfg->rcere3 = x8;
    cfg->xcere0 = x9;
    cfg->xcere1 = x10;
    cfg->xcere2 = x11;
    cfg->xcere3 = x12;
    cfg->pcr    = x13;

    IRQ_globalRestore(gie);
}
/*----------------------------------------------------------------------------*/

/*******************************************************************************
* 函数名称: MCBSP_reset         				            		           *
* 函数描述: Resets the given McBSP Device                                      *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* hMcbsp       MCBSP_Handle*       in		Handle for Mcbsp Device            *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void MCBSP_reset(MCBSP_Handle *hMcbsp)
{
Uint32 gie;
    
    gie = IRQ_globalDisable();
    
    if (hMcbsp == MCBSP_HINV)
    {
        return;
    }
    else
    {
        MCBSP_RSETH(hMcbsp,SPCR,MCBSP_SPCR_DEFAULT);
        MCBSP_RSETH(hMcbsp,RCR, MCBSP_RCR_DEFAULT);
        MCBSP_RSETH(hMcbsp,XCR, MCBSP_XCR_DEFAULT);
        MCBSP_RSETH(hMcbsp,SRGR,MCBSP_SRGR_DEFAULT);
        MCBSP_RSETH(hMcbsp,MCR, MCBSP_MCR_DEFAULT);
        MCBSP_RSETH(hMcbsp,RCERE0,MCBSP_RCERE0_DEFAULT);
        MCBSP_RSETH(hMcbsp,RCERE1,MCBSP_RCERE1_DEFAULT);
        MCBSP_RSETH(hMcbsp,RCERE2,MCBSP_RCERE2_DEFAULT);
        MCBSP_RSETH(hMcbsp,RCERE3,MCBSP_RCERE3_DEFAULT);
        MCBSP_RSETH(hMcbsp,XCERE0,MCBSP_XCERE0_DEFAULT);
        MCBSP_RSETH(hMcbsp,XCERE1,MCBSP_XCERE1_DEFAULT);
        MCBSP_RSETH(hMcbsp,XCERE2,MCBSP_XCERE2_DEFAULT);
        MCBSP_RSETH(hMcbsp,XCERE3,MCBSP_XCERE3_DEFAULT);
        MCBSP_RSETH(hMcbsp,PCR, MCBSP_PCR_DEFAULT);
        
        IRQ_reset(hMcbsp->xmtEventId);
        IRQ_reset(hMcbsp->rcvEventId);
    }
    
    IRQ_globalRestore(gie);
}
/*----------------------------------------------------------------------------*/

/*******************************************************************************
* 函数名称: MCBSP_open           				            		           *
* 函数描述: Opens and resets a McBSP Device                                    *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* portNum           Sint32         in		McBSP Port Number                  *

⌨️ 快捷键说明

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