#include <msp430.h>
int main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Stop WDT
int i;
P2SEL |= BIT2 | BIT3; // Set P1.2, P1.3 to non-IO
P2DIR |= BIT2 | BIT3; // Enable UCA2RXD, UCA2TXD
// Setup LFXT1
UCSCTL6 &= ~(XT1OFF); // XT1 On
UCSCTL6 |= XCAP_3; // Internal load cap
// Loop until XT1 fault flag is cleared
do
{
UCSCTL7 &= ~(XT2OFFG | XT1LFOFFG | DCOFFG);
// Clear XT2,XT1,DCO fault flags
SFRIFG1 &= ~OFIFG; // Clear fault flags
} while (SFRIFG1 & OFIFG); // Test oscillator fault flag
// Setup eUSCI_A2
UCA2CTLW0 |= UCSWRST; // **Put state machine in reset**
UCA2CTLW0 |= UCSSEL_2; // SMCLK
UCA2BRW_L = 6; // 1MHz 9600 (see User's Guide)
UCA2BRW_H = 0; // 1MHz 9600
UCA2MCTLW = UCBRF_13 | UCOS16; // Modln UCBRSx=0, UCBRFx=0x13,
// over sampling
UCA2CTLW0 &= ~UCSWRST; // **Initialize USCI state machine**
UCA2IE |= UCRXIE; // Enable USCI_A2 RX interrupt
__bis_SR_register(GIE); // Enter LPM3, interrupts enabled
while(1)
{
P6DIR |= BIT1;//LED
P6OUT |= BIT1;//LED
while (!(UCA2IFG & UCTXIFG)) ; // USCI_A2 TX buffer ready?
UCA2TXBUF = 'Q';
__delay_cycles(500000);
P6OUT = 0;//LED
__delay_cycles(500000);
}
__no_operation(); // For debugger
}
// USCI_A2 interrupt service routine
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A2_VECTOR
__interrupt void USCI_A2_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_A2_VECTOR))) USCI_A2_ISR (void)
#else
#error Compiler not supported!
#endif
{
P6DIR |= BIT1;
P6OUT = 0;
switch (__even_in_range(UCA2IV, 4))
{
case USCI_NONE: break; // No interrupt
case USCI_UART_UCRXIFG: // RXIFG
while (!(UCA2IFG & UCTXIFG)) ; // USCI_A2 TX buffer ready?
UCA2TXBUF = 'A'; // TX -> RXed character
P6DIR |= BIT1;
P6OUT |= BIT1;
break;
case USCI_UART_UCTXIFG: break; // TXIFG
case USCI_UART_UCSTTIFG: break; // TTIFG
case USCI_UART_UCTXCPTIFG: break; // TXCPTIFG
default: break;
}
}
输出的结果不太对,电脑端的软件波特率也是9600:
[16:20:20.193] <8
[16:20:23.672] 88
[16:20:27.153] 8<
[16:20:30.632] <8
[16:20:34.110] <8
[16:20:37.589] 8<
[16:20:41.068] 88
[16:20:44.547] 8<
[16:20:48.026] <8
[16:20:51.506] 8<