飞思卡尔s12xdp512的SPI模块的收发问题
程序总是调不通.代码如下:
#include <hidef.h>
#include "derivative.h"
byte a[8]={0};
void SPI_Init(void)
{
SPI0CR1_SPE=1; /* enable SPI0 */
SPI0CR1_SPIE=0; /* disable interrupt */
SPI0CR1_MSTR=1; /* master mode */
SPI0BR=0x03; /* BaudRate_16 */
}
byte SPI_Byte(byte value)
{
while (!SPI0SR_SPTEF);
SPI0DR = value;
while(!(SPI0SR_SPIF));
return SPI0DR;
}
void main(void)
{
byte b;
DisableInterrupts;
CLKSEL &= 0x7f;
EnableInterrupts;
SPI_Init( );
for(b=0;b<8;b++)
{
a[b]=SPI_Byte(b);
}
while(1);
}
现在的情况是:数组a里面的数据全是0xFF.我单步调试的时候测试过了,数据根本就没写进数据寄存器SPI0DR里面.
困扰几天了,实在找不出错误的原因..
[解决办法]
SPI0DR是个寄存器啊,这是个和硬件相关的东西,所以并不是说你赋值给它,读出来就是你赋的值了
显然SPI0DR寄存器在数据发送出去之后就被清空了,所以SPI_Byte函数返回的一直是oxff
还有种可能,因为楼主寄存器配置错误导致spi没正常工作,所以卡在while (!SPI0SR_SPTEF);或while(!(SPI0SR_SPIF));了,不过看楼主说有单步调试,如果是这种情况应该很容易发现