diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/drivers/adc.c | 57 | ||||
-rw-r--r-- | firmware/drivers/adc.h | 36 |
2 files changed, 93 insertions, 0 deletions
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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2002 by Linus Nielsen Feltzing | ||
11 | * | ||
12 | * All files in this archive are subject to the GNU General Public License. | ||
13 | * See the file COPYING in the source tree root for full license agreement. | ||
14 | * | ||
15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
16 | * KIND, either express or implied. | ||
17 | * | ||
18 | ****************************************************************************/ | ||
19 | #include "config.h" | ||
20 | #include "sh7034.h" | ||
21 | #include "kernel.h" | ||
22 | #include "thread.h" | ||
23 | #include "adc.h" | ||
24 | |||
25 | static int current_channel; | ||
26 | static unsigned short adcdata[NUM_ADC_CHANNELS]; | ||
27 | static unsigned int adcreg[NUM_ADC_CHANNELS] = | ||
28 | { | ||
29 | ADDRAH_ADDR, ADDRBH_ADDR, ADDRCH_ADDR, ADDRDH_ADDR, | ||
30 | ADDRAH_ADDR, ADDRBH_ADDR, ADDRCH_ADDR, ADDRDH_ADDR | ||
31 | }; | ||
32 | |||
33 | static void adc_tick(void) | ||
34 | { | ||
35 | /* Read the data that has bee converted since the last tick */ | ||
36 | adcdata[current_channel] = | ||
37 | *(unsigned short *)adcreg[current_channel] >> 6; | ||
38 | |||
39 | /* Start a conversion on the next channel */ | ||
40 | current_channel++; | ||
41 | if(current_channel == NUM_ADC_CHANNELS) | ||
42 | current_channel = 0; | ||
43 | ADCSR = ADCSR_ADST | current_channel; | ||
44 | } | ||
45 | |||
46 | unsigned short adc_read(int channel) | ||
47 | { | ||
48 | return adcdata[channel]; | ||
49 | } | ||
50 | |||
51 | void adc_init(void) | ||
52 | { | ||
53 | ADCR = 0; /* No external trigger */ | ||
54 | |||
55 | current_channel = 0; | ||
56 | tick_add_task(adc_tick); | ||
57 | } | ||
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 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2002 by Linus Nielsen Feltzing | ||
11 | * | ||
12 | * All files in this archive are subject to the GNU General Public License. | ||
13 | * See the file COPYING in the source tree root for full license agreement. | ||
14 | * | ||
15 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
16 | * KIND, either express or implied. | ||
17 | * | ||
18 | ****************************************************************************/ | ||
19 | #ifndef _ADC_H_ | ||
20 | #define _ADC_H_ | ||
21 | |||
22 | #define NUM_ADC_CHANNELS 8 | ||
23 | |||
24 | #define ADC_BATTERY 0 | ||
25 | #define ADC_CHARGE_REGULATOR 1 | ||
26 | #define ADC_USB_POWER 2 | ||
27 | |||
28 | #define ADC_BUTTON_ROW1 4 | ||
29 | #define ADC_BUTTON_ROW2 5 | ||
30 | #define ADC_UNREG_POWER 6 | ||
31 | #define ADC_EXT_POWER 7 | ||
32 | |||
33 | unsigned short adc_read(int channel); | ||
34 | void adc_init(void); | ||
35 | |||
36 | #endif | ||