ls1c_pwm.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. #ifndef __OPENLOONGSON_PWM_H
  2. #define __OPENLOONGSON_PWM_H
  3. // pwm引脚定义
  4. #define LS1C_PWM0_GPIO06 (6) // gpio06用作pwm0
  5. #define LS1C_PWM0_GPIO04 (4) // gpio04复用为pwm0
  6. #define LS1C_PWM1_GPIO92 (92) // gpio92用作pwm1
  7. #define LS1C_PWM1_GPIO05 (5) // gpio05复用为pwm1
  8. #define LS1C_PWM2_GPIO52 (52) // gpio52复用为pwm2
  9. #define LS1C_PWM2_GPIO46 (46) // gpio46复用为pwm2
  10. #define LS1C_PWM3_GPIO47 (47) // gpio47复用为pwm3
  11. #define LS1C_PWM3_GPIO53 (53) // gpio53复用为pwm3
  12. // ...还有一些gpio可以复用为gpio的,有需要可以自己添加
  13. // pwm控制寄存器的每个bit
  14. #define LS1C_PWM_INT_LRC_EN (11) // 低脉冲计数器中断使能
  15. #define LS1C_PWM_INT_HRC_EN (10) // 高脉冲计数器中断使能
  16. #define LS1C_PWM_CNTR_RST (7) // 使能CNTR计数器清零
  17. #define LS1C_PWM_INT_SR (6) // 中断状态位
  18. #define LS1C_PWM_INTEN (5) // 中断使能位
  19. #define LS1C_PWM_SINGLE (4) // 单脉冲控制位
  20. #define LS1C_PWM_OE (3) // 脉冲输出使能
  21. #define LS1C_PWM_CNT_EN (0) // 主计数器使能
  22. // 硬件pwm工作模式
  23. enum
  24. {
  25. // 正常模式--连续输出pwm波形
  26. PWM_MODE_NORMAL = 0,
  27. // 单脉冲模式,每次调用只发送一个脉冲,调用间隔必须大于pwm周期
  28. PWM_MODE_PULSE
  29. };
  30. // 硬件pwm信息
  31. typedef struct
  32. {
  33. unsigned int gpio; // PWMn所在的gpio
  34. unsigned int mode; // 工作模式(单脉冲、连续脉冲)
  35. float duty; // pwm的占空比
  36. unsigned long period_ns; // pwm周期(单位ns)
  37. }pwm_info_t;
  38. /*
  39. * 初始化PWMn
  40. * @pwm_info PWMn的详细信息
  41. */
  42. void pwm_init(pwm_info_t *pwm_info);
  43. /*
  44. * 禁止pwm
  45. * @pwm_info PWMn的详细信息
  46. */
  47. void pwm_disable(pwm_info_t *pwm_info);
  48. /*
  49. * 使能PWM
  50. * @pwm_info PWMn的详细信息
  51. */
  52. void pwm_enable(pwm_info_t *pwm_info);
  53. #endif