Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Safer behaviour when the mode of a pin changes. Fix up PWM implementation #345

Merged
merged 1 commit into from
Nov 12, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 11 additions & 0 deletions inc/genhdr/qstrdefs.generated.h
Original file line number Diff line number Diff line change
Expand Up @@ -354,6 +354,12 @@ QDEF(MP_QSTR_set_analog_period, (const byte*)"\x08\x11" "set_analog_period")
QDEF(MP_QSTR_set_analog_period_microseconds, (const byte*)"\xee\x1e" "set_analog_period_microseconds")
QDEF(MP_QSTR_get_analog_period_microseconds, (const byte*)"\x7a\x1e" "get_analog_period_microseconds")
QDEF(MP_QSTR_is_touched, (const byte*)"\x04\x0a" "is_touched")
QDEF(MP_QSTR_unused, (const byte*)"\x79\x06" "unused")
QDEF(MP_QSTR_audio_play, (const byte*)"\xc8\x0a" "audio_play")
QDEF(MP_QSTR_button, (const byte*)"\xf3\x06" "button")
QDEF(MP_QSTR_touch, (const byte*)"\x80\x05" "touch")
QDEF(MP_QSTR_3v, (const byte*)"\x20\x02" "3v")
QDEF(MP_QSTR_get_mode, (const byte*)"\xaf\x08" "get_mode")
QDEF(MP_QSTR_MicroBitIO, (const byte*)"\xe6\x0a" "MicroBitIO")
QDEF(MP_QSTR_pin0, (const byte*)"\x02\x04" "pin0")
QDEF(MP_QSTR_pin1, (const byte*)"\x03\x04" "pin1")
Expand All @@ -374,6 +380,11 @@ QDEF(MP_QSTR_pin15, (const byte*)"\x56\x05" "pin15")
QDEF(MP_QSTR_pin16, (const byte*)"\x55\x05" "pin16")
QDEF(MP_QSTR_pin19, (const byte*)"\x5a\x05" "pin19")
QDEF(MP_QSTR_pin20, (const byte*)"\x30\x05" "pin20")
QDEF(MP_QSTR_get_pull, (const byte*)"\x49\x08" "get_pull")
QDEF(MP_QSTR_set_pull, (const byte*)"\xdd\x08" "set_pull")
QDEF(MP_QSTR_PULL_UP, (const byte*)"\xba\x07" "PULL_UP")
QDEF(MP_QSTR_PULL_DOWN, (const byte*)"\xad\x09" "PULL_DOWN")
QDEF(MP_QSTR_NO_PULL, (const byte*)"\x1e\x07" "NO_PULL")
QDEF(MP_QSTR_MicroBitImage, (const byte*)"\x87\x0d" "MicroBitImage")
QDEF(MP_QSTR_Image, (const byte*)"\x62\x05" "Image")
QDEF(MP_QSTR_image, (const byte*)"\x42\x05" "image")
Expand Down
5 changes: 3 additions & 2 deletions inc/lib/pwm.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
void pwm_start(void);
void pwm_stop(void);

int32_t pwm_set_period_us(int32_t us);
int pwm_set_period_us(int32_t us);
int32_t pwm_get_period_us(void);
int pwm_set_duty_cycle(int32_t pin, int32_t value);
void pwm_set_duty_cycle(int32_t pin, int32_t value);
void pwm_release(int32_t pin);

#endif // __MICROPY_INCLUDED_LIB_PWM_H__
10 changes: 9 additions & 1 deletion inc/microbit/microbitobj.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,13 @@ extern "C" {
#include "py/obj.h"
#include "PinNames.h"

class MicroBitPin *microbit_obj_get_pin(mp_obj_t o);
typedef struct _microbit_pin_obj_t {
mp_obj_base_t base;
uint8_t number; // The pin number on microbit board
PinName name; // The pin number in the GPIO port.
} microbit_pin_obj_t;

const microbit_pin_obj_t *microbit_obj_get_pin(mp_obj_t o);
PinName microbit_obj_get_pin_name(mp_obj_t o);

extern volatile bool compass_up_to_date;
Expand All @@ -40,6 +46,8 @@ extern volatile bool compass_updating;
extern volatile bool accelerometer_up_to_date;
extern volatile bool accelerometer_updating;

extern void microbit_pin_init(void);

}

