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