Skip to content

Commit c06aa5b

Browse files
committed
esp8266: Make onewire module and support code usable by other ports.
1 parent e678242 commit c06aa5b

3 files changed

Lines changed: 38 additions & 58 deletions

File tree

esp8266/esponewire.c

Lines changed: 28 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,6 @@
2424
* THE SOFTWARE.
2525
*/
2626

27-
#include <stdint.h>
28-
29-
#include "etshal.h"
30-
#include "user_interface.h"
31-
#include "modmachine.h"
3227
#include "esponewire.h"
3328

3429
#define TIMING_RESET1 (0)
@@ -43,57 +38,40 @@
4338

4439
uint16_t esp_onewire_timings[9] = {480, 40, 420, 5, 5, 40, 10, 50, 10};
4540

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]);
7250
return status;
7351
}
7452

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]);
8563
return value;
8664
}
8765

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]);
9270
if (value) {
93-
pin_set(pin, 1);
71+
mp_hal_pin_write(pin, 1);
9472
}
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);
9977
}

esp8266/esponewire.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,12 @@
2727
#ifndef __MICROPY_INCLUDED_ESP8266_ESPONEWIRE_H__
2828
#define __MICROPY_INCLUDED_ESP8266_ESPONEWIRE_H__
2929

30+
#include "py/mphal.h"
31+
3032
extern uint16_t esp_onewire_timings[9];
3133

32-
int esp_onewire_reset(uint pin);
33-
int esp_onewire_readbit(uint pin);
34-
void esp_onewire_writebit(uint pin, int value);
34+
int esp_onewire_reset(mp_hal_pin_obj_t pin);
35+
int esp_onewire_readbit(mp_hal_pin_obj_t pin);
36+
void esp_onewire_writebit(mp_hal_pin_obj_t pin, int value);
3537

3638
#endif // __MICROPY_INCLUDED_ESP8266_ESPONEWIRE_H__

esp8266/modonewire.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,17 @@ STATIC mp_obj_t onewire_timings(mp_obj_t timings_in) {
4343
STATIC MP_DEFINE_CONST_FUN_OBJ_1(onewire_timings_obj, onewire_timings);
4444

4545
STATIC mp_obj_t onewire_reset(mp_obj_t pin_in) {
46-
return mp_obj_new_bool(esp_onewire_reset(mp_obj_get_pin(pin_in)));
46+
return mp_obj_new_bool(esp_onewire_reset(mp_hal_get_pin_obj(pin_in)));
4747
}
4848
STATIC MP_DEFINE_CONST_FUN_OBJ_1(onewire_reset_obj, onewire_reset);
4949

5050
STATIC mp_obj_t onewire_readbit(mp_obj_t pin_in) {
51-
return MP_OBJ_NEW_SMALL_INT(esp_onewire_readbit(mp_obj_get_pin(pin_in)));
51+
return MP_OBJ_NEW_SMALL_INT(esp_onewire_readbit(mp_hal_get_pin_obj(pin_in)));
5252
}
5353
STATIC MP_DEFINE_CONST_FUN_OBJ_1(onewire_readbit_obj, onewire_readbit);
5454

5555
STATIC mp_obj_t onewire_readbyte(mp_obj_t pin_in) {
56-
uint pin = mp_obj_get_pin(pin_in);
56+
mp_hal_pin_obj_t pin = mp_hal_get_pin_obj(pin_in);
5757
uint8_t value = 0;
5858
for (int i = 0; i < 8; ++i) {
5959
value |= esp_onewire_readbit(pin) << i;
@@ -63,13 +63,13 @@ STATIC mp_obj_t onewire_readbyte(mp_obj_t pin_in) {
6363
STATIC MP_DEFINE_CONST_FUN_OBJ_1(onewire_readbyte_obj, onewire_readbyte);
6464

6565
STATIC mp_obj_t onewire_writebit(mp_obj_t pin_in, mp_obj_t value_in) {
66-
esp_onewire_writebit(mp_obj_get_pin(pin_in), mp_obj_get_int(value_in));
66+
esp_onewire_writebit(mp_hal_get_pin_obj(pin_in), mp_obj_get_int(value_in));
6767
return mp_const_none;
6868
}
6969
STATIC MP_DEFINE_CONST_FUN_OBJ_2(onewire_writebit_obj, onewire_writebit);
7070

7171
STATIC mp_obj_t onewire_writebyte(mp_obj_t pin_in, mp_obj_t value_in) {
72-
uint pin = mp_obj_get_pin(pin_in);
72+
mp_hal_pin_obj_t pin = mp_hal_get_pin_obj(pin_in);
7373
int value = mp_obj_get_int(value_in);
7474
for (int i = 0; i < 8; ++i) {
7575
esp_onewire_writebit(pin, value & 1);

0 commit comments

Comments
 (0)