diff options
author | Dave Chapman <dave@dchapman.com> | 2007-10-28 11:08:10 +0000 |
---|---|---|
committer | Dave Chapman <dave@dchapman.com> | 2007-10-28 11:08:10 +0000 |
commit | 28f6ae49ec1b1d3464add2941eb015bab56f8016 (patch) | |
tree | 6d4cddba129663340cf2f30212a516acdd16a4eb /firmware/target/arm/tcc77x/adc-tcc77x.c | |
parent | d3e101bd1184e5c1f474ff0978f65ac7e8e2dbfb (diff) | |
download | rockbox-28f6ae49ec1b1d3464add2941eb015bab56f8016.tar.gz rockbox-28f6ae49ec1b1d3464add2941eb015bab56f8016.zip |
Initial work on a port to the Logik DAX 1GB MP3/DAB player. The bootloader build compiles and runs (but only displays some debugging info), and the LCD and ADC drivers are working. Two different bootloader builds are possible: 1) The default build is just a test application for uploading to the device via tcctool; 2) Adding -DTCCBOOT to EXTRA_DEFINES in the build directory Makefile will compile the bootloader so that it can be appended to the end of the original firmware and installed on the device, dual-booting. This commit also includes some work by Hein-Pieter van Braam on a port to the iAudio 7, but that doesn't build yet. A large part of these ports will be generic to all TCC77x devices - see the TelechipsInfo wiki page for some other devices with this CPU. NOTE: Compiling these builds requires an arm-elf-gcc with armv5 support - the current version of rockboxdev.sh compiles such a gcc.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15339 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/tcc77x/adc-tcc77x.c')
-rw-r--r-- | firmware/target/arm/tcc77x/adc-tcc77x.c | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/firmware/target/arm/tcc77x/adc-tcc77x.c b/firmware/target/arm/tcc77x/adc-tcc77x.c new file mode 100644 index 0000000000..d6d97aaf84 --- /dev/null +++ b/firmware/target/arm/tcc77x/adc-tcc77x.c | |||
@@ -0,0 +1,71 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2007 by Dave Chapman | ||
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 "cpu.h" | ||
21 | #include "system.h" | ||
22 | #include "kernel.h" | ||
23 | #include "thread.h" | ||
24 | #include "string.h" | ||
25 | #include "adc.h" | ||
26 | |||
27 | /* | ||
28 | TODO: We probably want to do this on the timer interrupt once we get | ||
29 | interrupts going - see the sh-adc.c implementation for an example which | ||
30 | looks like it should work well with the TCC77x. | ||
31 | */ | ||
32 | |||
33 | static unsigned short adcdata[8]; | ||
34 | |||
35 | static void adc_do_read(void) | ||
36 | { | ||
37 | int i; | ||
38 | uint32_t adc_status; | ||
39 | |||
40 | PCLKCFG6 |= (1<<15); /* Enable ADC clock */ | ||
41 | |||
42 | /* Start converting the first 4 channels */ | ||
43 | for (i = 0; i < 4; i++) | ||
44 | ADCCON = i; | ||
45 | |||
46 | /* Wait for data to become stable */ | ||
47 | while ((ADCDATA & 0x1) == 0); | ||
48 | |||
49 | /* Now read the values back */ | ||
50 | for (i=0;i < 4; i++) { | ||
51 | adc_status = ADCSTATUS; | ||
52 | adcdata[(adc_status >> 16) & 0x7] = adc_status & 0x3ff; | ||
53 | } | ||
54 | |||
55 | PCLKCFG6 &= ~(1<<15); /* Disable ADC clock */ | ||
56 | } | ||
57 | |||
58 | unsigned short adc_read(int channel) | ||
59 | { | ||
60 | adc_do_read(); | ||
61 | |||
62 | return adcdata[channel]; | ||
63 | } | ||
64 | |||
65 | void adc_init(void) | ||
66 | { | ||
67 | int i; | ||
68 | |||
69 | ADCCON = (1<<4); /* Leave standby mode */ | ||
70 | ADCCFG |= 0x00000003; /* Single-mode, auto power-down */ | ||
71 | } | ||