Add missing avr prj to nightly test.
[bertos.git] / bertos / cpu / arm / drv / pwm_at91.h
index 76c8b940067191bfed5986f24c94014fb5aeb0db..403b9f52ef6df118a5ac15f7fff2697db2901498 100644 (file)
@@ -33,7 +33,6 @@
  *
  * \brief PWM hardware-specific definition
  *
- * \version $Id$
  *
  * \author Daniele Basile <asterix@develer.com>
  */
 #ifndef DRV_PWM_AT91_H
 #define DRV_PWM_AT91_H
 
-#include "pwm_map.h"
-
 #include <cfg/compiler.h>
 #include <cfg/macros.h>
 
+#include "cfg/cfg_pwm.h"
+
 #include <io/arm.h>
 
+#if CFG_PWM_ENABLE_OLD_API
 
-#define PWM_HW_MAX_PRESCALER_STEP         10
-#define PWM_HW_MAX_PERIOD             0xFFFF
+       #include "hw/pwm_map.h"
 
-/**
- * Type definition for pwm period.
- */
-typedef uint16_t pwm_period_t;
+       /**
       * 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.
-       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);
-pwm_period_t pwm_hw_getPeriod(PwmDev dev);
+       /**
+        * 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 <drv/pwm.h>
+
+       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 */