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

📄 bbu_dd_emifaadl.c

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

/******************************************************************************\
* EMIFA Static Global Variable Definitions
\******************************************************************************/
#pragma DATA_SECTION(edmaEmifaWDpramHandle,".gvariable");
EDMA_Handle  edmaEmifaWDpramHandle;
#pragma DATA_SECTION(edmaEmifaRDpramHandle,".gvariable");
EDMA_Handle  edmaEmifaRDpramHandle;

#pragma DATA_SECTION(edmaEmifaWDpramCHandle1,".gvariable");
EDMA_Handle  edmaEmifaWDpramCHandle1;
#pragma DATA_SECTION(edmaEmifaWDpramCHandle2,".gvariable");
EDMA_Handle  edmaEmifaWDpramCHandle2;

#pragma DATA_SECTION(edmaEmifaRDpramCHandle1,".gvariable");
EDMA_Handle  edmaEmifaRDpramCHandle1;
#pragma DATA_SECTION(edmaEmifaRDpramCHandle2,".gvariable");
EDMA_Handle  edmaEmifaRDpramCHandle2;

#pragma DATA_SECTION(edmaEmifaWSdramHandle,".gvariable");
EDMA_Handle  edmaEmifaWSdramHandle;
#pragma DATA_SECTION(edmaEmifaRSdramHandle,".gvariable");
EDMA_Handle  edmaEmifaRSdramHandle;

#pragma DATA_SECTION(emifaConfig,".gvariable");
#if POST_TEST_MODE
    /* EMIFA config structures for CPB */
    static EMIFA_Config emifaConfig = { 
                          /*  AGBLCTL     ACECTL0     ACECTL1     ACECTL2 */
                            0x000327F8, 0xFFFFFF43, 0xFFFFFF33, 0xFFFFFFFF,
                          /*  ACECTL3     ACESEC0     ACESEC01    ACESEC2 */  
                            0xFFFFFFFF, 0x00000002, 0x00000042, 0x00000002,
                          /*  ACESEC3     ASDCTL      ASDTIM      ASDEXT  */    
                            0x00000002, 0x47116000, 0x00000186, 0x001B5F48 };
#else
    /* EMIFA config structures for TMS320C6416 DSK */
    static EMIFA_Config emifaConfig = { 
                          /*  AGBLCTL     ACECTL0     ACECTL1     ACECTL2 */
                            0x000927F8, 0xFFFFFFD3, 0xFFFFFFFF, 0xFFFFFFFF,
                          /*  ACECTL3     ACESEC0     ACESEC01    ACESEC2 */  
                            0xFFFFFFFF, 0x00000042, 0x00000002, 0x00000002,
                          /*  ACESEC3     ASDCTL      ASDTIM      ASDEXT  */    
                            0x00000002, 0x4748F000, 0x000005DC, 0x00175F3F };
#endif                                                                  
/*----------------------------------------------------------------------------*/

/******************************************************************************\
* EMIFA API Function Declarations
\******************************************************************************/
CSLAPI void EMIFA_config(EMIFA_Config *config);
CSLAPI void EMIFA_getConfig(EMIFA_Config *config);
CSLAPI void EMIFA_init(void);
CSLAPI void EMIFA_startEdmaDpram(EDMA_Handle hEdma,EDMA_DpramConfig *config);
CSLAPI void EMIFA_startEdmaSdram(EDMA_Handle hEdma,EDMA_SdramConfig *config);

