This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

SPI收发问题[非中断]

Other Parts Discussed in Thread: MSP430G2553

初始化进行了如下配置:

P1DIR |= BIT0;
P1OUT |= BIT0;

//其他MISO MOSI CLK受寄存器配置
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // SPI 主机模式
USICTL1 |= USIIE;
USICKCTL = USIDIV_4 + USISSEL_2; // 16分频SMCLK
USICTL0 &= ~USISWRST; // USI 设置写入
USICNT = 0x08; //位数

数据发送过程:

P1OUT &= ~ BIT0;
USISRL = dat;
USICTL1 &= ~USIIFG;
USICNT=0x08;
while((USICTL1 & USIIFG) != 0x01);
USICTL1 &= ~USIIFG;
P1OUT |= BIT0;

数据接收过程:

P1OUT &= ~ BIT0;
dat = USISRL;
USICTL1 &= ~USIIFG;
USICNT=0x08;
while((USICTL1 & USIIFG) != 0x01);
USICTL1 &= ~USIIFG;
P1OUT |= BIT0;

这样操作是否正确呢,我没有其他MCU,无法测试啊.

  • 什么型号的MCU?

    这里给一段MSP430G2XX3的例程

    #include "msp430g2553.h"

    void main(void)
    {
      WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
      while (!(P1IN & BIT4));                   // If clock sig from mstr stays low,
                                                // it is not yet in SPI mode
     
      P1SEL = BIT1 + BIT2 + BIT4;
      P1SEL2 = BIT1 + BIT2 + BIT4;
      UCA0CTL1 = UCSWRST;                       // **Put state machine in reset**
      UCA0CTL0 |= UCCKPL + UCMSB + UCSYNC;      // 3-pin, 8-bit SPI master
      UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

      while (!(IFG2 & UCA0TXIFG));              // USCI_A0 TX buffer ready?
     {

          UCA0TXBUF = UCA0RXBUF;

          IFG2 &=~UCA0TXIFG;

      }


    }

     

  • xinxin 你好,

    你可以用一个跳线帽把SPI发送和接收管脚连起来,然后在主程序接收buf后一句设断点测试接收到的数据是不是你发送的数据!

  • 想请教一下,你的这种操作到底正不正确呢??