From f725641ff9845ac5b9a378e8a3ce55bbe16fbd01 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Sun, 30 Jun 2002 20:22:25 +0000 Subject: First version git-svn-id: svn://svn.rockbox.org/rockbox/trunk@1273 a1c6a512-1295-4272-9138-f99709370657 --- firmware/drivers/adc.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ firmware/drivers/adc.h | 36 +++++++++++++++++++++++++++++++ 2 files changed, 93 insertions(+) create mode 100644 firmware/drivers/adc.c create mode 100644 firmware/drivers/adc.h diff --git a/firmware/drivers/adc.c b/firmware/drivers/adc.c new file mode 100644 index 0000000000..6008c14ed6 --- /dev/null +++ b/firmware/drivers/adc.c @@ -0,0 +1,57 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Linus Nielsen Feltzing + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "config.h" +#include "sh7034.h" +#include "kernel.h" +#include "thread.h" +#include "adc.h" + +static int current_channel; +static unsigned short adcdata[NUM_ADC_CHANNELS]; +static unsigned int adcreg[NUM_ADC_CHANNELS] = +{ + ADDRAH_ADDR, ADDRBH_ADDR, ADDRCH_ADDR, ADDRDH_ADDR, + ADDRAH_ADDR, ADDRBH_ADDR, ADDRCH_ADDR, ADDRDH_ADDR +}; + +static void adc_tick(void) +{ + /* Read the data that has bee converted since the last tick */ + adcdata[current_channel] = + *(unsigned short *)adcreg[current_channel] >> 6; + + /* Start a conversion on the next channel */ + current_channel++; + if(current_channel == NUM_ADC_CHANNELS) + current_channel = 0; + ADCSR = ADCSR_ADST | current_channel; +} + +unsigned short adc_read(int channel) +{ + return adcdata[channel]; +} + +void adc_init(void) +{ + ADCR = 0; /* No external trigger */ + + current_channel = 0; + tick_add_task(adc_tick); +} diff --git a/firmware/drivers/adc.h b/firmware/drivers/adc.h new file mode 100644 index 0000000000..61a5952174 --- /dev/null +++ b/firmware/drivers/adc.h @@ -0,0 +1,36 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Linus Nielsen Feltzing + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#ifndef _ADC_H_ +#define _ADC_H_ + +#define NUM_ADC_CHANNELS 8 + +#define ADC_BATTERY 0 +#define ADC_CHARGE_REGULATOR 1 +#define ADC_USB_POWER 2 + +#define ADC_BUTTON_ROW1 4 +#define ADC_BUTTON_ROW2 5 +#define ADC_UNREG_POWER 6 +#define ADC_EXT_POWER 7 + +unsigned short adc_read(int channel); +void adc_init(void); + +#endif -- cgit v1.2.3