大家好,小弟在使用XMEGA C系列单片机的SPI时,STATUS寄存器中的IF一直不置位(SPI工作在主模式),串行传输一直未完成,导致下面代码中的while循环一直出不来。
通过调试,工作模式、片选信号都没问题。
不知道有什么原因会导致SPI STATUS寄存器中的IF一直不置位,有哪位大侠遇到过,帮帮忙解答一下。困扰几天了,多谢!
附上代码:
void spid_init()
{
PORTD.DIR |= ((1<<4)|(1<<5)|(1<<7)); //4-ss,5-mosi, 7-sck
PORTD.DIR &= ~(1<<6);//6-miso
PORTD.OUT |= ((1<<4)|(1<<5)|(1<<7)); //all '1'
SPID.CTRL = ( SPI_ENABLE_bm + SPI_MASTER_bm //MSB first in master
//+ SPI_MODE1_bm
// +SPI_MODE0_bm
);//Mod0
SPID.INTCTRL = 0;//(SPI_INTLVL1_bm + SPI_INTLVL0_bm ); //高级别中断
SPID.STATUS = SPID.STATUS;
}
unsigned char spid_txbyte(unsigned char ch)
{
SPID.DATA = ch;
while(!(SPID.STATUS&SPI_IF_bm));
return ( ch );
}
unsigned char spid_rxbyte(unsigned char ch)
{
SPID.DATA = ch;
while(!(SPID.STATUS&SPI_IF_bm));
return (SPID.DATA);
} |