如果用中断方式,spi的中断是怎么被触发的?是接收到1个byte的数据就产生一个硬件中断还是接收多个bytes才产生?
这个问题断断续续搞了很久了,也没弄明白。
14 个解决方案
#1
应该是可以设置成一个数据就触发还是一串数据再触发
#2
这个2440的规格书上说的很清楚呀。你不会没有这个规格书吧。
#3
Yashi 哥哥,我确实没在规格书上找到,弱弱地问句,在第几页啊?
#4
506页
#5
2440 SPI没有FIFO,接收一字节就产生一个中断,我做过试验,来不及,会丢包的。
#6
不知道楼主用SPI和什么连接。如果也是单片机的话,加条控制线。当单片机要给2440发送数据的时候,先通过控制线给2440发个信号(电平信号),然后2440相应外部中断,在中断里面2440就可以循环的把数据读走。
#7
应该可以的,产生一个中断马上就读到缓冲区不就可以了。
#8
不知道您的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,再接收数据,就可以了,对不?
把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
但是响应中断要时间啊,从硬件中断到ISR,到ist,。比如说响应一个中断要1MS ,但是在这1MS 里面,下位机已经给你发送了10个字节。那么就会丢掉一些!
#12
yes
#13
Tx Auto Garbage Data mode enable 这位设成1时,是如何触发数据的接收的呢?
手册上说是在上次读取数据时。但是万一这个时候从机没有准备好呢?
#14
楼主你好,近期也在搞mini2440的SPI驱动,我发现只当mini2440通过MOSI向外发数据时SPICLK才有电平变化,而且发完之后需要马上收数据,这明显很鸡肋嘛。还有SPI的驱动到底怎么使呢?希望楼主可以指点一二啊,小弟不胜感激!!
#1
应该是可以设置成一个数据就触发还是一串数据再触发
#2
这个2440的规格书上说的很清楚呀。你不会没有这个规格书吧。
#3
Yashi 哥哥,我确实没在规格书上找到,弱弱地问句,在第几页啊?
#4
506页
#5
2440 SPI没有FIFO,接收一字节就产生一个中断,我做过试验,来不及,会丢包的。
#6
不知道楼主用SPI和什么连接。如果也是单片机的话,加条控制线。当单片机要给2440发送数据的时候,先通过控制线给2440发个信号(电平信号),然后2440相应外部中断,在中断里面2440就可以循环的把数据读走。
#7
应该可以的,产生一个中断马上就读到缓冲区不就可以了。
#8
不知道您的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,再接收数据,就可以了,对不?
把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
但是响应中断要时间啊,从硬件中断到ISR,到ist,。比如说响应一个中断要1MS ,但是在这1MS 里面,下位机已经给你发送了10个字节。那么就会丢掉一些!
#12
yes
#13
Tx Auto Garbage Data mode enable 这位设成1时,是如何触发数据的接收的呢?
手册上说是在上次读取数据时。但是万一这个时候从机没有准备好呢?
#14
楼主你好,近期也在搞mini2440的SPI驱动,我发现只当mini2440通过MOSI向外发数据时SPICLK才有电平变化,而且发完之后需要马上收数据,这明显很鸡肋嘛。还有SPI的驱动到底怎么使呢?希望楼主可以指点一二啊,小弟不胜感激!!