工具/软件:Code Composer Studio
您好!
我将以下代码用于 UART。 我正在尝试从 PC 上的终端向 MSP430F5342的 P4.5发送4个字节的数据。 它从 MSP430的 P4.4发回终端。 下面的代码用于回送。 我在终端上仅接收2个字节(仅限第一个字节和最后一个字节)。
#include
unsigned char 字节 count=0;
unsigned char received_value=0;
int main (空)
{
WDTCTL = WDTPW + WDTHOLD;//停止 WDT
P4SEL |= BIT4+BIT4;// P4.4、5
UCA1CTL1 |= UCSWRST;//**将状态机置于复位状态**
UCA1CTL1 |= UCSSEL_2;// SMCLK
UCA1BR0 = 9;// 1MHz 115200 (请参阅用户指南)
UCA1BR1 = 0;// 1MHz 115200
UCA1MCTL |= UCBRS_1 + UCBRF_0;//调制 UCBRSx=1、UCBRFx=0
UCA1CTL1 &=~UCSWRST;//**初始化 USCI 状态机**
UCA1IE |= UCRXIE;//启用 USCI_A0 RX 中断
_bis_SR_register (GIE);//输入 LPM0、中断被启用
//__no_operation();//用于调试器
// P3.3、4 = USCI_A0 TXD/RXD
while (1);
}
#if defined (__TI_Compiler_version__)|| Defined (__IAR_systems_ICC__)
#pragma vector=USCI_A1_vector
_interrupt void USCI_A1_ISR (void)
#Elif defined (_GNU_)
void __attribute__((中断(USCI_A1_vector)) USCI_A1_ISR (void)
其他
错误编译器不受支持!
#endif
{
volatile unsigned int i;
switch (__evo_in_range (UCA1IV、4))
{
情况0:中断;//向量0 -无中断
情况2://向量2 - RXIFG
while (!(UCA1IFG&UCTXIFG));// USCI_A0 RX 缓冲器准备就绪?
//发送下一个值
Received_value=UCA1RXBUF;
字节 count++;
UCA1TXBUF=Received_value;
中断;
情况4:中断;//向量4 - TXIFG
默认值:break;
}
}
例如:当我发送0x01 0x02 0x03 0x04时、我在终端上仅接收0x01和0x04
如果我只发送0x01和0x02、我将正确接收它们。
无论 数据长度如何、每次发送数据时、ISR 中出现的计数"bytescount"都只会增加两倍。 我尝试发送2 3 4 5个字节。 无论终端发送的字节数是多少、我每次仅接收第一个和最后一个字节、并且只输入两次 ISR。 应为接收到的每个字节输入接收 ISR、但不会这样做。 请建议更正。