BeRTOS
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 */