MSP430 f5529LP 寄存器模式 串口中断接收 发送 ccs
使用的开发板是官方的ti msp430f5529lp
基于官方的例程进行的改动
新增了发送字符串函数
同时可以中断接收
接下来看代码展示
#include <msp430.h>
volatile unsigned int i;
void senfchar(char s)
{
UCA0TXBUF=s;
while(!(UCA0IFG&UCTXIFG));
}
void sendstring(unsigned char *p)
{
while(*p!='\0')
{
while(!(UCA0IFG&UCTXIFG));
UCA0TXBUF=*p++;
}
}
void delay()
{
for(i=50000;i>0;i--);
}
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL = BIT3+BIT4; // P3.4,5 = USCI_A0 TXD/RXD
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 6; // 1MHz 9600 (see User's Guide)
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS_0 + UCBRF_13 + UCOS16; // Modln UCBRSx=0, UCBRFx=0,
// over sampling
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
sendstring("hello world\r\n");
_EINT();
// __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
// __no_operation(); // For debugger
while(1)
{
sendstring("hello world\r\n");
delay();
}
}
// Echo back RXed character, confirm TX buffer is ready first
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(USCI_A0_VECTOR))) USCI_A0_ISR (void)
#else
#error Compiler not supported!
#endif
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}