Board logo

标题: gz60 spi 通讯中,从机为什么会产生了两次中断,请版主指点[求助] [打印本页]

作者: yangzonglu    时间: 2006-9-4 10:27     标题: gz60 spi 通讯中,从机为什么会产生了两次中断,请版主指点[求助]

gz60 spi 通讯中,从机为什么会产生了两次中断,请版主指点[求助]


我用的是gz60的单片机,在spi通讯中,主机发送一个数据,从机中却产生了两次中断,两次中断收到的数据都是主机发送的同一个数据,也就是说主机发送一个数据,从机却收到两个相同的数据,查了很久,百思不得其解,请版主等高手指点,谢谢!


作者: strongchen    时间: 2006-9-4 10:36

SPI的收和发是同时进行的,而且SPI有2个中断矢量,4个中断源。查一下SPSCR寄存器看看中断是由什么产生的。
作者: yangzonglu    时间: 2006-9-4 11:25

谢谢版主,我先试试看~

作者: yangzonglu    时间: 2006-9-4 14:03

我反复试过了,从机中断程序是这样的:
{
SPCR_SPRIE=0;
TEMP0=SPDR;
TEMP1=SPSCR;
(// SPDR=0X45;
TEMP0=SPDR;
TEMP1=SPSCR;
)
i++;
SPCR_SPRIE=1;
}
如果没有括号里面的程序则存储单元中就会产生两次中断,就会收到两个相同的从主机传过来的数据,即主机发送了1,2,3,4,5,6则从机就会收到1,1,2,2,3,3,4,4,5,5,6,6,但是加上括号里的程序后就不会产生两次中断了,百思不得其解,请版主指点,谢谢!(中断都是由SPRF位引起的)
作者: strongchen    时间: 2006-9-4 14:50

在SPI的中断程序里,不必将SPRIE清零(此时CPU已关闭所有中断),而是应该先读SPSCR,再读SPDR,将SPRF清零。否则将SPRIE置1时,很可能使SPRF同时置1,这样就会产生多次中断,但SPDR中的数其实并没有变化,也没有收到新的数。
作者: yangzonglu    时间: 2006-9-4 16:06

谢谢版主~!我先去试一试看
作者: yangzonglu    时间: 2006-9-4 16:12

谢谢斑主,我试过了,的确是应该先读SPSCR,再读SPDR,将SPRF清零,就只会产生一次中断了,但是和SPRIE无关。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0