用5438与NRF905做发送与接收数据的实验,用I/O口模拟SPI时没有问题,但将USCI设置为SPI模式时,无法通信,下面是接收数据的代码,麻烦大家给看一看
void RxPacket(unsigned char *RxBuf) { while(!(DR_IN)); //DR_IN=1时,收到正确的数据包 uchar i; TRX_CE_0; //由接收状态转到空闲状态 CSN_0; //CSN=0; // Spi enable for write a spi command while (!(UCB0IFG&UCTXIFG)); UCB0TXBUF=RRP; // 写“读数据”命令 for (i=0;i<SIZE;i++) {while (!(UCB0IFG&UCRXIFG)); RxBuf=UCB0RXBUF; // 接收收到的数据 while (!(UCA1IFG&UCTXIFG)); UCA1TXBUF=RxBuf; //发送给PC } CSN_1; //CSN=1; // Spi disable while(AM_IN||DR_IN);//读完数据后,NRF905自动将AM_IN、DR_IN清零 TRX_CE_1; //转到接收状态 } void init_usci_b() //串口初始化 { UCB0CTL1 |= UCSWRST; // **Put state machine in reset** UCB0CTL0 |= UCMST+UCSYNC+UCCKPL+UCMSB; // 3-pin, 8-bit SPI master // Clock polarity high, MSB UCB0CTL1 |= UCSSEL_1; // ACLK UCB0BR0 = 3; UCB0BR1 = 0; // //UCB0MCTL = 0; // No modulation UCB0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** }
void main() { WDTCTL=WDTPW+WDTHOLD; //关闭看门狗 InitIO(); //IO口初始化 init_usci_a(); init_usci_b(); NRF905_RxOn(); //置接收模式 while(1) { RxPacket(RxBuf); _NOP(); } }
红色语句以前为I/O模拟SPI的程序,现改为SPI模式,InitIO()和init_usci_a()已经经验证没问题,就不附上了。发送数据的程序仍为I/O模拟SPI,所以发送也没问题了,就是收不到
|