/******************************************************************************\
* EMIFA API Function Definitions
\******************************************************************************/
/*******************************************************************************
* 函数名称: EMIFA_config      				            			           *
* 函数描述: Setup the EMIFA Device using the configuration structure           *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* config	   EMIFA_Config*       in		Configuration structure for EMIFA  *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EMIFA_config(EMIFA_Config *config)
{
Uint32 gie;
volatile Uint32 *base = (volatile Uint32 *)EMIFA_BASE_GLOBAL;
register int x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11;

    gie = IRQ_globalDisable();

    /* the compiler generates more efficient code if the loads */
    /* and stores are grouped together raher than intermixed   */
    x0  = config->gblctl;
    x1  = config->cectl0;
    x2  = config->cectl1;
    x3  = config->cectl2;
    x4  = config->cectl3;
    x5  = config->sdctl;
    x6  = config->sdtim;
    x7  = config->sdext;
    x8  = config->cesec0;
    x9  = config->cesec1;
    x10 = config->cesec2;
    x11 = config->cesec3;

    base[EMIFA_GBLCTL_OFFSET]  = x0;
    base[EMIFA_CECTL0_OFFSET]  = x1;
    base[EMIFA_CECTL1_OFFSET]  = x2;
    base[EMIFA_CECTL2_OFFSET]  = x3;
    base[EMIFA_CECTL3_OFFSET]  = x4;
    base[EMIFA_SDTIM_OFFSET]   = x6;
    base[EMIFA_SDEXT_OFFSET]   = x7;
    base[EMIFA_CESEC0_OFFSET]  = x8;
    base[EMIFA_CESEC1_OFFSET]  = x9;
    base[EMIFA_CESEC2_OFFSET]  = x10;
    base[EMIFA_CESEC3_OFFSET]  = x11;
    base[EMIFA_SDCTL_OFFSET]   = x5;

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

/*******************************************************************************
* 函数名称: EMIFA_getConfig      				            		           *
* 函数描述: Get a EMIFA Device Configuration                                   *
* 相关文档:                                                                    *
* 参数描述:  						                    			           *
* 参数名		     类型		输入/输出 	   描述	       			           *
* -------- 		     ---- 		---------	-----------    			           *
* config	   EMIFA_Config*       out		Configuration structure for EMIFA  *
*                                                                              *
* 返回值: 无									                               *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EMIFA_getConfig(EMIFA_Config *config)
{
Uint32 gie;
volatile Uint32 *base = (volatile Uint32 *)EMIFA_BASE_GLOBAL;
volatile EMIFA_Config* cfg = (volatile EMIFA_Config*)config;
register int x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11;

    gie = IRQ_globalDisable();

    /* the compiler generates more efficient code if the loads */
    /* and stores are grouped together raher than intermixed   */
    x0  = base[EMIFA_GBLCTL_OFFSET];
    x1  = base[EMIFA_CECTL0_OFFSET];
    x2  = base[EMIFA_CECTL1_OFFSET];
    x3  = base[EMIFA_CECTL2_OFFSET];
    x4  = base[EMIFA_CECTL3_OFFSET];
    x6  = base[EMIFA_SDTIM_OFFSET];
    x7  = base[EMIFA_SDEXT_OFFSET];
    x8  = base[EMIFA_CESEC0_OFFSET];
    x9  = base[EMIFA_CESEC1_OFFSET];
    x10 = base[EMIFA_CESEC2_OFFSET];
    x11 = base[EMIFA_CESEC3_OFFSET];
    x5  = base[EMIFA_SDCTL_OFFSET];

    cfg->gblctl  = x0;
    cfg->cectl0  = x1;
    cfg->cectl1  = x2;
    cfg->cectl2  = x3;
    cfg->cectl3  = x4;
    cfg->sdctl   = x5;
    cfg->sdtim   = x6;
    cfg->sdext   = x7;
    cfg->cesec0  = x8;
    cfg->cesec1  = x9;
    cfg->cesec2  = x10;
    cfg->cesec3  = x11;

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

/*******************************************************************************
* 函数名称: EMIFA_init           				            		           *
* 函数描述: EMIFA Operation Initialization                                     *
* 相关文档:                                                                    *
* 参数描述: 无 						                    			           *
*                                                                              *
* 返回值: 无                                                                   *
* 说明:			                         		                           *
*******************************************************************************/
CSLAPI void EMIFA_init(void)
{
    /* Open EDMA and Chain Channel for EMIFA Writing and Reading DPRAM */ 
    edmaEmifaWDpramHandle   = EDMA_open(EDMA_CHA_CPU1);
    edmaEmifaWDpramCHandle1 = EDMA_open(EDMA_CHA_CHAIN1);
    edmaEmifaWDpramCHandle2 = EDMA_open(EDMA_CHA_CHAIN2);
    edmaEmifaRDpramHandle   = EDMA_open(EDMA_CHA_CPU2);
    edmaEmifaRDpramCHandle1 = EDMA_open(EDMA_CHA_CHAIN3);
    edmaEmifaRDpramCHandle2 = EDMA_open(EDMA_CHA_CHAIN4);
    

⌨️ 快捷键说明

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