pwm2.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. /*
  2. * Software PWM using soft-interrupt timer1.
  3. * Supports higher frequencies compared to Espressif provided one.
  4. *
  5. * Nikolay Fiykov
  6. */
  7. #ifndef __PWM2_H__
  8. #define __PWM2_H__
  9. #include "c_types.h"
  10. #include "pin_map.h"
  11. typedef struct {
  12. uint32_t offInterruptCounter;
  13. uint32_t pulseInterruptCcounter;
  14. uint32_t currentInterruptCounter;
  15. uint16_t gpioMask;
  16. } pwm2_pin_interrupt_t;
  17. typedef struct {
  18. pwm2_pin_interrupt_t pin[GPIO_PIN_NUM];
  19. uint16_t enabledGpioMask;
  20. } pwm2_interrupt_handler_data_t;
  21. typedef struct {
  22. uint32_t pulseResolutions;
  23. uint32_t divisableFrequency;
  24. uint32_t frequencyDivisor;
  25. uint32_t duty;
  26. uint32_t resolutionCPUTicks;
  27. uint32_t resolutionInterruptCounterMultiplier;
  28. } pwm2_pin_setup_t;
  29. typedef struct {
  30. pwm2_pin_setup_t pin[GPIO_PIN_NUM];
  31. uint32_t interruptTimerCPUTicks;
  32. uint32_t interruptTimerTicks;
  33. bool isStarted;
  34. } pwm2_setup_data_t;
  35. typedef struct {
  36. pwm2_interrupt_handler_data_t interruptData;
  37. pwm2_setup_data_t setupData;
  38. } pwm2_module_data_t;
  39. // driver's public API
  40. void pwm2_init();
  41. pwm2_module_data_t *pwm2_get_module_data();
  42. bool pwm2_is_pin_setup(const uint8_t pin);
  43. void pwm2_setup_pin(
  44. const uint8_t pin,
  45. const uint32_t divisableFreq,
  46. const uint32_t freqDivisor,
  47. const uint32_t resolution,
  48. const uint32_t initDuty
  49. );
  50. void pwm2_release_pin(const uint8_t pin);
  51. void pwm2_stop();
  52. bool pwm2_start();
  53. bool pwm2_is_started();
  54. void pwm2_set_duty(const uint8_t pin, const uint32_t duty);
  55. #endif