BeRTOS
|
00001 00039 #warning FIXME:This module is obsolete, yuo must refactor it. 00040 00041 #if 0 00042 #include "ser_simple_avr.h" 00043 00044 #include <cfg/compiler.h> 00045 #include <appconfig.h> 00046 #include <cfg/macros.h> /* BV() */ 00047 #include <hw/hw_cpufreq.h> 00048 00049 #include <avr/io.h> 00050 00056 int _ser_putchar(int c) 00057 { 00058 /* Disable Rx to avoid echo*/ 00059 UCSR0B &= ~BV(RXEN); 00060 /* Enable tx*/ 00061 UCSR0B |= BV(TXEN); 00062 /* Prepare transmission */ 00063 UDR0 = c; 00064 /* Wait until byte sent */ 00065 while (!(UCSR0A & BV(TXC))) {} 00066 /* Disable tx to avoid short circuit when tx and rx share the same wire. */ 00067 UCSR0B &= ~BV(TXEN); 00068 /* Enable Rx */ 00069 UCSR0B |= BV(RXEN); 00070 /* Delete TRANSMIT_COMPLETE_BIT flag */ 00071 UCSR0A |= BV(TXC); 00072 return c; 00073 } 00074 00075 00083 int _ser_getchar(void) 00084 { 00085 /* Wait for data */ 00086 while (!(UCSR0A & BV(RXC))) {} 00087 return UDR0; 00088 00089 } 00090 00091 00097 int _ser_getchar_nowait(void) 00098 { 00099 if (!(UCSR0A & BV(RXC))) return EOF; 00100 else return UDR0; 00101 } 00102 00103 void _ser_settimeouts(void) 00104 { 00105 } 00106 00110 void _ser_setbaudrate(unsigned long rate) 00111 { 00112 /* Compute baud-rate period */ 00113 uint16_t period = DIV_ROUND(CPU_FREQ / 16UL, rate) - 1; 00114 00115 UBRR0H = (period) >> 8; 00116 UBRR0L = (period); 00117 } 00118 00122 int _ser_print(const char *s) 00123 { 00124 while(*s) _ser_putchar(*s++); 00125 return 0; 00126 } 00127 00128 00129 void _ser_setparity(int parity) 00130 { 00131 /* Set the new parity */ 00132 UCSR0C |= (UCSR0C & ~(BV(UPM1) | BV(UPM0))) | (parity << UPM0); 00133 } 00134 00138 void _ser_purge(void) 00139 { 00140 while (_ser_getchar_nowait() != EOF) {} 00141 } 00142 00146 struct Serial * _ser_open(void) 00147 { 00148 /* 00149 * Set Rx and Tx pins as input to avoid short 00150 * circuit when serial is disabled. 00151 */ 00152 DDRE &= ~(BV(PE0)|BV(PE1)); 00153 PORTE &= ~BV(PE0); 00154 PORTE |= BV(PE1); 00155 /* Enable only Rx section */ 00156 UCSR0B = BV(RXEN); 00157 return NULL; 00158 } 00159 00160 00164 void _ser_close(void) 00165 { 00166 /* Disable Rx & Tx. */ 00167 UCSR0B &= ~(BV(RXEN) | BV(TXEN)); 00168 } 00169 00170 #endif 00171