ARGH
[matches/honours.git] / research / TCS / apparatus / source_code / usart.c
1 //***************************************************************************\r
2 //\r
3 //  File........: usart.c\r
4 //\r
5 //  Author(s)...: ATMEL Norway\r
6 //\r
7 //  Target(s)...: ATmega169\r
8 //\r
9 //  Compiler....: avr-gcc / avr-libc\r
10 //\r
11 //  Description.: AVR Butterfly USART routines\r
12 //\r
13 //  Revisions...: 1.0\r
14 //\r
15 //  YYYYMMDD - VER. - COMMENT                                       - SIGN.\r
16 //\r
17 //  20030116 - 1.0  - Created                                       - LHM\r
18 //  2004            - corrected comment (only receiver enabled)     - mt\r
19 //  20070517        - option to enable transmit                     - mt\r
20 //***************************************************************************\r
21 \r
22 //mtA\r
23 //#include <inavr.h>\r
24 //#include "iom169.h"\r
25 #include <avr/io.h>\r
26 //mtE\r
27 #include "main.h"\r
28 #include "usart.h"\r
29 #include "printf.h"\r
30 \r
31 \r
32 /*****************************************************************************\r
33 *\r
34 *   Function name : USART_Init\r
35 *\r
36 *   Returns :       None\r
37 *\r
38 *   Parameters :    unsigned int baudrate\r
39 *\r
40 *   Purpose :       Initialize the USART\r
41 *\r
42 *****************************************************************************/\r
43 void USART_Init(unsigned int baudrate)\r
44 {\r
45     // Set baud rate\r
46     UBRRH = (unsigned char)(baudrate>>8);\r
47     UBRRL = (unsigned char)baudrate;\r
48 \r
49     // Disable 2x speed\r
50     UCSRA = 0;\r
51 \r
52 \r
53     //sbiBF(DDRB, 6); // PORTB5 = Tx  \r
54         //sbiBF(DDRB, 7); // PORTB7 = Rx\r
55 //      cbiBF(PORTB, 6);\r
56 //      cbiBF(PORTB, 7);\r
57 \r
58 #ifdef WITH_TRANSMIT\r
59     // enabled receive and transmit\r
60     UCSRB = (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<UDRIE);\r
61 #else\r
62     // Enable receive. transmit stays disabled\r
63     // In the default BF demo-application no data gets \r
64     // send (only receive in vcard).\r
65     UCSRB = (1<<RXEN)|(0<<TXEN)|(0<<RXCIE)|(0<<UDRIE);\r
66 #endif\r
67 \r
68     // Async. mode, 8N1\r
69     UCSRC = (0<<UMSEL)|(0<<UPM0)|(0<<USBS)|(3<<UCSZ0)|(0<<UCPOL);\r
70 }\r
71 \r
72 \r
73 /*****************************************************************************\r
74 *\r
75 *   Function name : Usart_Tx\r
76 *\r
77 *   Returns :       None\r
78 *\r
79 *   Parameters :    char data: byte to send\r
80 *\r
81 *   Purpose :       Send one byte through the USART\r
82 *\r
83 *****************************************************************************/\r
84 \r
85 void USART_Tx(char data)\r
86 {\r
87         sbiBF(PORTB, 6);\r
88     while (!(UCSRA & (1<<UDRE)));\r
89     UDR = data;\r
90 //      cbiBF(PORTB, 6);\r
91 }\r
92 \r
93 \r
94 \r
95 /*****************************************************************************\r
96 *\r
97 *   Function name : Usart_Rx\r
98 *\r
99 *   Returns :       char: byte received\r
100 *\r
101 *   Parameters :    None\r
102 *\r
103 *   Purpose :       Receives one byte from the USART\r
104 *\r
105 *****************************************************************************/\r
106 char USART_Rx(void)\r
107 {\r
108         sbiBF(PORTB, 7);\r
109     while (!(UCSRA & (1<<RXC)));\r
110 //      cbiBF(PORTB, 5);\r
111     return UDR;\r
112 }\r
113 char USART_Poll(void)\r
114 {\r
115         if (!(UCSRA & (1<<RXC)))\r
116                 return '\0';\r
117         return UDR;\r
118 }\r
119 \r
120 int USART_printf(const char * format, ...)\r
121 {\r
122         char buffer[80];\r
123         va_list args;\r
124         va_start(args, format);\r
125         int result = vsprintf(buffer, format, args);\r
126         va_end(args);\r
127 \r
128         for (char * b = buffer; *b != '\0'; ++b)\r
129                 USART_Tx(*b);\r
130         return result;\r
131 }\r
132 \r
133 \r
134 \r

UCC git Repository :: git.ucc.asn.au