MSP430 SPI硬件接口

  • Post author:
  • Post category:其他


所使用的为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();

}



版权声明:本文为qiangziaza原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。