Part Number:OMAPL138B-EP
工程师,您好!
现在用138的emif总线对接一个外备,总是读不到数据,所需要的时序如下
请问emif使用什么模式和参数比较合适呢?
下面是我现在的配参:
void EMIFAPinMuxSetupCS4(void)
{
volatile unsigned int savePinMux = 0;
savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) & \
~(SYSCFG_PINMUX12_PINMUX12_31_28 | \
SYSCFG_PINMUX12_PINMUX12_27_24 | \
SYSCFG_PINMUX12_PINMUX12_23_20 | \
SYSCFG_PINMUX12_PINMUX12_19_16 | \
SYSCFG_PINMUX12_PINMUX12_15_12 | \
SYSCFG_PINMUX12_PINMUX12_11_8 | \
SYSCFG_PINMUX12_PINMUX12_7_4 | \
SYSCFG_PINMUX12_PINMUX12_3_0);
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) = \
(PINMUX12_EMIF_A_ENABLE | savePinMux);
savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & \
~(SYSCFG_PINMUX11_PINMUX11_31_28 | \
SYSCFG_PINMUX11_PINMUX11_27_24 | \
SYSCFG_PINMUX11_PINMUX11_23_20 | \
SYSCFG_PINMUX11_PINMUX11_19_16 | \
SYSCFG_PINMUX11_PINMUX11_15_12 | \
SYSCFG_PINMUX11_PINMUX11_11_8 | \
SYSCFG_PINMUX11_PINMUX11_7_4 | \
SYSCFG_PINMUX11_PINMUX11_3_0);
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) = \
(PINMUX11_EMIF_A_ENABLE | savePinMux);
savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(9)) & \
~(SYSCFG_PINMUX9_PINMUX9_31_28 | \
SYSCFG_PINMUX9_PINMUX9_27_24 | \
SYSCFG_PINMUX9_PINMUX9_23_20 | \
SYSCFG_PINMUX9_PINMUX9_19_16 | \
SYSCFG_PINMUX9_PINMUX9_15_12 | \
SYSCFG_PINMUX9_PINMUX9_11_8 | \
SYSCFG_PINMUX9_PINMUX9_7_4 | \
SYSCFG_PINMUX9_PINMUX9_3_0);
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(9)) = \
(PINMUX9_EMIF_D_ENABLE | savePinMux);
savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(8)) & \
~(SYSCFG_PINMUX8_PINMUX8_31_28 | \
SYSCFG_PINMUX8_PINMUX8_27_24 | \
SYSCFG_PINMUX8_PINMUX8_23_20 | \
SYSCFG_PINMUX8_PINMUX8_19_16 | \
SYSCFG_PINMUX8_PINMUX8_15_12 | \
SYSCFG_PINMUX8_PINMUX8_11_8 | \
SYSCFG_PINMUX8_PINMUX8_7_4 | \
SYSCFG_PINMUX8_PINMUX8_3_0);
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(8)) = \
(PINMUX8_EMIF_D_ENABLE | savePinMux);
savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) & \
~(SYSCFG_PINMUX5_PINMUX5_31_28 | \
SYSCFG_PINMUX5_PINMUX5_27_24);
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(5)) = \
(PINMUX5_EMIF_BA_ENABLE | savePinMux);
savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(7)) & \
~(SYSCFG_PINMUX7_PINMUX7_23_20 | \
SYSCFG_PINMUX7_PINMUX7_19_16 | \
SYSCFG_PINMUX7_PINMUX7_7_4); //SYSCFG_PINMUX7_PINMUX7_3_0);
// HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(7)) = \
// (PINMUX7_EMIF_CTL_ENABLE | savePinMux);
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(7)) = \
(PINMUX7_EMIF_CTL_ENABLE_CS4 | savePinMux);
savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(6)) & \
~(SYSCFG_PINMUX6_PINMUX6_3_0);
HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(6)) = \
(PINMUX6_EMA_CLK_ENABLE_DQM | savePinMux);
}
void EMIFASetupMAX10_CS4(void)
{
/* 配置EMIFA相关复用引脚 */
EMIFAPinMuxSetupCS4();
/* 配置数据总线16bit */
EMIFAAsyncDevDataBusWidthSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
EMIFA_DATA_BUSWITTH_16BIT);
/* 选着Normal模式 */
EMIFAAsyncDevOpModeSelect(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
EMIFA_ASYNC_INTERFACE_NORMAL_MODE);
/* 禁止WAIT引脚 */
EMIFAExtendedWaitConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
EMIFA_EXTENDED_WAIT_DISABLE);
/* 配置W_SETUP/R_SETUP W_STROBE/R_STROBE W_HOLD/R_HOLD TA等参数 */
EMIFAWaitTimingConfig(SOC_EMIFA_0_REGS,EMIFA_CHIP_SELECT_4,
EMIFA_ASYNC_WAITTIME_CONFIG(3, 4, 3, 3, 4, 3, 0 ));
}
请帮忙看下,感谢!
Shine:
请问外设和EMIF口是怎么接的?EMIF的时序可以参考数据手册6.10.6 EMIFA Electrical Data/Timinghttps://www.ti.com/lit/ds/symlink/omap-l138.pdf异步读时序:在OE下降沿的时候,去读控制信号和地址线,在OE上升沿的时候去读数据线。异步写时序:在WE下降沿的时候,去读控制信号和地址线,在OE上升沿的时候去写数据线。异步读写的时序只能调整setup, strobe和hold时间,如果外接设备时序不能满足EMIF的话,要用cpld/fpga做时序匹配。