gz60 spi 通讯中,从机为什么会产生了两次中断,请版主指点[求助]
- UID
- 146793
- 性别
- 男
|
gz60 spi 通讯中,从机为什么会产生了两次中断,请版主指点[求助]
gz60 spi 通讯中,从机为什么会产生了两次中断,请版主指点[求助]
我用的是gz60的单片机,在spi通讯中,主机发送一个数据,从机中却产生了两次中断,两次中断收到的数据都是主机发送的同一个数据,也就是说主机发送一个数据,从机却收到两个相同的数据,查了很久,百思不得其解,请版主等高手指点,谢谢! |
If you have dream,never give up! |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
SPI的收和发是同时进行的,而且SPI有2个中断矢量,4个中断源。查一下SPSCR寄存器看看中断是由什么产生的。 |
|
|
|
|
|
- UID
- 146793
- 性别
- 男
|
If you have dream,never give up! |
|
|
|
|
|
- UID
- 146793
- 性别
- 男
|
我反复试过了,从机中断程序是这样的:
{
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位引起的) |
If you have dream,never give up! |
|
|
|
|
|
- UID
- 104380
- 性别
- 男
|
在SPI的中断程序里,不必将SPRIE清零(此时CPU已关闭所有中断),而是应该先读SPSCR,再读SPDR,将SPRF清零。否则将SPRIE置1时,很可能使SPRF同时置1,这样就会产生多次中断,但SPDR中的数其实并没有变化,也没有收到新的数。 |
|
|
|
|
|
- UID
- 146793
- 性别
- 男
|
If you have dream,never give up! |
|
|
|
|
|
- UID
- 146793
- 性别
- 男
|
谢谢斑主,我试过了,的确是应该先读SPSCR,再读SPDR,将SPRF清零,就只会产生一次中断了,但是和SPRIE无关。 |
If you have dream,never give up! |
|
|
|
|
|