[LaunchPad]シリアルポートテスト
12254 ワード
1 #include "msp430g2553.h"
2 #include "stdio.h"
3
4
5 unsigned char RxBuf[256]="haha";
6 unsigned char RxFlag;
7 unsigned char RxPoint;
8
9
10 int putchar(int ch)
11 {
12 while(!(IFG2&UCA0TXIFG));
13 UCA0TXBUF=ch;
14 return ch;
15 }
16
17
18 void sendChar(unsigned char c)
19 {
20 while(!(IFG2&UCA0TXIFG));
21 UCA0TXBUF=c;
22 }
23
24 void sendStr(unsigned char *s)
25 {
26 while(*s!='\0')
27 {
28 sendChar(*s);
29 s++;
30 }
31 }
32
33 void main(void)
34
35 {
36
37 WDTCTL = WDTPW + WDTHOLD; // Stop WDT
38
39 BCSCTL1 = CALBC1_1MHZ; // Set DCO
40 DCOCTL = CALDCO_1MHZ;
41 BCSCTL2 &= ~(DIVS_3);
42
43
44 P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
45 P1SEL2 = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
46
47 UCA0CTL1 |= UCSSEL_2; // SMCLK
48 UCA0BR0 = 104; // 1MHz 9600
49 UCA0BR1 = 0; // 1MHz 9600
50 UCA0MCTL = UCBRS0; // Modulation UCBRSx = 1
51 UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
52
53 IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
54
55
56 RxFlag=0;
57 RxPoint=0;
58 _EINT();
59
60
61 printf("
%s
","======== =========");
62
63 //__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
64
65
66 while(1)
67 {
68 __delay_cycles(1000000);
69 if(RxFlag == 0)
70 printf("%s
",RxBuf);
71 }
72
73
74 }
75
76 // Echo back RXed character, confirm TX buffer is ready first
77
78 #pragma vector=USCIAB0RX_VECTOR
79 __interrupt void USCI0RX_ISR(void)
80 {
81
82
83 while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
84
85 if(RxFlag == 0)
86 {
87 RxFlag = 1;
88 RxBuf[RxPoint] = UCA0RXBUF;
89 RxPoint++;
90 }
91 else
92 {
93 if(UCA0RXBUF=='*')
94 {
95 putchar('$');
96 RxBuf[RxPoint]='\0';
97 RxFlag = 0;
98 RxPoint = 0;
99 }
100 else
101 {
102 RxBuf[RxPoint] = UCA0RXBUF;
103 RxPoint++;
104 }
105 }
106
107 }
HWモード、RxFlag=0、受信完了を表し、=1は受信中でありprintf関数を実現する