pwm_at91.h
Go to the documentation of this file.
00001
00040 #ifndef DRV_PWM_AT91_H
00041 #define DRV_PWM_AT91_H
00042 
00043 #include <cfg/compiler.h>
00044 #include <cfg/macros.h>
00045
00046 #include "cfg/cfg_pwm.h"
00047
00048 #include <io/arm.h>
00049
00050 #if CFG_PWM_ENABLE_OLD_API
00051 
00052     #include "hw/pwm_map.h"
00053
00057     typedef uint16_t pwm_period_t;
00058
00062     typedef struct PwmChannel
00063     {
00064         bool duty_zero;
00065         bool pol;
00066         int pwm_pin;
00067         reg32_t *mode_reg;
00068         reg32_t *duty_reg;
00069         reg32_t *period_reg;
00070         reg32_t *update_reg;
00071
00072     } PwmChannel;
00073
00074
00075     void pwm_hw_init(void);
00076     void pwm_hw_setFrequency(PwmDev dev, uint32_t freq);
00077     void pwm_hw_setDutyUnlock(PwmDev dev, uint16_t duty);
00078     void pwm_hw_disable(PwmDev dev);
00079     void pwm_hw_enable(PwmDev dev);
00080     void pwm_hw_setPolarity(PwmDev dev, bool pol);
00081     pwm_period_t pwm_hw_getPeriod(PwmDev dev);
00082
00083 #else
00084     #include <drv/pwm.h>
00085
00086     typedef uint16_t pwm_hwreg_t;
00087
00088     struct PwmChannelRegs; //fwd decl
00089
00090     typedef struct PwmHardware
00091     {
00092         uint32_t pwm_pin;
00093         volatile struct PwmChannelRegs *base;
00094     } PwmHardware;
00095
00096     pwm_hwreg_t pwm_hw_getPeriod(Pwm *ctx);
00097     void pwm_hw_setFrequency(struct Pwm *ctx, pwm_freq_t freq);
00098     void pwm_hw_setDuty(Pwm *ctx, pwm_hwreg_t duty);
00099     void pwm_hw_init(struct Pwm *ctx, unsigned ch);
00100
00101 #endif
00102 
00103 #endif /* DRV_ADC_AT91_H */