大家好,请教一个问题。
问题描述:我用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. }