注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
luooove的个人空间 https://home.eeworld.com.cn/space-uid-278928.html [收藏] [复制] [分享] [RSS]
日志

LaunchPad SPI 通信 无法进中断

已有 928 次阅读2015-3-12 21:45

  1. 手上有两个LaunchPad,现在从一个LaunchPad作为主机,通过SPI不断发送数据给另一个LaunchPad,接收到数据后通过SPI反馈回来,在再第一块LaunchPad接收SPI数据,并通过串口上传。但是主机在接收SPI数据的时候无法进入中断,看RXBUF寄存器确实接收到数据了。初始化有问题,但是查了半天没发现是什么问题,请大牛指点。
复制代码

从机程序
  1. #include
  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. }
复制代码



本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章