luat_pwm_air105.c 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #include "luat_base.h"
  2. #include "luat_pwm.h"
  3. #include "app_interface.h"
  4. #define LUAT_LOG_TAG "luat.pwm"
  5. #include "luat_log.h"
  6. int luat_pwm_setup(luat_pwm_conf_t* conf) {
  7. int channel = conf->channel;
  8. size_t period = conf->period;
  9. size_t pulse = conf->pulse;
  10. size_t pnum = conf->pnum;
  11. size_t precision = conf->precision;
  12. if (precision != 100 && precision != 1000) {
  13. LLOGW("only 100 or 1000 PWM precision supported");
  14. return -1;
  15. }
  16. switch (channel)
  17. {
  18. case 0:
  19. GPIO_Iomux(GPIOB_00, 2);
  20. break;
  21. case 1:
  22. GPIO_Iomux(GPIOB_01, 2);
  23. break;
  24. case 2:
  25. GPIO_Iomux(GPIOA_02, 2);
  26. break;
  27. case 3:
  28. GPIO_Iomux(GPIOA_03, 2);
  29. break;
  30. case 4:
  31. GPIO_Iomux(GPIOC_06, 2);
  32. break;
  33. case 5:
  34. GPIO_Iomux(GPIOC_07, 2);
  35. break;
  36. case 6:
  37. GPIO_Iomux(GPIOC_08, 2);
  38. break;
  39. case 7:
  40. GPIO_Iomux(GPIOC_09, 2);
  41. break;
  42. default:
  43. break;
  44. }
  45. // 主频48M
  46. //uint32_t hz = 48000000 / period / precision;
  47. //HWTimer_StartPWM(channel, hz * pulse, hz * (precision - pulse), pnum);
  48. HWTimer_SetPWM(channel, period, pulse * (1000 / precision), pnum);
  49. return 0;
  50. }
  51. // @return -1 打开失败。 0 打开成功
  52. int luat_pwm_open(int channel, size_t period, size_t pulse,int pnum) {
  53. switch (channel)
  54. {
  55. case 0:
  56. GPIO_Iomux(GPIOB_00, 2);
  57. break;
  58. case 1:
  59. GPIO_Iomux(GPIOB_01, 2);
  60. break;
  61. case 2:
  62. GPIO_Iomux(GPIOA_02, 2);
  63. break;
  64. case 3:
  65. GPIO_Iomux(GPIOA_03, 2);
  66. break;
  67. case 4:
  68. GPIO_Iomux(GPIOC_06, 2);
  69. break;
  70. case 5:
  71. GPIO_Iomux(GPIOC_07, 2);
  72. break;
  73. case 6:
  74. GPIO_Iomux(GPIOC_08, 2);
  75. break;
  76. case 7:
  77. GPIO_Iomux(GPIOC_09, 2);
  78. break;
  79. default:
  80. break;
  81. }
  82. HWTimer_SetPWM(channel, period, pulse * 10, pnum);
  83. return 0;
  84. }
  85. int luat_pwm_capture(int channel,int freq) {
  86. return 0;
  87. }
  88. // @return -1 关闭失败。 0 关闭成功
  89. int luat_pwm_close(int channel) {
  90. HWTimer_Stop(channel);
  91. return 0;
  92. }