kexd2004 发表于 2011-6-13 18:51

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

spi 读写操作在main函数和定时中断都有调用,
若main函数正在读写时候被中断打断,会导致读写错误或死循环?请问是否存在这种可能,如何解决呢?

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不会这样

谈的元 发表于 2011-6-13 19:45

SPI不会这样

johnwjl 发表于 2011-6-13 19:55

LS,如果spi是用IO口模拟的呢?会不会这样?

NE5532 发表于 2011-6-13 20:10

一个外设不会这样,多个外设占用SPI时候有可能,还有CS线在中断中不能被影响。

谈的元 发表于 2011-6-13 22:31

模拟的不会

kexd2004 发表于 2011-6-14 09:01

2,3楼的建议不错,不知5楼兄能不能讲明白一些呢,如main函数中正在读写spi,未读写完,被定时器打断,应该是可能的,然后定时器也开始读写,出错应该是会有的。

原野之狼 发表于 2011-6-14 09:03

LS的设计本来就是不合理的
在MAIN和定时器里对SPI设备是竞争的 想不出错都不可能
所以改变下设计思路吧

leang521 发表于 2011-6-14 09:08

第一,SPI读写函数不可为可重入函数,中断调用会导致错误
第二,SPI为独有设备,不可重复占用,需要做互斥

ayb_ice 发表于 2011-6-14 09:19

不出错的可能是1PPM

xwj 发表于 2011-6-14 09:36

11正解,说的很明白

jack_shine 发表于 2011-6-14 10:35

别的方向我不知道,我知道现在许多山寨手机用的OS,即使SPI读写数据未完成被中断以后,是不会出错的

原野之狼 发表于 2011-6-14 11:25

别的方向我不知道,我知道现在许多山寨手机用的OS,即使SPI读写数据未完成被中断以后,是不会出错的
jack_shine 发表于 2011-6-14 10:35 https://bbs.21ic.com/images/common/back.gif
问题的关键是:竞争访问
若中断了但未造成竞争访问则不会有问题

delin17 发表于 2011-6-14 11:27

如果没有竞争,就不会有问题的。。
中断里没有操作到SPI及对应的IO口。。

t.jm 发表于 2011-6-14 11:37

绝对有可能,有3种解决方法:
1. spi 读写操作前关闭中断。
2. 不在中断中进行spi读写。
3. 转行,不再从事编程工作。
johnwjl 发表于 2011-6-13 19:40 https://bbs.21ic.com/images/common/back.gif
这不是个好的解决办法,我第一次玩SD卡,也遇到这个问题,
开始是关中断,然后我知道了更本质的原因,其实是同步段没处理好,现在读SD卡就不怕被中断打断了。

cecwxf 发表于 2011-6-14 11:49

mark

leang521 发表于 2011-6-14 12:08

别的方向我不知道,我知道现在许多山寨手机用的OS,即使SPI读写数据未完成被中断以后,是不会出错的
jack_shine 发表于 2011-6-14 10:35 https://bbs.21ic.com/images/common/back.gif
你只看到了表像没看到内涵

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

leang521 发表于 2011-6-14 12:12


这不是个好的解决办法,我第一次玩SD卡,也遇到这个问题,
开始是关中断,然后我知道了更本质的原因,其实是同步段没处理好,现在读SD卡就不怕被中断打断了。 ...
t.jm 发表于 2011-6-14 11:37 https://bbs.21ic.com/images/common/back.gif
没错,只要同步做好。避免互斥,就不用担心中断打断。软件都讲中断响应时间,这个响应时间即使完成进入中断前的处理,比如SPI,是按字节发送的,如果在起始位发生中断,也要在数据传输完成后响应中断。何况现在的SPI都是硬件的,基本上也不存在此类问题。
软件很重要。所有的中断导致的错误都是软件结构设计缺陷造成的,不要以为山寨的就一定有缺陷,即使是山寨的,在底层也是完整的,否则系统就无法运行起来
页: [1] 2
查看完整版本: spi 读写操作 ,被中断打断,会导致读写错误或死循环