HPM SDK
HPMicro Software Development Kit
hpm_pwm_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2025 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_PWM_DRV_H
9 #define HPM_PWM_DRV_H
10 
11 #include "hpm_common.h"
12 #include "hpm_pwm_regs.h"
13 #include "hpm_soc_feature.h"
21 #define PWM_UNLOCK_KEY (0xB0382607UL)
22 
23 /* IRQ enable bit mask */
24 #define PWM_IRQ_FAULT PWM_IRQEN_FAULTIRQE_MASK
25 #define PWM_IRQ_EX_RELOAD PWM_IRQEN_XRLDIRQE_MASK
26 #define PWM_IRQ_HALF_RELOAD PWM_IRQEN_HALFRLDIRQE_MASK
27 #define PWM_IRQ_RELOAD PWM_IRQEN_RLDIRQE_MASK
28 #define PWM_IRQ_CMP(x) PWM_IRQEN_CMPIRQEX_SET((1 << x))
29 
30 /* PWM force output mask */
31 #define PWM_FORCE_OUTPUT(pwm_index, force_output) \
32  (force_output << (pwm_index << 1))
33 
34 #define PWM_DUTY_CYCLE_FP_MAX ((1U << 24) - 1)
35 
40 typedef enum pwm_counter_type {
44 
49 typedef enum pwm_cmp_mode {
53 
58 typedef enum pwm_register_update {
64 
69 typedef enum pwm_fault_mode {
74 
85 
90 typedef enum pwm_fault_source {
99 
104 typedef enum pwm_force_source {
112 typedef enum pwm_force_cmd_timing {
118 
123 typedef enum pwm_output_type {
129 
134 typedef struct pwm_cmp_config {
135  uint32_t cmp;
137 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
138  bool enable_hrcmp;
139 #endif
140  uint8_t mode;
141  uint8_t update_trigger;
142  uint8_t ex_cmp;
143  uint8_t half_clock_cmp;
144  uint8_t jitter_cmp;
145 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
146  uint8_t hrcmp;
147 #endif
149 
154 typedef struct pwm_output_channel {
155  uint8_t cmp_start_index;
156  uint8_t cmp_end_index;
163 typedef struct pwm_fault_source_config {
164  uint32_t source_mask;
170 
175 typedef struct pwm_config {
176 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
177  bool hrpwm_update_mode;
178 #endif
182  uint8_t fault_mode;
184  uint8_t force_source;
187 
192 typedef struct pwm_pair_config {
195 
196 #ifdef __cplusplus
197 extern "C" {
198 #endif
199 
206 static inline void pwm_deinit(PWM_Type *pwm_x)
207 {
208  pwm_x->IRQEN = 0;
209  pwm_x->DMAEN = 0;
210  pwm_x->SR = pwm_x->SR;
211  pwm_x->STA = 0;
212  pwm_x->RLD = PWM_RLD_RLD_MASK;
213  for (uint8_t i = 0; i < PWM_SOC_CMP_MAX_COUNT; i++) {
214  pwm_x->CMP[i] = PWM_CMP_CMP_MASK;
215  pwm_x->CMPCFG[i] = 0;
217  }
218  pwm_x->FRCMD = 0;
219  pwm_x->GCR = 0;
220  pwm_x->SHCR = 0;
221 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
222  pwm_x->HRPWM_CFG = 0;
223 #endif
224  for (uint8_t i = 0; i < PWM_SOC_OUTPUT_TO_PWM_MAX_COUNT; i++) {
225  pwm_x->PWMCFG[i] = 0;
226  }
227 }
228 
235 {
236  if (pwm_x->SHCR & PWM_SHCR_SHLKEN_MASK) {
237  /*
238  * if lock shadow register has been enabled in SHCR, it has to set
239  * the lock bit twice to issue shadow register lock event.
240  */
241  pwm_x->SHLK = PWM_SHLK_SHLK_MASK;
242  }
243  pwm_x->SHLK = PWM_SHLK_SHLK_MASK;
244 }
245 
251 static inline void pwm_shadow_register_lock(PWM_Type *pwm_x)
252 {
253  pwm_x->SHCR |= PWM_SHCR_SHLKEN_MASK;
254  pwm_x->SHLK = PWM_SHLK_SHLK_MASK;
255 }
256 
262 static inline void pwm_shadow_register_unlock(PWM_Type *pwm_x)
263 {
264  pwm_x->UNLK = PWM_UNLOCK_KEY;
265 }
266 
274 static inline void pwm_set_start_count(PWM_Type *pwm_x,
275  uint8_t ex_start,
276  uint32_t start)
277 {
278  pwm_x->STA = PWM_STA_XSTA_SET(ex_start)
279  | PWM_STA_STA_SET(start);
280 }
281 
282 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
283 
290 static inline void pwm_set_hrpwm_start_count(PWM_Type *pwm_x,
291  uint32_t start)
292 {
293  pwm_x->STA_HRPWM = PWM_STA_HRPWM_STA_SET(start);
294 }
295 
296 #endif
297 
305 static inline void pwm_set_reload(PWM_Type *pwm_x,
306  uint8_t ex_reload,
307  uint32_t reload)
308 {
310  pwm_x->RLD = PWM_RLD_XRLD_SET(ex_reload)
311  | PWM_RLD_RLD_SET(reload);
312 }
313 
314 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
315 
323 static inline void pwm_set_hrpwm_reload(PWM_Type *pwm_x,
324  uint16_t hrpwm_reload,
325  uint32_t reload)
326 {
328  pwm_x->RLD_HRPWM = PWM_RLD_HRPWM_RLD_HR_SET(hrpwm_reload)
329  | PWM_RLD_HRPWM_RLD_SET(reload);
330 }
331 
332 #endif
333 
345 static inline void pwm_clear_status(PWM_Type *pwm_x, uint32_t mask)
346 {
347  pwm_x->SR = mask;
348 }
349 
350 #if defined(PWM_SOC_TIMER_RESET_SUPPORT) && PWM_SOC_TIMER_RESET_SUPPORT
351 
357 static inline void pwm_timer_reset(PWM_Type *pwm_x)
358 {
359  pwm_x->GCR = ((pwm_x->GCR & ~(PWM_GCR_TIMERRESET_MASK)) | PWM_GCR_TIMERRESET_SET(1));
360 }
361 
362 #endif
363 
370 static inline uint32_t pwm_get_status(PWM_Type *pwm_x)
371 {
372  return pwm_x->SR;
373 }
374 
380 static inline uint32_t pwm_get_irq_en(PWM_Type *pwm_x)
381 {
382  return pwm_x->IRQEN;
383 }
384 
396 static inline void pwm_disable_irq(PWM_Type *pwm_x, uint32_t mask)
397 {
398  pwm_x->IRQEN &= ~mask;
399 }
400 
412 static inline void pwm_enable_irq(PWM_Type *pwm_x, uint32_t mask)
413 {
414  pwm_x->IRQEN |= mask;
415 }
416 
424 static inline void pwm_set_capture_irq_falling_edge(PWM_Type *pwm_x, uint32_t mask)
425 {
426  pwm_x->CAP_EN_NEG |= mask;
427 }
428 
436 static inline void pwm_set_capture_irq_rising_edge(PWM_Type *pwm_x, uint32_t mask)
437 {
438  pwm_x->CAP_EN_NEG &= ~mask;
439 }
440 
453 static inline void pwm_disable_dma_request(PWM_Type *pwm_x, uint32_t mask)
454 {
455  pwm_x->DMAEN &= ~mask;
456 }
457 
470 static inline void pwm_enable_dma_request(PWM_Type *pwm_x, uint32_t mask)
471 {
472  pwm_x->DMAEN |= mask;
473 }
474 
482  uint8_t target_cmp_index)
483 {
484  pwm_x->SHCR = ((pwm_x->SHCR & ~(PWM_SHCR_FRCSHDWSEL_MASK))
485  | PWM_SHCR_FRCSHDWSEL_SET(target_cmp_index));
486 }
502  uint8_t target_cmp_index)
503 {
505  pwm_x->SHCR = ((pwm_x->SHCR & ~(PWM_SHCR_CNTSHDWSEL_MASK
507  | PWM_SHCR_CNTSHDWSEL_SET(target_cmp_index)
508  | PWM_SHCR_CNTSHDWUPT_SET(trigger));
509  } else {
510  pwm_x->SHCR = ((pwm_x->SHCR & ~(PWM_SHCR_CNTSHDWUPT_MASK))
511  | PWM_SHCR_CNTSHDWUPT_SET(trigger));
512  }
513 }
514 
524 static inline void pwm_load_cmp_shadow_on_capture(PWM_Type *pwm_x,
525  uint8_t index,
526  bool is_falling_edge)
527 {
528  pwm_x->CMPCFG[index] |= PWM_CMPCFG_CMPMODE_MASK;
529  pwm_x->GCR = ((pwm_x->GCR & ~(PWM_GCR_CMPSHDWSEL_MASK | PWM_GCR_HWSHDWEDG_MASK))
530  | PWM_GCR_CMPSHDWSEL_SET(index)
531  | PWM_GCR_HWSHDWEDG_SET(is_falling_edge));
532 }
533 
534 #if defined(PWM_SOC_SHADOW_TRIG_SUPPORT) && PWM_SOC_SHADOW_TRIG_SUPPORT
535 
542 static inline void pwm_set_cnt_shadow_trig_reload(PWM_Type *pwm_x, bool is_enable)
543 {
544  pwm_x->SHCR = ((pwm_x->SHCR & ~PWM_SHCR_CNT_UPDATE_RELOAD_MASK)
545  | PWM_SHCR_CNT_UPDATE_RELOAD_SET(is_enable));
546 }
547 
556 static inline void pwm_set_cnt_shadow_trig_edge(PWM_Type *pwm_x,
557  bool is_falling_edge)
558 {
559  pwm_x->SHCR = ((pwm_x->SHCR & ~PWM_SHCR_CNT_UPDATE_EDGE_MASK)
560  | PWM_SHCR_CNT_UPDATE_EDGE_SET(is_falling_edge));
561 }
562 
571 static inline void pwm_set_force_shadow_trig_edge(PWM_Type *pwm_x,
572  bool is_falling_edge)
573 {
574  pwm_x->SHCR = ((pwm_x->SHCR & ~PWM_SHCR_FORCE_UPDATE_EDGE_MASK)
575  | PWM_SHCR_FORCE_UPDATE_EDGE_SET(is_falling_edge));
576 }
577 
578 #endif
585 static inline void pwm_cmp_disable_half_clock(PWM_Type *pwm_x, uint8_t index)
586 {
587  pwm_x->CMP[index] &= ~PWM_CMP_CMPHLF_MASK;
588 }
589 
596 static inline void pwm_cmp_enable_half_clock(PWM_Type *pwm_x, uint8_t index)
597 {
598  pwm_x->CMP[index] |= PWM_CMP_CMPHLF_MASK;
599 }
600 
608 static inline void pwm_cmp_update_jitter_value(PWM_Type *pwm_x, uint8_t index, uint8_t jitter)
609 {
610  pwm_x->CMP[index] = (pwm_x->CMP[index] & ~PWM_CMP_CMPJIT_MASK) | PWM_CMP_CMPJIT_SET(jitter);
611 }
612 
621 static inline void pwm_cmp_update_cmp_value(PWM_Type *pwm_x, uint8_t index,
622  uint32_t cmp, uint16_t ex_cmp)
623 {
624  pwm_x->CMP[index] = (pwm_x->CMP[index] & ~(PWM_CMP_CMP_MASK | PWM_CMP_XCMP_MASK))
625  | PWM_CMP_CMP_SET(cmp) | PWM_CMP_XCMP_SET(ex_cmp);
626 }
627 
636 static inline uint32_t pwm_cmp_get_cmp_value(PWM_Type *pwm_x, uint8_t index)
637 {
638  return PWM_CMP_CMP_GET(pwm_x->CMP[index]);
639 }
640 
649 static inline uint32_t pwm_cmp_get_excmp_value(PWM_Type *pwm_x, uint8_t index)
650 {
651  return PWM_CMP_XCMP_GET(pwm_x->CMP[index]);
652 }
653 
663 static inline void pwm_fault_recovery_update_cmp_value(PWM_Type *pwm_x, uint8_t index,
664  uint32_t cmp)
665 {
666  pwm_cmp_update_cmp_value(pwm_x, index, cmp, 0);
667 }
668 
669 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
678 static inline void pwm_cmp_update_hrcmp_value(PWM_Type *pwm_x, uint8_t index,
679  uint32_t cmp, uint16_t hrcmp)
680 {
681  pwm_x->CMP_HRPWM[index] = (pwm_x->CMP_HRPWM[index] & ~(PWM_CMP_HRPWM_CMP_MASK | PWM_CMP_HRPWM_CMP_HR_MASK))
683 }
684 #endif
685 
693 static inline void pwm_cmp_force_value(PWM_Type *pwm_x, uint8_t index, uint32_t cmp)
694 {
695  pwm_x->CMP[index] = cmp;
696 }
697 
705 static inline void pwm_config_cmp(PWM_Type *pwm_x, uint8_t index, pwm_cmp_config_t *config)
706 {
708  if (config->mode == pwm_cmp_mode_output_compare) {
709 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
710  if (config->enable_hrcmp) {
711  pwm_x->CMPCFG[index] = PWM_CMPCFG_CMPSHDWUPT_SET(config->update_trigger);
712  pwm_x->CMP[index] = PWM_CMP_HRPWM_CMP_SET(config->cmp)
713  | PWM_CMP_HRPWM_CMP_HR_SET(config->hrcmp);
714  } else {
715 #endif
716  pwm_x->CMPCFG[index] = (config->enable_ex_cmp ? PWM_CMPCFG_XCNTCMPEN_MASK : 0)
718  pwm_x->CMP[index] = PWM_CMP_CMP_SET(config->cmp)
719  | PWM_CMP_XCMP_SET(config->ex_cmp)
721  | PWM_CMP_CMPJIT_SET(config->jitter_cmp);
722 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
723  }
724 #endif
725  } else {
726  pwm_x->CMPCFG[index] |= PWM_CMPCFG_CMPMODE_MASK;
727  }
728 }
729 
737 static inline void pwm_config_output_channel(PWM_Type *pwm_x, uint8_t index, pwm_output_channel_t *config)
738 {
739  pwm_x->CHCFG[index] = PWM_CHCFG_CMPSELBEG_SET(config->cmp_start_index)
742 }
743 
750 static inline void pwm_config_fault_source(PWM_Type *pwm_x, pwm_fault_source_config_t *config)
751 {
757  | config->source_mask
758  | PWM_GCR_FAULTEXPOL_SET((config->fault_external_0_active_low ? 0x1 : 0) | (config->fault_external_1_active_low ? 0x2 : 0))
761 }
762 
768 static inline void pwm_clear_fault(PWM_Type *pwm_x)
769 {
770  pwm_x->GCR |= PWM_GCR_FAULTCLR_MASK;
771  pwm_x->GCR &= ~PWM_GCR_FAULTCLR_MASK;
772 }
773 
779 static inline void pwm_stop_counter(PWM_Type *pwm_x)
780 {
781  pwm_x->GCR &= ~PWM_GCR_CEN_MASK;
782 }
783 
789 static inline void pwm_start_counter(PWM_Type *pwm_x)
790 {
791  pwm_x->GCR |= PWM_GCR_CEN_MASK;
792 }
793 
799 static inline void pwm_enable_sw_force(PWM_Type *pwm_x)
800 {
801  pwm_x->GCR |= PWM_GCR_SWFRC_MASK;
802 }
803 
809 static inline void pwm_disable_sw_force(PWM_Type *pwm_x)
810 {
811  pwm_x->GCR &= ~PWM_GCR_SWFRC_MASK;
812 }
813 
819 static inline void pwm_enable_reload_at_synci(PWM_Type *pwm_x)
820 {
822 }
823 
830 static inline void pwm_disable_output(PWM_Type *pwm_x, uint8_t index)
831 {
832  pwm_x->PWMCFG[index] &= ~PWM_PWMCFG_OEN_MASK;
833 }
834 
841 static inline void pwm_enable_output(PWM_Type *pwm_x, uint8_t index)
842 {
843  pwm_x->PWMCFG[index] |= PWM_PWMCFG_OEN_MASK;
844 }
845 
852 static inline void pwm_set_force_output(PWM_Type *pwm_x, uint32_t output_mask)
853 {
854  pwm_x->FRCMD = PWM_FRCMD_FRCMD_SET(output_mask);
855 }
856 
865 static inline void pwm_config_force_polarity(PWM_Type *pwm_x, bool polarity)
866 {
867  pwm_x->GCR = (pwm_x->GCR & ~(PWM_GCR_FRCPOL_MASK)) | PWM_GCR_FRCPOL_SET(polarity);
868 }
869 
877 {
878  pwm_x->GCR = (pwm_x->GCR & ~(PWM_GCR_FRCTIME_MASK)) | PWM_GCR_FRCTIME_SET(timing);
879 }
880 
887 static inline void pwm_enable_pwm_sw_force_output(PWM_Type *pwm_x, uint8_t index)
888 {
891 }
892 
899 static inline void pwm_disable_pwm_sw_force_output(PWM_Type *pwm_x, uint8_t index)
900 {
901  pwm_x->PWMCFG[index] &= ~PWM_PWMCFG_FRCSRCSEL_MASK;
902 }
903 
914 static inline void pwm_config_pwm(PWM_Type *pwm_x, uint8_t index,
915  pwm_config_t *config, bool enable_pair_mode)
916 {
917  pwm_x->PWMCFG[index] = PWM_PWMCFG_OEN_SET(config->enable_output)
922  | PWM_PWMCFG_PAIR_SET(enable_pair_mode)
923 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
924  | PWM_PWMCFG_HR_UPDATE_MODE_SET(config->hrpwm_update_mode)
925 #endif
927 }
928 
935 static inline uint32_t pwm_get_reload_val(PWM_Type *pwm_x)
936 {
937  return PWM_RLD_RLD_GET(pwm_x->RLD);
938 }
939 
946 static inline uint32_t pwm_get_ex_reload_val(PWM_Type *pwm_x)
947 {
948  return PWM_RLD_XRLD_GET(pwm_x->RLD);
949 }
950 
957 static inline uint32_t pwm_get_counter_val(PWM_Type *pwm_x)
958 {
959  return PWM_CNT_CNT_GET(pwm_x->CNT);
960 }
961 
968 static inline uint32_t pwm_get_ex_counter_val(PWM_Type *pwm_x)
969 {
970  return PWM_CNT_XCNT_GET(pwm_x->CNT);
971 }
972 
982  uint8_t index,
983  pwm_cmp_config_t *config);
984 
994 void pwm_get_captured_count(PWM_Type *pwm_x, uint32_t *buf, pwm_counter_type_t counter, uint8_t start_index, uint8_t num);
995 
1003 
1011 
1018 void pwm_get_default_pwm_config(PWM_Type *pwm_x, pwm_config_t *config);
1019 
1027 
1040  uint8_t pwm_index, pwm_config_t *pwm_config,
1041  uint8_t cmp_start_index, pwm_cmp_config_t *cmp, uint8_t cmp_num);
1054  uint8_t pwm_index, pwm_pair_config_t *pwm_pair_config,
1055  uint8_t cmp_start_index, pwm_cmp_config_t *cmp, uint8_t cmp_num);
1056 
1065 hpm_stat_t pwm_update_raw_cmp_edge_aligned(PWM_Type *pwm_x, uint8_t cmp_index,
1066  uint32_t target_cmp);
1067 
1078 hpm_stat_t pwm_update_raw_cmp_central_aligned(PWM_Type *pwm_x, uint8_t cmp1_index,
1079  uint8_t cmp2_index, uint32_t target_cmp1, uint32_t target_cmp2);
1080 
1081 
1090 hpm_stat_t pwm_update_duty_edge_aligned(PWM_Type *pwm_x, uint8_t cmp_index, float duty);
1091 
1101 hpm_stat_t pwm_update_duty_central_aligned(PWM_Type *pwm_x, uint8_t cmp1_index,
1102  uint8_t cmp2_index, float duty);
1103 
1104 #if defined(PWM_SOC_HRPWM_SUPPORT) && PWM_SOC_HRPWM_SUPPORT
1105 
1111 static inline void pwm_recovery_hrpwm_output(PWM_Type *pwm_x)
1112 {
1119 }
1120 
1126 static inline void pwm_enable_hrpwm(PWM_Type *pwm_x)
1127 {
1128  pwm_x->GCR = (pwm_x->GCR & ~(PWM_GCR_HR_PWM_EN_MASK)) | PWM_GCR_HR_PWM_EN_SET(1);
1129 }
1130 
1136 static inline void pwm_disable_hrpwm(PWM_Type *pwm_x)
1137 {
1138  pwm_x->GCR = pwm_x->GCR & ~(PWM_GCR_HR_PWM_EN_MASK);
1139 }
1140 
1148 static inline void pwm_start_hrpwm_counter(PWM_Type *pwm_x)
1149 {
1150  pwm_start_counter(pwm_x);
1151  pwm_enable_hrpwm(pwm_x);
1152 }
1153 
1159 static inline void pwm_cal_hrpwm_start(PWM_Type *pwm_x)
1160 {
1162 }
1163 
1170 static inline void pwm_cal_hrpwm_chn_start(PWM_Type *pwm_x, uint8_t chn)
1171 {
1172  pwm_x->HRPWM_CFG |= PWM_HRPWM_CFG_CAL_START_SET((1 << chn));
1173 }
1174 
1181 static inline void pwm_cal_hrpwm_chn_wait(PWM_Type *pwm_x, uint8_t chn)
1182 {
1183  while (PWM_ANASTS_CALON_GET(pwm_x->ANASTS[chn])) {
1184  };
1185 }
1186 
1194 static inline uint32_t pwm_get_cal_hrpwm_status(PWM_Type *pwm_x, uint8_t chn)
1195 {
1196  return PWM_ANASTS_CALON_GET(pwm_x->ANASTS[chn]);
1197 }
1198 
1205 static inline uint32_t pwm_get_hrpwm_reload_val(PWM_Type *pwm_x)
1206 {
1207  return PWM_RLD_HRPWM_RLD_GET(pwm_x->RLD_HRPWM);
1208 }
1209 
1216 static inline uint32_t pwm_get_hrpwm_hr_reload_val(PWM_Type *pwm_x)
1217 {
1218  return PWM_RLD_HRPWM_RLD_HR_GET(pwm_x->RLD_HRPWM);
1219 }
1220 
1221 
1231 hpm_stat_t pwm_update_raw_hrcmp_edge_aligned(PWM_Type *pwm_x, uint8_t cmp_index, uint32_t target_cmp,
1232  uint16_t target_hrcmp);
1233 
1246 hpm_stat_t pwm_update_raw_hrcmp_central_aligned(PWM_Type *pwm_x, uint8_t cmp1_index,
1247  uint8_t cmp2_index, uint32_t target_cmp1, uint32_t target_cmp2,
1248  uint16_t target_hrcmp1, uint16_t target_hrcmp2);
1249 #endif
1250 
1251 #ifdef __cplusplus
1252 }
1253 #endif
1257 #endif /* HPM_PWM_DRV_H */
#define PWM_SOC_CMP_MAX_COUNT
Definition: hpm_soc_feature.h:67
#define PWM_SOC_OUTPUT_TO_PWM_MAX_COUNT
Definition: hpm_soc_feature.h:68
#define PWM_SHCR_SHLKEN_MASK
Definition: hpm_pwm_regs.h:461
#define PWM_STA_STA_SET(x)
Definition: hpm_pwm_regs.h:79
#define PWM_CNT_CNT_GET(x)
Definition: hpm_pwm_regs.h:493
#define PWM_SHCR_FRCSHDWSEL_MASK
Definition: hpm_pwm_regs.h:425
#define PWM_GCR_FRCPOL_SET(x)
Definition: hpm_pwm_regs.h:262
#define PWM_GCR_CEN_MASK
Definition: hpm_pwm_regs.h:359
#define PWM_GCR_FRCPOL_MASK
Definition: hpm_pwm_regs.h:260
#define PWM_GCR_FAULTI3EN_MASK
Definition: hpm_pwm_regs.h:208
#define PWM_GCR_CMPSHDWSEL_MASK
Definition: hpm_pwm_regs.h:283
#define PWM_GCR_TIMERRESET_MASK
Definition: hpm_pwm_regs.h:390
#define PWM_CMPCFG_CMPMODE_MASK
Definition: hpm_pwm_regs.h:812
#define PWM_FRCMD_FRCMD_SET(x)
Definition: hpm_pwm_regs.h:157
#define PWM_GCR_FAULTI2EN_MASK
Definition: hpm_pwm_regs.h:218
#define PWM_PWMCFG_FAULTRECTIME_SET(x)
Definition: hpm_pwm_regs.h:577
#define PWM_SHCR_CNTSHDWSEL_MASK
Definition: hpm_pwm_regs.h:435
#define PWM_GCR_HWSHDWEDG_SET(x)
Definition: hpm_pwm_regs.h:275
#define PWM_GCR_FRCTIME_MASK
Definition: hpm_pwm_regs.h:404
#define PWM_GCR_DEBUGFAULT_MASK
Definition: hpm_pwm_regs.h:248
#define PWM_SHCR_CNTSHDWSEL_SET(x)
Definition: hpm_pwm_regs.h:437
#define PWM_GCR_FAULTRECEDG_MASK
Definition: hpm_pwm_regs.h:296
#define PWM_GCR_HWSHDWEDG_MASK
Definition: hpm_pwm_regs.h:273
#define PWM_GCR_XRLDSYNCEN_MASK
Definition: hpm_pwm_regs.h:380
#define PWM_GCR_FAULTI1EN_MASK
Definition: hpm_pwm_regs.h:228
#define PWM_CHCFG_OUTPOL_SET(x)
Definition: hpm_pwm_regs.h:199
#define PWM_SHLK_SHLK_MASK
Definition: hpm_pwm_regs.h:166
#define PWM_SHCR_CNTSHDWUPT_SET(x)
Definition: hpm_pwm_regs.h:452
#define PWM_CMP_XCMP_SET(x)
Definition: hpm_pwm_regs.h:111
#define PWM_GCR_FAULTE0EN_MASK
Definition: hpm_pwm_regs.h:326
#define PWM_CMP_CMPHLF_MASK
Definition: hpm_pwm_regs.h:130
#define PWM_GCR_FAULTCLR_MASK
Definition: hpm_pwm_regs.h:370
#define PWM_RLD_RLD_GET(x)
Definition: hpm_pwm_regs.h:101
#define PWM_STA_XSTA_SET(x)
Definition: hpm_pwm_regs.h:68
#define PWM_RLD_XRLD_GET(x)
Definition: hpm_pwm_regs.h:91
#define PWM_GCR_FAULTEXPOL_MASK
Definition: hpm_pwm_regs.h:338
#define PWM_PWMCFG_FRCSRCSEL_MASK
Definition: hpm_pwm_regs.h:587
#define PWM_PWMCFG_OEN_SET(x)
Definition: hpm_pwm_regs.h:534
#define PWM_CMPCFG_XCNTCMPEN_MASK
Definition: hpm_pwm_regs.h:785
#define PWM_CNT_XCNT_GET(x)
Definition: hpm_pwm_regs.h:484
#define PWM_GCR_CMPSHDWSEL_SET(x)
Definition: hpm_pwm_regs.h:285
#define PWM_CMP_XCMP_MASK
Definition: hpm_pwm_regs.h:109
#define PWM_GCR_FAULTRECEDG_SET(x)
Definition: hpm_pwm_regs.h:298
#define PWM_GCR_FAULTRECHWSEL_MASK
Definition: hpm_pwm_regs.h:306
#define PWM_PWMCFG_DEADAREA_SET(x)
Definition: hpm_pwm_regs.h:611
#define PWM_CMP_CMPJIT_MASK
Definition: hpm_pwm_regs.h:140
#define PWM_GCR_RLDSYNCEN_MASK
Definition: hpm_pwm_regs.h:348
#define PWM_GCR_TIMERRESET_SET(x)
Definition: hpm_pwm_regs.h:392
#define PWM_SHCR_CNTSHDWUPT_MASK
Definition: hpm_pwm_regs.h:450
#define PWM_GCR_FAULTRECHWSEL_SET(x)
Definition: hpm_pwm_regs.h:308
#define PWM_CMPCFG_CMPSHDWUPT_SET(x)
Definition: hpm_pwm_regs.h:802
#define PWM_GCR_FAULTE1EN_MASK
Definition: hpm_pwm_regs.h:316
#define PWM_GCR_SWFRC_MASK
Definition: hpm_pwm_regs.h:414
#define PWM_CHCFG_CMPSELBEG_SET(x)
Definition: hpm_pwm_regs.h:189
#define PWM_PWMCFG_PAIR_SET(x)
Definition: hpm_pwm_regs.h:600
#define PWM_CMP_XCMP_GET(x)
Definition: hpm_pwm_regs.h:112
#define PWM_RLD_XRLD_SET(x)
Definition: hpm_pwm_regs.h:90
#define PWM_PWMCFG_FAULTMODE_SET(x)
Definition: hpm_pwm_regs.h:562
#define PWM_GCR_FAULTI0EN_MASK
Definition: hpm_pwm_regs.h:238
#define PWM_GCR_FRCTIME_SET(x)
Definition: hpm_pwm_regs.h:406
#define PWM_SHCR_FRCSHDWSEL_SET(x)
Definition: hpm_pwm_regs.h:427
#define PWM_CMP_CMP_MASK
Definition: hpm_pwm_regs.h:120
#define PWM_CMP_CMPJIT_SET(x)
Definition: hpm_pwm_regs.h:142
#define PWM_CMP_CMP_SET(x)
Definition: hpm_pwm_regs.h:122
#define PWM_RLD_RLD_MASK
Definition: hpm_pwm_regs.h:98
#define PWM_PWMCFG_OEN_MASK
Definition: hpm_pwm_regs.h:532
#define PWM_CMP_CMP_GET(x)
Definition: hpm_pwm_regs.h:123
#define PWM_PWMCFG_FRCSHDWUPT_SET(x)
Definition: hpm_pwm_regs.h:549
#define PWM_PWMCFG_FRCSRCSEL_SET(x)
Definition: hpm_pwm_regs.h:589
#define PWM_RLD_RLD_SET(x)
Definition: hpm_pwm_regs.h:100
#define PWM_CMP_CMPHLF_SET(x)
Definition: hpm_pwm_regs.h:132
#define PWM_CHCFG_CMPSELEND_SET(x)
Definition: hpm_pwm_regs.h:179
#define PWM_GCR_FAULTEXPOL_SET(x)
Definition: hpm_pwm_regs.h:340
#define PWM_PWMCFG_HR_UPDATE_MODE_SET(x)
Definition: hpm_pwm_regs.h:632
#define PWM_RLD_HRPWM_RLD_GET(x)
Definition: hpm_pwm_regs.h:128
#define PWM_ANASTS_CALON_GET(x)
Definition: hpm_pwm_regs.h:937
#define PWM_GCR_HR_PWM_EN_MASK
Definition: hpm_pwm_regs.h:447
#define PWM_CMP_HRPWM_CMP_HR_SET(x)
Definition: hpm_pwm_regs.h:199
#define PWM_HRPWM_CFG_CAL_SW_EN_MASK
Definition: hpm_pwm_regs.h:945
#define PWM_CMP_HRPWM_CMP_HR_MASK
Definition: hpm_pwm_regs.h:197
#define PWM_SHCR_CNT_UPDATE_EDGE_SET(x)
Definition: hpm_pwm_regs.h:504
#define PWM_RLD_HRPWM_RLD_HR_GET(x)
Definition: hpm_pwm_regs.h:138
#define PWM_CMP_HRPWM_CMP_SET(x)
Definition: hpm_pwm_regs.h:189
#define PWM_RLD_HRPWM_RLD_SET(x)
Definition: hpm_pwm_regs.h:127
#define PWM_SHCR_FORCE_UPDATE_EDGE_SET(x)
Definition: hpm_pwm_regs.h:514
#define PWM_RLD_HRPWM_RLD_HR_SET(x)
Definition: hpm_pwm_regs.h:137
#define PWM_CMP_HRPWM_CMP_MASK
Definition: hpm_pwm_regs.h:187
#define PWM_ANA_CFG0_CAL_SW_TRIG_H_MASK
Definition: hpm_pwm_regs.h:967
#define PWM_STA_HRPWM_STA_SET(x)
Definition: hpm_pwm_regs.h:96
#define PWM_GCR_HR_PWM_EN_SET(x)
Definition: hpm_pwm_regs.h:449
#define PWM_HRPWM_CFG_CAL_START_SET(x)
Definition: hpm_pwm_regs.h:959
#define PWM_SHCR_CNT_UPDATE_RELOAD_MASK
Definition: hpm_pwm_regs.h:492
#define PWM_SHCR_CNT_UPDATE_RELOAD_SET(x)
Definition: hpm_pwm_regs.h:494
#define PWM_HRPWM_CFG_CAL_START_MASK
Definition: hpm_pwm_regs.h:957
#define PWM_SHCR_CNT_UPDATE_EDGE_MASK
Definition: hpm_pwm_regs.h:502
#define PWM_SHCR_FORCE_UPDATE_EDGE_MASK
Definition: hpm_pwm_regs.h:512
uint32_t hpm_stat_t
Definition: hpm_common.h:135
static void pwm_deinit(PWM_Type *pwm_x)
pwm deinitialize function
Definition: hpm_pwm_drv.h:206
static void pwm_config_pwm(PWM_Type *pwm_x, uint8_t index, pwm_config_t *config, bool enable_pair_mode)
config PWM channel configure registe
Definition: hpm_pwm_drv.h:914
pwm_fault_mode
configure the state of channel 0-7 outputs when the forced output is in effect
Definition: hpm_pwm_drv.h:69
static void pwm_fault_recovery_update_cmp_value(PWM_Type *pwm_x, uint8_t index, uint32_t cmp)
update pwm cmp value in order to recovery pwm fault The configured values need to be staggered to coi...
Definition: hpm_pwm_drv.h:663
enum pwm_output_type pwm_output_type_t
pwm output type
static void pwm_set_start_count(PWM_Type *pwm_x, uint8_t ex_start, uint32_t start)
set counter start value and extended start value
Definition: hpm_pwm_drv.h:274
void pwm_get_default_cmp_config(PWM_Type *pwm_x, pwm_cmp_config_t *config)
get default cmp config
Definition: hpm_pwm_drv.c:40
static void pwm_disable_irq(PWM_Type *pwm_x, uint32_t mask)
disable pwm irq
Definition: hpm_pwm_drv.h:396
static void pwm_enable_output(PWM_Type *pwm_x, uint8_t index)
enable pwm output
Definition: hpm_pwm_drv.h:841
pwm_force_cmd_timing
select when the FRCMD shadow register will be loaded to its work register
Definition: hpm_pwm_drv.h:112
struct pwm_config pwm_config_t
pwm config data
static uint32_t pwm_get_status(PWM_Type *pwm_x)
get pwm status register
Definition: hpm_pwm_drv.h:370
struct pwm_output_channel pwm_output_channel_t
pwm output channel config
static void pwm_disable_dma_request(PWM_Type *pwm_x, uint32_t mask)
disable pwm dma request
Definition: hpm_pwm_drv.h:453
static void pwm_enable_dma_request(PWM_Type *pwm_x, uint32_t mask)
enable pwm dma request
Definition: hpm_pwm_drv.h:470
static uint32_t pwm_get_reload_val(PWM_Type *pwm_x)
getting the counter reload value for a pwm timer
Definition: hpm_pwm_drv.h:935
struct pwm_pair_config pwm_pair_config_t
pair pwm config
pwm_force_source
Select sources for force output.
Definition: hpm_pwm_drv.h:104
enum pwm_counter_type pwm_counter_type_t
pwm trigger mode
struct pwm_cmp_config pwm_cmp_config_t
pwm compare config
static uint32_t pwm_get_ex_counter_val(PWM_Type *pwm_x)
getting the value of the pwm extended counter
Definition: hpm_pwm_drv.h:968
static void pwm_enable_sw_force(PWM_Type *pwm_x)
enable software force
Definition: hpm_pwm_drv.h:799
enum pwm_force_source pwm_force_source_t
Select sources for force output.
void pwm_get_captured_count(PWM_Type *pwm_x, uint32_t *buf, pwm_counter_type_t counter, uint8_t start_index, uint8_t num)
pwm get captured count
Definition: hpm_pwm_drv.c:24
static void pwm_set_force_output(PWM_Type *pwm_x, uint32_t output_mask)
config pwm force output level per output channel
Definition: hpm_pwm_drv.h:852
static uint32_t pwm_get_ex_reload_val(PWM_Type *pwm_x)
getting the extended counter reload value for a pwm timer
Definition: hpm_pwm_drv.h:946
enum pwm_force_cmd_timing pwm_force_cmd_timing_t
select when the FRCMD shadow register will be loaded to its work register
static void pwm_set_capture_irq_falling_edge(PWM_Type *pwm_x, uint32_t mask)
set capture irq on falling edge
Definition: hpm_pwm_drv.h:424
static void pwm_disable_output(PWM_Type *pwm_x, uint8_t index)
disable pwm output
Definition: hpm_pwm_drv.h:830
enum pwm_fault_mode pwm_fault_mode_t
configure the state of channel 0-7 outputs when the forced output is in effect
hpm_stat_t pwm_setup_waveform_in_pair(PWM_Type *pwm_x, uint8_t pwm_index, pwm_pair_config_t *pwm_pair_config, uint8_t cmp_start_index, pwm_cmp_config_t *cmp, uint8_t cmp_num)
setup pwm waveform in pair
Definition: hpm_pwm_drv.c:82
static void pwm_set_load_counter_shadow_register_trigger(PWM_Type *pwm_x, pwm_shadow_register_update_trigger_t trigger, uint8_t target_cmp_index)
set shadow register control register
Definition: hpm_pwm_drv.h:500
static void pwm_enable_reload_at_synci(PWM_Type *pwm_x)
enable pwm reload value by synci
Definition: hpm_pwm_drv.h:819
static void pwm_shadow_register_lock(PWM_Type *pwm_x)
lock all shawdow register
Definition: hpm_pwm_drv.h:251
hpm_stat_t pwm_update_raw_cmp_edge_aligned(PWM_Type *pwm_x, uint8_t cmp_index, uint32_t target_cmp)
update raw compare value for edge aligned waveform
Definition: hpm_pwm_drv.c:170
enum pwm_fault_source pwm_fault_source_t
fault input signal
static void pwm_load_cmp_shadow_on_capture(PWM_Type *pwm_x, uint8_t index, bool is_falling_edge)
Configure input capture cmp to trigger shadow register updates.
Definition: hpm_pwm_drv.h:524
void pwm_get_default_pwm_pair_config(PWM_Type *pwm_x, pwm_pair_config_t *config)
get default pwm pair config
Definition: hpm_pwm_drv.c:76
static void pwm_cmp_disable_half_clock(PWM_Type *pwm_x, uint8_t index)
disable pwn cmp half clock
Definition: hpm_pwm_drv.h:585
enum pwm_fault_recovery_trigger pwm_fault_recovery_trigger_t
select when to recover PWM output after fault
static void pwm_disable_sw_force(PWM_Type *pwm_x)
disable software force , force will take effect
Definition: hpm_pwm_drv.h:809
static void pwm_set_capture_irq_rising_edge(PWM_Type *pwm_x, uint32_t mask)
set capture irq on rising edge
Definition: hpm_pwm_drv.h:436
static void pwm_config_output_channel(PWM_Type *pwm_x, uint8_t index, pwm_output_channel_t *config)
config pwm output channel
Definition: hpm_pwm_drv.h:737
static void pwm_config_force_cmd_timing(PWM_Type *pwm_x, pwm_force_cmd_timing_t timing)
config the force effective time
Definition: hpm_pwm_drv.h:876
static void pwm_clear_fault(PWM_Type *pwm_x)
clear pwm fault status
Definition: hpm_pwm_drv.h:768
hpm_stat_t pwm_load_cmp_shadow_on_match(PWM_Type *pwm_x, uint8_t index, pwm_cmp_config_t *config)
pwm load cmp shadow on match
Definition: hpm_pwm_drv.c:11
static void pwm_enable_irq(PWM_Type *pwm_x, uint32_t mask)
enable pwm irq
Definition: hpm_pwm_drv.h:412
static void pwm_cmp_force_value(PWM_Type *pwm_x, uint8_t index, uint32_t cmp)
Forced update of pwm cmp register value, cmp content guaranteed accurate by user.
Definition: hpm_pwm_drv.h:693
static void pwm_shadow_register_unlock(PWM_Type *pwm_x)
unlock all shadow register
Definition: hpm_pwm_drv.h:262
static void pwm_disable_pwm_sw_force_output(PWM_Type *pwm_x, uint8_t index)
disable pwm sw force output
Definition: hpm_pwm_drv.h:899
static void pwm_set_force_cmd_shadow_register_hwevent(PWM_Type *pwm_x, uint8_t target_cmp_index)
set target cmp as hardware event to trigger force cmd output
Definition: hpm_pwm_drv.h:481
hpm_stat_t pwm_setup_waveform(PWM_Type *pwm_x, uint8_t pwm_index, pwm_config_t *pwm_config, uint8_t cmp_start_index, pwm_cmp_config_t *cmp, uint8_t cmp_num)
setup waveform
Definition: hpm_pwm_drv.c:118
static void pwm_cmp_update_cmp_value(PWM_Type *pwm_x, uint8_t index, uint32_t cmp, uint16_t ex_cmp)
update pwm cmp value
Definition: hpm_pwm_drv.h:621
static uint32_t pwm_cmp_get_excmp_value(PWM_Type *pwm_x, uint8_t index)
get pwm ex_cmp value
Definition: hpm_pwm_drv.h:649
void pwm_get_default_pwm_config(PWM_Type *pwm_x, pwm_config_t *config)
get default pwm config
Definition: hpm_pwm_drv.c:64
static void pwm_config_force_polarity(PWM_Type *pwm_x, bool polarity)
config pwm force polarity
Definition: hpm_pwm_drv.h:865
static uint32_t pwm_cmp_get_cmp_value(PWM_Type *pwm_x, uint8_t index)
get pwm cmp value
Definition: hpm_pwm_drv.h:636
hpm_stat_t pwm_update_raw_cmp_central_aligned(PWM_Type *pwm_x, uint8_t cmp1_index, uint8_t cmp2_index, uint32_t target_cmp1, uint32_t target_cmp2)
update raw compare value for central aligned waveform
Definition: hpm_pwm_drv.c:177
static void pwm_config_fault_source(PWM_Type *pwm_x, pwm_fault_source_config_t *config)
config pwm fault source
Definition: hpm_pwm_drv.h:750
pwm_output_type
pwm output type
Definition: hpm_pwm_drv.h:123
pwm_cmp_mode
pwm cmp mode
Definition: hpm_pwm_drv.h:49
static void pwm_enable_pwm_sw_force_output(PWM_Type *pwm_x, uint8_t index)
enable pwm sw force output
Definition: hpm_pwm_drv.h:887
pwm_counter_type
pwm trigger mode
Definition: hpm_pwm_drv.h:40
static void pwm_set_reload(PWM_Type *pwm_x, uint8_t ex_reload, uint32_t reload)
set the reload value
Definition: hpm_pwm_drv.h:305
enum pwm_cmp_mode pwm_cmp_mode_t
pwm cmp mode
static uint32_t pwm_get_counter_val(PWM_Type *pwm_x)
getting the value of the pwm counter
Definition: hpm_pwm_drv.h:957
hpm_stat_t pwm_update_duty_edge_aligned(PWM_Type *pwm_x, uint8_t cmp_index, float duty)
update duty value for edge aligned waveform
Definition: hpm_pwm_drv.c:143
static uint32_t pwm_get_irq_en(PWM_Type *pwm_x)
get pwm irq en status
Definition: hpm_pwm_drv.h:380
static void pwm_start_counter(PWM_Type *pwm_x)
start pwm timer counter
Definition: hpm_pwm_drv.h:789
enum pwm_register_update pwm_shadow_register_update_trigger_t
update time of the shadow register
struct pwm_fault_source_config pwm_fault_source_config_t
pwm fault source config
pwm_register_update
update time of the shadow register
Definition: hpm_pwm_drv.h:58
static void pwm_cmp_update_jitter_value(PWM_Type *pwm_x, uint8_t index, uint8_t jitter)
update pwm cmp jitter counter compare value
Definition: hpm_pwm_drv.h:608
static void pwm_config_cmp(PWM_Type *pwm_x, uint8_t index, pwm_cmp_config_t *config)
config pwm cmp
Definition: hpm_pwm_drv.h:705
static void pwm_issue_shadow_register_lock_event(PWM_Type *pwm_x)
issue all shawdow register
Definition: hpm_pwm_drv.h:234
hpm_stat_t pwm_update_duty_central_aligned(PWM_Type *pwm_x, uint8_t cmp1_index, uint8_t cmp2_index, float duty)
update duty value for central aligned waveform
Definition: hpm_pwm_drv.c:158
static void pwm_stop_counter(PWM_Type *pwm_x)
stop the pwm timer counter
Definition: hpm_pwm_drv.h:779
void pwm_get_default_output_channel_config(PWM_Type *pwm_x, pwm_output_channel_t *config)
get default output channel config
Definition: hpm_pwm_drv.c:56
pwm_fault_recovery_trigger
select when to recover PWM output after fault
Definition: hpm_pwm_drv.h:79
#define PWM_UNLOCK_KEY
Definition: hpm_pwm_drv.h:21
static void pwm_cmp_enable_half_clock(PWM_Type *pwm_x, uint8_t index)
enable pwm cmp half clock
Definition: hpm_pwm_drv.h:596
pwm_fault_source
fault input signal
Definition: hpm_pwm_drv.h:90
static void pwm_clear_status(PWM_Type *pwm_x, uint32_t mask)
clear pwm status register
Definition: hpm_pwm_drv.h:345
@ pwm_fault_mode_force_output_1
Definition: hpm_pwm_drv.h:71
@ pwm_fault_mode_force_output_highz
Definition: hpm_pwm_drv.h:72
@ pwm_fault_mode_force_output_0
Definition: hpm_pwm_drv.h:70
@ pwm_force_at_synci
Definition: hpm_pwm_drv.h:115
@ pwm_force_none
Definition: hpm_pwm_drv.h:116
@ pwm_force_immediately
Definition: hpm_pwm_drv.h:113
@ pwm_force_at_reload
Definition: hpm_pwm_drv.h:114
@ pwm_force_source_software
Definition: hpm_pwm_drv.h:106
@ pwm_force_source_force_input
Definition: hpm_pwm_drv.h:105
@ pwm_output_0
Definition: hpm_pwm_drv.h:124
@ pwm_output_1
Definition: hpm_pwm_drv.h:125
@ pwm_output_high_z
Definition: hpm_pwm_drv.h:126
@ pwm_output_no_force
Definition: hpm_pwm_drv.h:127
@ pwm_cmp_mode_output_compare
Definition: hpm_pwm_drv.h:50
@ pwm_cmp_mode_input_capture
Definition: hpm_pwm_drv.h:51
@ pwm_counter_type_capture_falling_edge
Definition: hpm_pwm_drv.h:42
@ pwm_counter_type_capture_rising_edge
Definition: hpm_pwm_drv.h:41
@ pwm_shadow_register_update_on_sh_synci
Definition: hpm_pwm_drv.h:62
@ pwm_shadow_register_update_on_shlk
Definition: hpm_pwm_drv.h:59
@ pwm_shadow_register_update_on_modify
Definition: hpm_pwm_drv.h:60
@ pwm_shadow_register_update_on_hw_event
Definition: hpm_pwm_drv.h:61
@ pwm_fault_recovery_on_hw_event
Definition: hpm_pwm_drv.h:82
@ pwm_fault_recovery_on_fault_clear
Definition: hpm_pwm_drv.h:83
@ pwm_fault_recovery_immediately
Definition: hpm_pwm_drv.h:80
@ pwm_fault_recovery_on_reload
Definition: hpm_pwm_drv.h:81
@ pwm_fault_source_internal_0
Definition: hpm_pwm_drv.h:91
@ pwm_fault_source_internal_2
Definition: hpm_pwm_drv.h:93
@ pwm_fault_source_internal_1
Definition: hpm_pwm_drv.h:92
@ pwm_fault_source_internal_3
Definition: hpm_pwm_drv.h:94
@ pwm_fault_source_external_1
Definition: hpm_pwm_drv.h:96
@ pwm_fault_source_external_0
Definition: hpm_pwm_drv.h:95
@ pwm_fault_source_debug
Definition: hpm_pwm_drv.h:97
Definition: hpm_pwm_regs.h:12
__RW uint32_t ANA_CFG0
Definition: hpm_pwm_regs.h:51
__R uint32_t ANASTS[8]
Definition: hpm_pwm_regs.h:49
__RW uint32_t STA
Definition: hpm_pwm_regs.h:15
__RW uint32_t CMP_HRPWM[16]
Definition: hpm_pwm_regs.h:24
__RW uint32_t UNLK
Definition: hpm_pwm_regs.h:13
__RW uint32_t CHCFG[24]
Definition: hpm_pwm_regs.h:26
__RW uint32_t RLD
Definition: hpm_pwm_regs.h:18
__RW uint32_t DMAEN
Definition: hpm_pwm_regs.h:43
__RW uint32_t SHCR
Definition: hpm_pwm_regs.h:29
__RW uint32_t SHLK
Definition: hpm_pwm_regs.h:25
__RW uint32_t STA_HRPWM
Definition: hpm_pwm_regs.h:16
__RW uint32_t FRCMD
Definition: hpm_pwm_regs.h:24
__RW uint32_t GCR
Definition: hpm_pwm_regs.h:28
__RW uint32_t CMPCFG[24]
Definition: hpm_pwm_regs.h:44
__RW uint32_t RLD_HRPWM
Definition: hpm_pwm_regs.h:20
__RW uint32_t CMP[24]
Definition: hpm_pwm_regs.h:21
__R uint32_t CNT
Definition: hpm_pwm_regs.h:33
__RW uint32_t PWMCFG[8]
Definition: hpm_pwm_regs.h:39
__RW uint32_t HRPWM_CFG
Definition: hpm_pwm_regs.h:50
__RW uint32_t IRQEN
Definition: hpm_pwm_regs.h:41
__RW uint32_t CAP_EN_NEG
Definition: hpm_pwm_regs.h:42
__W uint32_t SR
Definition: hpm_pwm_regs.h:40
pwm compare config
Definition: hpm_pwm_drv.h:134
uint8_t half_clock_cmp
Definition: hpm_pwm_drv.h:143
bool enable_ex_cmp
Definition: hpm_pwm_drv.h:136
uint8_t mode
Definition: hpm_pwm_drv.h:140
uint32_t cmp
Definition: hpm_pwm_drv.h:135
uint8_t jitter_cmp
Definition: hpm_pwm_drv.h:144
uint8_t update_trigger
Definition: hpm_pwm_drv.h:141
uint8_t ex_cmp
Definition: hpm_pwm_drv.h:142
pwm config data
Definition: hpm_pwm_drv.h:175
uint8_t fault_recovery_trigger
Definition: hpm_pwm_drv.h:183
uint8_t fault_mode
Definition: hpm_pwm_drv.h:182
uint8_t force_cmd_shadow_update_trigger
Definition: hpm_pwm_drv.h:181
bool invert_output
Definition: hpm_pwm_drv.h:180
uint32_t dead_zone_in_half_cycle
Definition: hpm_pwm_drv.h:185
uint8_t force_source
Definition: hpm_pwm_drv.h:184
bool enable_output
Definition: hpm_pwm_drv.h:179
pwm fault source config
Definition: hpm_pwm_drv.h:163
bool fault_recover_at_rising_edge
Definition: hpm_pwm_drv.h:165
bool fault_external_1_active_low
Definition: hpm_pwm_drv.h:167
uint8_t fault_output_recovery_trigger
Definition: hpm_pwm_drv.h:168
uint32_t source_mask
Definition: hpm_pwm_drv.h:164
bool fault_external_0_active_low
Definition: hpm_pwm_drv.h:166
pwm output channel config
Definition: hpm_pwm_drv.h:154
bool invert_output
Definition: hpm_pwm_drv.h:157
uint8_t cmp_end_index
Definition: hpm_pwm_drv.h:156
uint8_t cmp_start_index
Definition: hpm_pwm_drv.h:155
pair pwm config
Definition: hpm_pwm_drv.h:192
pwm_config_t pwm[2]
Definition: hpm_pwm_drv.h:193