|
24 | 24 | * THE SOFTWARE. |
25 | 25 | */ |
26 | 26 |
|
27 | | -#include <stdint.h> |
28 | | - |
29 | | -#include "etshal.h" |
30 | | -#include "user_interface.h" |
31 | | -#include "modmachine.h" |
32 | 27 | #include "esponewire.h" |
33 | 28 |
|
34 | 29 | #define TIMING_RESET1 (0) |
|
43 | 38 |
|
44 | 39 | uint16_t esp_onewire_timings[9] = {480, 40, 420, 5, 5, 40, 10, 50, 10}; |
45 | 40 |
|
46 | | -static uint32_t disable_irq(void) { |
47 | | - ets_intr_lock(); |
48 | | - return 0; |
49 | | -} |
50 | | - |
51 | | -static void enable_irq(uint32_t i) { |
52 | | - ets_intr_unlock(); |
53 | | -} |
54 | | - |
55 | | -static void mp_hal_delay_us_no_irq(uint32_t us) { |
56 | | - uint32_t start = system_get_time(); |
57 | | - while (system_get_time() - start < us) { |
58 | | - } |
59 | | -} |
60 | | - |
61 | | -#define DELAY_US mp_hal_delay_us_no_irq |
62 | | - |
63 | | -int esp_onewire_reset(uint pin) { |
64 | | - pin_set(pin, 0); |
65 | | - DELAY_US(esp_onewire_timings[TIMING_RESET1]); |
66 | | - uint32_t i = disable_irq(); |
67 | | - pin_set(pin, 1); |
68 | | - DELAY_US(esp_onewire_timings[TIMING_RESET2]); |
69 | | - int status = !pin_get(pin); |
70 | | - enable_irq(i); |
71 | | - DELAY_US(esp_onewire_timings[TIMING_RESET3]); |
| 41 | +int esp_onewire_reset(mp_hal_pin_obj_t pin) { |
| 42 | + mp_hal_pin_write(pin, 0); |
| 43 | + mp_hal_delay_us(esp_onewire_timings[TIMING_RESET1]); |
| 44 | + uint32_t i = mp_hal_quiet_timing_enter(); |
| 45 | + mp_hal_pin_write(pin, 1); |
| 46 | + mp_hal_delay_us_fast(esp_onewire_timings[TIMING_RESET2]); |
| 47 | + int status = !mp_hal_pin_read(pin); |
| 48 | + mp_hal_quiet_timing_exit(i); |
| 49 | + mp_hal_delay_us(esp_onewire_timings[TIMING_RESET3]); |
72 | 50 | return status; |
73 | 51 | } |
74 | 52 |
|
75 | | -int esp_onewire_readbit(uint pin) { |
76 | | - pin_set(pin, 1); |
77 | | - uint32_t i = disable_irq(); |
78 | | - pin_set(pin, 0); |
79 | | - DELAY_US(esp_onewire_timings[TIMING_READ1]); |
80 | | - pin_set(pin, 1); |
81 | | - DELAY_US(esp_onewire_timings[TIMING_READ2]); |
82 | | - int value = pin_get(pin); |
83 | | - enable_irq(i); |
84 | | - DELAY_US(esp_onewire_timings[TIMING_READ3]); |
| 53 | +int esp_onewire_readbit(mp_hal_pin_obj_t pin) { |
| 54 | + mp_hal_pin_write(pin, 1); |
| 55 | + uint32_t i = mp_hal_quiet_timing_enter(); |
| 56 | + mp_hal_pin_write(pin, 0); |
| 57 | + mp_hal_delay_us_fast(esp_onewire_timings[TIMING_READ1]); |
| 58 | + mp_hal_pin_write(pin, 1); |
| 59 | + mp_hal_delay_us_fast(esp_onewire_timings[TIMING_READ2]); |
| 60 | + int value = mp_hal_pin_read(pin); |
| 61 | + mp_hal_quiet_timing_exit(i); |
| 62 | + mp_hal_delay_us_fast(esp_onewire_timings[TIMING_READ3]); |
85 | 63 | return value; |
86 | 64 | } |
87 | 65 |
|
88 | | -void esp_onewire_writebit(uint pin, int value) { |
89 | | - uint32_t i = disable_irq(); |
90 | | - pin_set(pin, 0); |
91 | | - DELAY_US(esp_onewire_timings[TIMING_WRITE1]); |
| 66 | +void esp_onewire_writebit(mp_hal_pin_obj_t pin, int value) { |
| 67 | + uint32_t i = mp_hal_quiet_timing_enter(); |
| 68 | + mp_hal_pin_write(pin, 0); |
| 69 | + mp_hal_delay_us_fast(esp_onewire_timings[TIMING_WRITE1]); |
92 | 70 | if (value) { |
93 | | - pin_set(pin, 1); |
| 71 | + mp_hal_pin_write(pin, 1); |
94 | 72 | } |
95 | | - DELAY_US(esp_onewire_timings[TIMING_WRITE2]); |
96 | | - pin_set(pin, 1); |
97 | | - DELAY_US(esp_onewire_timings[TIMING_WRITE3]); |
98 | | - enable_irq(i); |
| 73 | + mp_hal_delay_us_fast(esp_onewire_timings[TIMING_WRITE2]); |
| 74 | + mp_hal_pin_write(pin, 1); |
| 75 | + mp_hal_delay_us_fast(esp_onewire_timings[TIMING_WRITE3]); |
| 76 | + mp_hal_quiet_timing_exit(i); |
99 | 77 | } |
0 commit comments