diff options
| author | Scott Shawcroft <scott@chickadee.tech> | 2016-08-30 13:10:52 -0700 |
|---|---|---|
| committer | Scott Shawcroft <scott@chickadee.tech> | 2016-08-30 13:10:52 -0700 |
| commit | ccb309bd5c0b283ea847b18621038bf5ef817f38 (patch) | |
| tree | 209accaade97ae559558b154b9a080ce3632bc58 /atmel-samd/modmachine_pin.h | |
| parent | b883a15d82c156a0abf8aabf61bc9445ddf97f39 (diff) | |
atmel/samd: Add basic PWM support which only allows for changing the duty.
Diffstat (limited to 'atmel-samd/modmachine_pin.h')
| -rw-r--r-- | atmel-samd/modmachine_pin.h | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/atmel-samd/modmachine_pin.h b/atmel-samd/modmachine_pin.h index 4a02f41db..8ecafe798 100644 --- a/atmel-samd/modmachine_pin.h +++ b/atmel-samd/modmachine_pin.h @@ -35,15 +35,45 @@ #include "asf/sam0/drivers/adc/adc_sam_d_r/adc_feature.h" // This macro is used to simplify pin definition in boards/<board>/pins.c -#define PIN(p_name, p_has_adc, p_adc_input) \ +#define PIN_TWO_TIMERS(p_name, p_has_adc, p_adc_input, p_primary_tc, p_primary_tcc, \ + p_primary_channel, p_primary_wave_output, p_primary_pin, p_primary_mux, \ + p_secondary_tc, p_secondary_tcc, p_secondary_channel, p_secondary_wave_output, \ + p_secondary_pin, p_secondary_mux) \ const pin_obj_t pin_## p_name = { \ { &pin_type }, \ .name = MP_QSTR_ ## p_name, \ .pin = (PIN_## p_name), \ .has_adc = p_has_adc, \ .adc_input = p_adc_input, \ + .primary_timer = { \ + .tc = p_primary_tc, \ + .tcc = p_primary_tcc, \ + .channel = p_primary_channel, \ + .wave_output = p_primary_wave_output, \ + .pin = p_primary_pin, \ + .mux = p_primary_mux \ + }, \ + .secondary_timer = { \ + .tc = p_secondary_tc, \ + .tcc = p_secondary_tcc, \ + .channel = p_secondary_channel, \ + .wave_output = p_secondary_wave_output, \ + .pin = p_secondary_pin, \ + .mux = p_secondary_mux \ + } \ } +#define PIN_NO_TIMERS_(p_name, p_has_adc, p_adc_input) \ + PIN_TWO_TIMERS(p_name, p_has_adc, p_adc_input, \ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0) + +#define PIN_ONE_TIMER_(p_name, p_has_adc, p_adc_input, p_primary_tcc, \ + p_primary_tc, p_primary_channel, p_primary_wave_output, \ + p_primary_pin, p_primary_mux) \ + PIN_TWO_TIMERS(p_name, p_has_adc, p_adc_input, p_primary_tcc, p_primary_tc, \ + p_primary_channel, p_primary_wave_output, p_primary_pin, p_primary_mux, \ + 0, 0, 0, 0, 0, 0) + #define NO_ADC_INPUT (0) #include "mpconfigport.h" @@ -51,11 +81,22 @@ const pin_obj_t pin_## p_name = { \ #include "py/obj.h" typedef struct { + Tc *const tc; + Tcc *const tcc; + uint8_t channel; + uint8_t wave_output; + uint32_t pin; + uint32_t mux; +} pin_timer_t; + +typedef struct { mp_obj_base_t base; qstr name; uint32_t pin; bool has_adc; enum adc_positive_input adc_input; + pin_timer_t primary_timer; + pin_timer_t secondary_timer; } pin_obj_t; extern const mp_obj_type_t pin_type; |
