系统中同时用fsmc方式驱动flash和sram,怎么设置?

[复制链接]
2426|5
手机看帖
扫描二维码
随时随地手机跟帖
lzh08|  楼主 | 2012-9-26 14:17 | 显示全部楼层 |阅读模式
我的系统中同时有flash和sram,都是使用fsmc方式驱动的。但是在设置参数时迷惑了,
  p.FSMC_AddressSetupTime = 0x05;
  p.FSMC_AddressHoldTime = 0x00;
  p.FSMC_DataSetupTime = 0x07;
  p.FSMC_BusTurnAroundDuration = 0x00;
  p.FSMC_CLKDivision = 0x00;
  p.FSMC_DataLatency = 0x00;
  p.FSMC_AccessMode = FSMC_AccessMode_B;

  FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
  FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;
  FSMC_NORSRAMInitStructure.FSMC_MemoryType = FSMC_MemoryType_NOR;
  FSMC_NORSRAMInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_16b;
  FSMC_NORSRAMInitStructure.FSMC_BurstAccessMode = FSMC_BurstAccessMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalPolarity = FSMC_WaitSignalPolarity_Low;
  FSMC_NORSRAMInitStructure.FSMC_WrapMode = FSMC_WrapMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignalActive = FSMC_WaitSignalActive_BeforeWaitState;
  FSMC_NORSRAMInitStructure.FSMC_WriteOperation = FSMC_WriteOperation_Enable;
  FSMC_NORSRAMInitStructure.FSMC_WaitSignal = FSMC_WaitSignal_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ExtendedMode = FSMC_ExtendedMode_Disable;
  FSMC_NORSRAMInitStructure.FSMC_WriteBurst = FSMC_WriteBurst_Disable;
  FSMC_NORSRAMInitStructure.FSMC_ReadWriteTimingStruct = &p;
  FSMC_NORSRAMInitStructure.FSMC_WriteTimingStruct = &p;
  这些参数在flash和sram中都涉及到了,是不是在系统读写的时候,需要分别执行一次进行切换呢?能不能只在初始化的时候运行一次呢?
cym_anhui| | 2012-9-26 15:31 | 显示全部楼层
CS不一样,就行吧

使用特权

评论回复
IJK| | 2012-9-26 15:54 | 显示全部楼层
2L说得对,一般情况下flash和sram 用不同的片选 /CS,只要初始化时分别对flash和sram 进行1次初始化就可以了。

使用特权

评论回复
lzh08|  楼主 | 2012-9-26 15:55 | 显示全部楼层
cs在硬件上肯定是不一样的,但是问题是程序里面,有些寄存器是不是共用的啊,比如
FSMC_NORSRAMInitStructure.FSMC_Bank = FSMC_Bank1_NORSRAM2;
FSMC_NORSRAMInitStructure.FSMC_DataAddressMux = FSMC_DataAddressMux_Disable;这些等等,这个在sram的初始化和flash的初始化里面都一样,系统是怎么区分的?他能自动根据cs的不同分配不同的寄存器组么?
如果单板系统只有一个flash或者只有一个sram,就不存在问题了。问题是如果都有的话,是只需要初始化这些寄存器一次呢,还是在flash和sram之间切换的时候,再运行一次相应的初始化程序?
while(1)
{
     初始化flash();
     操作flash();
     初始化sram();
     操作sram();
}
?是这样么?

使用特权

评论回复
IJK| | 2012-9-26 16:23 | 显示全部楼层
不同的bank[对应不同的/CS],有各自不同的寄存器。
所以,只要是不同的bank,无需 多次初始化。

使用特权

评论回复
评分
参与人数 1威望 +3 收起 理由
lzh08 + 3
lzh08|  楼主 | 2012-9-26 17:12 | 显示全部楼层
哦,多谢,

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

57

主题

114

帖子

0

粉丝