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