ADC initialisation Fixes.
authorNathael Pajani <nathael.pajani@ed3l.fr>
Mon, 21 Sep 2015 11:23:12 +0000 (13:23 +0200)
committerNathael Pajani <nathael.pajani@ed3l.fr>
Mon, 21 Sep 2015 11:23:12 +0000 (13:23 +0200)
apps/dtplug/usb/main.c
drivers/adc.c
include/core/lpc_regs_17xx.h

index 4d557b5..cf94c65 100644 (file)
@@ -61,8 +61,6 @@ void system_init()
        /* Stop the watchdog */
        stop_watchdog(); /* Do it right now, before it gets a chance to break in */
 
-       /* Note: Brown-Out detection must be powered to operate the ADC. adc_on() will power
-        *  it back on if called after system_init() */
        system_brown_out_detection_config(0);
        system_set_default_power_state();
        clock_config(SELECTED_FREQ);
index 26c96d6..dcb414a 100644 (file)
@@ -184,6 +184,9 @@ void adc_clk_update(void)
        uint32_t main_clock = get_main_clock();
        uint32_t clkdiv = 0;
 
+       if (!subsystem_powered(LPC_ADC_POWER_ON)) {
+               return;
+       }
        /* Set CCLK divider for PCLK */
        set_subsystem_clk_divider(LPC_ADC_PCLK, LPC_PCLK_CCLK);
        /* Configure ADC clock to get the 13MHz sample clock */
@@ -201,6 +204,7 @@ void adc_on(void)
 
        /* Provide clock to ADC */
        subsystem_power(LPC_ADC_POWER_ON, 1);
+       adc->ctrl = LPC_ADC_POWER_UP;
        adc_clk_update();
 
        /* Prevent unconfigured conversion start */
index 48e2f0c..c607ccf 100644 (file)
@@ -890,13 +890,14 @@ struct lpc_adc
 #define LPC_ADC         ((struct lpc_adc *) LPC_ADC_BASE)
 
 /* ADC Control register bits */
-#define LPC_ADC_CTRL_MASK  0x0F01FFFF
+#define LPC_ADC_CTRL_MASK  0x0F21FFFF
+#define LPC_ADC_POWER_UP   (0x01 << 21)
 /* LPC_ADC_CHANNEL_* are also used for interrupt register */
 #define LPC_ADC_CHANNEL_MASK (0xFF << 0)
-#define LPC_ADC_CHANNEL(x)  (0x01 << ((x) & 0x07))
-#define LPC_ADC_BURST     (0x01 << 16)
+#define LPC_ADC_CHANNEL(x)   (0x01 << ((x) & 0x07))
+#define LPC_ADC_BURST        (0x01 << 16)
 
-#define LPC_ADC_10BITS  (0x00 << 17)
+#define LPC_ADC_10BITS (0x00 << 17)
 #define LPC_ADC_9BITS  (0x01 << 17)
 #define LPC_ADC_8BITS  (0x02 << 17)
 #define LPC_ADC_7BITS  (0x03 << 17)