打印

f2802x SPI 问题

[复制链接]
3879|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zymelo|  楼主 | 2011-8-16 11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在用F28027在调试SPI,用的是TI的例程,文件名spi_loopback_interrupts,调试时主要有两个问题:

1.当工作在FIFO中断模式,单步调试时,当执行到发送中断函数时,执行这条语句SpiaRegs.SPITXBUF=sdata,SpiaRegs.SPIFFTX.bit.TXFFST始终为0,为什么???我是向FIFO中写数据,但是它始终为0,相反,SpiaRegs.SPIFFRX.bit.RXFFST的值在不断变化,显示接收到数据。好像是写一个发一个???并没有预先存到FIFO中这个过程,而且进入中断后TXFFINT会置位为1,但是当执行完SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1;这条语句后TXFFINT并没有清0?为什么???

2.当执行for(;;)循环时,第一次进入发中断是怎么产生的?还有产生中断的条件很奇怪啊?TXFFST与TXFFIL匹配时,又说是小于等于时,那只要是FIFO中的数据个数小于设定的TXFFIL就会中断,不一定是等于的时候???第一次产生中断的条件是因为FIFO中没有数据,所以TXFFST是0,小于设定的值TXFFIL=2,所以才进入中断的吗?

3.关于进入发送中断后的操作,仍然是这条语句SpiaRegs.SPITXBUF=sdata,我理解接收中断的方式是,数据已经接收到,然后进入接收中断服务程序,把FIFO中的数据存入自己定义的数组,所以发送中断应该是数据发送完后才进入中断的啊???但是这条语句的意思应该是进入中断后才开始向FIFO中写数据???而且写入的数据在TXFFST中并没有显示出来(第一个问题)???



4.

相关帖子

沙发
zymelo|  楼主 | 2011-8-16 11:22 | 只看该作者
最近在用F28027在调试SPI,用的是TI的例程,文件名spi_loopback_interrupts,调试时主要有两个问题:

1.当工作在FIFO中断模式,单步调试时,当执行到发送中断函数时,执行这条语句SpiaRegs.SPITXBUF=sdata,SpiaRegs.SPIFFTX.bit.TXFFST始终为0,为什么???我是向FIFO中写数据,但是它始终为0,相反,SpiaRegs.SPIFFRX.bit.RXFFST的值在不断变化,显示接收到数据。好像是写一个发一个???并没有预先存到FIFO中这个过程,而且进入中断后TXFFINT会置位为1,但是当执行完SpiaRegs.SPIFFTX.bit.TXFFINTCLR=1;这条语句后TXFFINT并没有清0?为什么???

2.当执行for(;;)循环时,第一次进入发中断是怎么产生的?还有产生中断的条件很奇怪啊?TXFFST与TXFFIL匹配时,又说是小于等于时,那只要是FIFO中的数据个数小于设定的TXFFIL就会中断,不一定是等于的时候???第一次产生中断的条件是因为FIFO中没有数据,所以TXFFST是0,小于设定的值TXFFIL=2,所以才进入中断的吗?

3.关于进入发送中断后的操作,仍然是这条语句SpiaRegs.SPITXBUF=sdata,我理解接收中断的方式是,数据已经接收到,然后进入接收中断服务程序,把FIFO中的数据存入自己定义的数组,所以发送中断应该是数据发送完后才进入中断的啊???但是这条语句的意思应该是进入中断后才开始向FIFO中写数据???而且写入的数据在TXFFST中并没有显示出来(第一个问题)???

使用特权

评论回复
板凳
zymelo|  楼主 | 2011-8-16 11:32 | 只看该作者
4.最后我干脆不用中断,不用FIFO,直接往SPIDAT里面写数据,SpiaRegs.SPIDAT=a;但是执行完这条语句后两个值不相等,很奇怪,即使a变了,SpiaRegs.SPIDAT还是不变,有人说执行完这条语句后,SPIDAT中的数据只移出了一位,好吧!如果是这样,那我往里面写0x0000总行了吧,你再怎么移应该还是0吧,结果SPIDAT里面还是一个很奇怪的数字?SPIDAT中的数据只移出了一位这个说法不太说的通,因为第一点里面我说过只要你往里面SPITXBUF(这里是SPIDAT)写一个,那边SPIRXBUF就接收到一个,RXFFST中显示收到一个,接收到一位说不通吧???我用的是单步调试。。。。

使用特权

评论回复
地板
zymelo|  楼主 | 2011-8-16 11:35 | 只看该作者
不好意思啊  一楼的字体设置的太难看了
还有我回环测试时 发送的数据和接收的数据是对的。。。
所以谁能帮我找到原因吗???

使用特权

评论回复
5
永远的不知| | 2011-8-16 12:41 | 只看该作者
4# zymelo

等我好好看看您写的问题,看能不能帮您搞定。

使用特权

评论回复
6
zymelo|  楼主 | 2011-8-16 13:45 | 只看该作者
5# 永远的不知
谢谢啦!!!!兄弟

使用特权

评论回复
7
zymelo|  楼主 | 2011-8-16 15:05 | 只看该作者
5# 永远的不知
原来是版主哇!失敬失敬。。。。期待你的回答。。。

使用特权

评论回复
8
spark周| | 2011-8-16 16:26 | 只看该作者
5# 永远的不知  
原来是版主哇!失敬失敬。。。。期待你的回答。。。
zymelo 发表于 2011-8-16 15:05
;P

使用特权

评论回复
9
dsh_zhou| | 2011-8-24 17:38 | 只看该作者
还有我回环测试时 发送的数据和接收的数据是对的。。。
==============================
这是必须的

使用特权

评论回复
10
564451696| | 2011-9-29 09:41 | 只看该作者
我来回答第四个问题,你说不用FIFO(不初始化FIFO),RXFFST和TXFFST应该是不会有变化的,所以你上面RXFFST有变化就有问题了,还有SPI是全双工的,怎么能直接操作SPIDAT,还有这个环回测试不是很好用,有条件最好用两个芯片进行调试,还有你最好看一下SPIDAT和SPIRXBUF与SPITXBUF的关系,不会只接收一位。

使用特权

评论回复
11
lilihua0721| | 2011-9-29 14:49 | 只看该作者
回环测试时 发送的数据和接收的数据是对的,这样很难分析出到底是什么原因

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

15

帖子

1

粉丝