50#define PWM_INVALID_ARGUMENT 0xFFFF
76#if (SAM4E || SAMV70 || SAMV71 || SAME70 || SAMS70)
91#if (SAM3U || SAM3S || SAM3XA || SAM4S || SAM4E || SAMV70 || SAMV71 || SAME70 || SAMS70)
97 PWM_STEPPER_MOTOR_CH_4_5 = 2,
98 PWM_STEPPER_MOTOR_CH_6_7 = 3
119 PWM_FAULT_PWMFI2 = (1 << 1),
121 PWM_FAULT_PWMFI1 = (1 << 3),
122#elif (SAM3S || SAM4S )
133 PWM_FAULT_PWMFI1 = (1 << 3),
134 PWM_FAULT_PWMFI2 = (1 << 4),
135 PWM_FAULT_PWMFI3 = (1 << 5),
136 PWM_FAULT_PWMFI4 = (1 << 6),
137 PWM_FAULT_PWMFI5 = (1 << 7),
138#elif (SAMV70 || SAMV71 || SAME70 || SAMS70)
139 PWM_FAULT_PWMC0_PWMFI0 = (1 << 0),
140 PWM_FAULT_PWMC0_PWMFI1 = (1 << 1),
141 PWM_FAULT_PWMC0_PWMFI2 = (1 << 2),
142 PWM_FAULT_PWMC1_PWMFI0 = (1 << 0),
143 PWM_FAULT_PWMC1_PWMFI1 = (1 << 1),
144 PWM_FAULT_PWMC1_PWMFI2 = (1 << 2),
146 PWM_FAULT_AFEC0 = (1 << 4),
147 PWM_FAULT_AFEC1 = (1 << 5),
153 PWM_FAULT_PWMFI1 = (1 << 1),
154 PWM_FAULT_PWMFI2 = (1 << 2),
207#if (SAM4E || SAMV70 || SAMV71 || SAME70 || SAMS70)
209 PWM_SPREAD_SPECTRUM_MODE_TRIANGULAR = 0,
210 PWM_SPREAD_SPECTRUM_MODE_RANDOM
211} pwm_spread_spectrum_mode_t;
212#if (SAMV70 || SAMV71 || SAME70 || SAMS70)
214 PWM_LEADING_EDGE1_MODE_LINC = PWM_LEBR1_PWMLFEN,
215 PWM_LEADING_EDGE1_MODE_LDEC = PWM_LEBR1_PWMLREN,
216 PWM_LEADING_EDGE1_MODE_HINC = PWM_LEBR1_PWMHFEN,
217 PWM_LEADING_EDGE1_MODE_HDEC = PWM_LEBR1_PWMHREN,
218 PWM_LEADING_EDGE2_MODE_LINC = PWM_LEBR2_PWMLFEN,
219 PWM_LEADING_EDGE2_MODE_LDEC = PWM_LEBR2_PWMLREN,
220 PWM_LEADING_EDGE2_MODE_HINC = PWM_LEBR2_PWMHFEN,
221 PWM_LEADING_EDGE2_MODE_HDEC = PWM_LEBR2_PWMHREN,
222} pwm_leading_edge_blanking_mode_t;
298#if (SAM3U || SAM3S || SAM3XA || SAM4S || SAM4E || SAMV70 || SAMV71 || SAME70 || SAMS70)
326 pwm_spread_spectrum_mode_t spread_spectrum_mode;
327#elif (SAMV70 || SAMV71 || SAME70 || SAMS70)
331 pwm_spread_spectrum_mode_t spread_spectrum_mode;
333 uint32_t ul_leading_edge_delay;
335 pwm_leading_edge_blanking_mode_t leading_edge_blanking_mode;
337 uint32_t ul_ppm_mode;
359#if (SAM3U || SAM3S || SAM3XA || SAM4S || SAM4E || SAMV70 || SAMV71 || SAME70 || SAMS70)
363 uint16_t us_deadtime_pwmh, uint16_t us_deadtime_pwml);
378#if !(SAMV70 || SAMV71 || SAME70 || SAMS70)
380 uint32_t ul_cmp_unit);
386 uint32_t ul_update_period);
401#if (SAM3S || SAM3XA || SAM4S || SAM4E || SAMV70 || SAMV71 || SAME70 || SAMS70)
403 bool b_enable_gray,
bool b_down);
410 bool polarity_inversion_flag,
pwm_level_t polarity_value);
411#elif (SAMV70 || SAMV71 || SAME70 || SAMS70)
415 uint32_t ul_leading_edge_delay,
416 pwm_leading_edge_blanking_mode_t leading_edge_blanking_mode);
419#if (SAMV70 || SAMV71 || SAME70 || SAMS70)
420void pwm_set_dma_duty(
Pwm *p_pwm, uint32_t ul_dma_duty_value);
421void pwm_set_ext_trigger_mode(
Pwm *p_pwm,
pwm_channel_t *p_channel, uint32_t ul_mode);
#define PWM_SCM_UPDM_MODE0
(PWM_SCM) Manual write of double buffer registers and manual update of synchronous channels
#define PWM_SCM_UPDM_MODE1
(PWM_SCM) Manual write of double buffer registers and automatic update of synchronous channels
#define PWM_SCM_UPDM_MODE2
(PWM_SCM) Automatic write of duty-cycle update registers by the PDC and automatic update of synchrono...
void pwm_pdc_set_request_mode(Pwm *p_pwm, pwm_pdc_request_mode_t request_mode, uint32_t ul_cmp_unit)
Set PDC transfer request mode.
void pwm_pdc_disable_interrupt(Pwm *p_pwm, uint32_t ul_sources)
Disable the interrupt of PDC transfer.
uint32_t pwm_channel_update_duty(Pwm *p_pwm, pwm_channel_t *p_channel, uint32_t ul_duty)
Change the duty cycle of the PWM channel.
uint32_t pwm_get_interrupt_status(Pwm *p_pwm)
Get interrupt status of PDC transfer, synchronous channels and comparison.
void pwm_pdc_enable_interrupt(Pwm *p_pwm, uint32_t ul_sources)
Enable the interrupt of PDC transfer.
uint32_t pwm_channel_get_interrupt_status(Pwm *p_pwm)
Get channel counter event and fault protection trigger interrupt status.
uint32_t pwm_init(Pwm *p_pwm, pwm_clock_t *clock_config)
Initialize the PWM source clock (clock A and clock B).
void pwm_stepper_motor_init(Pwm *p_pwm, pwm_stepper_motor_pair_t pair, bool b_enable_gray, bool b_down)
Initialize PWM stepper motor mode.
bool pwm_get_protect_status(Pwm *p_pwm, pwm_protect_t *p_protect)
Get PWM write protect status.
void pwm_sync_unlock_update(Pwm *p_pwm)
Unlock the update of synchronous channels.
void pwm_disable_protect(Pwm *p_pwm, uint32_t ul_group)
Disable PWM write protect.
uint32_t pwm_sync_get_period_counter(Pwm *p_pwm)
Get the value of the synchronization update period counter.
void pwm_channel_enable_interrupt(Pwm *p_pwm, uint32_t ul_event, uint32_t ul_fault)
Enable the interrupt of a channel counter event and fault protection.
void pwm_cmp_enable_interrupt(Pwm *p_pwm, uint32_t ul_sources, pwm_cmp_interrupt_t type)
Enable the interrupt of comparison.
uint32_t pwm_channel_get_status(Pwm *p_pwm)
Check which PWM channel is enabled.
void pwm_fault_clear_status(Pwm *p_pwm, pwm_fault_id_t id)
Clear a fault input.
void pwm_channel_update_output(Pwm *p_pwm, pwm_channel_t *p_channel, pwm_output_t *p_output, bool b_sync)
Change output selection of the PWM channel.
uint32_t pwm_channel_update_period(Pwm *p_pwm, pwm_channel_t *p_channel, uint32_t ul_period)
Change the period of the PWM channel.
uint32_t pwm_cmp_change_setting(Pwm *p_pwm, pwm_cmp_t *p_cmp)
Change the setting of PWM comparison.
void pwm_enable_protect(Pwm *p_pwm, uint32_t ul_group, bool b_sw)
Enable PWM write protect.
void pwm_cmp_disable_interrupt(Pwm *p_pwm, uint32_t ul_sources, pwm_cmp_interrupt_t type)
Disable the interrupt of comparison.
void pwm_sync_disable_interrupt(Pwm *p_pwm, uint32_t ul_sources)
Disable the interrupt of synchronous channels.
uint32_t pwm_cmp_init(Pwm *p_pwm, pwm_cmp_t *p_cmp)
Initialize PWM comparison unit.
void pwm_channel_disable_interrupt(Pwm *p_pwm, uint32_t ul_event, uint32_t ul_fault)
Disable the interrupt of a channel counter event and fault protection.
uint32_t pwm_fault_get_status(Pwm *p_pwm)
Get fault status.
uint32_t pwm_fault_init(Pwm *p_pwm, pwm_fault_t *p_fault)
Initialize the behavior of a fault input.
pwm_level_t pwm_fault_get_input_level(Pwm *p_pwm, pwm_fault_id_t id)
Get the level of a fault input.
uint32_t pwm_channel_get_counter(Pwm *p_pwm, pwm_channel_t *p_channel)
Return channel counter value.
uint32_t pwm_get_interrupt_mask(Pwm *p_pwm)
Get interrupt mask of PDC transfer, synchronous channels and comparison.
void pwm_sync_change_period(Pwm *p_pwm, uint32_t ul_update_period)
Change the wanted time between each update of the synchronous channels.
void pwm_channel_disable(Pwm *p_pwm, uint32_t ul_channel)
Disable the PWM channel.
uint32_t pwm_cmp_get_update_counter(Pwm *p_pwm, uint32_t ul_cmp_unit)
Report the value of the comparison update period counter.
uint32_t pwm_channel_get_interrupt_mask(Pwm *p_pwm)
Get channel counter event and fault protection trigger interrupt mask.
uint32_t pwm_cmp_get_period_counter(Pwm *p_pwm, uint32_t ul_cmp_unit)
Report the value of the comparison period counter.
void pwm_channel_update_dead_time(Pwm *p_pwm, pwm_channel_t *p_channel, uint16_t us_deadtime_pwmh, uint16_t us_deadtime_pwml)
Change dead-time value for PWM outputs.
uint32_t pwm_sync_init(Pwm *p_pwm, pwm_sync_update_mode_t mode, uint32_t ul_update_period)
Initialize synchronous channels update mode and period.
void pwm_sync_enable_interrupt(Pwm *p_pwm, uint32_t ul_sources)
Enable the interrupt of synchronous channel.
uint32_t pwm_channel_init(Pwm *p_pwm, pwm_channel_t *p_channel)
Initialize one PWM channel.
void pwm_channel_enable(Pwm *p_pwm, uint32_t ul_channel)
Enable the PWM channel.
pwm_sync_interrupt_t
Definitions for PWM synchronous channels interrupt.
pwm_level_t
Definitions for PWM level.
_pwm_ch_t
Definitions for PWM channel number.
pwm_sync_update_mode_t
Definitions for PWM synchronous channels update mode.
pwm_counter_event_t
Definitions for PWM event.
@ PWM_EVENT_PERIOD_HALF_END
pwm_pdc_request_mode_t
Definitions for PWM PDC transfer request mode.
@ PWM_PDC_UPDATE_PERIOD_ELAPSED
@ PWM_PDC_COMPARISON_MATCH
pwm_protect_reg_group_t
Definitions of PWM register group.
pwm_align_t
Definitions for PWM channel alignment.
pwm_pdc_interrupt_t
Definitions for PWM PDC transfer interrupt.
pwm_cmp_interrupt_t
Definitions for PWM comparison interrupt.
pwm_fault_id_t
Definitions for PWM fault input ID.
enum _pwm_ch_t pwm_ch_t
Definitions for PWM channel number.
pwm_stepper_motor_pair_t
Definitions for PWM channels used by motor stepper.
@ PWM_STEPPER_MOTOR_CH_2_3
@ PWM_STEPPER_MOTOR_CH_0_1
pmc_cmp_unit_t
Definitions for PWM comparison unit.
Input parameters when configuring a PWM channel mode.
pwm_align_t alignment
Channel alignment.
pwm_fault_id_t fault_id
Fault ID of the channel.
bool b_pwml_output_inverted
Boolean of channel dead-time PWML output inverted.
bool b_pwmh_output_inverted
Boolean of channel dead-time PWMH output inverted.
bool b_deadtime_generator
Boolean of channel dead-time generator.
pwm_level_t ul_fault_output_pwml
Channel PWML output level in fault protection.
bool b_sync_ch
Boolean of Synchronous Channel.
uint16_t us_deadtime_pwml
Dead-time Value for PWML Output.
pwm_level_t polarity
Channel initial polarity.
uint32_t ul_period
Period Cycle Value.
uint32_t ul_prescaler
Channel prescaler.
pwm_output_t output_selection
Channel output.
uint32_t channel
Channel number.
pwm_counter_event_t counter_event
Channel counter event.
pwm_level_t ul_fault_output_pwmh
Channel PWMH output level in fault protection.
uint16_t us_deadtime_pwmh
Dead-time Value for PWMH Output.
uint32_t ul_duty
Duty Cycle Value.
Input parameters when initializing PWM.
uint32_t ul_clkb
Frequency of clock B in Hz (set 0 to turn it off).
uint32_t ul_mck
Frequency of master clock in Hz.
uint32_t ul_clka
Frequency of clock A in Hz (set 0 to turn it off).
Configurations of PWM comparison.
bool b_enable
Boolean of comparison enable.
uint32_t ul_value
Comparison value.
uint32_t ul_period
Comparison period value.
uint32_t ul_trigger
Comparison trigger value.
bool b_is_decrementing
Comparison mode.
uint32_t ul_update_period
Comparison update period value.
uint32_t unit
Comparison unit number.
bool b_pulse_on_line_0
Boolean of generating a match pulse on PWM event line 0.
bool b_pulse_on_line_1
Boolean of generating a match pulse on PWM event line 1.
Configuration of PWM fault input behaviors.
bool b_filtered
Boolean of fault filtering.
pwm_fault_id_t fault_id
Fault ID.
pwm_level_t polarity
Polarity of fault input.
bool b_clear
Boolean of clearing fault flag.
Configurations of a PWM channel output.
bool b_override_pwml
Boolean of using override output as PWML.
pwm_level_t override_level_pwml
Level of override output for PWML.
pwm_level_t override_level_pwmh
Level of override output for PWMH.
bool b_override_pwmh
Boolean of using override output as PWMH.
Structure of PWM write-protect information.
uint32_t ul_sw_status
Bitmask of PWM register group for write protect software status.
uint32_t ul_offset
Offset address of PWM register in which a write access has been attempted.
uint32_t ul_hw_status
Bitmask of PWM register group for write protect hardware status.