您好...
我有四个8字节的消息要发送到对讲机。 我注意到我在逻辑分析仪上发送7、7、8……前三个数据块中每个数据块的最后一个字节都已截止而不发送……我的代码如下:
else if (Button == DEFINE_SYS)
{
for (sysLoop = 0; sysLoop < 4; sysLoop++)
{
mssg[4] = sysID[2*sysLoop];
mssg[5] = sysID[2*sysLoop + 1];
mssg[6] = crc[2*sysLoop];
mssg[7] = crc[2*sysLoop + 1];
TB0CCR2 = TB0R + 1;
TB0CCTL2 |= CCIE;
LPM3;
while (!UCTXCPTIFG);
}
我注意到、如果我删除
while (!UCTXCPTIFG);
并替换为__delay_cycles (10000);每条消息的所有八个字节都被发出....
该代码应按如下方式工作:
创建8字节消息...等待80ms ...通过 UART 传输8字节,然后唤醒以创建第二条消息...进入睡眠状态并再次等待80ms
我看到了两个我目前不理解的问题。
1、 前7个字节会输出、但前3条消息上的第8个字节不会输出?
2 、字节都是背靠背的、每个字节之间没有80ms 的窗口?
有人能告诉我需要查找的内容吗? 我尝试使用 UCTXCPTIFG 是因为我认为 LPM3由于另一个 ISR (可能是 TBxIFG 标志之一)而被唤醒。
其他代码段如下所示:
80ms 唤醒
case TB0IV_TBCCR2:
TB0CCR2 = TB0R + TX_MESSAGE_SPACING_TIME;
if (remote)
{
pTx = mssg;
TB0CCTL2 &= ~CCIE;
UCA1IFG |= UCTXIFG;
UCA1IE |= UCTXIE;
}
break;
TX ISR:(else 部分仅在此处有效)
case USCI_UART_UCTXIFG:
if (radioConfiguration)
LPM3_EXIT;
else {
UCA1TXBUF = *pTx;
pTx++;
if (pTx > (mssg + 7)) {
UCA1IE &= ~UCTXIE;
UCA1IFG &= ~UCTXIFG;
LPM3_EXIT;
}
}
break;
最后一个想法……波特率为19.2k、其中1个开始位和1/2个停止位… 8个字节完全在80ms 周期内。
谢谢