-
Notifications
You must be signed in to change notification settings - Fork 0
/
byteworker.c
89 lines (70 loc) · 1.51 KB
/
byteworker.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
* "THE BEER-WARE LICENSE" (Revision 42):
* Daniel Steuer <daniel.steuer@bingo-ev.de>
* wrote this file. As long as you retain this
* notice you can do whatever you want with this stuff. If we meet some day,
* and you think this stuff is worth it, you can buy me a beer in return.
* (c) 2015 Daniel Steuer
*/
#include <stdint.h>
#include <avr/io.h>
#include "can/can.h"
#include "byteworker.h"
//
// I/O
//
int8_t bw_led_set( uint8_t led, uint8_t state ) {
if( led == 0 ) {
DDRC |= (1<<PC5);
if( state )
PORTC |= (1<<PC5);
else
PORTC &= ~(1<<PC5);
}
else if( led == 1 ) {
DDRC |= (1<<PC6);
if( state )
PORTC |= (1<<PC6);
else
PORTC &= ~(1<<PC6);
}
return 0;
}
int8_t bw_led_toggle( uint8_t led ) {
if( led == 0 ) {
DDRC |= (1<<PC5);
PORTC ^= (1<<PC5);
}
else if( led == 1 ) {
DDRC |= (1<<PC6);
PORTC ^= (1<<PC6);
}
return 0;
}
//
// CAN
//
int8_t bw_can_init( uint16_t bitrate /* kbits */ ) {
switch( bitrate ) {
case 125:
can_init( BITRATE_125_KBPS );
break;
case 500:
can_init( BITRATE_500_KBPS );
break;
case 1000:
can_init( BITRATE_1_MBPS );
break;
default:
return -1;
break;
}
can_filter_t can_filter = { .id = 0, .mask = 0, .flags = { .rtr = 0, .extended = 0 } };
can_set_filter( 0, &can_filter );
can_set_filter( 1, &can_filter );
can_set_filter( 2, &can_filter );
// This is the TJA1043's standby and enable line.
DDRB |= (1<<PB3) | (1<<PB4); // !STB! | EN
PORTB |= (1<<PB3) | (1<<PB4); // ready for sending data
return 0;
}