pwm.h 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #ifndef _PWM_H__
  2. #define _PWM_H__
  3. #include "bsp/bsp.h"
  4. #include "os/os_type.h"
  5. #include "bsp/dma.h"
  6. #define TIMxCCER_MASK_CH012 ((uint16_t) (TIMER_CHCTL2_CH0EN|TIMER_CHCTL2_CH0NEN|\
  7. TIMER_CHCTL2_CH1EN|TIMER_CHCTL2_CH1NEN|\
  8. TIMER_CHCTL2_CH2EN|TIMER_CHCTL2_CH2NEN))
  9. #define pwm_enable_channel() {TIMER_CHCTL2(pwm_timer) |= TIMxCCER_MASK_CH012;}
  10. #define pwm_disable_channel() {TIMER_CHCTL2(pwm_timer) &= ~TIMxCCER_MASK_CH012;}
  11. #define ch0_update_duty(duty) TIMER_CH0CV(pwm_timer) = (uint32_t)duty
  12. #define ch1_update_duty(duty) TIMER_CH1CV(pwm_timer) = (uint32_t)duty
  13. #define ch2_update_duty(duty) TIMER_CH2CV(pwm_timer) = (uint32_t)duty
  14. #define update_adc_trigger(time) TIMER_CH3CV(pwm_timer) = (uint32_t)time
  15. #define pwm_update_duty(dutyA, dutyB, dutyC) \
  16. do {\
  17. ch0_update_duty(dutyA);\
  18. ch1_update_duty(dutyB);\
  19. ch2_update_duty(dutyC);\
  20. }while(0)
  21. #ifdef ENABLE_AUX_TIMER
  22. #define pwm_update_2smaples(samp1, samp2) \
  23. do { \
  24. TIMER_CH3CV(pwm_timer) = (uint32_t)samp1; \
  25. TIMER_CH0CV(adc_timer) = (uint32_t)samp2; \
  26. }while(0)
  27. #else
  28. #define pwm_update_2smaples(samp1, samp2) \
  29. do { \
  30. TIMER_CH3CV(pwm_timer) = (uint32_t)samp1; \
  31. }while(0)
  32. #endif
  33. #define update_sample_time(samp1, samp2) do{adc_timer_dma_buf[2] = samp1; adc_timer_dma_buf[0] = samp2;}while(0)
  34. #define update_distort_chxcv(duty) do {pwm_timer_dma_buf[1] = duty;}while(0)
  35. #define enable_pwm_timer_dma() TIMER_DMAINTEN(pwm_timer) |= (uint32_t) TIMER_DMA_CH3D
  36. #define disable_pwm_timer_dma() TIMER_DMAINTEN(pwm_timer) &= ~((uint32_t) TIMER_DMA_CH3D)
  37. #define enable_sample_timer_dma() TIMER_DMAINTEN(adc_timer) |= (uint32_t) TIMER_DMA_CH0D
  38. #define disable_sample_timer_dma() TIMER_DMAINTEN(adc_timer) &= ~((uint32_t) TIMER_DMA_CH0D)
  39. extern u16 timer_update_buffer[6];
  40. #define pwm_update_duty_dma(a, b, c, na, nb, nc) \
  41. do { \
  42. timer_update_buffer[0] = a; \
  43. timer_update_buffer[1] = b; \
  44. timer_update_buffer[2] = c; \
  45. timer_update_buffer[3] = na; \
  46. timer_update_buffer[4] = nb; \
  47. timer_update_buffer[5] = nc; \
  48. }while(0)
  49. #define pwm_clear_updata() \
  50. timer_flag_clear(pwm_timer, TIMER_FLAG_UP);
  51. #define pwm_wait_and_clear_updata() \
  52. do { \
  53. while ( timer_flag_get(pwm_timer, TIMER_FLAG_UP) == RESET ); \
  54. timer_flag_clear(pwm_timer, TIMER_FLAG_UP); \
  55. }while(0)
  56. void pwm_3phase_init(void);
  57. void pwm_start(void);
  58. void pwm_stop(void);
  59. void pwm_turn_on_low_side(void);
  60. void pwm_enable_output(bool enable);
  61. #endif /*_PWM_H__*/