2440,wince5.0 的spi驱动 接收部分是用中断方式,还是查询方式?

时间:2021-04-09 17:30:08
2440,wince5.0 的spi驱动 接收部分是用中断方式,还是查询方式?各位是怎么实现的?
如果用中断方式,spi的中断是怎么被触发的?是接收到1个byte的数据就产生一个硬件中断还是接收多个bytes才产生?
这个问题断断续续搞了很久了,也没弄明白。

14 个解决方案

#1


应该是可以设置成一个数据就触发还是一串数据再触发

#2


这个2440的规格书上说的很清楚呀。你不会没有这个规格书吧。

#3


引用 2 楼 yashi 的回复:
这个2440的规格书上说的很清楚呀。你不会没有这个规格书吧。

Yashi 哥哥,我确实没在规格书上找到,弱弱地问句,在第几页啊?

#4


506页

#5


2440 SPI没有FIFO,接收一字节就产生一个中断,我做过试验,来不及,会丢包的。

#6


不知道楼主用SPI和什么连接。如果也是单片机的话,加条控制线。当单片机要给2440发送数据的时候,先通过控制线给2440发个信号(电平信号),然后2440相应外部中断,在中断里面2440就可以循环的把数据读走。

#7


引用 5 楼 wjf_zjut 的回复:
2440 SPI没有FIFO,接收一字节就产生一个中断,我做过试验,来不及,会丢包的。


应该可以的,产生一个中断马上就读到缓冲区不就可以了。

#8


引用 4 楼 ddoeddoe 的回复:
506页

不知道您的datasheet是什么版本的,我的506是讲IIC(MULTI-MASTER IIC-BUS LINE CONTROL(IICLC) REGISTER)的,我的版本是Revision 0.12(March 15, 2004),可惜的是,文档没有标明每一页,只有章节,通过pdf阅读器看是共602页

#9


“2440 SPI没有FIFO,接收一字节就产生一个中断”那就不用像写串口那样去判断中断类型了,对吗?

#10


对了,若是用中断模式,是不是像这样设置
把SPI CONTROL REGISTER中的SPI Mode Select(SMOD)设置成01 (interrupt mode)
rSPCON0 = (1<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);
还有其他地方吗?
还有一点Tx Auto Garbage Data mode enable 这位如是设成0, 是不是若想收数据,先发dummy数据0xff,然后判断ready位是否为1,再接收数据?
如把Tx Auto Garbage Data mode enable 这位设成1呢,直接然后判断ready位是否为1,再接收数据,就可以了,对不?

#11


引用 7 楼 xqhrs232 的回复:
引用 5 楼 wjf_zjut 的回复:
2440 SPI没有FIFO,接收一字节就产生一个中断,我做过试验,来不及,会丢包的。 
 

应该可以的,产生一个中断马上就读到缓冲区不就可以了。

但是响应中断要时间啊,从硬件中断到ISR,到ist,。比如说响应一个中断要1MS ,但是在这1MS 里面,下位机已经给你发送了10个字节。那么就会丢掉一些!

#12


引用 10 楼 ulovexd 的回复:
对了,若是用中断模式,是不是像这样设置
把SPI CONTROL REGISTER中的SPI Mode Select(SMOD)设置成01 (interrupt mode)
rSPCON0 = (1 < <5)|(1 < <4)|(1 < <3)|(0 < <2)|(0 < <1)|(0 < <0);
还有其他地方吗?
还有一点Tx Auto Garbage Data mode enabl……

yes

#13


引用 10 楼 ulovexd 的回复:
对了,若是用中断模式,是不是像这样设置
把SPI CONTROL REGISTER中的SPI Mode Select(SMOD)设置成01 (interrupt mode)
rSPCON0 = (1<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);
还有其他地方吗?
还有一点Tx Auto Garbage Data mode enable 这位如是设成0, 是……

Tx Auto Garbage Data mode enable 这位设成1时,是如何触发数据的接收的呢?
手册上说是在上次读取数据时。但是万一这个时候从机没有准备好呢?

#14


