?? bbu_dd_emifaadl.c
字號(hào):
/* Open EDMA Channel for EMIFA Writing and Reading SDRAM */
edmaEmifaWSdramHandle = EDMA_open(EDMA_CHA_CPU3);
edmaEmifaRSdramHandle = EDMA_open(EDMA_CHA_CPU4);
EMIFA_config(&emifaConfig);
}
/*----------------------------------------------------------------------------*/
/*******************************************************************************
* 函數(shù)名稱: EMIFA_startEdmaDpram *
* 函數(shù)描述: EMIFA Port Starting the Specfic EDMA Channel to Write Data to *
* and Read Data from DPRAM *
* 相關(guān)文檔: *
* 參數(shù)描述: *
* 參數(shù)名 類型 輸入/輸出 描述 *
* -------- ---- --------- ----------- *
* hEdma EDMA_Handle in EDMA Handle for EMIFA Port *
* config EDMA_DpramConfig* in Pointer to EMIFA's EDMA Config Para*
* *
* 返回值: 無 *
* 說明: *
*******************************************************************************/
CSLAPI void EMIFA_startEdmaDpram(EDMA_Handle hEdma,EDMA_DpramConfig *config)
{
EDMA_ParaConfig edmaEmifaPara,edmaChainPara1,edmaChainPara2;
Uint32 tccNum,tccNum1,tccNum2;
/* Get the Transfer Complete Code of the EDMA Channel */
tccNum = (hEdma & 0x00FF0000)>>16;
/* Get the Transfer Complete Code of the Chain1 Channel */
tccNum1 = (config->hCEdma1 & 0x00FF0000)>>16;
/* Get the Transfer Complete Code of the Chain2 Channel */
tccNum2 = (config->hCEdma2 & 0x00FF0000)>>16;
/* Disable the EDMA Channel,Chain1 and Chain2 Channel Interrupt and */
/* Clear out the Interrupt Flag */
EDMA_intDisable(tccNum);
EDMA_intDisable(tccNum1);
EDMA_intDisable(tccNum2);
EDMA_intClear(tccNum);
EDMA_intClear(tccNum1);
EDMA_intClear(tccNum2);
/* Disable the EDMA Channel,Chain1 and Chain2 Channel and */
/* Clear out the Event */
EDMA_disableChannel(hEdma);
EDMA_disableChannel(config->hCEdma1);
EDMA_disableChannel(config->hCEdma2);
EDMA_clearChannel(hEdma);
EDMA_clearChannel(config->hCEdma1);
EDMA_clearChannel(config->hCEdma2);
/* Disable the EDMA Channel,Chain1 and Chain2 Channel Chain Feature */
EDMA_disableChaining(hEdma);
EDMA_disableChaining(config->hCEdma1);
EDMA_disableChaining(config->hCEdma2);
/* Constructing the Structure of EDMA Parameters */
edmaEmifaPara.opt = 0x01300001;
edmaEmifaPara.src = (Uint32)(config->sour0Add);
edmaEmifaPara.cnt = (config->eleCount0) & 0x0000FFFF;
edmaEmifaPara.dst = (Uint32)(config->dest0Add);
edmaEmifaPara.idx = 0x00000000;
edmaEmifaPara.rld = 0x00000000;
/* Constructing the Structure of Chain1 Channel Parameters */
edmaChainPara1.opt = 0x01300001;
edmaChainPara1.src = (Uint32)(config->sour1Add);
edmaChainPara1.cnt = (config->eleCount1) & 0x0000FFFF;
edmaChainPara1.dst = (Uint32)(config->dest1Add);
edmaChainPara1.idx = 0x00000000;
edmaChainPara1.rld = 0x00000000;
/* Constructing the Structure of Chain2 Channel Parameters */
edmaChainPara2.opt = 0x01300001;
edmaChainPara2.src = (Uint32)(config->sour2Add);
edmaChainPara2.cnt = (config->eleCount2) & 0x0000FFFF;
edmaChainPara2.dst = (Uint32)(config->dest2Add);
edmaChainPara2.idx = 0x00000000;
edmaChainPara2.rld = 0x00000000;
/* Config the EDMA Channel and Set the Priority */
EDMA_config(hEdma,&edmaEmifaPara);
EDMA_FSETH(hEdma,OPT,PRI,config->priority);
switch (config->chainStage)
{
/* No Chain */
case 0: EDMA_FSETH(hEdma,OPT,TCCM,(tccNum & 0x30) >> 4);
EDMA_FSETH(hEdma,OPT,TCC,tccNum & 0x0F);
EDMA_intEnable(tccNum);
EDMA_enableChannel(hEdma);
break;
/* Chain one Channel */
case 1: EDMA_config(config->hCEdma1,&edmaChainPara1);
EDMA_FSETH(config->hCEdma1,OPT,PRI,config->priority);
EDMA_FSETH(config->hCEdma1,OPT,TCCM,(tccNum & 0x30) >> 4);
EDMA_FSETH(config->hCEdma1,OPT,TCC,tccNum & 0x0F);
EDMA_chain(hEdma, config->hCEdma1,EDMA_TCC_SET);
EDMA_enableChaining(config->hCEdma1);
EDMA_intEnable(tccNum);
EDMA_enableChannel(config->hCEdma1);
EDMA_enableChannel(hEdma);
break;
/* Chain two Channel */
case 2: EDMA_config(config->hCEdma1,&edmaChainPara1);
EDMA_FSETH(config->hCEdma1,OPT,PRI,config->priority);
EDMA_chain(hEdma, config->hCEdma1,EDMA_TCC_SET);
EDMA_enableChaining(config->hCEdma1);
EDMA_config(config->hCEdma2,&edmaChainPara2);
EDMA_FSETH(config->hCEdma2,OPT,PRI,config->priority);
EDMA_FSETH(config->hCEdma2,OPT,TCCM,(tccNum & 0x30) >> 4);
EDMA_FSETH(config->hCEdma2,OPT,TCC,tccNum & 0x0F);
EDMA_chain(config->hCEdma1, config->hCEdma2,EDMA_TCC_SET);
EDMA_enableChaining(config->hCEdma2);
EDMA_intEnable(tccNum);
EDMA_enableChannel(config->hCEdma2);
EDMA_enableChannel(config->hCEdma1);
EDMA_enableChannel(hEdma);
break;
default:break;
}
/* Set the Event and Start the EDMA Transfer */
EDMA_setChannel(hEdma);
}
/*----------------------------------------------------------------------------*/
/*******************************************************************************
* 函數(shù)名稱: EMIFA_startEdmaSdram *
* 函數(shù)描述: EMIFA Port Starting the Specfic EDMA Channel to Write Data to *
* and Read Data from SDRAM *
* 相關(guān)文檔: *
* 參數(shù)描述: *
* 參數(shù)名 類型 輸入/輸出 描述 *
* -------- ---- --------- ----------- *
* hEdma EDMA_Handle in EDMA Handle for EMIFA Port *
* config EDMA_SdramConfig* in Pointer to EMIFA's EDMA Config Para*
* *
* 返回值: 無 *
* 說明: *
*******************************************************************************/
CSLAPI void EMIFA_startEdmaSdram(EDMA_Handle hEdma,EDMA_SdramConfig *config)
{
EDMA_ParaConfig edmaEmifaPara;
Uint32 tccNum;
/* Get the Transfer Complete Code of the EDMA Channel */
tccNum = (hEdma & 0x00FF0000)>>16;
/* Disable the EDMA Channel Interrupt and Clear out the Interrupt Flag */
EDMA_intDisable(tccNum);
EDMA_intClear(tccNum);
/* Disable the EDMA Channel and Clear out the Event */
EDMA_disableChannel(hEdma);
EDMA_clearChannel(hEdma);
/* Constructing the Structure of EDMA Parameters */
edmaEmifaPara.opt = 0x01200001;
edmaEmifaPara.src = (Uint32)(config->sourAdd);
edmaEmifaPara.cnt = (config->eleCount) & 0x0000FFFF;
edmaEmifaPara.dst = (Uint32)(config->destAdd);
edmaEmifaPara.idx = 0x00000000;
edmaEmifaPara.rld = 0x00000000;
/* Config the EDMA Channel and Set Priority */
EDMA_config(hEdma, &edmaEmifaPara);
EDMA_FSETH(hEdma,OPT,PRI,config->priority);
EDMA_FSETH(hEdma,OPT,TCCM,(tccNum & 0x30) >> 4);
EDMA_FSETH(hEdma,OPT,TCC,tccNum & 0x0F);
EDMA_FSETH(hEdma,OPT,TCINT,EDMA_OPT_TCINT_YES);
/* Enable the Transfer Complete Code Generating EDMA Interrupt */
EDMA_intEnable(tccNum);
/* Enable the EDMA Channel */
EDMA_enableChannel(hEdma);
/* Set the Event and Start the EDMA Transfer */
EDMA_setChannel(hEdma);
}
/*----------------------------------------------------------------------------*/
/******************************************************************************\
* End of BBU_DD_EmifaAdl.c
\******************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -