Minor fixes in AT91 ADC module.
[bertos.git] / bertos / cpu / arm / drv / adc_at91.h
index 5e9e7d26bc328339cbfb1f05fc5c378acdfc2a8c..2ec0cdb595af0f676a6ab3b2b13f91c4ad1f1f72 100644 (file)
@@ -41,9 +41,9 @@
 #ifndef DRV_ADC_AT91_H
 #define DRV_ADC_AT91_H
 
-#include "hw_cpu.h"
+#include <hw/hw_cpufreq.h>
 
-#include <cfg/cfg_adc.h>
+#include "cfg/cfg_adc.h"
 
 #include <cfg/compiler.h>
 
  * Macro for computing correct value to write into ADC
  * register.
  */
-#define ADC_COMPUTED_PRESCALER    ((CLOCK_FREQ/(2 * CONFIG_ADC_CLOCK)) - 1)
-#define ADC_COMPUTED_STARTUPTIME  (((CONFIG_ADC_STARTUP_TIME * CONFIG_ADC_CLOCK)/ 8000000UL) - 1)
-#define ADC_COMPUTED_SHTIME       (((CONFIG_ADC_SHTIME * CONFIG_ADC_CLOCK)/1000000000UL) - 1)
+#define ADC_COMPUTED_PRESCALER    (DIV_ROUNDUP(CPU_FREQ, 2 * CONFIG_ADC_CLOCK) - 1)
+#define ADC_COMPUTED_CLOCK        (CPU_FREQ / ((ADC_COMPUTED_PRESCALER + 1) * 2))
+#define ADC_COMPUTED_STARTUPTIME  (((CONFIG_ADC_STARTUP_TIME * ADC_COMPUTED_CLOCK) / 8000000UL) - 1)
+#define ADC_COMPUTED_SHTIME       ((uint32_t)((CONFIG_ADC_SHTIME * (uint64_t)ADC_COMPUTED_CLOCK) / 1000000000UL) - 1)
 
 /**
  * Init pins macro for adc.
  * Define PIO controller for enable ADC function.
  * \{
  */
-#if CPU_ARM_AT91SAM7X256
+#if CPU_ARM_SAM7X
        #define ADC_PIO_DISABLE           PIOB_PDR
        #define ADC_PIO_EN_FUNC           PIOB_ASR
 
-#elif CPU_ARM_AT91SAM7S256
+#elif CPU_ARM_SAM7S_LARGE
        #define ADC_PIO_DISABLE           PIOA_PDR
        #define ADC_PIO_EN_FUNC           PIOA_BSR
 
@@ -90,5 +91,8 @@
        do { \
        } while (0)
 
+void adc_hw_select_ch(uint8_t ch);
+uint16_t adc_hw_read(void);
+void adc_hw_init(void);
 
 #endif /* DRV_ADC_AT91_H */