OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3718|回复: 3

为什么用FSMC进行对外部器件的访问?直接用IO口操作不行

[复制链接]

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
发表于 2017-8-1 20:44:03 | 显示全部楼层 |阅读模式
FSMC作为存储控制器,每一次只能控制一个外部器件,跟直接IO驱动有什么区别?这有什么用?还有说是FSMC可以对存储器地址进行随机访问,但是这个不是已经能通过寄存器实现了吗?
小白很不懂,有没有大佬帮忙解答下,不胜感激!!!
不忘初心,方得始终!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

25

主题

161

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
269
金钱
269
注册时间
2017-7-17
在线时间
149 小时
 楼主| 发表于 2017-8-1 20:44:18 | 显示全部楼层
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-7-19
在线时间
8 小时
发表于 2017-8-2 20:28:40 | 显示全部楼层
不太懂,同问,为什么要用FSMC来实现TFTLCD的显示
回复 支持 反对

使用道具 举报

33

主题

984

帖子

1

精华

论坛元老

Rank: 8Rank: 8

积分
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稍微多一点,不是太多,大家可以调试的时候看下汇编窗口而且的区别。


至于实际速度上或者其他硬件上的区别,我没做测试,等做过测试的人发个测试结果吧。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-20 06:23

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表