楼主你好,近期也在搞mini2440的SPI驱动,我发现只当mini2440通过MOSI向外发数据时SPICLK才有电平变化,而且发完之后需要马上收数据,这明显很鸡肋嘛。还有SPI的驱动到底怎么使呢?希望楼主可以指点一二啊,小弟不胜感激!!

#1


应该是可以设置成一个数据就触发还是一串数据再触发

#2


这个2440的规格书上说的很清楚呀。你不会没有这个规格书吧。

#3


引用 2 楼 yashi 的回复:
这个2440的规格书上说的很清楚呀。你不会没有这个规格书吧。

Yashi 哥哥,我确实没在规格书上找到,弱弱地问句,在第几页啊?

#4


506页

#5


2440 SPI没有FIFO,接收一字节就产生一个中断,我做过试验,来不及,会丢包的。

#6


不知道楼主用SPI和什么连接。如果也是单片机的话,加条控制线。当单片机要给2440发送数据的时候,先通过控制线给2440发个信号(电平信号),然后2440相应外部中断,在中断里面2440就可以循环的把数据读走。

#7


引用 5 楼 wjf_zjut 的回复:
2440 SPI没有FIFO,接收一字节就产生一个中断,我做过试验,来不及,会丢包的。


应该可以的,产生一个中断马上就读到缓冲区不就可以了。

#8


引用 4 楼 ddoeddoe 的回复:
506页

不知道您的datasheet是什么版本的,我的506是讲IIC(MULTI-MASTER IIC-BUS LINE CONTROL(IICLC) REGISTER)的,我的版本是Revision 0.12(March 15, 2004),可惜的是,文档没有标明每一页,只有章节,通过pdf阅读器看是共602页

#9


“2440 SPI没有FIFO,接收一字节就产生一个中断”那就不用像写串口那样去判断中断类型了,对吗?

#10


对了,若是用中断模式,是不是像这样设置
把SPI CONTROL REGISTER中的SPI Mode Select(SMOD)设置成01 (interrupt mode)
rSPCON0 = (1<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);
还有其他地方吗?
还有一点Tx Auto Garbage Data mode enable 这位如是设成0, 是不是若想收数据,先发dummy数据0xff,然后判断ready位是否为1,再接收数据?
如把Tx Auto Garbage Data mode enable 这位设成1呢,直接然后判断ready位是否为1,再接收数据,就可以了,对不?

#11


引用 7 楼 xqhrs232 的回复:
引用 5 楼 wjf_zjut 的回复:
2440 SPI没有FIFO,接收一字节就产生一个中断,我做过试验,来不及,会丢包的。 
 

应该可以的,产生一个中断马上就读到缓冲区不就可以了。

但是响应中断要时间啊,从硬件中断到ISR,到ist,。比如说响应一个中断要1MS ,但是在这1MS 里面,下位机已经给你发送了10个字节。那么就会丢掉一些!

#12


引用 10 楼 ulovexd 的回复:
对了,若是用中断模式,是不是像这样设置
把SPI CONTROL REGISTER中的SPI Mode Select(SMOD)设置成01 (interrupt mode)
rSPCON0 = (1 < <5)|(1 < <4)|(1 < <3)|(0 < <2)|(0 < <1)|(0 < <0);
还有其他地方吗?
还有一点Tx Auto Garbage Data mode enabl……

yes

#13


引用 10 楼 ulovexd 的回复:
对了,若是用中断模式,是不是像这样设置
把SPI CONTROL REGISTER中的SPI Mode Select(SMOD)设置成01 (interrupt mode)
rSPCON0 = (1<<5)|(1<<4)|(1<<3)|(0<<2)|(0<<1)|(0<<0);
还有其他地方吗?
还有一点Tx Auto Garbage Data mode enable 这位如是设成0, 是……

Tx Auto Garbage Data mode enable 这位设成1时,是如何触发数据的接收的呢?
手册上说是在上次读取数据时。但是万一这个时候从机没有准备好呢?

#14


楼主你好,近期也在搞mini2440的SPI驱动,我发现只当mini2440通过MOSI向外发数据时SPICLK才有电平变化,而且发完之后需要马上收数据,这明显很鸡肋嘛。还有SPI的驱动到底怎么使呢?希望楼主可以指点一二啊,小弟不胜感激!!