f2802x SPI 问题

[复制链接]
4785|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 | 显示全部楼层
不好意思啊  一楼的字体设置的太难看了
还有我回环测试时 发送的数据和接收的数据是对的。。。
所以谁能帮我找到原因吗???
永远的不知 发表于 2011-8-16 12:41 | 显示全部楼层
4# zymelo

等我好好看看您写的问题,看能不能帮您搞定。
 楼主| zymelo 发表于 2011-8-16 13:45 | 显示全部楼层
5# 永远的不知
谢谢啦!!!!兄弟
 楼主| zymelo 发表于 2011-8-16 15:05 | 显示全部楼层
5# 永远的不知
原来是版主哇!失敬失敬。。。。期待你的回答。。。
spark周 发表于 2011-8-16 16:26 | 显示全部楼层
5# 永远的不知  
原来是版主哇!失敬失敬。。。。期待你的回答。。。
zymelo 发表于 2011-8-16 15:05
;P
dsh_zhou 发表于 2011-8-24 17:38 | 显示全部楼层
还有我回环测试时 发送的数据和接收的数据是对的。。。
==============================
这是必须的
564451696 发表于 2011-9-29 09:41 | 显示全部楼层
我来回答第四个问题,你说不用FIFO(不初始化FIFO),RXFFST和TXFFST应该是不会有变化的,所以你上面RXFFST有变化就有问题了,还有SPI是全双工的,怎么能直接操作SPIDAT,还有这个环回测试不是很好用,有条件最好用两个芯片进行调试,还有你最好看一下SPIDAT和SPIRXBUF与SPITXBUF的关系,不会只接收一位。
lilihua0721 发表于 2011-9-29 14:49 | 显示全部楼层
回环测试时 发送的数据和接收的数据是对的,这样很难分析出到底是什么原因
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

15

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部