?? bbu_dd_edmaadl.c
字號:
/*******************************************************************************
* 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 + -