Subversion Repositories HomeAutomation

Rev

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
        }