MSP430149 SPI速度问题
这几天用430 spi 模块驱动SD卡实验,SPI在低速情况下,读取数据是正常的,在数据手册查到F149 SPI最大速度是4MHZ,但是在实际情况中只能达到1MHz,速度在高一点读到数据就出错了,一直找不到其中原因,恳请有经验有坛友指教! 关注,用的是串口的设置? sky_walker 发表于 2014-11-7 17:16关注,用的是串口的设置?
SPI设置参照ti官方例程 sky_walker 发表于 2014-11-7 17:16
关注,用的是串口的设置?
找到问题了,这是原来的程序
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是不置位的,程序会一直死在那里 官方也是这么配置的?
while (!(IFG2 & UCB0TXIFG)) // USCI_B0 TX buffer ready?
{
}
UCB0TXBUF = *pbuf; // Previous data to TX, RX
while(UCB0STAT & UCBUSY)
{
}
temp = UCB0RXBUF; sky_walker 发表于 2014-11-12 19:27
while (!(IFG2 & UCB0TXIFG)) // USCI_B0 TX buffer ready?
{
}
好的,回去试下,对了还要咨询你一下,spi寄存器里里有个CKPH和CKPL两个标志位设置,一直没搞清楚什么时候需要设置,而且不同spi速率下对数据是有影响的 1M基本上小应用都可以了吧
页:
[1]