void main(void) { WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer Uart0_Init(); Uart1_Init(); __bis_SR_register(GIE); while(1) { } }
同时初始化USCIA0和USCIA1,先初始化的一个将会不能使用,这是怎么回事?
初始化代码如下,USCIA0:
void Uart0_Init(void) { BCSCTL1 &= ~XT2OFF; BCSCTL2 |= SELM_2 + SELS; P3SEL = 0x30; // P3.4,5 = USCI_A0 TXD/RXD UCA0CTL1 |= UCSSEL_2; // SMCLK UCA0BR0 = 0x45; // 8MHz 115200 UCA0BR1 = 0x00; // 8MHz 115200 UCA0MCTL = 4; // Modulation UCBRSx = 4 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt }
USCIA1:
void Uart1_Init(void) { BCSCTL1 &= ~XT2OFF; BCSCTL2 |= SELM_2 + SELS; P3SEL = 0xC0; // P3.6,7 = USCI_A1 TXD/RXD UCA1CTL1 |= UCSSEL_2; // CLK = SMCLK UCA1BR0 = 0x45; // 8MHz 115200 UCA1BR1 = 0x00; // 8MHz 115200 UCA1MCTL = 4; // Modulation UCBRSx = 4 UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine** UC1IE |= UCA1RXIE; // Enable USCI_A1 RX interrupt }
时钟源选择XT2,8M时钟,两个USCI模块的时钟源都为SMCLK,1分频。