打印

spi 读写操作 ,被中断打断,会导致读写错误或死循环

[复制链接]
13833|30
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kexd2004|  楼主 | 2011-6-13 18:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
charrijon| | 2011-6-13 19:30 | 只看该作者
你在高级中断里面应该先查询SPI是否处于发送状态中,要等到他发送完毕后再发送新的数据

使用特权

评论回复
板凳
johnwjl| | 2011-6-13 19:40 | 只看该作者
绝对有可能,有3种解决方法:
1. spi 读写操作前关闭中断。
2. 不在中断中进行spi读写。
3. 转行,不再从事编程工作。

使用特权

评论回复
地板
谈的元| | 2011-6-13 19:45 | 只看该作者
SPI不会这样

使用特权

评论回复
5
谈的元| | 2011-6-13 19:45 | 只看该作者
SPI不会这样

使用特权

评论回复
6
johnwjl| | 2011-6-13 19:55 | 只看该作者
LS,如果spi是用IO口模拟的呢?会不会这样?

使用特权

评论回复
7
NE5532| | 2011-6-13 20:10 | 只看该作者
一个外设不会这样,多个外设占用SPI时候有可能,还有CS线在中断中不能被影响。

使用特权

评论回复
8
谈的元| | 2011-6-13 22:31 | 只看该作者
模拟的不会

使用特权

评论回复
9
kexd2004|  楼主 | 2011-6-14 09:01 | 只看该作者
2,3楼的建议不错,不知5楼兄能不能讲明白一些呢,如main函数中正在读写spi,未读写完,被定时器打断,应该是可能的,然后定时器也开始读写,出错应该是会有的。

使用特权

评论回复
10
原野之狼| | 2011-6-14 09:03 | 只看该作者
LS的设计本来就是不合理的
在MAIN和定时器里对SPI设备是竞争的 想不出错都不可能
所以改变下设计思路吧

使用特权

评论回复
11
leang521| | 2011-6-14 09:08 | 只看该作者
第一,SPI读写函数不可为可重入函数,中断调用会导致错误
第二,SPI为独有设备,不可重复占用,需要做互斥

使用特权

评论回复
12
ayb_ice| | 2011-6-14 09:19 | 只看该作者
不出错的可能是1PPM

使用特权

评论回复
13
xwj| | 2011-6-14 09:36 | 只看该作者
11正解,说的很明白

使用特权

评论回复
14
jack_shine| | 2011-6-14 10:35 | 只看该作者
别的方向我不知道,我知道现在许多山寨手机用的OS,即使SPI读写数据未完成被中断以后,是不会出错的

使用特权

评论回复
15
原野之狼| | 2011-6-14 11:25 | 只看该作者
别的方向我不知道,我知道现在许多山寨手机用的OS,即使SPI读写数据未完成被中断以后,是不会出错的
jack_shine 发表于 2011-6-14 10:35

问题的关键是:竞争访问
若中断了但未造成竞争访问则不会有问题

使用特权

评论回复
16
delin17| | 2011-6-14 11:27 | 只看该作者
如果没有竞争,就不会有问题的。。
中断里没有操作到SPI及对应的IO口。。

使用特权

评论回复
17
t.jm| | 2011-6-14 11:37 | 只看该作者
绝对有可能,有3种解决方法:
1. spi 读写操作前关闭中断。
2. 不在中断中进行spi读写。
3. 转行,不再从事编程工作。
johnwjl 发表于 2011-6-13 19:40

这不是个好的解决办法,我第一次玩SD卡,也遇到这个问题,
开始是关中断,然后我知道了更本质的原因,其实是同步段没处理好,现在读SD卡就不怕被中断打断了。

使用特权

评论回复
18
cecwxf| | 2011-6-14 11:49 | 只看该作者
mark

使用特权

评论回复
19
leang521| | 2011-6-14 12:08 | 只看该作者
别的方向我不知道,我知道现在许多山寨手机用的OS,即使SPI读写数据未完成被中断以后,是不会出错的
jack_shine 发表于 2011-6-14 10:35

你只看到了表像没看到内涵

你看到的OS工作在应用层,而非底层。应用层也仅仅是断路,并非冲突。
SPI读写数据未完成,也仅仅是一个数据传输未完结,文件系统有完善的处理此类问题的响应机制,所以不会出错。

使用特权

评论回复
20
leang521| | 2011-6-14 12:12 | 只看该作者
这不是个好的解决办法,我第一次玩SD卡,也遇到这个问题,
开始是关中断,然后我知道了更本质的原因,其实是同步段没处理好,现在读SD卡就不怕被中断打断了。 ...
t.jm 发表于 2011-6-14 11:37

没错,只要同步做好。避免互斥,就不用担心中断打断。软件都讲中断响应时间,这个响应时间即使完成进入中断前的处理,比如SPI,是按字节发送的,如果在起始位发生中断,也要在数据传输完成后响应中断。何况现在的SPI都是硬件的,基本上也不存在此类问题。
软件很重要。所有的中断导致的错误都是软件结构设计缺陷造成的,不要以为山寨的就一定有缺陷,即使是山寨的,在底层也是完整的,否则系统就无法运行起来

使用特权

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

本版积分规则

19

主题

65

帖子

1

粉丝