SPI的查询发送接收问题,请高手指教
SPI的查询方式:我在主函数里直接判断,函数运行在自测模式,
SysCtrl_init();
DINT;
IER=0;
IFR=0;
PieCtrl_init();
PieVectTable_iit();
Spi_init();
for(;;)
{ if(SpiaRegs.SPIST.BIT.TXBUFFULL!=1)
SpiaRegs.SPITXBUF=Txdat;
if(SpiaRegs.SPIST.BIT.INT_FLAG==1)
Rxdat=SpiRegs.SPIRXBUF;
}
但问题就是不行,发送和接收的不对,数据一句话就是乱。
for(;;)
{
if(Spi_TxReady() == 1)
{
SpiaRegs.SPITXBUF =Txdat;
}
if(Spi_RxReady() == 1)
{
Rxdat= SpiaRegs.SPIRXBUF;
}
}
unsigned int Spi_TxReady(void)
{
unsigned int i;
if(SpiaRegs.SPISTS.bit.BUFFULL_FLAG == 1)
{
i = 0;
}
else
{
i = 1;
}
return(i);
}
unsigned int Spi_RxReady(void)
{
unsigned int i;
if(SpiaRegs.SPISTS.bit.INT_FLAG == 1)
{
i = 1;
}
else
{
i = 0;
}
return(i); 这样就可以接收到发送的数,纳闷怎么直接哪标志位来判断就不行,但通过调用函数就OK,
希望兄弟们帮解释解释,万分感谢。。。 以上问题针对的是TMS320F2812 tianwen_4524 发表于 2013-8-21 16:37 static/image/common/back.gif
unsigned int Spi_TxReady(void)
{
unsigned int i;
你说的两种判断方法的标志有一个不一样啊
if(SpiaRegs.SPIST.BIT.TXBUFFULL!=1) 谢谢!昨天回去弄了一下,又可以了!可以之前第一次弄得太乱了!
之前可能是数的传送以及对数占了缓冲器位置,如:设置初始:Txdat=1,Rxdat=0
for(;;)
{ if(SpiaRegs.SPIST.BIT.TXBUFFULL!=1)
{ SpiaRegs.SPITXBUF=Txdat;
Txdat++;
if(Txdat>60000)
Txdat=0;
}
if(SpiaRegs.SPIST.BIT.INT_FLAG==1)
Rxdat=SpiRegs.SPIRXBUF;
}
不设断点,开始运行,突然暂停,Txdat=10,Rxdat=7.刚开始我有点懵,怎么回事,其它两个数(8,9)去哪了???
但昨晚又想了下,应该是,9在SPIDAT中,正在发送中,8在SPITXBUF中,属个人分析,不对请指教???
tianwen_4524 发表于 2013-8-21 16:39 static/image/common/back.gif
这样就可以接收到发送的数,纳闷怎么直接哪标志位来判断就不行,但通过调用函数就OK,
希望兄弟们帮解释解 ...
其实是一样的,当SPITXBUFFULL_FLAG==1,函数unsigned int Spi_TxReady(void)返回的是0,反之为1。
这种写法应该是没问题的,对比串口的写法即可,串口的判断是可以直接在主函数里面判断的 问题解决了就好楼上都分析的很有道理
页:
[1]