/** * \file * * * * \brief PWM hardware-specific definition * * * \author Daniele Basile */ #ifndef DRV_PWM_AT91_H #define DRV_PWM_AT91_H #include #include #include "cfg/cfg_pwm.h" #include #if CFG_PWM_ENABLE_OLD_API #include "hw/pwm_map.h" /** * Type definition for pwm period. */ typedef uint16_t pwm_period_t; /** * Structur definition for pwm driver. */ typedef struct PwmChannel { bool duty_zero; ///< True if duty cyle is zero, false otherwise. bool pol; ///< PWM polarty flag. int pwm_pin; ///< PWM pin. reg32_t *mode_reg; ///< PWM mode register. reg32_t *duty_reg; ///< PWM duty cycle register. reg32_t *period_reg; ///< PWM periodic register. reg32_t *update_reg; ///< Update setting register for PWM. } PwmChannel; void pwm_hw_init(void); void pwm_hw_setFrequency(PwmDev dev, uint32_t freq); void pwm_hw_setDutyUnlock(PwmDev dev, uint16_t duty); void pwm_hw_disable(PwmDev dev); void pwm_hw_enable(PwmDev dev); void pwm_hw_setPolarity(PwmDev dev, bool pol); pwm_period_t pwm_hw_getPeriod(PwmDev dev); #else #include typedef uint16_t pwm_hwreg_t; struct PwmChannelRegs; //fwd decl typedef struct PwmHardware { uint32_t pwm_pin; ///< PWM pin. volatile struct PwmChannelRegs *base; } PwmHardware; pwm_hwreg_t pwm_hw_getPeriod(Pwm *ctx); void pwm_hw_setFrequency(struct Pwm *ctx, pwm_freq_t freq); void pwm_hw_setDuty(Pwm *ctx, pwm_hwreg_t duty); void pwm_hw_init(struct Pwm *ctx, unsigned ch); #endif #endif /* DRV_ADC_AT91_H */