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

📄 bbu_dd_emifaadl.c

📁 DSP芯片自检测程序
💻 C
📖 第 1 页 / 共 2 页
字号:
    /* Open EDMA Channel for EMIFA Writing and Reading SDRAM */ 
    edmaEmifaWSdramHandle = EDMA_open(EDMA_CHA_CPU3);
    edmaEmifaRSdramHandle = EDMA_open(EDMA_CHA_CPU4);
    
    EMIFA_config(&emifaConfig);    
}    
/*----------------------------------------------------------------------------*/

/*******************************************************************************
* 函数名称: EMIFA_startEdmaDpram      					       			       *
* 函数描述: EMIFA Port Starting the Specfic EDMA Channel to Write Data to      *
*           and Read Data from DPRAM                                           *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* 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);     
}
/*----------------------------------------------------------------------------*/       

/*******************************************************************************
* 函数名称: EMIFA_startEdmaSdram      					       			       *
* 函数描述: EMIFA Port Starting the Specfic EDMA Channel to Write Data to      *
*           and Read Data from SDRAM                                           *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* 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
\******************************************************************************/

⌨️ 快捷键说明

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