你好!
我在做一个项目,使用了RF430F51xx芯片,该芯片包含两个模块MCU(MSP430F5172)和RAIDAES模块,两个模块之间可以通过3线SPI通信。MCU作为master,另一个是slave。问题是: master接收到slave的数据总是不变的0xFF。
相关程序如下:
IO模块初始化:
__disable_interrupt();
PMAPPWD = 0x02D52; // Get write-access to port mapping regs
PMAPCTL = PMAPRECFG;
P1MAP0 = PM_UCA0CLK; // Map UCA0CLK
P1MAP1 = PM_UCA0SIMO; // Map UCA0SIMO
P1MAP2 = PM_UCA0SOMI; // Map UCA0SOMI /*
PMAPPWD = 0; // Lock port mapping registers
__enable_interrupt();
P1DIR |= BIT1 + BIT0; // SIMO & SPI_CLK as Outputs
P1DIR &= (~BIT2); //SOMI
P1SEL |= BIT2 + BIT1 + BIT0; // P1.1, 1.2, 1.3 to secondary mode -> SPI-Clock,-SOMI,-SIMO
SPI初始化:
void SPI_init() {
UCA0CTL1 |= UCSWRST;
//UCA0CTL0 &= ~UCCKPH; // stay in reset condition until config is done
// UCA0CTL0 |= UCCKPL;
UCA0CTL0 |= UCMSB + UCMST + UCSYNC; // 3-pin, 8-bit, MasterMode //UCA0CTL0 = 0xA9;
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 2; // SPI clock = SMCLK/20
UCA0BR1 = 0;
UCA0MCTL = 0; // No modulation
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
}
收发模块程序:
u8 TransceiveSPI (u8 txdata) {
char rxdata = 0x00;
while (BUSY_Pin != 0x00); // wait until BUSY = 0
while (!(UCA0IFG & UCTXIFG)); // wait until last SPI-Transmission is finished
UCA0TXBUF = txdata; // send 8 clocks "txdata" and SPI-clocks
while (!(UCA0IFG & UCRXIFG)); // wait until one byte is received
return UCA0RXBUF;
rxdata = UCA0RXBUF;
return (rxdata); // send "rxdata" to main program }
请问:
程序的问题在哪里?为什么不能接收slave的数据。