论坛元老
 
- 积分
- 7998
- 金钱
- 7998
- 注册时间
- 2014-8-13
- 在线时间
- 1593 小时
|
发表于 2017-8-2 22:33:25
|
显示全部楼层
本帖最后由 mack13013 于 2017-8-2 22:37 编辑
FSMC是MCU的一个外设(速度是否比GPIO快还不是很确定,不知道有没有人做这方面的测试),地址固定,而且编译器对其有特殊设置.
比如,使用GPIO,在C语言编程上,读片外RAM大概要这样:
u16 uwRamValue = 0;
/*..
此处设置GPIOD、GPIOE为推挽输出,GPIOC为浮空输入,过程省略
..*/
GPIOE ->ODR &= 0xFFFFFBFF;//RAM读使能
GPIOE ->ODR &= 0xFFFFFEFF;//RAM片选使能
GPIOD ->ODR = XX;//(假设XX是地址)
uwRamValue = GPIOC ->IDR;//读出RAM上XX地址处的数值,有的RAM比较慢,前面还要加一定的延时,或者同步信号读出的数值才不会有误。
而使用FSMC的话,同样的片外RAM读过程,使用C语言大概是这样:
u16 uwRamValue = *((*u16)XX);//当然,这样用的前提是FSMC已经完成初始化。而且对于比较慢的外界RAM,FSMC初始化时好像可以设置固定的延时,不需要在当前步骤再额外设置,至于同步信号什么的,可能也是在FSMC初始化时设置的,或者没有。其实没用过FSMC,我只知道x86的内存读取是有同步信号的,而且是交给内存控制器管理的,CPU只要做个饭来张口衣来伸手的大爷就可以了。
好像例程上,这里的读过程是封装成函数了的,大概是这样的:
u16 RamRead(u16 pAddr)
{
return *((*u16)XX);//
}
这是程序上的设置,具体到汇编代码的读过程,FSMC的话,就是一两句汇编代码,GPIO的话,比FSMC稍微多一点,不是太多,大家可以调试的时候看下汇编窗口而且的区别。
至于实际速度上或者其他硬件上的区别,我没做测试,等做过测试的人发个测试结果吧。
|
|