00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045 #include <msp430x16x.h>
00046 #include <signal.h>
00047 #include <stdio.h>
00048 #include "vcsbsp.h"
00049
00050 queue_t uart0_rx_q;
00051 queue_t uart1_rx_q;
00052
00053 queue_t uart0_tx_q;
00054 queue_t uart1_tx_q;
00055
00056 void init_serial_0(void) {
00057 int temp;
00058
00059 init_queue(&uart0_rx_q);
00060 init_queue(&uart0_tx_q);
00061
00062
00063 UCTL0 = CHAR + SWRST;
00064 UTCTL0 = SSEL1 + SSEL0;
00065 UBR00=0x45;
00066 UBR10=0x00;
00067 UMCTL0=0xAA;
00068 ME1 = 0xC0;
00069 UCTL0 = CHAR;
00070 temp=RXBUF0;
00071 temp=RXBUF0;
00072 IE1|=URXIE0;
00073 }
00074
00075 void init_serial_1(void) {
00076 int temp;
00077
00078 init_queue(&uart1_rx_q);
00079 init_queue(&uart1_tx_q);
00080
00081
00082 UCTL1 = CHAR + SWRST;
00083 UTCTL1 = SSEL1 + SSEL0;
00084 UBR01=0xA0;
00085 UBR11=0x01;
00086 UMCTL1=0x5B;
00087 ME2 = 0x30;
00088 UCTL1 = CHAR;
00089 temp=RXBUF1;
00090 temp=RXBUF1;
00091 IE2|=URXIE1;
00092 }
00093
00094
00095
00096
00097 interrupt (UART0RX_VECTOR) uart0_rx_handler(void) {
00098 enqueue(&uart0_rx_q,RXBUF0);
00099 }
00100
00101 interrupt (UART0TX_VECTOR) uart0_tx_handler(void) {
00102 char temp;
00103 if ((temp=dequeue(&uart0_tx_q))==0) {
00104 IE1&=~UTXIE0;
00105 }
00106 else {
00107 TXBUF0=temp;
00108 }
00109 }
00110
00111 char getchar(void) {
00112 char ret_val = 0;
00113 while ((ret_val=dequeue(&uart0_rx_q))==0);
00114 return ret_val;
00115 }
00116
00117 char getchar_nb(void) {
00118 return (dequeue(&uart0_rx_q));
00119 }
00120
00121 int putchar(int in_char) {
00122 enqueue(&uart0_tx_q,in_char);
00123 return (0);
00124 }
00125
00126 int flush_uart0(void) {
00127 int ret_val=0;
00128 if (!(IE1&UTXIE0)) {
00129 ret_val=1;
00130 IE1|=UTXIE0;
00131 IFG1|=UTXIFG0;
00132 }
00133 return (ret_val);
00134 }
00135
00136
00137
00138
00139 interrupt (UART1RX_VECTOR) uart1_rx_handler(void) {
00140 enqueue(&uart1_rx_q,RXBUF1);
00141 wiggler_p3();
00142 }
00143
00144 interrupt (UART1TX_VECTOR) uart1_tx_handler(void) {
00145 char temp;
00146 if ((temp=dequeue(&uart1_tx_q))==0) {
00147 IE2&=~UTXIE1;
00148 }
00149 else {
00150 TXBUF1=temp;
00151 }
00152 }
00153
00154 char getchar_gps(void) {
00155 char ret_val = 0;
00156 while ((ret_val=dequeue(&uart1_rx_q))==0);
00157 return ret_val;
00158 }
00159
00160 char getchar_gps_nb(void) {
00161 return (dequeue(&uart1_rx_q));
00162 }
00163
00164 int putchar_gps(int in_char) {
00165 enqueue(&uart1_tx_q,in_char);
00166 return (0);
00167 }
00168
00169 int flush_uart1(void) {
00170 int ret_val=0;
00171 if (!(IE2&UTXIE1)) {
00172 ret_val=1;
00173 IE2|=UTXIE1;
00174 IFG2|=UTXIFG1;
00175 }
00176 return (ret_val);
00177 }
00178
00179