Minor fixes in AT91 ADC module.
[bertos.git] / bertos / cpu / arm / drv / adc_at91.h
index 6c77de0f431a72dabdfe013b9a1367746cb28e2e..2ec0cdb595af0f676a6ab3b2b13f91c4ad1f1f72 100644 (file)
  * Macro for computing correct value to write into ADC
  * register.
  */
-#define ADC_COMPUTED_PRESCALER    ((CPU_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 */