3 #include <lpc21xx.h> /* LPC21xx definitions */
5 #include <periph/can.h>
10 #include <powswitch.h>
13 #include <uart_nozen.h>
18 #define CAN_SPEED 1000000
30 unsigned int cmu_buff[30];
31 unsigned int cmu_buff_p = 0;
38 unsigned char d_green;
59 if (time_blink == 0) time_blink = time_ms + 500;
61 if (time_ms > time_blink)
64 time_blink = time_ms + 500;
72 void can_rx(can_msg_t *msg) {
75 memcpy(&rx_msg, msg, sizeof(can_msg_t));
83 set_servo(0, rx_msg.data[0]);
84 set_servo(1, rx_msg.data[1]);
85 set_servo(2, rx_msg.data[2]);
98 void init_perip(void) // inicializace periferii mikroprocesoru
100 init_servo(SERVO_ISR);
104 engine_A_en(ENGINE_EN_ON);
105 engine_A_dir(ENGINE_DIR_FW);
110 UART_init( UART0,UART0_ISR, 19200, UART_BITS_8, UART_STOP_BIT_1, UART_PARIT_OFF, 0);
111 UART_init( UART1,UART1_ISR, 115100, UART_BITS_8, UART_STOP_BIT_1, UART_PARIT_OFF, 0);
112 can_init_baudrate(CAN_SPEED, CAN_ISR, can_rx);
121 if (cmu_timeout < time_ms) return 2;
122 while (UART_new_data(UART1))
124 int data = read_UART_data(UART1);
125 write_UART_data( UART0, data );
126 if (data == ':') return 1;
133 void cmu_parse_message(void)
135 unsigned int val = 0;
137 unsigned int iter = 1;
138 unsigned int colors[6];
142 for (i = 0; i < 6; i++)
149 if (cmu_buff[0] != 'S') return;
150 if (cmu_buff[1] != ' ') return;
154 for ( val = cmu_buff_p ; val > 0 ; --val)
157 if ((cmu_buff[val] >= '0' ) & (cmu_buff[val] <= '9' )) break;
163 for (i =0; i < 6 ;i++)
167 for ( ; val > 0 ; --val)
169 if (cmu_buff[val] >= '0')
171 colors[i] += (cmu_buff[val] - '0') * iter ;
186 color.red = colors[5];
187 color.green = colors[4];
188 color.blue = colors[3];
189 color.d_red = colors[2];
190 color.d_green =colors[1];
191 color.d_blue =colors[0];
197 void cmu_set_param(void)
199 char param[] = "CR 18 44\r";
202 for( i = 0 ; i < 9; i++){
203 write_UART_data( UART1, param[i] );
204 write_UART_data( UART0, param[i] );
213 if (cmu_timeout < time_ms) return 2;
214 while (UART_new_data(UART1))
216 cmu_buff[cmu_buff_p]= read_UART_data(UART1);
217 write_UART_data( UART0, cmu_buff[cmu_buff_p]);
219 if (cmu_buff[cmu_buff_p] == ':')
223 for ( i = 0; i <= cmu_buff_p ; i++)
225 if (cmu_buff[i] == 'N') { cmu_buff_p = 0; return 2;}
226 if (cmu_buff[i] == 'A') { cmu_buff_p = 0; return 1;}
237 void cmu_set_gm(void)
239 char param[] = "GM\r";
242 for( i = 0 ; i < 3; i++){
243 write_UART_data( UART1, param[i] );
244 write_UART_data( UART0, param[i] );
251 if (cmu_timeout < time_ms) return 2;
252 while (UART_new_data(UART1))
254 cmu_buff[cmu_buff_p]= read_UART_data(UART1);
255 write_UART_data( UART0, cmu_buff[cmu_buff_p]);
257 if (cmu_buff[cmu_buff_p] == '\r')
261 for ( i = 0; i <= cmu_buff_p ; i++)
263 write_UART_data( UART0, cmu_buff[i]);
265 if (cmu_buff[i] == 'N') { cmu_buff_p = 0; return 2;}
266 if (cmu_buff[i] == 'A') { cmu_buff_p = 0; return 1;}
278 void atoim(unsigned int val)
280 write_UART_data( UART0, ' ' );
281 write_UART_data( UART0, (val / 100 + 48) );
282 write_UART_data( UART0, ((val % 100) / 10 + 48) );
283 write_UART_data( UART0, ((val % 100) % 10 + 48) );
293 if (UART_new_data(UART1))
295 test = read_UART_data(UART1);
299 if (cmu_buff_p < 13) // if recieved chars is not full message
311 atoim(color.d_green );
312 atoim(color.d_blue );
313 write_UART_data( UART0, '\n');
319 cmu_buff[cmu_buff_p] = test;
320 write_UART_data( UART0, cmu_buff[cmu_buff_p]);
333 while (UART_new_data(UART1))
334 write_UART_data( UART0, read_UART_data(UART1));
335 while (UART_new_data(UART0))
336 write_UART_data( UART1, read_UART_data(UART0));
343 init_perip(); // sys init MCU
351 cmu_timeout = time_ms + 6000;
355 write_UART_data( UART1, '\r'); // this gives some response if cmucam is running
356 // needed for cmu_init
363 if (UART_new_data(UART0))
365 engine_A_en(ENGINE_EN_OFF);
378 if(ret == 1) state = 1;
379 if(ret == 2) state = 9;
385 cmu_timeout = time_ms + 400;
391 if (ret == 1) state = 3;
392 if (ret == 2) state = 9;
399 cmu_timeout = time_ms + 400;
405 if (ret == 1) state = 5;
406 if (ret == 2) state = 9;
412 if(ret == 2) state = 9;
416 case 9: deb_led_on(LEDR);
433 // while(can_tx_msg(&msg));*/
435 /* while (UART_new_data(UART1))
437 write_UART_data( UART0, read_UART_data(UART1));
440 while (UART_new_data(UART0))
442 write_UART_data( UART1, read_UART_data(UART0));
444 // test = UART_test_err(UART1);