root/Examples_CP-JR_ARM7_LPC2368/ETT_LPC2368_Examples/PERIPHERAL_DEMO/UART/main.c

Revision 8, 9.7 kB (checked in by phil, 15 years ago)

Added Examples etc. from CD

Line 
1 /****************************************************/
2 /* Examples Program For "CP-JR ARM7 LPC2368"        */
3 /* Target MCU  : Philips ARM7-LPC2368               */
4 /*                 : X-TAL : 12.00 MHz                  */
5 /*             : PLL Setup = MSEL(12),NSEL(1)           */
6 /* Keil Editor : uVision3 V3.53a                    */
7 /* Compiler    : Keil Realview MDK V3.20                */
8 /* Create By   : Eakachai Makarn (WWW.ETT.CO.TH)    */
9 /* Last Update : 12/November/2007                   */
10 /* Function    : Example Use UART0,2,3              */
11 /****************************************************/
12
13 #include <LPC23xx.H>                                            // LPC2368 MPU Register
14 #include <stdio.h>                                                                                      // For Used Function printf
15
16 // Pin I/O LED Control Maskbit
17 #define  DIR_RS485   0x00080000                                                         // P1.19(0000 0000 0000 x000 0000 0000 0000 0000)
18 #define  RXD_RS485() IOCLR1 = DIR_RS485                                         // RS485 Direction = 0 (Receive)
19 #define  TXD_RS485() IOSET1 = DIR_RS485                                         // RS485 Direction = 1 (Transmit)
20
21 // UART Buffer
22 char uart0_buf[];                                                                                       // "sprint" UART[0] Buffer
23 char uart2_buf[];                                                                                       // "sprint" UART[2] Buffer
24 char uart3_buf[];                                                                                       // "sprint" UART[3] Buffer
25
26 /* pototype  section */
27 void init_serial0 (void);                                                                       // Initil UART-0
28 void init_serial2 (void);                                                                       // Initil UART-2
29 void init_serial3 (void);                                                                       // Initil UART-3
30
31 void putchar0(int ch);                                                                          // Put Char To UART-0
32 void putchar2(int ch);                                                                          // Put Char To UART-2
33 void putchar3(int ch);                                                                          // Put Char To UART-3
34 int  getchar0(void);                                                                            // Get Char From UART-0
35 int  getchar2(void);                                                                            // Get Char From UART-2
36 int  getchar3(void);                                                                            // Get Char From UART-3
37 void print_uart0(void);                                                                         // Print String to UART0
38 void print_uart2(void);                                                                         // Print String to UART2
39 void print_uart3(void);                                                                         // Print String to UART3
40 void delay(unsigned long int);                                                          // Delay Time Function
41
42 int main(void)
43
44   int uart_data;                                                                                        // Character Receive Buffer
45
46   init_serial0();                                                                                       // Initilial UART0 = 9600,N,8,1
47   init_serial2();
48   init_serial3();
49    
50   // UART[0] Print String //
51   sprintf(uart0_buf,"ET-JR ARM7 LPC2368 : UART[0] Demo\n\r");   // Print Message String
52   print_uart0();
53
54   // UART[2] Print String //
55   sprintf(uart2_buf,"ET-JR ARM7 LPC2368 : UART[2] Demo\n\r");   // Print Message String
56   print_uart2();
57
58   // UART[3] Print String //
59   sprintf(uart3_buf,"ET-JR ARM7 LPC2368 : UART[3] Demo\n\r");   // Print Message String
60   print_uart3();
61  
62   // Loop Receive & Echo Test //
63   while(1)                                                                                                      // Loop Continue
64   {
65         // RS232 : UART[0]
66     if(U0LSR & 0x01)                                                                            // Check UART[0] Receive
67     {
68       uart_data = getchar0();                                                           // Wait Receive Byte From UART
69       if(uart_data==0x0D)                                                                       // If Enter
70       {
71         sprintf(uart0_buf,"ET-JR ARM7 LPC2368 : UART[0]\n\r"); 
72         print_uart0();
73       }
74       putchar0(uart_data);                                                                      // Echo Data to UART[0]
75     }
76
77         // RS232 : UART[2]
78     if(U2LSR & 0x01)                                                                            // Check UART[2] Receive
79     {
80       uart_data = getchar2();                                                           // Wait Receive Byte From UART
81       if(uart_data==0x0D)                                                                       // If Enter
82       {
83         sprintf(uart2_buf,"ET-JR ARM7 LPC2368 : UART[2]\n\r"); 
84         print_uart2();
85       }
86           putchar2(uart_data);                                                                  // Echo Data to UART[2]
87         }
88
89         // RS422/485 : UART[3]
90         if(U3LSR & 0x01)                                                                                // Check UART[3 Receive
91     {
92       uart_data = getchar3();                                                           // Wait Receive Byte From UART
93       if(uart_data==0x0D)                                                                       // If Enter
94       {
95         sprintf(uart3_buf,"ET-JR ARM7 LPC2368 : UART[3]\n\r"); 
96         print_uart3();
97       }
98           putchar3(uart_data);                                                                  // Echo Data to UART[3]
99         }
100
101   }                                                                                                             
102
103 }
104
105 /********************************/
106 /* Initial UART0 = 115200,N,8,1 */
107 /********************************/
108 void init_serial0 (void) 
109 {
110   PINSEL0 &= 0xFFFFFF0F;                                                                        // Reset P0.2,P0.3 Pin Config
111   PINSEL0 |= 0x00000010;                                                                        // Select P0.2 = TxD(UART0)
112   PINSEL0 |= 0x00000040;                                                                        // Select P0.3 = RxD(UART0)
113
114   U0LCR = 0x83;                                                                 // 8 bits, no Parity, 1 Stop bit
115   U0DLL = 3;                                                                    // Baud 115200BPS for 12MHz PCLK Clock         
116   U0FDR = 0x67;                                                                 // Fractional Divider           
117   U0LCR = 0x03;                                                                 // DLAB = 0       
118 }
119
120 /********************************/
121 /* Initial UART2 = 115200,N,8,1 */
122 /********************************/
123 void init_serial2 (void) 
124 {
125   // xxxx xxxx 0101 xxxx xxxx xxxx xxxx xxxx
126   PINSEL0 &= 0xFF0FFFFF;                                                                        // Reset P0.10,P0.11 Pin Config
127   PINSEL0 |= 0x00100000;                                                                        // Select P0.10 = TxD(UART2)
128   PINSEL0 |= 0x00400000;                                                                        // Select P0.11 = RxD(UART2)
129
130   // xxxx xxx1 xxxx xxxx xxxx xxxx xxxx xxxx
131   PCONP   |= 0x01000000;                                                                        // UART2 Power-ON
132
133   U2LCR = 0x83;                                                                 // 8 bits, no Parity, 1 Stop bit
134   U2DLL = 3;                                                                    // Baud 115200BPS for 12MHz PCLK Clock         
135   U2FDR = 0x67;                                                                 // Fractional Divider           
136   U2LCR = 0x03;                                                                 // DLAB = 0
137 }
138
139 /********************************/
140 /* Initial UART3 = 115200,N,8,1 */
141 /********************************/
142 void init_serial3 (void) 
143 {
144   // xxxx xxxx xxxx xxxx xxxx xxxx xxxx 1010
145   PINSEL0 &= 0xFFFFFFF0;                                                                        // Reset P0.0,P0.1 Pin Config
146   PINSEL0 |= 0x00000002;                                                                        // Select P0.0 = TxD(UART3)
147   PINSEL0 |= 0x00000008;                                                                        // Select P0.1 = RxD(UART3)
148
149   // Config P1.19 = Output Control Direction RS485
150   // P1.19 = "0" = Receive  RS485
151   // P1.19 = "1" = Transmit     RS485
152   // xxxx xxxx xxxx xxxx 00xx xxxx xxxx xxxx
153   PINSEL3 &= 0xFFFF3FFF;                                                                        // P1.19 = GPIO
154   IODIR1 = DIR_RS485;                                                                           // Pin Control Direction RS485 = Output
155   RXD_RS485();                                                                                          // Default RS485 Direction
156
157   // xxxx xx1x xxxx xxxx xxxx xxxx xxxx xxxx
158   PCONP   |= 0x02000000;                                                                        // UART3 Power-ON
159
160   U3LCR = 0x83;                                                                 // 8 bits, no Parity, 1 Stop bit
161   U3DLL = 3;                                                                    // Baud 115200BPS for 12MHz PCLK Clock         
162   U3FDR = 0x67;                                                                 // Fractional Divider           
163   U3LCR = 0x03;                                                                 // DLAB = 0
164 }
165
166 /******************************/
167 /* Write Character To UART[0] */
168 /******************************/
169 void putchar0 (int ch) 
170 {
171   if (ch == '\n') 
172   {
173     while (!(U0LSR & 0x20));                                                            // Wait TXD Buffer Empty
174     U0THR = 0x0D;                                                               // Write CR
175   }
176
177   while (!(U0LSR & 0x20));                                                                      // Wait TXD Buffer Empty
178   U0THR = ch;
179 }
180
181 /******************************/
182 /* Write Character To UART[2] */
183 /******************************/
184 void putchar2 (int ch) 
185 {
186   if (ch == '\n') 
187   {
188     while (!(U2LSR & 0x20));                                                            // Wait TXD Buffer Empty
189     U2THR = 0x0D;                                                               // Write CR
190   }
191
192   while (!(U2LSR & 0x20));                                                                      // Wait TXD Buffer Empty
193   U2THR = ch;
194 }
195
196 /******************************/
197 /* Write Character To UART[3] */
198 /******************************/
199 void putchar3 (int ch) 
200
201   if (ch == '\n') 
202   {
203     while (!(U3LSR & 0x20));                                                            // Wait TXD Buffer Empty
204     U3THR = 0x0D;                                                               // Write CR
205   }
206
207   while (!(U3LSR & 0x20));                                                                      // Wait TXD Buffer Empty
208   U3THR = ch;
209 }
210
211 /******************************/
212 /* Get character From UART[0] */
213 /******************************/
214 int getchar0() 
215 {
216   while (!(U0LSR & 0x01));                                                                      // Wait RXD Receive Data Ready
217   return (U0RBR);                                                                                       // Get Receice Data & Return
218 }
219
220 /******************************/
221 /* Get character From UART[2] */
222 /******************************/
223 int getchar2() 
224 {
225   while (!(U2LSR & 0x01));                                                                      // Wait RXD Receive Data Ready
226   return (U2RBR);                                                                                       // Get Receice Data & Return
227 }
228
229 /******************************/
230 /* Get character From UART[3] */
231 /******************************/
232 int getchar3() 
233 {
234   while (!(U3LSR & 0x01));                                                                      // Wait RXD Receive Data Ready
235   return (U3RBR);                                                                                       // Get Receice Data & Return
236 }
237
238 /***************************/
239 /* Print String to UART[0] */
240 /***************************/
241 void print_uart0(void)
242 {
243   char *p;                                                                                                      // Pointer Buffer
244   p = uart0_buf;                                                                                        // UART Buffer
245  
246   do                                                                                                            // Get char & Print Until null
247   {
248     putchar0(*p);                                                                                       // Write char to UART
249     p++;                                                                                                        // Next char
250   }
251   while(*p != '\0');                                                                            // End of ASCII (null)
252  
253   return;
254 }
255
256 /***************************/
257 /* Print String to UART[2] */
258 /***************************/
259 void print_uart2(void)
260 {
261   char *p;                                                                                                      // Pointer Buffer
262   p = uart2_buf;                                                                                        // UART Buffer
263  
264   do                                                                                                            // Get char & Print Until null
265   {
266     putchar2(*p);                                                                                       // Write char to UART
267     p++;                                                                                                        // Next char
268   }
269   while(*p != '\0');                                                                            // End of ASCII (null)
270  
271   return;
272 }
273
274 /***************************/
275 /* Print String to UART[3] */
276 /***************************/
277 void print_uart3(void)
278 {
279   char *p;                                                                                                      // Pointer Buffer
280   p = uart3_buf;                                                                                        // UART Buffer
281
282   TXD_RS485();                                                                                          // Swap RS485 Direction = Transmit
283   delay(50000);
284
285   do                                                                                                            // Get char & Print Until null
286   {
287     putchar3(*p);                                                                                       // Write char to UART
288     p++;                                                                                                        // Next char
289   }
290   while(*p != '\0');                                                                            // End of ASCII (null)
291
292   delay(50000);
293   RXD_RS485();                                                                                          // Swap RS485 Direction = Receive
294
295   return;
296 }
297
298 /***********************/
299 /* Delay Time Function */
300 /*    1-4294967296     */
301 /***********************/
302 void delay(unsigned long int count1)
303 {
304   while(count1 > 0) {count1--;}                                                         // Loop Decrease Counter       
305 }
306
Note: See TracBrowser for help on using the browser.