有没有大佬帮忙看看,我传输16位数据,这样写对吗?
void Spi_Init()
{
USICTL0 |= USIPE7 + USIPE6 + USIPE5 + USIMST + USIOE; // Port, SPI master
USICTL1 |= USIIE; // USI计数器中断启用
USICKCTL = USIDIV_4 + USISSEL_2; // /16 SMCLK
USICTL0 &= ~USISWRST; // USI released for operation
USISR = 0xfff0; // init装载数据
USICNT |= USI16B; //启用16位寄存器
USICNT |= 16; // init装载计数
}
uint Spi_RW(uint Send_Val)
{
uint Rec_Val;
USISR = Send_Val;
while(!(USIIFG & USICTL1)); //等待数据发送完成
USICTL1 &= ~USIIFG;
USICNT = 16;
while(!(USIIFG & USICTL1)); //等待数据发送完成
USICNT = 16;
Rec_Val = USISR;
USICTL1 &= ~USIIFG;
return (Rec_Val);
}
Susan Yang:
这个我们是有专门的例程的
dev.ti.com/…/node
msp430g2xx3_usci_spi_standard_master.cUSCI_A0, SPI 3-Wire Master multiple byte RX/TX
msp430g2xx3_usci_spi_standard_slave.cUSCI_A0, SPI 3-Wire Slave multiple byte RX/TX
何帅帅:
回复 Susan Yang:
你提供的这个例程是USCI的,不是USI。USI只有一个移位寄存器,USCI有TX和RX两个,不太一样吧
Susan Yang:
回复 何帅帅:
不好意思,最近看2553比较多,下意识就认为是ucsi了。
您可以参考下下面的代码
github.com/…/msp430_spi.c
何帅帅:
回复 Susan Yang:
非常感谢,很有帮助
Susan Yang:
回复 何帅帅:
很高兴能帮到您