- 串口同步通讯的声明:
// 初始化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;求高手指点啊,我的理解有问题么,然后没问题的话 我这会是什么问题呢?
复制代码
此帖出自
小平头技术问答
//调整下顺序试试?
while(!(U0TCTL & TXEPT)); // TX Buffer is empty ?
U0TXBUF =WriteData;// Send the byte
或者
U0TXBUF =WriteData;// Send the byte
while(!(U0TCTL & TXEPT)); // TX Buffer is empty ?
U0TCTL &=~ TXEPT;//加上这个试试?
或者
把上面这个再调整顺序试试?
[ 本帖最后由 SuperStar515 于 2011-8-9 12:58 编辑 ]一周热门 更多>