本帖最后由 evilchips 于 2013-9-10 16:39 编辑
平台:STM32F4-Discovery(LQFP100,FSMC地址和数据线复用)+FPGA(被当做SRAM方式由MCU访问)
FSMC配置参数:地址和数据线16根复用,BANK1,NE1,PSRAM方式,使用异步访问,用到FSMC_NL(FSMC_NADV),
模式A,数据带宽16b,Timing 如下:
FSMC_NORSRAMTimingInitStructure.FSMC_AddressSetupTime = 10;//1; /* 地址建立时间 */
FSMC_NORSRAMTimingInitStructure.FSMC_AddressHoldTime = 0;
FSMC_NORSRAMTimingInitStructure.FSMC_DataSetupTime = 10;//1; /* 数据建立时间 */
FSMC_NORSRAMTimingInitStructure.FSMC_BusTurnAroundDuration = 0;
FSMC_NORSRAMTimingInitStructure.FSMC_CLKDivision = 0;
FSMC_NORSRAMTimingInitStructure.FSMC_DataLatency = 0;
FSMC_NORSRAMTimingInitStructure.FSMC_AccessMode = FSMC_AccessMode_A; /* FSMC 访问模式 */
SignalTapII捕捉到FSMC时序各信号图:
图上可以看出:
0x8001是我要写的地址,0xFFFF是我要写的数据,但是这地址和数据之间好乱,
还有FSMC_NEx,FSMC_WEn信号都非常乱,并且我只写了一个16bit的数据写一次,
FSMC_OEn为什么也变有效了,同样是乱。
地址定义如下:
#define ACCESS_REGS (2<<14) /* 0x8000 */
#define CMD_START (*((volatile unsigned short *) (BANK1_BASE+((ACCESS_REGS+1)<<1)))) /* CMD->START 0x60008001*/
写数据:
CMD_START = 0xFFFF;
请赐教!Thanks a lot. |
|