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

📄 bbu_dd_edmaadl.c

📁 DSP芯片自检测程序
💻 C
📖 第 1 页 / 共 2 页
字号:
/*******************************************************************************
* COPYRIGHT (C)             中国普天研究院									   *
********************************************************************************
* 源文件名: BBU_DD_EdmaAdl.c                                                   *
* 功能描述:EDMA Channel Operation Module                                      *
* 编写者:louyajun                                                             *
* 版本:1.0.0                                                                  *
* 编制日期:07/08/2004                                                         *
* 说明:                                                                       *
* 修改历史:www.tiengineer.com                                                 *
*                                                                              *
*******************************************************************************/
#include "BBU_DD_EdmaCsl.h"

/******************************************************************************\
* EDMA API Function Declarations
\******************************************************************************/
CSLAPI void   EDMA_config(EDMA_Handle hEdma, EDMA_ParaConfig *config);
CSLAPI void   EDMA_getConfig(EDMA_Handle hEdma, EDMA_ParaConfig *config);
CSLAPI void   EDMA_chain(EDMA_Handle parent, EDMA_Handle nextChannel,Sint32 flag);
CSLAPI void   EDMA_clearParameter(Uint32 val);
CSLAPI EDMA_Handle EDMA_open(Sint32 chaNum);
CSLAPI void   EDMA_close(EDMA_Handle hEdma);
CSLAPI void   EDMA_reset(EDMA_Handle hEdma);
CSLAPI void   EDMA_resetAll(void);
CSLAPI EDMA_Handle EDMA_allocLink(Sint32 linkNum);
CSLAPI void   EDMA_freeLink(EDMA_Handle hEdma);
CSLAPI void   EDMA_intEnable(Sint32 tccIntNum);
CSLAPI void   EDMA_intDisable(Sint32 tccIntNum);
CSLAPI void   EDMA_intClear(Sint32 tccIntNum);
CSLAPI Uint32 EDMA_intStatus(Sint32 tccIntNum);
CSLAPI void   EDMA_intResetAll(void);
CSLAPI void   QDMA_config(EDMA_ParaConfig *config);
CSLAPI void   QDMA_getConfig(EDMA_ParaConfig *config);
CSLAPI void   EDMA_init(void);

/******************************************************************************\
* EDMA API Function Definitions
\******************************************************************************/
/*******************************************************************************
* 函数名称: EDMA_config      				            			           *
* 函数描述: Config a EDMA Channel in ParaRAM                                   *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* hEdma           EDMA_Handle      in		Handle for EDMA Channel            *
* config	   EDMA_ParaConfig*    in		Configuration structure for EDMA   *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EDMA_config(EDMA_Handle hEdma, EDMA_ParaConfig *config)
{
Uint32 gie;
register Uint32 x0,x1,x2,x3,x4,x5;

    gie = IRQ_globalDisable();
         
    if ((hEdma & EDMA_TYPE_C) | (hEdma & EDMA_TYPE_T))
    {
        x0 = config->opt;
        x1 = config->src;
        x2 = config->cnt;
        x3 = config->dst;
        x4 = config->idx;
        x5 = config->rld;

        EDMA_RSETH(hEdma,OPT,EDMA_OPT_DEFAULT);
        EDMA_RSETH(hEdma,SRC,x1);
        EDMA_RSETH(hEdma,CNT,x2);
        EDMA_RSETH(hEdma,DST,x3);
        EDMA_RSETH(hEdma,IDX,x4);
        EDMA_RSETH(hEdma,RLD,x5);
        EDMA_RSETH(hEdma,OPT,x0);
    }

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

/*******************************************************************************
* 函数名称: EDMA_getConfig      			            			           *
* 函数描述: Get a EDMA Channel Configuration from ParaRAM                      *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* hEdma           EDMA_Handle      in		Handle for EDMA Channel            *
* config	   EDMA_ParaConfig*    out		Configuration structure for EDMA   *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EDMA_getConfig(EDMA_Handle hEdma, EDMA_ParaConfig *config)
{
Uint32 gie;
register Uint32 x0,x1,x2,x3,x4,x5;
    
    gie = IRQ_globalDisable();
         
    if (hEdma & EDMA_TYPE_C)
    {
        x0 = EDMA_RGETH(hEdma,OPT);
        x1 = EDMA_RGETH(hEdma,SRC);
        x2 = EDMA_RGETH(hEdma,CNT);
        x3 = EDMA_RGETH(hEdma,DST);
        x4 = EDMA_RGETH(hEdma,IDX);
        x5 = EDMA_RGETH(hEdma,RLD);
    }
    else
    {
        x0 = EDMA_OPT_DEFAULT;
        x1 = EDMA_SRC_DEFAULT;
        x2 = EDMA_CNT_DEFAULT;
        x3 = EDMA_DST_DEFAULT;
        x4 = EDMA_IDX_DEFAULT;
        x5 = EDMA_RLD_DEFAULT;
    }
    
    config->opt = x0;
    config->src = x1;
    config->cnt = x2;
    config->dst = x3;
    config->idx = x4;
    config->rld = x5;

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

/*******************************************************************************
* 函数名称: EDMA_chain      			                 			           *
* 函数描述: Chain a EDMA Channel to Parent Channel                             *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* parent           EDMA_Handle     in		Handle for parent EDMA Channel     *
* nextChannel	   EDMA_Handle     in		Handle for chained EDMA channel    *
* flag	           Sint32          in		TCC or ATCC Flag                   *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EDMA_chain(EDMA_Handle parent, EDMA_Handle nextChannel,Sint32 flag)
{
Uint32 gie;
Sint32  tccNum;

    gie = IRQ_globalDisable();  
    
    tccNum = (nextChannel & 0x00FF0000)>>16;
    if (flag == EDMA_TCC_SET)
    {
        EDMA_FSETH(parent,OPT,TCCM,(tccNum & 0x00000030) >> 4);
        EDMA_FSETH(parent,OPT,TCC,(tccNum & 0x0000000F)); 
        EDMA_FSETH(parent,OPT,TCINT,EDMA_OPT_TCINT_YES);
    }         
    
    if (flag == EDMA_ATCC_SET)
    {
        EDMA_FSETH(parent,OPT,ATCC,tccNum);
        EDMA_FSETH(parent,OPT,ATCINT,EDMA_OPT_ATCINT_YES);
    }    

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

/*******************************************************************************
* 函数名称: EDMA_clearParameter			                 			           *
* 函数描述: Clears All of EDMA Parameter RAM with the Value Specified          *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* val               Uint32         in		Value Specified to fill PaRAM      *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EDMA_clearParameter(Uint32 val)
{
Uint32 gie;
Uint32 *param;
Uint32 x;

    gie = IRQ_globalDisable();

    param = (Uint32*)EDMA_PRAM_START;
    for (x=0; x<EDMA_PRAM_SIZE>>2; x++)
    {
        param[x] = val;
    }    
  
    IRQ_globalRestore(gie);
}
/*----------------------------------------------------------------------------*/