#endif // __MICROPY_INCLUDED_MICROBIT_MICROBITOBJ_H__
24 changes: 23 additions & 1 deletion inc/microbit/microbitpin.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,31 @@
#define MICROBIT_PIN_P14 (P0_22)
#define MICROBIT_PIN_P15 (P0_21)

#endif

#include "microbit/microbitobj.h"

mp_obj_t microbit_pin_write_digital(mp_obj_t self_in, mp_obj_t value_in);
mp_obj_t microbit_pin_read_digital(mp_obj_t self_in);
typedef void(*release_func)(const microbit_pin_obj_t *pin);

typedef struct _pinmode {
qstr name;
release_func release; /* Call this function to release pin */
} microbit_pinmode_t;


void microbit_obj_pin_fail_if_cant_acquire(const microbit_pin_obj_t *pin);

void microbit_obj_pin_free(const microbit_pin_obj_t *pin);

void microbit_obj_pin_acquire(const microbit_pin_obj_t *pin, qstr name);

bool microbit_pin_high_debounced(microbit_pin_obj_t *pin);

qstr microbit_obj_pin_get_mode(const microbit_pin_obj_t *pin);

bool microbit_obj_pin_can_be_acquired(const microbit_pin_obj_t *pin);

#endif

#endif // __MICROPY_INCLUDED_MICROBIT_MICROBITPIN_H__
4 changes: 2 additions & 2 deletions inc/microbit/modmicrobit.h
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,8 @@ extern const mp_obj_type_t microbit_accelerometer_type;
extern const struct _microbit_accelerometer_obj_t microbit_accelerometer_obj;

extern struct _microbit_display_obj_t microbit_display_obj;
extern struct _microbit_button_obj_t microbit_button_a_obj;
extern struct _microbit_button_obj_t microbit_button_b_obj;
extern const struct _microbit_button_obj_t microbit_button_a_obj;
extern const struct _microbit_button_obj_t microbit_button_b_obj;
extern const struct _microbit_compass_obj_t microbit_compass_obj;
extern const struct _microbit_i2c_obj_t microbit_i2c_obj;
extern struct _microbit_uart_obj_t microbit_uart_obj;
Expand Down
5 changes: 3 additions & 2 deletions inc/microbit/mpconfigport.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,11 @@ extern const struct _mp_obj_module_t speech_module;
void *async_data[2]; \
void *async_music_data; \
uint8_t *radio_buf; \
void *pwm_next_event; \
void *audio_buffer; \
void *audio_source; \
void *speech_data;
void *speech_data; \
const struct _pwm_events *pwm_active_events; \
const struct _pwm_events *pwm_pending_events; \

// We need to provide a declaration/definition of alloca()
#include <alloca.h>
Expand Down
11 changes: 11 additions & 0 deletions inc/microbit/qstrdefsport.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@ Q(set_analog_period)
Q(set_analog_period_microseconds)
Q(get_analog_period_microseconds)
Q(is_touched)
Q(unused)
Q(audio_play)
Q(button)
Q(touch)
Q(3v)
Q(get_mode)

Q(MicroBitIO)
Q(pin0)
Expand All @@ -52,6 +58,11 @@ Q(pin15)
Q(pin16)
Q(pin19)
Q(pin20)
Q(get_pull)
Q(set_pull)
Q(PULL_UP)
Q(PULL_DOWN)
Q(NO_PULL)

Q(MicroBitImage)
Q(Image)
Expand Down