在补充一下,EBI的初始化函数:
void InitEBISettings(void)
{
uint8_t *BaseAddr;
uint16_t cnt,i;
static uint8_t a,b,c,d;
DRVEBI_CONFIG_T sEBIConfig;
DRVEBI_TIMING_T sEBITiming;
uint32_t u32SysHCLKFreq = SystemCoreClock;
// Open EBI function
sEBIConfig.eDataWidth = E_DRVEBI_DATA_8BIT;
sEBIConfig.eAddrWidth = E_DRVEBI_ADDR_16BIT;
sEBIConfig.u32BaseAddress = DRVEBI_BASE_ADDR;
sEBIConfig.u32Size = DRVEBI_MAX_SIZE;
DrvEBI_Open(sEBIConfig);
// Configure EBI timing
u32SysHCLKFreq = DrvSYS_GetHCLKFreq();
sEBITiming.eMCLKDIV = E_DRVEBI_MCLKDIV_1;
sEBITiming.u8ExttALE = 1;
sEBITiming.u8ExtIR2R = 0;
sEBITiming.u8ExtIW2X = 0;
sEBITiming.u8ExttAHD = 1;
sEBITiming.u8ExttACC = 1;
DrvEBI_SetBusTiming(sEBITiming);
// Get EBI timing
DrvEBI_GetBusTiming(&sEBITiming);
//----------------------------------------base add----------------------------------//
BaseAddr = (uint8_t *)DRVEBI_BASE_ADDR;
//------------------------------------soft reset----------------------------------------------//
//*(BaseAddr+0) = 0x80;
//----------------------------------------------------------------------------------//
cnt=500;
while(cnt)
{
cnt--;
}
//-------------------------------write data-------------------------------------------------//
for(i=0;i<10000;i++)
{
*(BaseAddr+1) = 0xC0;
cnt=10000;
while(cnt)
{
cnt--;
}
}
//*(BaseAddr+6) = 0xA8;
//*(BaseAddr+7) = 0x00;
//*(BaseAddr+8) = 0x01;
//-------------------------------read data----------------------------------------------------//
a=*(BaseAddr+5);
b=*(BaseAddr+6);
c=*(BaseAddr+7);
d=*(BaseAddr+8);
}
这里面过程是先配置EBI,然后对相关寄存器直接写数据,在读操作,发现读的数据全为0,用示波器观察发现相应的CS信号和ALE信号没有出来;
|