/*******************************************************************************
* 函数名称: EDMA_open      			                    			           *
* 函数描述: Assigned a EDMA Channel to a EDMA Handle                           *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* chaNum            Sint32         in		EDMA Channel Number                *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI EDMA_Handle EDMA_open(Sint32 chaNum)
{
Uint32 gie;
Uint32 addr;
EDMA_Handle hEdma;

    gie = IRQ_globalDisable();
    
    addr = (chaNum * EDMA_ENTRY_SIZE) + EDMA_PRAM_START;
    hEdma= (addr & 0x0000FFFF) | ((chaNum<<16) & 0x00FF0000) | EDMA_TYPE_C;            
    
    IRQ_globalRestore(gie);
    
    return hEdma;
}
/*----------------------------------------------------------------------------*/

/*******************************************************************************
* 函数名称: EDMA_close      			                  			           *
* 函数描述: Closed a EDMA Channel                                              *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* hEdma           EDMA_Handle      in		Handle for EDMA Channel            *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EDMA_close(EDMA_Handle hEdma)
{
Uint32 gie;

    gie = IRQ_globalDisable();
   
    if (hEdma & EDMA_TYPE_C)
    {     
        EDMA_reset(hEdma);
    }
    
    IRQ_globalRestore(gie);
}
/*----------------------------------------------------------------------------*/

/*******************************************************************************
* 函数名称: EDMA_reset      			                  			           *
* 函数描述: Reset a EDMA Channel and Set ParaRAM to Default                    *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* hEdma           EDMA_Handle      in		Handle for EDMA Channel            *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EDMA_reset(EDMA_Handle hEdma)
{
Uint32 gie;

    gie = IRQ_globalDisable();

    EDMA_disableChannel(hEdma);
    EDMA_disableChaining(hEdma);
    EDMA_clearChannel(hEdma);
    EDMA_RSETH(hEdma,OPT,EDMA_OPT_DEFAULT);  
    EDMA_RSETH(hEdma,SRC,EDMA_SRC_DEFAULT);   
    EDMA_RSETH(hEdma,DST,EDMA_DST_DEFAULT);
    EDMA_RSETH(hEdma,CNT,EDMA_CNT_DEFAULT);
    EDMA_RSETH(hEdma,RLD,EDMA_RLD_DEFAULT);
    EDMA_RSETH(hEdma,IDX,EDMA_IDX_DEFAULT);

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

/*******************************************************************************
* 函数名称: EDMA_resetAll      			                  			           *
* 函数描述: Resets All EDMA Channels and Clearing EDMA ParaRAM                 *
* 相关文档:                                                                    *
* 参数描述: 无 						                    			           *                                                                 *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EDMA_resetAll(void)
{
Uint32 gie;

    gie = IRQ_globalDisable();
 
    /* Disabling EDMA channels and Clearing Event Registers */
    EDMA_RSET(EERL,  EDMA_EERL_EE_DEFAULT);
    EDMA_RSET(EERH,  EDMA_EERH_EE_DEFAULT);
    EDMA_RSET(CCERL, EDMA_CCERL_CCE_DEFAULT);
    EDMA_RSET(CCERH, EDMA_CCERH_CCE_DEFAULT);
    EDMA_RSET(ECRL,  0xFFFFFFFF);
    EDMA_RSET(ECRH,  0xFFFFFFFF);
   
    /* Disable and Clear All Interrupts */
    EDMA_RSET(CIERL, EDMA_CIERL_CIE_DEFAULT);
    EDMA_RSET(CIERH, EDMA_CIERH_CIE_DEFAULT);
    EDMA_RSET(CIPRL, 0xFFFFFFFF);
    EDMA_RSET(CIPRH, 0xFFFFFFFF);
  
    /* Reset the EDMA CPU Interrupt */
    IRQ_reset(IRQ_EVT_EDMAINT);
  
    /* Clear out the Parameter RAM */

⌨️ 快捷键说明

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