// 初始化MSP430的SPI
// SPI时钟选择DCOCLK最高频率,在8M-10M之间;因外部XT2=8M晶振,故选用外部晶振
void Init_SPI(void)
{
// BCSCTL1_ |= RSEL0 + RSEL1 + RSEL2; // 选择最高标称频率
// DCOCTL_ |= DCO0 + DCO1 + DCO2; // Set max DCO frequency
// BCSCTL2_ &= ~SELS; // SMCLK选择DCOCLK时钟源
U0CTL = CHAR + SYNC + MM + SWRST; // 8-bit, SPI, Master,Software reset enable
U0TCTL = SSEL0 + SSEL1 + STC; // 在USCLK时钟的下降沿输出,上升沿锁存
U0BR0 = 0x002; // SPICLK = SMCLK/2
U0BR1 = 0x000;
U0MCTL = 0x000; // 同步通信时不需要调整寄存器,使用时最好全写0
ME1 = USPIE0; // SPI模块0允许
U0CTL &= ~SWRST; // SPI允许
// IE1 |= URXIE0; // 接收中断允许
// _EINT(); // 允许中断
}
已经查了好多遍,我认为声明是没有错误的。。
然后用串口通讯发送一个字节:
U0TXBUF =WriteData; // Send the byte
while(!(U0TCTL & TXEPT)); // TX Buffer is empty ?
这个地方U0TCTL的TXEPT位 跟踪发现,总是0,也就是说 总是有数据,在没有U0TXBUF = WriteData时候也是0
个人感觉,U0TCTL的TXEPT位 应该在未发送数据前为1(空),然后U0TXBUF有值时 该位变为0,发送完毕,该位变为1;
求高手指点啊,我的理解有问题么,然后没问题的话 我这会是什么问题呢?
复制代码