天天看点

MSP430 SPI硬件接口

所使用的为MSP430F5438,比较老的一款单片机了。不过它的串口还是比较多,所以本人还是比较喜欢。

在使用SPI硬件接口的时候,初始化程序代码:

void halCom3Init(void)

{  

  unsigned char Data[3];

  P3SEL |= (BIT0+BIT4+BIT5);

  P3DIR |= BIT3;

  UCA0CTL1 |= UCSWRST;                      // **Put state machine in reset**

  UCA0CTL0 |= UCMST+UCSYNC+UCCKPH+UCCKPL+UCMSB;    // 3-pin, 8-bit SPI master+UCCKPL

                                            // Clock polarity high, MSB

  UCA0CTL1 |= UCSSEL_2;                     // SMCLK

  UCA0BR0 = 0x04;                           // /2

  UCA0BR1 = 0;                              //

  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**

//  UCA0IE |= UCRXIE;                         // Enable USCI_B0 RX interrupt

}

通常时序由UCCKPH和UCCKPL来控制,具体可参看USER'S GUIDE。实际调试的时候,CLK下降沿或上升沿和DATA的转变时间几乎重合,导致硬件SPI接口不好使。

改用软件模拟SPI接口后,感觉很稳定。具体时序可参照所通信的器件的时序图来调整。

//****************************************模拟SPI实现DAC8734基本写操作

void DAC8734_Write(UCHAR txdata)

{

      UCHAR i;

      SETCLK;

      for(i=0;i<8;i++)

      { 

        SETCLK;

        if(0x80&txdata)

            SETSDI;

        else CLRSDI;

        _NOP();

        CLRCLK;

        txdata<<=1;

      }

      SETCLK;

}

//****************************************模拟SPI实现写8734命令字

void  DAC8734WriteReg(UCHAR* Dat)

{

        CLRCS; 

        _NOP();                 

        DAC8734_Write(Dat[0]); 

        DAC8734_Write(Dat[1]); 

        DAC8734_Write(Dat[2]);

        SETCS;  

        _NOP();                

}

继续阅读