This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
最近自己在调试f149 spi模块遇见了非常头痛的问题,手册中f149 spi最高速度是4MHz,在实际中我只调到了1MHz,速度再往上调的时候,读出的数据就出错了,spi初始化代码是参照ti官方例程,怎么也找不出其中原因,肯请ti工程师指教
找到问题了,这是原来的程序
void SPI_Write_Byte(unsigned char byte)
{
IFG2 &= 0xCF;
U1TXBUF = byte;
while(!(IFG2 & UTXIFG1));
}
unsigned char SPI_Read_Byte(void)
{
IFG2 &= 0xCF;
U1TXBUF = 0xFF;
while(!(IFG2 & URXIFG1)); //判断URXIFG1为接收完成标志
return U1RXBUF;
}
这是改过后程序
void SPI_Write_Byte(unsigned char byte)
{
IFG2 &= 0xCF;
U1TXBUF = byte;
while(!(IFG2 & UTXIFG1));
}
unsigned char SPI_Read_Byte(void)
{
IFG2 &= 0xCF;
U1TXBUF = 0xFF;
while(!(IFG2 & UTXIFG1)); //判断UTXIFG1为接收完成标志
return U1RXBUF;
}
两个程序不同之处就是接收字节完成判断的标志位,造成SPI速度上不去,两个程序各有优缺点,以前我采用的是第二程序,但是存在一个问题就是SPI接收的 第一个字节是错误的,永远是0xFF,所以我用判断URXIFG1来确认接收是否完成,但是又出现了另一个问题,在实际中如果接收字节是 0xFF,URXIFG1是不置位的,程序会一直死在那里,所以想建议TI工程师能不能在SPI寄存器加一个U1RXBUF移位完成的标志位,更加准确判 断SPI字节接收完成