LaunchPad SPI 通信 无法进中断

2019-03-24 08:30发布

  1. 手上有两个LaunchPad,现在从一个LaunchPad作为主机,通过SPI不断发送数据给另一个LaunchPad,接收到数据后通过SPI反馈回来,在再第一块LaunchPad接收SPI数据,并通过串口上传。但是主机在接收SPI数据的时候无法进入中断,看RXBUF寄存器确实接收到数据了。初始化有问题,但是查了半天没发现是什么问题,请大牛指点。
复制代码
从机程序
  1. #include <msp430.h>
  2. //从机,接收SPI数据返回回去,并通过串口发给电脑。
  3. unsigned char temp = 0x00;
  4. void Clk_init()
  5. {
  6.         BCSCTL1 = CALBC1_16MHZ;                    // Set DCO
  7.         DCOCTL = CALDCO_16MHZ;
  8. }
  9. void IO_init()
  10. {
  11.         P1SEL = BIT1 + BIT2 + BIT5 + BIT6 + BIT7;                     // P1.1 = RXD, P1.2=TXD
  12.         P1SEL2 = BIT1 + BIT2 + BIT5 + BIT6 + BIT7;
  13. }
  14. void Serial_init()
  15. {
  16.         UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  17.         UCA0BR0 = 0x82;                              // 16MHz 9600 UCA0BRX=1666=0x0682
  18.         UCA0BR1 = 0x06;                              // 16MHz 9600
  19.         UCA0MCTL = UCBRS2 + UCBRS1;               // Modulation UCBRSx = 6
  20.         UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  21.         IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt
  22. }
  23. void SPI_init()
  24. {
  25.         UCB0CTL1 = UCSWRST;                       // **Put state machine in reset**
  26.         UCB0CTL0 |= UCCKPL + UCMSB + UCSYNC;      // 3-pin, 8-bit SPI master
  27.         UCB0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  28.         IE2 |= UCB0RXIE;                          // Enable USCI0 RX interrupt
  29. }

  30. void Init_all()
  31. {
  32.         Clk_init();
  33.         IO_init();
  34.         Serial_init();
  35.         SPI_init();
  36. }
  37. int main(void)
  38. {
  39.         WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  40.         //while (!(P1IN & BIT5));                   // If clock sig from mstr stays low,
  41.                                                                                         // it is not yet in SPI mode
  42.         Init_all();
  43.         __bis_SR_register(LPM4_bits + GIE);       // Enter LPM4, enable interrupts
  44. }
  45. #pragma vector=USCIAB0RX_VECTOR
  46. __interrupt void USCI0RX_ISR(void)
  47. {


  48.         temp = UCB0RXBUF;
  49.     while (!(IFG2&UCB0TXIFG));                // USCI_A0 TX buffer ready?
  50.     UCB0TXBUF = temp;                    // TX -> RXed character
  51.         while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  52.         UCA0TXBUF = temp;                    // TX -> RXed character
  53. }
复制代码


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
luooove
2019-03-24 11:56
< :TI_MSP430_内容页_SA7 --> 貌似发现问题了,缺了这么一个。回实验室试一试__bis_SR_register(GIE);       // interrupts enabled

一周热门 更多>

相关问题

    相关文章