硬件:EVM5515
IDE:CCS6.0
软件系统:DSP/BIOS
硬件使用了SDRAM和NorFlash;软件中配置了两个PRD,周期分别是10ms和1000ms。
SDRAM和NorFlash初始化代码如下:
SDRAM_init(); CSL_sdramPolledTest(); nor_flash_init(); // NorFlash初始化 // NorFlash读写测试===================================== // norflash_read(0x00000, (Uint16*)fs_win, 512); // norflash_read(0x40000, (Uint16*)fs_win, 512); // nor_flash_erase_Block4(); // norflash_read(0x40000, (Uint16*)fs_win, 512); // norflash_read(0x00000, (Uint16*)fs_win, 512); // norflash_write(0x40000, (Uint16*)fs_win, 512); // norflash_read(0x40000, (Uint16*)fs_win, 512);
SDRAM初始化函数参考了EVM5515官方例程CSL_EMIF_SDRAM_PollExample_Out。
CSL_Status SDRAM_init(void) { CSL_EmifHandle hEmif; CSL_EmifObj emifObj; CSL_SdramCfg sdramCfg; CSL_SdramTimr sdramTimr; CSL_SdramRowSize rowSize; CSL_Status status; CSL_Status result; result = CSL_TEST_FAILED; hEmif = &emifObj; rowSize = CSL_SDRAM_ROW_ADDR_BITS_12; //printf("SDRAM Polled mode test\n\n"); /* Initialize Emif module */ status = EMIF_init(&emifObj); if(status != CSL_SOK) { //printf("EMIF SDRAM Init Failed!!\n"); return(result); } /* Assign values to sdram config structure */ sdramCfg.NM = CSL_SDRAM_SDCR1_NM_DEFAULT; sdramCfg.CasLatency = CSL_SDRAM_SDCR1_CL_DEFAULT; sdramCfg.bit11to9Lock = CSL_SDRAM_SDCR1_BIT_11_9_LOCK_DEFAULT; sdramCfg.ibankPos = CSL_SDRAM_SDCR1_IBANK_DEFAULT; sdramCfg.ebank = CSL_SDRAM_SDCR1_EBANK_DEFAULT; sdramCfg.pageSize = CSL_SDRAM_SDCR1_PAGESIZE_DEFAULT; sdramCfg.selfRefresh = CSL_SDRAM_SDCR2_SR_DEFAULT; sdramCfg.pdMode = CSL_SDRAM_SDCR2_PD_DEFAULT; sdramCfg.pdwr = CSL_SDRAM_SDCR2_PDWR_DEFAULT; sdramCfg.pasr = CSL_SDRAM_SDCR2_PASR_DEFAULT; sdramCfg.rowSize = rowSize; sdramCfg.ibankPos = CSL_SDRAM_SDCR2_IBANK_POS_DEFAULT; sdramCfg.sdramDrive = CSL_SDRAM_SDCR2_SDRAM_DRIVE_DEFAULT; sdramCfg.bit9to1Lock = CSL_SDRAM_SDCR2_BIT_9_1_LOCK_DEFAULT; sdramTimr.tRAS = CSL_SDRAM_TRAS_VAL; sdramTimr.tRC = CSL_SDRAM_TRC_VAL; sdramTimr.tRRD = CSL_SDRAM_TRRD_VAL; sdramTimr.tRFC = CSL_SDRAM_TRFC_VAL; sdramTimr.tRP = CSL_SDRAM_TRP_VAL; sdramTimr.tRCD = CSL_SDRAM_TRCD_VAL; sdramTimr.tWR = CSL_SDRAM_TWR_VAL; sdramTimr.tXS = CSL_SDRAM_TXS_VAL; sdramTimr.refRate = CSL_SDRAM_REFRATE_VAL; /* Configure SDRAM settings */ status = SDRAM_config(hEmif, &sdramCfg, &sdramTimr); if(status != CSL_SOK) { //printf("EMIF SDRAM Config Failed!!\n"); return(result); } return(result); }
NorFlash初始化函数参考了EVM5515官方例程CSL_EMIF_NOR_CpuTransfer。
CSL_Status nor_flash_init(void) { CSL_Status status; status = CSL_SOK; hNor = &norObj; norCfg.asyncWaitCfg = &norAsyncWaitCfg; norCfg.asyncCfg = &norAsyncCfg; status = NOR_setup(&norObj, 0); if(CSL_SOK != status) { printf("SETUP: Bad Status\n"); } status = NOR_emifResetAndClock(hNor); if(CSL_SOK != status) { printf("NOR EMIF RST & CLK: Bad Status\n"); } /*norCfg was filled when it was defined*/ status = NOR_setupEmifChipSelect(hNor, &norCfg); if(CSL_SOK != status) { printf("SETUP EMIF CS: Bad Status\n"); } memset(hNor->deviceID, 0x0, sizeof(hNor->deviceID)); status = NOR_readId(hNor); if(CSL_SOK != status) { printf("READ ID: Bad Status\n"); } if((0xFF == hNor->deviceID[1]) || (0xFFFF == hNor->deviceID[1])) { printf("No Device Found\n"); } else { printf("Manufacturer ID %x\n", hNor->deviceID[0]); printf("Device ID %x\n", hNor->deviceID[1]); } memset(hNor->cfiData, 0x0, sizeof(hNor->cfiData)); status = NOR_readCFI(hNor); if(CSL_SOK != status) { printf("READ CFI: Bad Status\n"); } return status; }
问题:
没有添加nor_flash_init();函数时,程序运行正常,能够进入两个PRD函数;
添加nor_flash_init();函数后,无法进入RPD函数,在CCS中调试查看寄存器,全局中断已经使能,定时器中断已经使能。
为什么会这样?SDRAM和NorFlash使用有冲突吗?