打印

请教FSMC的WAIT信号是否会暂停总线和内核?

[复制链接]
4989|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
aozima|  楼主 | 2012-2-27 16:05 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
想FSMC接RA8875(LCD控制器,8080总线)

RA8875有一个BUSY信号输出。(为低时说明控制器正忙)

实测发现BUSY的输出非常频繁(大部分都在CS释放后,时间非常短,没有影响)

但有时非常长(如设置坐标位置)。
如果是在初始化等一段时间再去设置则BUSY基本没有,
或是上一次刚设置过,这次改动不大,BUSY也很短。
但这个长短是不可预测的。

保险的作法是在每次发送命令和数据前都轮询BUSY,但明显这样太慢了。
于是想用FSMC的WAIT,但不知道WAIT信号是否会停止总线或内核?
比如:
BUSY输出忙
然后我写命令:
*(short *)0x640000000 = CMD; //总线在这里会自动等待
100us后,BUSY输出 ready, 命令成功写入
继续下一条指令。

那么,在这100us内,如果有中断来到,是否会响应中断?
沙发
香水城| | 2012-2-27 17:30 | 只看该作者
不好意思,我还真的没有考虑过这个问题。

根据我的理解:在你的BUSY输出忙时,总线会自动等待,同时如果有中断时会响应中断。

你可以简单地做个实验测试一下,把BUSY固定拉到忙,看看MCU是否还能够响应中断。有什么结果通报一下哦,:D

使用特权

评论回复
板凳
grissiom| | 2012-2-27 18:05 | 只看该作者
本帖最后由 grissiom 于 2012-2-27 18:07 编辑

RM0008(Rev13) 的第 508 页最下面:
WAIT management in asynchronous accesses

If the asynchronous memory asserts a WAIT signal to advise that it's not yet ready to accept or to provide data, the ASYNCWAIT bit has to be set in FSMC_BCRx register.

If the WAIT signal is active (high or low depending on the WAITPOL bit), the second access phase (Data setup phase) programmed by the DATAST bits, is extended until WAIT becomes inactive. Unlike the data setup phase, the first access phases (Address setup and Address hold phases), programmed by the ADDSET and ADDHLD bits, are not WAIT sensitive and so they are not prolonged.

那后面还有具体的例子。所以从手册上看应该是不会停掉总线的,而是硬件的 busy waiting。不知道我的理解对不对……

使用特权

评论回复
地板
aozima|  楼主 | 2012-2-27 18:15 | 只看该作者
不好意思,我还真的没有考虑过这个问题。

根据我的理解:在你的BUSY输出忙时,总线会自动等待,同时如果有中断时会响应中断。

你可以简单地做个实验测试一下,把BUSY固定拉到忙,看看MCU是否还能够响应中断。有什 ...
香水城 发表于 2012-2-27 17:30

有道理,我傻了。

使用特权

评论回复
5
香水城| | 2012-2-27 19:13 | 只看该作者
3楼引用的段落并不能说明是否暂停总线,它只说了外部信号但没说内部。还是测试一下比较好。

使用特权

评论回复
6
aozima|  楼主 | 2012-2-28 01:35 | 只看该作者
前天了解下来是会hold住总线(无期限不响应中断)。
想一下也只能这样,因为CPU要执行的指令可能就在被hold住的总线上

今天实测也是如此。
但FSMC有FIFO,如果只是写一两个数据是没有影响的。
但连接访问就会有问题(实际应用会BUSY的地方肯定不会是只一两个字节)。

看来不能用这种方法。

实测如图

这里两个长的等待有30多US。如果只是这两个长等待,倒是可以用中断。
但发现每写一个数据都有BUSY:

细看刚好发生在CS释放后,所以只要速度不超标,就不会有影响。
但谁能保证呢?

难道只能轮询GPIO?

使用特权

评论回复
7
IJK| | 2012-2-28 09:58 | 只看该作者
感觉应该不会hold住总线,否则这个外设也太霸道了

使用特权

评论回复
8
aozima|  楼主 | 2012-2-28 11:44 | 只看该作者
其实应该是hold总线的。因为其它芯片也都是这样的。是我想当然了。

这个功能本来是为NOR FLASH准备的,他的BUSY是可预测的。

所以这个功能不可以用于BUSY不可预测的情况下。

使用特权

评论回复
9
airwill| | 2012-2-29 08:49 | 只看该作者
这个问题问得很好, 确实, 仔细看看手册, 字里行间好象也是会停止住总线.
不过资料没有明确说, FSMC 的总线会停住内核的总线矩阵.
只能看楼主的试验来证明了

使用特权

评论回复
10
IJK| | 2012-2-29 10:36 | 只看该作者
其实应该是hold总线的。因为其它芯片也都是这样的。是我想当然了。

这个功能本来是为NOR FLASH准备的,他的BUSY是可预测的。

所以这个功能不可以用于BUSY不可预测的情况下。 ...
aozima 发表于 2012-2-28 11:44


有道理。如果是这样就可以理解了

使用特权

评论回复
11
grissiom| | 2012-2-29 15:47 | 只看该作者
学习!看来 FSMC 上等待 Data Setup 的时候也是会停掉总线的……

使用特权

评论回复
12
aozima|  楼主 | 2012-2-29 16:46 | 只看该作者
其实在一开始考虑时就是认为会停掉总线,
但也可能会停掉内核,比如CPU要执行刚好在这个总线上。

但应用上想当然以为要是只hlod一个BANK。
而指令在别的BANK上或是CACHE中,但如果别的BANK或是CACHE中的指令访问被锁的BANK
还是会锁住内核。。

于是,索性全锁了,就简单很多了。。
但有独立CACHE的应该还是不会完全停下来。
或总线本身有缓冲且可用(STM32的就有)。

使用特权

评论回复
13
grissiom| | 2012-3-1 09:14 | 只看该作者
adce 说的延迟和这里的 busy 貌似不是一回事?……

使用特权

评论回复
14
myxiaonia| | 2014-12-18 00:21 | 只看该作者
aozima 发表于 2012-2-29 16:46
其实在一开始考虑时就是认为会停掉总线,
但也可能会停掉内核,比如CPU要执行刚好在这个总线上。

其实可以用dma通道来完成这个操作呀,这样的话dma通道会被block,cpu不会受影响吗?

使用特权

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

本版积分规则

个人签名:RTOS RT-Thread

55

主题

2016

帖子

23

粉丝