Rev 1555 | Rev 1558 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed
| Rev 1555 | Rev 1556 | ||
|---|---|---|---|
| Line 22... | Line 22... | ||
| 22 | 22 | ||
| 23 | void sns_Serial_Init(void) |
23 | void sns_Serial_Init(void) |
| 24 | { |
24 | { |
| 25 | #ifdef sns_Serial_USEEEPROM |
25 | #ifdef sns_Serial_USEEEPROM |
| 26 | if (EEDATA_OK) { |
26 | if (EEDATA_OK) { |
| - | 27 | #if ((__AVR_LIBC_MAJOR__ == 1 && __AVR_LIBC_MINOR__ == 6 && __AVR_LIBC_REVISION__ >=2)||(__AVR_LIBC_MAJOR__ == 1 && __AVR_LIBC_MINOR__ > 6)||__AVR_LIBC_MAJOR__ > 1) |
|
| 27 | baudRate = eeprom_read_dword(EEDATA32.baudRate); |
28 | baudRate = eeprom_read_dword(EEDATA32.baudRate); |
| - | 29 | #else |
|
| - | 30 | #warning This version of AVR-libc does not have support for eeprom read dword |
|
| - | 31 | #endif |
|
| 28 | format = eeprom_read_word(EEDATA16.format); |
32 | format = eeprom_read_word(EEDATA16.format); |
| 29 | } |
33 | } |
| 30 | else { |
34 | else { |
| 31 | //The CRC of the EEPROM is not correct, store default values and update CRC |
35 | //The CRC of the EEPROM is not correct, store default values and update CRC |
| - | 36 | #if ((__AVR_LIBC_MAJOR__ == 1 && __AVR_LIBC_MINOR__ == 6 && __AVR_LIBC_REVISION__ >=2)||(__AVR_LIBC_MAJOR__ == 1 && __AVR_LIBC_MINOR__ > 6)||__AVR_LIBC_MAJOR__ > 1) |
|
| 32 | eeprom_write_dword_crc(EEDATA32.baudRate, 9600, WITHOUT_CRC); |
37 | eeprom_write_dword_crc(EEDATA32.baudRate, 9600, WITHOUT_CRC); |
| - | 38 | #else |
|
| - | 39 | #warning This version of AVR-libc does not have support for eeprom write dword |
|
| - | 40 | #endif |
|
| 33 | eeprom_write_word_crc(EEDATA16.format, CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_LOOPBACK, WITHOUT_CRC); |
41 | eeprom_write_word_crc(EEDATA16.format, CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_LOOPBACK, WITHOUT_CRC); |
| 34 | EEDATA_UPDATE_CRC; |
42 | EEDATA_UPDATE_CRC; |
| 35 | } |
43 | } |
| 36 | #endif |
44 | #endif |
| 37 | // default baudrate |
45 | // default baudrate |
| Line 44... | Line 52... | ||
| 44 | gpio_set_out(sns_Serial_TERM_EN); |
52 | gpio_set_out(sns_Serial_TERM_EN); |
| 45 | gpio_set_out(sns_Serial_485_CONNECT); |
53 | gpio_set_out(sns_Serial_485_CONNECT); |
| 46 | //default to loopback mode until config command received |
54 | //default to loopback mode until config command received |
| 47 | gpio_clr_pin(sns_Serial_ON); |
55 | gpio_clr_pin(sns_Serial_ON); |
| 48 | gpio_clr_pin(sns_Serial_485_232); |
56 | gpio_clr_pin(sns_Serial_485_232); |
| 49 | gpio_clr_pin(sns_Serial_485_CONNECT); // disable RS485_CONNECT |
57 | gpio_clr_pin(sns_Serial_485_CONNECT); // disable RS485_CONNECT |
| 50 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
58 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
| 51 | gpio_set_pin(sns_Serial_485_232); // RS232 mode |
59 | gpio_set_pin(sns_Serial_485_232); // RS232 mode |
| 52 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
60 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
| 53 | gpio_set_pin(sns_Serial_TXEN); // enable TX |
61 | gpio_set_pin(sns_Serial_TXEN); // enable TX |
| 54 | 62 | ||
| Line 130... | Line 138... | ||
| 130 | uart_init(UART_BAUD_SELECT(baudRate, F_CPU)); |
138 | uart_init(UART_BAUD_SELECT(baudRate, F_CPU)); |
| 131 | if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_RS232) |
139 | if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_RS232) |
| 132 | { |
140 | { |
| 133 | #if sns_Serial_DEBUG==1 |
141 | #if sns_Serial_DEBUG==1 |
| 134 | printf("RS232\n"); |
142 | printf("RS232\n"); |
| 135 | #endif |
143 | #endif |
| 136 | gpio_clr_pin(sns_Serial_485_CONNECT); // disable RS485_CONNECT |
144 | gpio_clr_pin(sns_Serial_485_CONNECT); // disable RS485_CONNECT |
| 137 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
145 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
| 138 | gpio_clr_pin(sns_Serial_485_232); // RS232 mode |
146 | gpio_clr_pin(sns_Serial_485_232); // RS232 mode |
| 139 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
147 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
| 140 | gpio_set_pin(sns_Serial_ON); // enable charge pump |
148 | gpio_set_pin(sns_Serial_ON); // enable charge pump |
| 141 | } |
149 | } |
| 142 | else if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_RS485FULLDUPLEX) |
150 | else if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_RS485FULLDUPLEX) |
| 143 | { |
151 | { |
| 144 | #if sns_Serial_DEBUG==1 |
152 | #if sns_Serial_DEBUG==1 |
| 145 | printf("RS485FD\n"); |
153 | printf("RS485FD\n"); |
| 146 | #endif |
154 | #endif |
| 147 | gpio_clr_pin(sns_Serial_485_CONNECT); // disable RS485_CONNECT |
155 | gpio_clr_pin(sns_Serial_485_CONNECT); // disable RS485_CONNECT |
| 148 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
156 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
| Line 153... | Line 161... | ||
| 153 | } |
161 | } |
| 154 | else if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_RS485HALFDUPLEX) |
162 | else if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_RS485HALFDUPLEX) |
| 155 | { |
163 | { |
| 156 | #if sns_Serial_DEBUG==1 |
164 | #if sns_Serial_DEBUG==1 |
| 157 | printf("RS485HD\n"); |
165 | printf("RS485HD\n"); |
| 158 | #endif |
166 | #endif |
| 159 | gpio_set_pin(sns_Serial_485_CONNECT); // enable RS485_CONNECT |
167 | gpio_set_pin(sns_Serial_485_CONNECT); // enable RS485_CONNECT |
| 160 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
168 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
| 161 | gpio_set_pin(sns_Serial_485_232); // RS485 mode |
169 | gpio_set_pin(sns_Serial_485_232); // RS485 mode |
| 162 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
170 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
| 163 | /* TODO shoud the TX really be enabled in half duplex? */ |
171 | /* TODO shoud the TX really be enabled in half duplex? */ |
| 164 | gpio_set_pin(sns_Serial_TXEN); // enable TX |
172 | gpio_set_pin(sns_Serial_TXEN); // enable TX |
| 165 | gpio_set_pin(sns_Serial_ON); // enable charge pump |
173 | gpio_set_pin(sns_Serial_ON); // enable charge pump |
| 166 | } |
174 | } |
| 167 | else if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_RS485HALFDUPLEXWITHTERMINATION) |
175 | else if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_RS485HALFDUPLEXWITHTERMINATION) |
| 168 | { |
176 | { |
| 169 | #if sns_Serial_DEBUG==1 |
177 | #if sns_Serial_DEBUG==1 |
| 170 | printf("485HDT\n"); |
178 | printf("485HDT\n"); |
| Line 176... | Line 184... | ||
| 176 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
184 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
| 177 | gpio_set_pin(sns_Serial_TXEN); // enable TX |
185 | gpio_set_pin(sns_Serial_TXEN); // enable TX |
| 178 | gpio_set_pin(sns_Serial_ON); // enable charge pump |
186 | gpio_set_pin(sns_Serial_ON); // enable charge pump |
| 179 | } |
187 | } |
| 180 | else if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_LOOPBACK) |
188 | else if (format == CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_LOOPBACK) |
| 181 | { |
189 | { |
| 182 | #if sns_Serial_DEBUG==1 |
190 | #if sns_Serial_DEBUG==1 |
| 183 | printf("LPMODE\n"); |
191 | printf("LPMODE\n"); |
| 184 | #endif |
192 | #endif |
| 185 | gpio_clr_pin(sns_Serial_485_CONNECT); // disable RS485_CONNECT |
193 | gpio_clr_pin(sns_Serial_485_CONNECT); // disable RS485_CONNECT |
| 186 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
194 | gpio_clr_pin(sns_Serial_TERM_EN); // disable termination |
| 187 | gpio_set_pin(sns_Serial_485_232); // RS232 mode |
195 | gpio_set_pin(sns_Serial_485_232); // RS232 mode |
| 188 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
196 | gpio_set_pin(sns_Serial_RXEN); // enable RX |
| 189 | gpio_set_pin(sns_Serial_TXEN); // enable TX |
197 | gpio_set_pin(sns_Serial_TXEN); // enable TX |
| Line 198... | Line 206... | ||
| 198 | //break prematurely, to prevent data from being saved in EEPROM |
206 | //break prematurely, to prevent data from being saved in EEPROM |
| 199 | break; |
207 | break; |
| 200 | } |
208 | } |
| 201 | 209 | ||
| 202 | // update EEPROM data |
210 | // update EEPROM data |
| - | 211 | #if ((__AVR_LIBC_MAJOR__ == 1 && __AVR_LIBC_MINOR__ == 6 && __AVR_LIBC_REVISION__ >=2)||(__AVR_LIBC_MAJOR__ == 1 && __AVR_LIBC_MINOR__ > 6)||__AVR_LIBC_MAJOR__ > 1) |
|
| 203 | eeprom_write_dword_crc(EEDATA32.baudRate, 9600, WITHOUT_CRC); |
212 | eeprom_write_dword_crc(EEDATA32.baudRate, 9600, WITHOUT_CRC); |
| - | 213 | #else |
|
| - | 214 | #warning This version of AVR-libc does not have support for eeprom read dword |
|
| - | 215 | #endif |
|
| 204 | eeprom_write_word_crc(EEDATA16.format, CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_LOOPBACK, WITHOUT_CRC); |
216 | eeprom_write_word_crc(EEDATA16.format, CAN_MODULE_ENUM_SERIAL_SERIALCONFIG_PHYSICALFORMAT_LOOPBACK, WITHOUT_CRC); |
| 205 | EEDATA_UPDATE_CRC; |
217 | EEDATA_UPDATE_CRC; |
| 206 | 218 | ||
| 207 | break; |
219 | break; |
| 208 | } |
220 | } |