工具/软件:Linux
您好!
我尝试使用以下代码了解 MSP430g2553的 UART:
#include
int main (void){
WDTCTL = WDTPW + WDTHOLD;
DCOCTL = 0;
BCSCTL1 = CALBC1_1MHz;
DCOCTL = CALDCO_1MHz;
P1DIR |= BIT6 + BIT0;
P1SEL = BIT1 | BIT2;
P1SEL2 = BIT1 | BIT2;
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // Brattto Visna tabela do userguide PRA 1MHz 9600 baud
UCA0BR1 = 0; // Visto tambem 无用户指南 PRA 1MHz 9600波特
UCA0MCTL = UCBRS0; //调制 UCBRSx = 1
//从复位中获取 UCA
UCA0CTL1 &=~UCSWRST;
//启用 USCI A0 RX 中断
IE2 |= UCA0RXIE;
_bis_SR_register (LPM0_bits + GIE); //启用所有中断(包括 UART)
}
#pragma vector=USCIAB0RX_vector
_interrupt void USCI0RX_ISR (void){
while (!(IFG2 & UCA0TXIFG)); // USCI_A0 TX 缓冲器准备就绪?
UCA0TXBUF = UCA0RXBUF; // TX;RXED 字符
P1OUT ^=(BIT0 + BIT6);
}
因此、我转到终端并执行以下命令:
$ echo 'A'>/dev/ttyACM0
当我执行该命令时、它会发送字符、据称它应该同时打开两个 LED、但结果是几乎立即打开和关闭。
如果我执行相同的命令、但使用两个字符、例如:
$ echo 'aa'>/dev/ttyACM0
结果是 LED 更亮、它们保持高电平状态(LED 亮起)、如果我再次执行命令、LED 将关闭。
那么、我想知道为什么我通过发送奇数或偶数获得不同的结果? 我如何解决这个问题? 我只想发送一个字符、并获得与发送两个字符相同的结果。