首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

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

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

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


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

If you have dream,never give up!
SPI的收和发是同时进行的,而且SPI有2个中断矢量,4个中断源。查一下SPSCR寄存器看看中断是由什么产生的。
海纳百川  有容乃大
谢谢版主,我先试试看~
If you have dream,never give up!
我反复试过了,从机中断程序是这样的:
{
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!
在SPI的中断程序里,不必将SPRIE清零(此时CPU已关闭所有中断),而是应该先读SPSCR,再读SPDR,将SPRF清零。否则将SPRIE置1时,很可能使SPRF同时置1,这样就会产生多次中断,但SPDR中的数其实并没有变化,也没有收到新的数。
海纳百川  有容乃大
谢谢版主~!我先去试一试看
If you have dream,never give up!
谢谢斑主,我试过了,的确是应该先读SPSCR,再读SPDR,将SPRF清零,就只会产生一次中断了,但是和SPRIE无关。
If you have dream,never give up!
返回列表