]> rtime.felk.cvut.cz Git - eurobot/public.git/blob - src/eb_pwr/uart.c
robofsm: Makefile.omk
[eurobot/public.git] / src / eb_pwr / uart.c
1 \r
2  #include <lpc21xx.h>  \r
3  #include "uart.h"\r
4  #include <system_def.h>
5 \r
6 \r
7 \r
8 \r
9  #define  UART_DLAB             0x80\r
10 \r
11 \r
12 void init_uart0(int baudrate, char bits, char stopbit, char parit_en, char parit_mode ) \r
13 {                               \r
14 \r
15         int pom , vala, valb;\r
16 \r
17         PINSEL0 |= ( PINSEL_1<< 0) | ( PINSEL_1 << 2);     \r
18 \r
19         U0LCR =UART_DLAB | bits | stopbit | parit_en | parit_mode;        // nastaven� datov�ho slova na 8 bit� a jeden stop bit bez parity, nastaven� DLAB na log "1"\r
20         \r
21         \r
22         pom =  (CPU_APB_HZ)/(16 * baudrate);\r
23         \r
24         vala = (CPU_APB_HZ)/(16 * pom);\r
25         valb = (CPU_APB_HZ)/(16 * (pom + 1));\r
26 \r
27         vala = baudrate - vala;\r
28         valb = baudrate - valb;\r
29 \r
30         if (vala < 0) vala *= -1;\r
31         if (valb < 0) valb *= -1;\r
32                 \r
33         if (vala > valb) pom += 1;\r
34 \r
35         U0DLL = (char) (pom & 0xFF);\r
36         U0DLM = (char) ((pom >> 8) & 0xFF);                             // nastaven� p�edd�li�ky na 57600Bd\r
37           \r
38         U0LCR &= ~UART_DLAB;              // vynulov�n� DLAB \r
39 \r
40  }\r
41 \r
42 \r
43 unsigned char uart1GetCh(void)                  // Nuceny prijem z uart1\r
44 {\r
45   while (!(U1LSR & 1));                         // cekani na prichozi byte\r
46     return (unsigned char)U1RBR;                // navraceni prijateho byte\r
47 }\r
48 \r
49 unsigned char uart0GetCh(void)                  // Nuceny prijem z uart1\r
50 {\r
51   while (!(U0LSR & 1));                         // cekani na prichozi byte\r
52     return (unsigned char)U0RBR;                // navraceni prijateho byte\r
53 }\r
54 \r
55 void uart1SendCh(char ch)                       // vyslani znaku na uart1\r
56 {\r
57         while (!(U1LSR & 0x20));                // ceka na odeslani predchozich dat\r
58         U1THR=ch;                               // odeslani Byte\r
59         \r
60 }\r
61 \r
62 void uart0SendCh(char ch)                       // vyslani znaku na uart0\r
63 {\r
64         while (!(U0LSR & 0x20));                        // ceka na odeslani predchozich dat\r
65         U0THR=ch;                                                       // odeslani Byte\r
66 }\r
67 \r
68 \r
69 void init_uart1(int baudrate, char bits, char stopbit, char parit_en, char parit_mode ) \r
70 {                               \r
71 \r
72         int pom , vala, valb;\r
73 \r
74         PINSEL0 |= ( PINSEL_1<< 16) | ( PINSEL_1 << 18);     \r
75 \r
76         U1LCR =UART_DLAB | bits | stopbit | parit_en | parit_mode;        // nastaven� datov�ho slova na 8 bit� a jeden stop bit bez parity, nastaven� DLAB na log "1"\r
77         \r
78         \r
79         pom =  (CPU_APB_HZ)/(16 * baudrate);\r
80         \r
81         vala = (CPU_APB_HZ)/(16 * pom);\r
82         valb = (CPU_APB_HZ)/(16 * (pom + 1));\r
83 \r
84         vala = baudrate - vala;\r
85         valb = baudrate - valb;\r
86 \r
87         if (vala < 0) vala *= -1;\r
88         if (valb < 0) valb *= -1;\r
89                 \r
90         if (vala > valb) pom += 1;\r
91 \r
92         U1DLL = (char) (pom & 0xFF);\r
93         U1DLM = (char) ((pom >> 8) & 0xFF);                             // nastaven� p�edd�li�ky na 57600Bd\r
94           \r
95         U1LCR &= ~UART_DLAB;              // vynulov�n� DLAB \r
96 \r
97  }\r
98 \r
99 \r
100 \r