所使用的為MSP430F5438,比較老的一款單片機(jī)了。不過它的串口還是比較多,所以本人還是比較喜歡。
在使用SPI硬件接口的時(shí)候,初始化程序代碼:
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
}
通常時(shí)序由UCCKPH和UCCKPL來控制,具體可參看USER'S GUIDE。實(shí)際調(diào)試的時(shí)候,CLK下降沿或上升沿和DATA的轉(zhuǎn)變時(shí)間幾乎重合,導(dǎo)致硬件SPI接口不好使。
改用軟件模擬SPI接口后,感覺很穩(wěn)定。具體時(shí)序可參照所通信的器件的時(shí)序圖來調(diào)整。
//****************************************模擬SPI實(shí)現(xiàn)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實(shí)現(xiàn)寫8734命令字
void DAC8734WriteReg(UCHAR* Dat)
{
CLRCS;
_NOP();
DAC8734_Write(Dat[0]);
DAC8734_Write(Dat[1]);
DAC8734_Write(Dat[2]);
SETCS;
_NOP();
}