33 *
44 * The MIT License (MIT)
55 *
6- * Copyright (c) 2015 Damien P. George
6+ * Copyright (c) 2015-2017 Damien P. George
77 *
88 * Permission is hereby granted, free of charge, to any person obtaining a copy
99 * of this software and associated documentation files (the "Software"), to deal
2929
3030#include "py/obj.h"
3131#include "py/mphal.h"
32- #include "modmachine.h"
33- #include "esponewire.h"
32+
33+ /******************************************************************************/
34+ // Low-level 1-Wire routines
35+
36+ #define TIMING_RESET1 (0)
37+ #define TIMING_RESET2 (1)
38+ #define TIMING_RESET3 (2)
39+ #define TIMING_READ1 (3)
40+ #define TIMING_READ2 (4)
41+ #define TIMING_READ3 (5)
42+ #define TIMING_WRITE1 (6)
43+ #define TIMING_WRITE2 (7)
44+ #define TIMING_WRITE3 (8)
45+
46+ STATIC uint16_t esp_onewire_timings [9 ] = {480 , 40 , 420 , 5 , 5 , 40 , 10 , 50 , 10 };
47+
48+ STATIC int onewire_bus_reset (mp_hal_pin_obj_t pin ) {
49+ mp_hal_pin_write (pin , 0 );
50+ mp_hal_delay_us (esp_onewire_timings [TIMING_RESET1 ]);
51+ uint32_t i = mp_hal_quiet_timing_enter ();
52+ mp_hal_pin_write (pin , 1 );
53+ mp_hal_delay_us_fast (esp_onewire_timings [TIMING_RESET2 ]);
54+ int status = !mp_hal_pin_read (pin );
55+ mp_hal_quiet_timing_exit (i );
56+ mp_hal_delay_us (esp_onewire_timings [TIMING_RESET3 ]);
57+ return status ;
58+ }
59+
60+ STATIC int onewire_bus_readbit (mp_hal_pin_obj_t pin ) {
61+ mp_hal_pin_write (pin , 1 );
62+ uint32_t i = mp_hal_quiet_timing_enter ();
63+ mp_hal_pin_write (pin , 0 );
64+ mp_hal_delay_us_fast (esp_onewire_timings [TIMING_READ1 ]);
65+ mp_hal_pin_write (pin , 1 );
66+ mp_hal_delay_us_fast (esp_onewire_timings [TIMING_READ2 ]);
67+ int value = mp_hal_pin_read (pin );
68+ mp_hal_quiet_timing_exit (i );
69+ mp_hal_delay_us_fast (esp_onewire_timings [TIMING_READ3 ]);
70+ return value ;
71+ }
72+
73+ STATIC void onewire_bus_writebit (mp_hal_pin_obj_t pin , int value ) {
74+ uint32_t i = mp_hal_quiet_timing_enter ();
75+ mp_hal_pin_write (pin , 0 );
76+ mp_hal_delay_us_fast (esp_onewire_timings [TIMING_WRITE1 ]);
77+ if (value ) {
78+ mp_hal_pin_write (pin , 1 );
79+ }
80+ mp_hal_delay_us_fast (esp_onewire_timings [TIMING_WRITE2 ]);
81+ mp_hal_pin_write (pin , 1 );
82+ mp_hal_delay_us_fast (esp_onewire_timings [TIMING_WRITE3 ]);
83+ mp_hal_quiet_timing_exit (i );
84+ }
85+
86+ /******************************************************************************/
87+ // MicroPython bindings
3488
3589STATIC mp_obj_t onewire_timings (mp_obj_t timings_in ) {
3690 mp_obj_t * items ;
@@ -43,27 +97,27 @@ STATIC mp_obj_t onewire_timings(mp_obj_t timings_in) {
4397STATIC MP_DEFINE_CONST_FUN_OBJ_1 (onewire_timings_obj , onewire_timings );
4498
4599STATIC mp_obj_t onewire_reset (mp_obj_t pin_in ) {
46- return mp_obj_new_bool (esp_onewire_reset (mp_hal_get_pin_obj (pin_in )));
100+ return mp_obj_new_bool (onewire_bus_reset (mp_hal_get_pin_obj (pin_in )));
47101}
48102STATIC MP_DEFINE_CONST_FUN_OBJ_1 (onewire_reset_obj , onewire_reset );
49103
50104STATIC mp_obj_t onewire_readbit (mp_obj_t pin_in ) {
51- return MP_OBJ_NEW_SMALL_INT (esp_onewire_readbit (mp_hal_get_pin_obj (pin_in )));
105+ return MP_OBJ_NEW_SMALL_INT (onewire_bus_readbit (mp_hal_get_pin_obj (pin_in )));
52106}
53107STATIC MP_DEFINE_CONST_FUN_OBJ_1 (onewire_readbit_obj , onewire_readbit );
54108
55109STATIC mp_obj_t onewire_readbyte (mp_obj_t pin_in ) {
56110 mp_hal_pin_obj_t pin = mp_hal_get_pin_obj (pin_in );
57111 uint8_t value = 0 ;
58112 for (int i = 0 ; i < 8 ; ++ i ) {
59- value |= esp_onewire_readbit (pin ) << i ;
113+ value |= onewire_bus_readbit (pin ) << i ;
60114 }
61115 return MP_OBJ_NEW_SMALL_INT (value );
62116}
63117STATIC MP_DEFINE_CONST_FUN_OBJ_1 (onewire_readbyte_obj , onewire_readbyte );
64118
65119STATIC mp_obj_t onewire_writebit (mp_obj_t pin_in , mp_obj_t value_in ) {
66- esp_onewire_writebit (mp_hal_get_pin_obj (pin_in ), mp_obj_get_int (value_in ));
120+ onewire_bus_writebit (mp_hal_get_pin_obj (pin_in ), mp_obj_get_int (value_in ));
67121 return mp_const_none ;
68122}
69123STATIC MP_DEFINE_CONST_FUN_OBJ_2 (onewire_writebit_obj , onewire_writebit );
@@ -72,7 +126,7 @@ STATIC mp_obj_t onewire_writebyte(mp_obj_t pin_in, mp_obj_t value_in) {
72126 mp_hal_pin_obj_t pin = mp_hal_get_pin_obj (pin_in );
73127 int value = mp_obj_get_int (value_in );
74128 for (int i = 0 ; i < 8 ; ++ i ) {
75- esp_onewire_writebit (pin , value & 1 );
129+ onewire_bus_writebit (pin , value & 1 );
76130 value >>= 1 ;
77131 }
78132 return mp_const_none ;
0 commit comments