SPI同步通讯建立不起来,要命啊,跪求高手指点!

2019-03-24 15:54发布

  1. 串口同步通讯的声明:// 初始化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;求高手指点啊,我的理解有问题么,然后没问题的话 我这会是什么问题呢?
复制代码



此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
SuperStar515
1楼-- · 2019-03-24 17:11
<

//调整下顺序试试?

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 编辑 ]
yylooker
2楼-- · 2019-03-24 19:51
 精彩回答 2  元偷偷看……
yylooker
3楼-- · 2019-03-24 23:53
调整顺序后,依旧是
while(!(U0TCTL & TXEPT));
这里死循环。
这时候没有发送数据啊,怎么还是走不出来?按理说 U0TCTL的TXEPT不应该是1(空闲)么?

一周热门 更多>

相关问题

    相关文章