1 | #include <avr/io.h>
|
2 | #include <stdlib.h>
|
3 | #include <regs.h>
|
4 | #include <spi.h>
|
5 | #include <can2515.h>
|
6 | #include <stdint.h>
|
7 | #include <avr/interrupt.h>
|
8 | #include "can_interface.h"
|
9 |
|
10 |
|
11 | int main(){
|
12 | DDRD &= ~(1<<PD7);
|
13 | DDRD &= ~(1<<PD2);
|
14 | PORTD |= (1<<PD7);
|
15 | PORTD |= (1<<PD2);
|
16 |
|
17 | init_spi();
|
18 | controller_reset();
|
19 | init_bittiming();
|
20 | init_transmitter();
|
21 | init_receiver();
|
22 | controller_normal_mode();
|
23 |
|
24 | modify_register(CANCTRL, 0b111,0b101);
|
25 | modify_register(BFPCTRL, 0b00101010, 0b00101000);
|
26 |
|
27 | uint8_t PD2_pressed_flag = 0;
|
28 |
|
29 | while(1==1){
|
30 | if((PIND & (1<<PD7)) == 0){
|
31 | modify_register(BFPCTRL, 0b00101010, 0b00001000);
|
32 | Message *message;
|
33 | handle_interrupt(message);
|
34 | handle_can_message(message);
|
35 | modify_register(BFPCTRL, 0b00101010, 0b00101000);
|
36 | }
|
37 |
|
38 | if((PIND & (1<<PD2)) == 0 && (PD2_pressed_flag == 0)){
|
39 | PD2_pressed_flag = 1;
|
40 | modify_register(BFPCTRL, 0b00101010, 0b00001000);
|
41 | char data[] = " :100010000C9454000C9454000C9454000C94540010 ";
|
42 | write_bootloader_message_buffered_to_can(strlen(data),data);
|
43 | }
|
44 | if((PIND & (1<<PD2))!=0){
|
45 | modify_register(BFPCTRL, 0b00101010, 0b00101000);
|
46 | PD2_pressed_flag = 0;
|
47 | }
|
48 |
|
49 |
|
50 | }
|
51 | return 0;
|
52 | }
|