1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /*
- * Software PWM using soft-interrupt timer1.
- * Supports higher frequencies compared to Espressif provided one.
- *
- * Nikolay Fiykov
- */
- #ifndef __PWM2_H__
- #define __PWM2_H__
- #include "c_types.h"
- #include "pin_map.h"
- typedef struct {
- uint32_t offInterruptCounter;
- uint32_t pulseInterruptCcounter;
- uint32_t currentInterruptCounter;
- uint16_t gpioMask;
- } pwm2_pin_interrupt_t;
- typedef struct {
- pwm2_pin_interrupt_t pin[GPIO_PIN_NUM];
- uint16_t enabledGpioMask;
- } pwm2_interrupt_handler_data_t;
- typedef struct {
- uint32_t pulseResolutions;
- uint32_t divisableFrequency;
- uint32_t frequencyDivisor;
- uint32_t duty;
- uint32_t resolutionCPUTicks;
- uint32_t resolutionInterruptCounterMultiplier;
- } pwm2_pin_setup_t;
- typedef struct {
- pwm2_pin_setup_t pin[GPIO_PIN_NUM];
- uint32_t interruptTimerCPUTicks;
- uint32_t interruptTimerTicks;
- bool isStarted;
- } pwm2_setup_data_t;
- typedef struct {
- pwm2_interrupt_handler_data_t interruptData;
- pwm2_setup_data_t setupData;
- } pwm2_module_data_t;
- // driver's public API
- void pwm2_init();
- pwm2_module_data_t *pwm2_get_module_data();
- bool pwm2_is_pin_setup(const uint8_t pin);
- void pwm2_setup_pin(
- const uint8_t pin,
- const uint32_t divisableFreq,
- const uint32_t freqDivisor,
- const uint32_t resolution,
- const uint32_t initDuty
- );
- void pwm2_release_pin(const uint8_t pin);
- void pwm2_stop();
- bool pwm2_start();
- bool pwm2_is_started();
- void pwm2_set_duty(const uint8_t pin, const uint32_t duty);
- #endif
|