大家好,请教一个问题。
问题描述:我用LM3S(Cortex-M3) 系列单片机的EPI 接口读写2片NorFlash。采用 主机总线模式(x16), ALE + 双CSn配置。写入地址范围6000000-6FFFFFF。整个地址范围内,只有其中一片Flash被写入数据。
void EPIPinConfig(void)
{
SysCtlPeripheralEnable(SYSCTL_PERIPH_EPI0); //使能 EPI0 外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //使能 GPIO B 外设
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH);
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ);
GPIOPinConfigure(GPIO_PH3_EPI0S0);
GPIOPinConfigure(GPIO_PH2_EPI0S1);
GPIOPinConfigure(GPIO_PC4_EPI0S2);
GPIOPinConfigure(GPIO_PC5_EPI0S3);
GPIOPinConfigure(GPIO_PC6_EPI0S4);
GPIOPinConfigure(GPIO_PC7_EPI0S5);
GPIOPinConfigure(GPIO_PH0_EPI0S6);
GPIOPinConfigure(GPIO_PH1_EPI0S7);
GPIOPinConfigure(GPIO_PE0_EPI0S8);
GPIOPinConfigure(GPIO_PE1_EPI0S9);
GPIOPinConfigure(GPIO_PH4_EPI0S10);
GPIOPinConfigure(GPIO_PH5_EPI0S11);
GPIOPinConfigure(GPIO_PF4_EPI0S12);
GPIOPinConfigure(GPIO_PG0_EPI0S13);
GPIOPinConfigure(GPIO_PG1_EPI0S14);
GPIOPinConfigure(GPIO_PF5_EPI0S15);
GPIOPinConfigure(GPIO_PJ0_EPI0S16);
GPIOPinConfigure(GPIO_PJ1_EPI0S17);
GPIOPinConfigure(GPIO_PJ2_EPI0S18);
GPIOPinConfigure(GPIO_PJ3_EPI0S19);
GPIOPinConfigure(GPIO_PD2_EPI0S20);
GPIOPinConfigure(GPIO_PD3_EPI0S21);
GPIOPinConfigure(GPIO_PB5_EPI0S22);
GPIOPinConfigure(GPIO_PB4_EPI0S23);
GPIOPinConfigure(GPIO_PE2_EPI0S24);
GPIOPinConfigure(GPIO_PE3_EPI0S25);
GPIOPinConfigure(GPIO_PH6_EPI0S26);
GPIOPinConfigure(GPIO_PH7_EPI0S27);
GPIOPinConfigure(GPIO_PJ4_EPI0S28);
GPIOPinConfigure(GPIO_PJ5_EPI0S29);
GPIOPinConfigure(GPIO_PJ6_EPI0S30);
//设置 EPI 引脚
GPIOPinTypeEPI(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5);
GPIOPinTypeEPI(GPIO_PORTC_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
GPIOPinTypeEPI(GPIO_PORTD_BASE, GPIO_PIN_2 | GPIO_PIN_3);
GPIOPinTypeEPI(GPIO_PORTE_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3);
GPIOPinTypeEPI(GPIO_PORTF_BASE, GPIO_PIN_4 | GPIO_PIN_5 );
GPIOPinTypeEPI(GPIO_PORTG_BASE, GPIO_PIN_0 | GPIO_PIN_1);
GPIOPinTypeEPI(GPIO_PORTH_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 | GPIO_PIN_7);
GPIOPinTypeEPI(GPIO_PORTJ_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6);
}
void EPIH16Init(void)
{
EPIDividerSet(EPI0_BASE, 1); // EPI时钟配置,2分频
EPIModeSet(EPI0_BASE, EPI_MODE_HB16); // 16位host-bus模式配置
EPIConfigHB16Set(EPI0_BASE, // EPI基址
EPI_HB16_MODE_ADMUX | // 地址线和数据线混合:AD[0-15]
EPI_HB16_CSCFG_ALE_DUAL_CS | // EPI30作为ALE,EPI27和EPI26分别作为CS0和CS1
EPI_HB16_WRWAIT_0 | // 无写延时
EPI_HB16_RDWAIT_0, // 无读延时
0 );
EPIAddressMapSet(EPI0_BASE, // EPI基址
EPI_ADDR_RAM_BASE_6 | // 内存地址映射从0x6000_0000开始
EPI_ADDR_RAM_SIZE_256MB); // 内存地址空间大小256MB
while(HWREG(EPI0_BASE + EPI_O_STAT) & EPI_STAT_INITSEQ); // Wait for the EPI initialization to complete.
}