pwm.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. #ifndef _PWM_H__
  2. #define _PWM_H__
  3. #include "bsp/bsp.h"
  4. #include "os/os_types.h"
  5. #define TIMxCCER_MASK_CH012 ((uint16_t) (TIMER_CHCTL2_CH0EN|TIMER_CHCTL2_CH0NEN|\
  6. TIMER_CHCTL2_CH1EN|TIMER_CHCTL2_CH1NEN|\
  7. TIMER_CHCTL2_CH2EN|TIMER_CHCTL2_CH2NEN))
  8. #define pwm_enable_channel() {TIMER_CHCTL2(MOS_PWM_TIMER) |= TIMxCCER_MASK_CH012;}
  9. #define pwm_disable_channel() {TIMER_CHCTL2(MOS_PWM_TIMER) &= ~TIMxCCER_MASK_CH012;}
  10. #define pwm_channel_is_enabled() ((TIMER_CHCTL2(MOS_PWM_TIMER)&TIMxCCER_MASK_CH012) != 0)
  11. #define ch0_update_duty(duty) TIMER_CH0CV(MOS_PWM_TIMER) = (uint32_t)duty
  12. #define ch1_update_duty(duty) TIMER_CH1CV(MOS_PWM_TIMER) = (uint32_t)duty
  13. #define ch2_update_duty(duty) TIMER_CH2CV(MOS_PWM_TIMER) = (uint32_t)duty
  14. #define update_adc_trigger(time) TIMER_CH3CV(MOS_PWM_TIMER) = (uint32_t)time
  15. #ifdef CONFIG_PWM_UV_SWAP
  16. #define pwm_update_duty(dutyA, dutyB, dutyC) \
  17. do {\
  18. ch0_update_duty(dutyC);\
  19. ch1_update_duty(dutyB);\
  20. ch2_update_duty(dutyA);\
  21. }while(0)
  22. #else
  23. #define pwm_update_duty(dutyA, dutyB, dutyC) \
  24. do {\
  25. ch0_update_duty(dutyA);\
  26. ch1_update_duty(dutyB);\
  27. ch2_update_duty(dutyC);\
  28. }while(0)
  29. #endif
  30. #define pwm_update_2smaples(samp1, sampl2) \
  31. do { \
  32. TIMER_CH3CV(MOS_PWM_TIMER) = (uint32_t)samp1; \
  33. }while(0)
  34. #define enable_pwm_timer_dma() TIMER_DMAINTEN(MOS_PWM_TIMER) |= (uint32_t) TIMER_DMA_CH3D
  35. #define disable_pwm_timer_dma() TIMER_DMAINTEN(MOS_PWM_TIMER) &= ~((uint32_t) TIMER_DMA_CH3D)
  36. #define pwm_clear_updata() \
  37. timer_flag_clear(MOS_PWM_TIMER, TIMER_FLAG_UP);
  38. #define pwm_wait_and_clear_updata() \
  39. do { \
  40. while ( timer_flag_get(MOS_PWM_TIMER, TIMER_FLAG_UP) == RESET ); \
  41. timer_flag_clear(MOS_PWM_TIMER, TIMER_FLAG_UP); \
  42. }while(0)
  43. #define pwm_change_t3_mode(m) \
  44. do { \
  45. if (((TIMER_CHCTL1(MOS_PWM_TIMER) >> 12) & 0x7) != m) { \
  46. TIMER_CHCTL1(MOS_PWM_TIMER) &= (~(uint32_t)TIMER_CHCTL1_CH3COMCTL); \
  47. TIMER_CHCTL1(MOS_PWM_TIMER) |= (uint32_t)((uint32_t)(m) << 8U); \
  48. } \
  49. }while(0)
  50. #define pwm_brake_enable(n) \
  51. do { \
  52. if (n) { \
  53. nvic_irq_enable(PWM_BRK_IRQ, EBREAK_IRQ_PRIORITY, 0); \
  54. }else { \
  55. nvic_irq_disable(PWM_BRK_IRQ); \
  56. } \
  57. }while(0)
  58. #define pwm_up_enable(n) \
  59. do { \
  60. if (n) { \
  61. timer_flag_clear(MOS_PWM_TIMER, TIMER_FLAG_UP); \
  62. timer_interrupt_enable(MOS_PWM_TIMER, TIMER_INT_UP); \
  63. }else { \
  64. timer_flag_clear(MOS_PWM_TIMER, TIMER_FLAG_UP); \
  65. timer_interrupt_disable(MOS_PWM_TIMER, TIMER_INT_UP); \
  66. } \
  67. }while(0)
  68. #define get_deadtime() (TIMER_CCHP(MOS_PWM_TIMER) & 0xFF)
  69. #ifdef CONFIG_SENSORLESS_TOW_SAMPLES
  70. #define PWM_Direction_Down() ((TIMER_CTL0(MOS_PWM_TIMER) & TIMER_CTL0_DIR) == 0)
  71. #else
  72. #define PWM_Direction_Down() true
  73. #endif
  74. void pwm_3phase_init(void);
  75. void pwm_3phase_test(void);
  76. void pwm_start(void);
  77. void pwm_stop(void);
  78. void pwm_turn_on_low_side(void);
  79. void pwm_enable_output(bool enable);
  80. void pwm_update_sample(u32 samp1, u32 samp2, u8 sector);
  81. #endif /*_PWM_H__*/