root / analog_exp / onewire_hal_bitbang.c @ 168:bfc84ee2839b
History | View | Annotate | Download (1.2 kB)
1 | #include <avr/io.h> |
---|---|
2 | #include <util/delay.h> |
3 | #include <util/atomic.h> |
4 | |
5 | #include "board.h" |
6 | #include "onewire_hal.h" |
7 | |
8 | #define ONEWIRE_LOW() ONEWIRE_DDR |= (1<<ONEWIRE) |
9 | #define ONEWIRE_HIGH() ONEWIRE_DDR &= ~(1<<ONEWIRE) |
10 | #define ONEWIRE_IN ((ONEWIRE_PIN & (1<<ONEWIRE)) >> ONEWIRE) |
11 | |
12 | bool onewire_reset(void) { |
13 | bool presence;
|
14 | ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
15 | ONEWIRE_PORT &= ~(1<<ONEWIRE);
|
16 | ONEWIRE_LOW(); |
17 | _delay_us(480);
|
18 | ONEWIRE_HIGH(); |
19 | _delay_us(70);
|
20 | presence = (ONEWIRE_IN == 0);
|
21 | _delay_us(410);
|
22 | } |
23 | return presence;
|
24 | } |
25 | |
26 | inline void onewire_tx1(void) { |
27 | ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
28 | ONEWIRE_LOW(); |
29 | _delay_us(6);
|
30 | ONEWIRE_HIGH(); |
31 | _delay_us(64);
|
32 | } |
33 | } |
34 | |
35 | inline void onewire_tx0(void) { |
36 | ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
37 | ONEWIRE_LOW(); |
38 | _delay_us(60);
|
39 | ONEWIRE_HIGH(); |
40 | _delay_us(10);
|
41 | } |
42 | } |
43 | |
44 | inline uint8_t onewire_rx(void) { |
45 | uint8_t bit; |
46 | ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { |
47 | ONEWIRE_LOW(); |
48 | _delay_us(6);
|
49 | ONEWIRE_HIGH(); |
50 | _delay_us(9);
|
51 | bit = ONEWIRE_IN; |
52 | _delay_us(55);
|
53 | } |
54 | return bit;
|
55 | } |