From a56b65342f1c1021472eb2899ab46e69a666f7f8 Mon Sep 17 00:00:00 2001 From: Karl Kurbjun Date: Sun, 30 Sep 2007 16:29:21 +0000 Subject: Move some more files around and get the main build compiling git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14919 a1c6a512-1295-4272-9138-f99709370657 --- apps/SOURCES | 2 + apps/plugins/plugin.lds | 19 +- bootloader/mrobe500.c | 2 +- firmware/FILES | 4 +- firmware/SOURCES | 16 +- firmware/app.lds | 9 +- firmware/export/dm320.h | 4 +- firmware/pcm_playback.c | 5 +- firmware/target/arm/tms320dm320/crt0.S | 208 ++++++++++++++++++++ firmware/target/arm/tms320dm320/i2c-dm320.c | 50 +++++ firmware/target/arm/tms320dm320/i2c-dm320.h | 44 +++++ firmware/target/arm/tms320dm320/kernel-mr500.c | 63 +++++++ firmware/target/arm/tms320dm320/mrobe-500/crt0.S | 206 -------------------- .../arm/tms320dm320/mrobe-500/dm320codec-mr500.c | 39 ++++ .../arm/tms320dm320/mrobe-500/kernel-mr500.c | 63 ------- .../target/arm/tms320dm320/mrobe-500/lcd-mr500.c | 3 +- .../target/arm/tms320dm320/mrobe-500/pcm-mr500.c | 85 +++++++++ .../arm/tms320dm320/mrobe-500/powermgmt-mr500.c | 51 +++++ .../target/arm/tms320dm320/mrobe-500/spi-mr500.c | 77 -------- .../target/arm/tms320dm320/mrobe-500/spi-target.h | 29 --- .../arm/tms320dm320/mrobe-500/system-mr500.c | 210 --------------------- .../arm/tms320dm320/mrobe-500/system-target.h | 32 ---- .../target/arm/tms320dm320/mrobe-500/timer-mr500.c | 106 ----------- .../arm/tms320dm320/mrobe-500/timer-target.h | 39 ---- .../target/arm/tms320dm320/mrobe-500/uart-mr500.c | 172 ----------------- .../target/arm/tms320dm320/mrobe-500/uart-target.h | 33 ---- firmware/target/arm/tms320dm320/spi-mr500.c | 77 ++++++++ firmware/target/arm/tms320dm320/spi-target.h | 29 +++ firmware/target/arm/tms320dm320/system-mr500.c | 210 +++++++++++++++++++++ firmware/target/arm/tms320dm320/system-target.h | 32 ++++ firmware/target/arm/tms320dm320/timer-mr500.c | 106 +++++++++++ firmware/target/arm/tms320dm320/timer-target.h | 39 ++++ firmware/target/arm/tms320dm320/uart-mr500.c | 172 +++++++++++++++++ firmware/target/arm/tms320dm320/uart-target.h | 33 ++++ 34 files changed, 1281 insertions(+), 988 deletions(-) create mode 100755 firmware/target/arm/tms320dm320/crt0.S create mode 100755 firmware/target/arm/tms320dm320/i2c-dm320.c create mode 100755 firmware/target/arm/tms320dm320/i2c-dm320.h create mode 100644 firmware/target/arm/tms320dm320/kernel-mr500.c delete mode 100755 firmware/target/arm/tms320dm320/mrobe-500/crt0.S create mode 100755 firmware/target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c delete mode 100644 firmware/target/arm/tms320dm320/mrobe-500/kernel-mr500.c create mode 100755 firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c create mode 100755 firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c delete mode 100644 firmware/target/arm/tms320dm320/mrobe-500/spi-mr500.c delete mode 100644 firmware/target/arm/tms320dm320/mrobe-500/spi-target.h delete mode 100644 firmware/target/arm/tms320dm320/mrobe-500/system-mr500.c delete mode 100755 firmware/target/arm/tms320dm320/mrobe-500/system-target.h delete mode 100644 firmware/target/arm/tms320dm320/mrobe-500/timer-mr500.c delete mode 100644 firmware/target/arm/tms320dm320/mrobe-500/timer-target.h delete mode 100644 firmware/target/arm/tms320dm320/mrobe-500/uart-mr500.c delete mode 100644 firmware/target/arm/tms320dm320/mrobe-500/uart-target.h create mode 100644 firmware/target/arm/tms320dm320/spi-mr500.c create mode 100644 firmware/target/arm/tms320dm320/spi-target.h create mode 100644 firmware/target/arm/tms320dm320/system-mr500.c create mode 100755 firmware/target/arm/tms320dm320/system-target.h create mode 100644 firmware/target/arm/tms320dm320/timer-mr500.c create mode 100644 firmware/target/arm/tms320dm320/timer-target.h create mode 100644 firmware/target/arm/tms320dm320/uart-mr500.c create mode 100644 firmware/target/arm/tms320dm320/uart-target.h diff --git a/apps/SOURCES b/apps/SOURCES index 5a3dc89c2e..4cc7fee5e8 100644 --- a/apps/SOURCES +++ b/apps/SOURCES @@ -155,4 +155,6 @@ keymaps/keymap-e200.c keymaps/keymap-c200.c #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD keymaps/keymap-av300.c +#elif CONFIG_KEYPAD == MROBE500_PAD +keymaps/keymap-mr500.c #endif diff --git a/apps/plugins/plugin.lds b/apps/plugins/plugin.lds index 6b4310c0b7..57afb9a09e 100644 --- a/apps/plugins/plugin.lds +++ b/apps/plugins/plugin.lds @@ -16,6 +16,16 @@ OUTPUT_FORMAT(elf32-sh) #define STUBOFFSET 0 #endif +#if CONFIG_CPU==S3C2440 +#include "s3c2440.h" +#define DRAMSIZE (MEMORYSIZE * 0x100000) - 0x100 - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE - LCD_BUFFER_SIZE - TTB_SIZE +#elif CONFIG_CPU==DM320 +#include "dm320.h" +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE - LCD_BUFFER_SIZE +#else +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_BUFFER_SIZE - STUBOFFSET - CODEC_SIZE +#endif + #if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300) #define ARCH_IRIVER #endif @@ -37,8 +47,6 @@ OUTPUT_FORMAT(elf32-sh) #define IRAMORIG 0x407000 #define IRAMSIZE 0x9000 #elif CONFIG_CPU == S3C2440 -#include "s3c2440.h" -#define DRAMSIZE (MEMORYSIZE * 0x100000) - 0x100 - STUBOFFSET - LCD_BUFFER_SIZE - TTB_SIZE - PLUGIN_BUFFER_SIZE - CODEC_SIZE #define DRAMORIG 0x100 + STUBOFFSET #define IRAMORIG DRAMORIG #define IRAMSIZE 4K @@ -47,15 +55,16 @@ OUTPUT_FORMAT(elf32-sh) #define DRAMORIG 0x80000000 #define IRAMORIG 0x1FFFC000 #define IRAMSIZE 0x4000 +#elif CONFIG_CPU==DM320 +#define DRAMORIG 0x00900000 + STUBOFFSET +#define IRAMORIG 0x00000100 +#define IRAMSIZE 0x4000-0x100 #else #define DRAMORIG 0x09000000 + STUBOFFSET #endif #define PLUGIN_LENGTH PLUGIN_BUFFER_SIZE -#if CONFIG_CPU != S3C2440 -#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGIN_LENGTH - CODEC_SIZE -#endif #define CODEC_ORIGIN (DRAMORIG + (DRAMSIZE)) #define PLUGIN_ORIGIN (CODEC_ORIGIN + CODEC_SIZE) diff --git a/bootloader/mrobe500.c b/bootloader/mrobe500.c index b92096ada2..1133fa6def 100755 --- a/bootloader/mrobe500.c +++ b/bootloader/mrobe500.c @@ -162,7 +162,7 @@ void main(void) printf("Loading firmware"); loadbuffer = (unsigned char*) 0x00900000; - buffer_size = (unsigned char*)0x00100000 - loadbuffer; + buffer_size = (unsigned char*)0x04900000 - loadbuffer; rc = load_firmware(loadbuffer, BOOTFILE, buffer_size); if(rc < 0) diff --git a/firmware/FILES b/firmware/FILES index 8b2f3d11ab..a3cfc0c8c2 100644 --- a/firmware/FILES +++ b/firmware/FILES @@ -25,8 +25,8 @@ target/arm/archos/av300/*.[chS] target/arm/s3c2440/gigabeat-fx/*.[chS] target/arm/iriver/*.[chS] target/arm/iriver/h10/*.[chS] -target/arm/olympus/*.[chS] -target/arm/olympus/mrobe-500/*.[chS] +target/arm/tms320dm320/*.[chS] +target/arm/tms320dm320/mrobe-500/*.[chS] target/arm/pnx0101/*.[chS] target/arm/pnx0101/iriver-ifp7xx/*.[chS] target/arm/ipod/*.[chS] diff --git a/firmware/SOURCES b/firmware/SOURCES index 7e2d328c72..bc0c83f293 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -333,7 +333,7 @@ target/arm/crt0-pp.S #elif CONFIG_CPU == PNX0101 target/arm/pnx0101/crt0-pnx0101.S #elif defined(OLYMPUS_MROBE_500) -target/arm/tms320dm320/mrobe-500/crt0.S +target/arm/tms320dm320/crt0.S #elif defined(CPU_ARM) target/arm/crt0.S #endif /* defined(CPU_*) */ @@ -626,14 +626,18 @@ target/arm/tms320dm320/mrobe-500/adc-mr500.c target/arm/tms320dm320/mrobe-500/ata-mr500.c target/arm/tms320dm320/mrobe-500/backlight-mr500.c target/arm/tms320dm320/mrobe-500/button-mr500.c -target/arm/tms320dm320/mrobe-500/kernel-mr500.c +target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c target/arm/tms320dm320/mrobe-500/lcd-mr500.c +target/arm/tms320dm320/mrobe-500/pcm-mr500.c +target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c target/arm/tms320dm320/mrobe-500/power-mr500.c -target/arm/tms320dm320/mrobe-500/system-mr500.c -target/arm/tms320dm320/mrobe-500/timer-mr500.c target/arm/tms320dm320/mrobe-500/usb-mr500.c -target/arm/tms320dm320/mrobe-500/uart-mr500.c -target/arm/tms320dm320/mrobe-500/spi-mr500.c +target/arm/tms320dm320/i2c-dm320.c +target/arm/tms320dm320/kernel-mr500.c +target/arm/tms320dm320/spi-mr500.c +target/arm/tms320dm320/system-mr500.c +target/arm/tms320dm320/timer-mr500.c +target/arm/tms320dm320/uart-mr500.c #ifndef BOOTLOADER #endif diff --git a/firmware/app.lds b/firmware/app.lds index 6ffd33e453..fdd15b32cd 100644 --- a/firmware/app.lds +++ b/firmware/app.lds @@ -9,6 +9,8 @@ OUTPUT_FORMAT(elf32-littlearm) OUTPUT_ARCH(arm) #ifdef CPU_PP INPUT(target/arm/crt0-pp.o) +#elif defined(OLYMPUS_MROBE_500) +INPUT(target/arm/tms320dm320/crt0.o) #elif CONFIG_CPU == PNX0101 INPUT(target/arm/pnx0101/crt0-pnx0101.o) #elif defined(CPU_ARM) @@ -31,6 +33,9 @@ INPUT(target/sh/crt0.o) #if CONFIG_CPU==S3C2440 #include "s3c2440.h" #define DRAMSIZE (MEMORYSIZE * 0x100000) - 0x100 - PLUGINSIZE - STUBOFFSET - CODECSIZE - LCD_BUFFER_SIZE - TTB_SIZE +#elif CONFIG_CPU==DM320 +#include "dm320.h" +#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE - LCD_BUFFER_SIZE #else #define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE #endif @@ -58,8 +63,8 @@ INPUT(target/sh/crt0.o) #define IRAM DRAM #elif CONFIG_CPU==DM320 #define DRAMORIG 0x00900000 + STUBOFFSET -#define IRAMORIG 0x00000000 -#define IRAMSIZE 0x4000 +#define IRAMORIG 0x00000100 +#define IRAMSIZE 0x4000-0x100 #elif CONFIG_CPU==IMX31L #define DRAMORIG (0x80000000 + STUBOFFSET) #define IRAMORIG 0x1FFFC000 diff --git a/firmware/export/dm320.h b/firmware/export/dm320.h index 93f2f3affc..0c84444a66 100644 --- a/firmware/export/dm320.h +++ b/firmware/export/dm320.h @@ -24,7 +24,8 @@ #ifndef __DM320_H__ #define __DM320_H__ -#define FRAME ((short *) (0x4470000)) +#define LCD_BUFFER_SIZE (640*480*4) +#define FRAME ((short *) (0x4900000-LCD_BUFFER_SIZE)) /* Put the buffer at the end of mem */ #define PHY_IO_BASE 0x00030000 #define DM320_REG(addr) (*(volatile unsigned short *)(PHY_IO_BASE + (addr))) @@ -314,7 +315,6 @@ #define IO_CCD_BLKCMP0 0x0728 #define IO_CCD_BLKCMP1 0x072A #define IO_CCD_MEDFILT 0x072C -#define IO_CCD_RYEGAN 0x072E /* this is kept on the odd chance that some code is using the misspelled reg */ #define IO_CCD_RYEGAIN 0x072E #define IO_CCD_GRCYGAIN 0x0730 #define IO_CCD_GBGGAIN 0x0732 diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c index 123b7e3505..d317b3708e 100644 --- a/firmware/pcm_playback.c +++ b/firmware/pcm_playback.c @@ -50,7 +50,8 @@ void pcm_play_pause_unpause(void); /** Functions that require targeted implementation **/ -#if defined(CPU_COLDFIRE) || (CONFIG_CPU == S3C2440) || (CONFIG_CPU == IMX31L) +#if defined(CPU_COLDFIRE) || (CONFIG_CPU == S3C2440) || (CONFIG_CPU == IMX31L) \ + || (CONFIG_CPU == DM320) /* Implemented in target/... */ #else /* dummy functions for those not actually supporting all this yet */ @@ -71,7 +72,7 @@ void pcm_mute(bool mute) #endif /* defined(CPU_COLDFIRE) || (CONFIG_CPU == S3C2440) */ #if defined(CPU_COLDFIRE) || (CONFIG_CPU == S3C2440) || defined(CPU_PP) \ - || (CONFIG_CPU == IMX31L) + || (CONFIG_CPU == IMX31L) || (CONFIG_CPU == DM320) /* Implemented in target/... */ #else static int pcm_freq = HW_SAMPR_DEFAULT; /* 44.1 is default */ diff --git a/firmware/target/arm/tms320dm320/crt0.S b/firmware/target/arm/tms320dm320/crt0.S new file mode 100755 index 0000000000..e54e56d06a --- /dev/null +++ b/firmware/target/arm/tms320dm320/crt0.S @@ -0,0 +1,208 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Linus Nielsen Feltzing + * + * Arm bootloader and startup code based on startup.s from the iPodLinux loader + * + * Copyright (c) 2003, Daniel Palffy (dpalffy (at) rainstorm.org) + * Copyright (c) 2005, Bernard Leach + * + * 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 "cpu.h" + + .section .init.text,"ax",%progbits + + .global start +start: + msr cpsr, #0xd3 /* enter supervisor mode, disable IRQ */ + +#if !defined(DEBUG) + /* Copy exception handler code to address 0 */ + ldr r2, =_vectorsstart + ldr r3, =_vectorsend + ldr r4, =_vectorscopy +1: + cmp r3, r2 + ldrhi r5, [r4], #4 + strhi r5, [r2], #4 + bhi 1b +#else + ldr r1, =vectors + ldr r0, =irq_handler + str r0, [r1, #24] + ldr r0, =fiq_handler + str r0, [r1, #28] +#endif + + /* Disable high vectors (at 0xffff0000 instead of 0x00000000) */ + mrc p15, 0, r0, c1, c0 + and r0, r0, #~(1<<13) + mcr p15, 0, r0, c1, c0 + +#if !defined(BOOTLOADER) + +#if !defined(STUB) + /* Zero out IBSS */ + ldr r2, =_iedata + ldr r3, =_iend + mov r4, #0 +1: + cmp r3, r2 + strhi r4, [r2], #4 + bhi 1b + + /* Copy the IRAM */ + ldr r2, =_iramcopy + ldr r3, =_iramstart + ldr r4, =_iramend +1: + cmp r4, r3 + ldrhi r5, [r2], #4 + strhi r5, [r3], #4 + bhi 1b +#endif /* !STUB */ +#endif /* !BOOTLOADER */ + + /* Initialise bss section to zero */ + ldr r2, =_edata + ldr r3, =_end + mov r4, #0 +1: + cmp r3, r2 + strhi r4, [r2], #4 + bhi 1b + + /* Set up some stack and munge it with 0xdeadbeef */ + ldr r3, =stackend + ldr r2, =stackbegin + ldr r4, =0xdeadbeef +1: + cmp r3, r2 + strhi r4, [r2], #4 + bhi 1b + + /* Set up stack for IRQ mode */ + msr cpsr_c, #0xd2 + ldr sp, =irq_stack + /* Set up stack for FIQ mode */ + msr cpsr_c, #0xd1 + ldr sp, =fiq_stack + + /* Let abort and undefined modes use IRQ stack */ + msr cpsr_c, #0xd7 + ldr sp, =irq_stack + msr cpsr_c, #0xdb + ldr sp, =irq_stack + /* Switch to supervisor mode (no IRQ) */ + msr cpsr_c, #0xd3 + ldr sp, =stackend + +#ifdef BOOTLOADER + /* get the high part of our execute address */ + ldr r2, =0xffffff00 + and r4, pc, r2 + + /* Copy bootloader to safe area - 0x01900000 */ + mov r5, #0x00900000 + add r5, r5, #0x01000000 + ldr r6, = _dataend + sub r0, r6, r5 /* length of loader */ + add r0, r4, r0 /* r0 points to start of loader */ +1: + cmp r5, r6 + ldrcc r2, [r4], #4 + strcc r2, [r5], #4 + bcc 1b + + ldr pc, =start_loc /* jump to the relocated start_loc: */ + +#endif + +start_loc: + bl main + /* main() should never return */ + +/* Exception handlers. Will be copied to address 0 after memory remapping */ + .section .vectors,"aw" + ldr pc, [pc, #24] + ldr pc, [pc, #24] + ldr pc, [pc, #24] + ldr pc, [pc, #24] + ldr pc, [pc, #24] + ldr pc, [pc, #24] + ldr pc, [pc, #24] + ldr pc, [pc, #24] + + /* Exception vectors */ + .global vectors +vectors: + .word start + .word undef_instr_handler + .word software_int_handler + .word prefetch_abort_handler + .word data_abort_handler + .word reserved_handler + .word irq_handler + .word fiq_handler + + .text + +#if !defined(STUB) + .global irq + .global fiq + .global UIE +#endif + +/* All illegal exceptions call into UIE with exception address as first + parameter. This is calculated differently depending on which exception + we're in. Second parameter is exception number, used for a string lookup + in UIE. + */ +undef_instr_handler: + mov r0, lr + mov r1, #0 + b UIE + +/* We run supervisor mode most of the time, and should never see a software + exception being thrown. Perhaps make it illegal and call UIE? + */ +software_int_handler: +reserved_handler: + movs pc, lr + +prefetch_abort_handler: + sub r0, lr, #4 + mov r1, #1 + b UIE + +data_abort_handler: + sub r0, lr, #8 + mov r1, #2 + b UIE + +#if defined(STUB) || defined(BOOTLOADER) +UIE: + b UIE +#endif + +/* 256 words of IRQ stack */ + .space 256*4 +irq_stack: + +/* 256 words of FIQ stack */ + .space 256*4 +fiq_stack: diff --git a/firmware/target/arm/tms320dm320/i2c-dm320.c b/firmware/target/arm/tms320dm320/i2c-dm320.c new file mode 100755 index 0000000000..f1383fee05 --- /dev/null +++ b/firmware/target/arm/tms320dm320/i2c-dm320.c @@ -0,0 +1,50 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2007 by Karl Kurbjun + * + * 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 "system.h" +#include "i2c-dm320.h" + +static int i2c_getack(void) +{ + +} + +static int i2c_start(void) +{ + +} + +static void i2c_stop(void) +{ + +} + +static int i2c_outb(unsigned char byte) +{ + +} + +void i2c_write(int addr, const unsigned char *buf, int count) +{ + +} + +void i2c_init(void) +{ + +} diff --git a/firmware/target/arm/tms320dm320/i2c-dm320.h b/firmware/target/arm/tms320dm320/i2c-dm320.h new file mode 100755 index 0000000000..aa7ced1119 --- /dev/null +++ b/firmware/target/arm/tms320dm320/i2c-dm320.h @@ -0,0 +1,44 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: i2c-meg-fx.h 13720 2007-06-26 02:11:30Z jethead71 $ + * + * Copyright (C) 2007 by Michael Sevakis + * + * 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. + * + ****************************************************************************/ + +/* chip-specific i2c functions */ + +/* IICCON */ +#define I2C_ACKGEN (1 << 7) +#define I2C_TXCLK_512 (1 << 6) +#define I2C_TXRX_INTENB (1 << 5) +#define I2C_TXRX_INTPND (1 << 4) + +/* IICSTAT */ +#define I2C_MODE_MASTER (2 << 6) +#define I2C_MODE_TX (1 << 6) +#define I2C_BUSY (1 << 5) +#define I2C_START (1 << 5) +#define I2C_RXTX_ENB (1 << 4) +#define I2C_BUS_ARB_FAILED (1 << 3) +#define I2C_S_ADDR_STAT (1 << 2) +#define I2C_S_ADDR_MATCH (1 << 1) +#define I2C_ACK_L (1 << 0) + +/* IICLC */ +#define I2C_FLT_ENB (1 << 2) + +void i2c_init(void); +void i2c_write(int addr, const unsigned char *data, int count); + diff --git a/firmware/target/arm/tms320dm320/kernel-mr500.c b/firmware/target/arm/tms320dm320/kernel-mr500.c new file mode 100644 index 0000000000..be2b14b3cb --- /dev/null +++ b/firmware/target/arm/tms320dm320/kernel-mr500.c @@ -0,0 +1,63 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2007 by Karl Kurbjun + * + * 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 "system.h" +#include "kernel.h" +#include "timer.h" +#include "thread.h" + +extern void (*tick_funcs[MAX_NUM_TICK_TASKS])(void); + +void tick_start(unsigned int interval_in_ms) +{ + IO_TIMER1_TMMD = CONFIG_TIMER1_TMMD_STOP; + + /* Setup the Prescalar (Divide by 10) + * Based on linux/include/asm-arm/arch-integrator/timex.h + */ + IO_TIMER1_TMPRSCL = 0x000A; + + /* Setup the Divisor */ + IO_TIMER1_TMDIV = (TIMER_FREQ / (10*1000))*interval_in_ms; + + /* Turn Timer1 to Free Run mode */ + IO_TIMER1_TMMD = CONFIG_TIMER1_TMMD_FREE_RUN; + + /* Enable the interrupt */ + IO_INTC_EINT0 |= 1< ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Linus Nielsen Feltzing - * - * Arm bootloader and startup code based on startup.s from the iPodLinux loader - * - * Copyright (c) 2003, Daniel Palffy (dpalffy (at) rainstorm.org) - * Copyright (c) 2005, Bernard Leach - * - * 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 "cpu.h" - - .section .init.text,"ax",%progbits - - .global start -start: - msr cpsr, #0xd3 /* enter supervisor mode, disable IRQ */ - -#if !defined(DEBUG) - /* Copy exception handler code to address 0 */ - ldr r2, =_vectorsstart - ldr r3, =_vectorsend - ldr r4, =_vectorscopy -1: - cmp r3, r2 - ldrhi r5, [r4], #4 - strhi r5, [r2], #4 - bhi 1b -#else - ldr r1, =vectors - ldr r0, =irq_handler - str r0, [r1, #24] - ldr r0, =fiq_handler - str r0, [r1, #28] -#endif - - /* Disable high vectors (at 0xffff0000 instead of 0x00000000) */ - mrc p15, 0, r0, c1, c0 - and r0, r0, #~(1<<13) - mcr p15, 0, r0, c1, c0 - -#if !defined(BOOTLOADER) - -#if !defined(STUB) - /* Zero out IBSS */ - ldr r2, =_iedata - ldr r3, =_iend - mov r4, #0 -1: - cmp r3, r2 - strhi r4, [r2], #4 - bhi 1b - - /* Copy the IRAM */ - ldr r2, =_iramcopy - ldr r3, =_iramstart - ldr r4, =_iramend -1: - cmp r4, r3 - ldrhi r5, [r2], #4 - strhi r5, [r3], #4 - bhi 1b -#endif /* !STUB */ -#endif /* !BOOTLOADER */ - - /* Initialise bss section to zero */ - ldr r2, =_edata - ldr r3, =_end - mov r4, #0 -1: - cmp r3, r2 - strhi r4, [r2], #4 - bhi 1b - - /* Set up some stack and munge it with 0xdeadbeef */ - ldr r3, =stackend - ldr r2, =stackbegin - ldr r4, =0xdeadbeef -1: - cmp r3, r2 - strhi r4, [r2], #4 - bhi 1b - - /* Set up stack for IRQ mode */ - msr cpsr_c, #0xd2 - ldr sp, =irq_stack - /* Set up stack for FIQ mode */ - msr cpsr_c, #0xd1 - ldr sp, =fiq_stack - - /* Let abort and undefined modes use IRQ stack */ - msr cpsr_c, #0xd7 - ldr sp, =irq_stack - msr cpsr_c, #0xdb - ldr sp, =irq_stack - /* Switch to supervisor mode (no IRQ) */ - msr cpsr_c, #0xd3 - ldr sp, =stackend - -#ifdef BOOTLOADER - /* get the high part of our execute address */ - ldr r2, =0xffffff00 - and r4, pc, r2 - - /* Copy bootloader to safe area - 0x01900000 */ - mov r5, #0x00900000 - add r5, r5, #0x01000000 - ldr r6, = _dataend - sub r0, r6, r5 /* length of loader */ - add r0, r4, r0 /* r0 points to start of loader */ -1: - cmp r5, r6 - ldrcc r2, [r4], #4 - strcc r2, [r5], #4 - bcc 1b - - ldr pc, =start_loc /* jump to the relocated start_loc: */ - -#endif - -start_loc: - bl main - /* main() should never return */ - -/* Exception handlers. Will be copied to address 0 after memory remapping */ - .section .vectors,"aw" - ldr pc, [pc, #24] - ldr pc, [pc, #24] - ldr pc, [pc, #24] - ldr pc, [pc, #24] - ldr pc, [pc, #24] - ldr pc, [pc, #24] - ldr pc, [pc, #24] - ldr pc, [pc, #24] - - /* Exception vectors */ - .global vectors -vectors: - .word start - .word undef_instr_handler - .word software_int_handler - .word prefetch_abort_handler - .word data_abort_handler - .word reserved_handler - .word irq_handler - .word fiq_handler - - .text - -#if !defined(STUB) - .global irq - .global fiq - .global UIE -#endif - -/* All illegal exceptions call into UIE with exception address as first - parameter. This is calculated differently depending on which exception - we're in. Second parameter is exception number, used for a string lookup - in UIE. - */ -undef_instr_handler: - mov r0, lr - mov r1, #0 - b UIE - -/* We run supervisor mode most of the time, and should never see a software - exception being thrown. Perhaps make it illegal and call UIE? - */ -software_int_handler: -reserved_handler: - movs pc, lr - -prefetch_abort_handler: - sub r0, lr, #4 - mov r1, #1 - b UIE - -data_abort_handler: - sub r0, lr, #8 - mov r1, #2 - b UIE - -UIE: - b UIE - -/* 256 words of IRQ stack */ - .space 256*4 -irq_stack: - -/* 256 words of FIQ stack */ - .space 256*4 -fiq_stack: diff --git a/firmware/target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c new file mode 100755 index 0000000000..eed1f8d3a0 --- /dev/null +++ b/firmware/target/arm/tms320dm320/mrobe-500/dm320codec-mr500.c @@ -0,0 +1,39 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (c) 2007 by Karl Kurbjun + * + * 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 "cpu.h" +#include "kernel.h" +#include "sound.h" + +const struct sound_settings_info audiohw_settings[] = { + [SOUND_VOLUME] = {"dB", 0, 1, -74, 6, -25}, + [SOUND_BASS] = {"dB", 1, 15, -60, 90, 0}, + [SOUND_TREBLE] = {"dB", 1, 15, -60, 90, 0}, + [SOUND_BALANCE] = {"%", 0, 1,-100, 100, 0}, + [SOUND_CHANNELS] = {"", 0, 1, 0, 5, 0}, + [SOUND_STEREO_WIDTH] = {"%", 0, 1, 0, 255, 100}, +}; + + +void audiohw_init(void) +{ +} + +void audiohw_close(void) +{ +} diff --git a/firmware/target/arm/tms320dm320/mrobe-500/kernel-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/kernel-mr500.c deleted file mode 100644 index be2b14b3cb..0000000000 --- a/firmware/target/arm/tms320dm320/mrobe-500/kernel-mr500.c +++ /dev/null @@ -1,63 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by Karl Kurbjun - * - * 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 "system.h" -#include "kernel.h" -#include "timer.h" -#include "thread.h" - -extern void (*tick_funcs[MAX_NUM_TICK_TASKS])(void); - -void tick_start(unsigned int interval_in_ms) -{ - IO_TIMER1_TMMD = CONFIG_TIMER1_TMMD_STOP; - - /* Setup the Prescalar (Divide by 10) - * Based on linux/include/asm-arm/arch-integrator/timex.h - */ - IO_TIMER1_TMPRSCL = 0x000A; - - /* Setup the Divisor */ - IO_TIMER1_TMDIV = (TIMER_FREQ / (10*1000))*interval_in_ms; - - /* Turn Timer1 to Free Run mode */ - IO_TIMER1_TMMD = CONFIG_TIMER1_TMMD_FREE_RUN; - - /* Enable the interrupt */ - IO_INTC_EINT0 |= 1<> 1; /* Skip down one chroma line */ yuv_src[2] += stride >> 1; diff --git a/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c new file mode 100755 index 0000000000..3bc9124674 --- /dev/null +++ b/firmware/target/arm/tms320dm320/mrobe-500/pcm-mr500.c @@ -0,0 +1,85 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2007 by Karl Kurbjun + * + * 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 +#include "system.h" +#include "kernel.h" +#include "logf.h" +#include "audio.h" +#include "sound.h" +#include "file.h" + +static void _pcm_apply_settings(void) +{ +} + +void pcm_apply_settings(void) +{ +} + +void pcm_init(void) +{ +} + +void pcm_postinit(void) +{ +} + +void pcm_play_dma_start(const void *addr, size_t size) +{ + +} + +static void pcm_play_dma_stop_fiq(void) +{ + +} + +void pcm_play_dma_stop(void) +{ + +} + +void pcm_play_pause_pause(void) +{ +} + +void pcm_play_pause_unpause(void) +{ +} + +void pcm_set_frequency(unsigned int frequency) +{ +} + +size_t pcm_get_bytes_waiting(void) +{ +} + +void pcm_mute(bool mute) +{ +} + +/** + * Return playback peaks - Peaks ahead in the DMA buffer based upon the + * calling period to attempt to compensate for + * delay. + */ +void pcm_calculate_peaks(int *left, int *right) +{ +} /* pcm_calculate_peaks */ diff --git a/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c new file mode 100755 index 0000000000..20ca4bb509 --- /dev/null +++ b/firmware/target/arm/tms320dm320/mrobe-500/powermgmt-mr500.c @@ -0,0 +1,51 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2007 by Karl Kurbjun + * + * 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 "adc.h" +#include "powermgmt.h" + +const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] = +{ + 3450 +}; + +const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] = +{ + 3400 +}; + +/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */ +const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] = +{ + { 3480, 3550, 3590, 3610, 3630, 3650, 3700, 3760, 3800, 3910, 3990 }, +}; + +/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */ +const unsigned short percent_to_volt_charge[11] = +{ + 3480, 3550, 3590, 3610, 3630, 3650, 3700, 3760, 3800, 3910, 3990 +}; + +/* Returns battery voltage from ADC [millivolts] */ +unsigned int battery_adc_voltage(void) +{ + return 3500; +} + diff --git a/firmware/target/arm/tms320dm320/mrobe-500/spi-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/spi-mr500.c deleted file mode 100644 index c47ab8f6ed..0000000000 --- a/firmware/target/arm/tms320dm320/mrobe-500/spi-mr500.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * SPI interface driver for the DM320 SoC - * - * Copyright (C) 2007 shirour - * Copyright (C) 2007 Catalin Patulea - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN - * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF - * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -#include "system.h" - -#define GIO_TS_ENABLE (1<<2) -#define clr_gio_enable() IO_GIO_BITSET1=GIO_TS_ENABLE -#define set_gio_enable() IO_GIO_BITCLR1=GIO_TS_ENABLE - -int spi_block_transfer(const uint8_t *tx_bytes, unsigned int tx_size, - uint8_t *rx_bytes, unsigned int rx_size) -{ - /* Activate the slave select pin */ - set_gio_enable(); - - while (tx_size--) - { - /* Send one byte */ - IO_SERIAL0_TX_DATA = *tx_bytes++; - - /* Wait until transfer finished */ - while (IO_SERIAL0_RX_DATA & 0x100); - } - - while (rx_size--) - { - /* Make the clock tick */ - IO_SERIAL0_TX_DATA = 0; - - /* Wait until transfer finished */ - unsigned short data; - while ((data = IO_SERIAL0_RX_DATA) & 0x100); - - *rx_bytes++ = data & 0xff; - } - - clr_gio_enable(); - - return 0; -} - -void spi_init(void) -{ - /* Set SCLK idle level = 0 */ - IO_SERIAL0_MODE |= (1<<10); - - /* Enable TX */ - IO_SERIAL0_TX_ENABLE = 0x0001; - - /* Set GIO 18 to output for touch screen slave enable */ - IO_GIO_DIR1&=~GIO_TS_ENABLE; - clr_gio_enable(); -} diff --git a/firmware/target/arm/tms320dm320/mrobe-500/spi-target.h b/firmware/target/arm/tms320dm320/mrobe-500/spi-target.h deleted file mode 100644 index 866919dc27..0000000000 --- a/firmware/target/arm/tms320dm320/mrobe-500/spi-target.h +++ /dev/null @@ -1,29 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by Catalin Patulea - * - * 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 SPI_TARGET_H -#define SPI_TARGET_H - -#include - -void spi_init(void); -int spi_block_transfer(const uint8_t *tx_bytes, unsigned int tx_size, - uint8_t *rx_bytes, unsigned int rx_size); - -#endif diff --git a/firmware/target/arm/tms320dm320/mrobe-500/system-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/system-mr500.c deleted file mode 100644 index fad2d4331e..0000000000 --- a/firmware/target/arm/tms320dm320/mrobe-500/system-mr500.c +++ /dev/null @@ -1,210 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2007 by Karl Kurbjun - * - * 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 "kernel.h" -#include "system.h" -#include "panic.h" - -#define default_interrupt(name) \ - extern __attribute__((weak,alias("UIRQ"))) void name (void) - -default_interrupt(TIMER0); -default_interrupt(TIMER1); -default_interrupt(TIMER2); -default_interrupt(TIMER3); -default_interrupt(CCD_VD0); -default_interrupt(CCD_VD1); -default_interrupt(CCD_WEN); -default_interrupt(VENC); -default_interrupt(SERIAL0); -default_interrupt(SERIAL1); -default_interrupt(EXT_HOST); -default_interrupt(DSPHINT); -default_interrupt(UART0); -default_interrupt(UART1); -default_interrupt(USB_DMA); -default_interrupt(USB_CORE); -default_interrupt(VLYNQ); -default_interrupt(MTC0); -default_interrupt(MTC1); -default_interrupt(SD_MMC); -default_interrupt(SDIO_MS); -default_interrupt(GIO0); -default_interrupt(GIO1); -default_interrupt(GIO2); -default_interrupt(GIO3); -default_interrupt(GIO4); -default_interrupt(GIO5); -default_interrupt(GIO6); -default_interrupt(GIO7); -default_interrupt(GIO8); -default_interrupt(GIO9); -default_interrupt(GIO10); -default_interrupt(GIO11); -default_interrupt(GIO12); -default_interrupt(GIO13); -default_interrupt(GIO14); -default_interrupt(GIO15); -default_interrupt(PREVIEW0); -default_interrupt(PREVIEW1); -default_interrupt(WATCHDOG); -default_interrupt(I2C); -default_interrupt(CLKC); -default_interrupt(ICE); -default_interrupt(ARMCOM_RX); -default_interrupt(ARMCOM_TX); -default_interrupt(RESERVED); - -static void (* const irqvector[])(void) = -{ - TIMER0,TIMER1,TIMER2,TIMER3,CCD_VD0,CCD_VD1, - CCD_WEN,VENC,SERIAL0,SERIAL1,EXT_HOST,DSPHINT, - UART0,UART1,USB_DMA,USB_CORE,VLYNQ,MTC0,MTC1, - SD_MMC,SDIO_MS,GIO0,GIO1,GIO2,GIO3,GIO4,GIO5, - GIO6,GIO7,GIO8,GIO9,GIO10,GIO11,GIO12,GIO13, - GIO14,GIO15,PREVIEW0,PREVIEW1,WATCHDOG,I2C,CLKC, - ICE,ARMCOM_RX,ARMCOM_TX,RESERVED -}; - -static const char * const irqname[] = -{ - "TIMER0","TIMER1","TIMER2","TIMER3","CCD_VD0","CCD_VD1", - "CCD_WEN","VENC","SERIAL0","SERIAL1","EXT_HOST","DSPHINT", - "UART0","UART1","USB_DMA","USB_CORE","VLYNQ","MTC0","MTC1", - "SD_MMC","SDIO_MS","GIO0","GIO1","GIO2","GIO3","GIO4","GIO5", - "GIO6","GIO7","GIO8","GIO9","GIO10","GIO11","GIO12","GIO13", - "GIO14","GIO15","PREVIEW0","PREVIEW1","WATCHDOG","I2C","CLKC", - "ICE","ARMCOM_RX","ARMCOM_TX","RESERVED" -}; - -static void UIRQ(void) -{ - unsigned int offset = (IO_INTC_IRQENTRY0>>2)-1; - panicf("Unhandled IRQ %02X: %s", offset, irqname[offset]); -} - -void irq_handler(void) __attribute__((interrupt ("IRQ"), naked)); -void irq_handler(void) -{ - /* - * Based on: linux/arch/arm/kernel/entry-armv.S and system-meg-fx.c - */ - - asm volatile( "stmfd sp!, {r0-r7, ip, lr} \n" /* Store context */ - "sub sp, sp, #8 \n"); /* Reserve stack */ - irqvector[(IO_INTC_IRQENTRY0>>2)-1](); - asm volatile( "add sp, sp, #8 \n" /* Cleanup stack */ - "ldmfd sp!, {r0-r7, ip, lr} \n" /* Restore context */ - "subs pc, lr, #4 \n"); /* Return from FIQ */ -} - -void fiq_handler(void) __attribute__((interrupt ("FIQ"), naked)); -void fiq_handler(void) -{ - /* - * Based on: linux/arch/arm/kernel/entry-armv.S and system-meg-fx.c - */ - - asm volatile ( - "sub lr, lr, #4 \r\n" - "stmfd sp!, {r0-r3, ip, lr} \r\n" - "mov r0, #0x00030000 \r\n" - "ldr r0, [r0, #0x518] \r\n" - "ldr r1, =irqvector \r\n" - "ldr r1, [r1, r0, lsl #2] \r\n" - "mov lr, pc \r\n" - "bx r1 \r\n" - "ldmfd sp!, {r0-r3, ip, pc}^ \r\n" - ); -} - -void system_reboot(void) -{ - -} - -void enable_interrupts (void) -{ - asm volatile ("msr cpsr_c, #0x13" ); -} - -void system_init(void) -{ - /* taken from linux/arch/arm/mach-itdm320-20/irq.c */ - - /* Clearing all FIQs and IRQs. */ - IO_INTC_IRQ0 = 0xFFFF; - IO_INTC_IRQ1 = 0xFFFF; - IO_INTC_IRQ2 = 0xFFFF; - - IO_INTC_FIQ0 = 0xFFFF; - IO_INTC_FIQ1 = 0xFFFF; - IO_INTC_FIQ2 = 0xFFFF; - - /* Masking all Interrupts. */ - IO_INTC_EINT0 = 0; - IO_INTC_EINT1 = 0; - IO_INTC_EINT2 = 0; - - /* Setting INTC to all IRQs. */ - IO_INTC_FISEL0 = 0; - IO_INTC_FISEL1 = 0; - IO_INTC_FISEL2 = 0; - - IO_INTC_ENTRY_TBA0 = - IO_INTC_ENTRY_TBA1 = 0; - - /* set GIO26 (reset pin) to output and low */ - IO_GIO_BITCLR1=(1<<10); - IO_GIO_DIR1&=~(1<<10); - - enable_interrupts(); -} - -int system_memory_guard(int newmode) -{ - (void)newmode; - return 0; -} - -#ifdef HAVE_ADJUSTABLE_CPU_FREQ - -void set_cpu_frequency(long frequency) -{ - if (frequency == CPUFREQ_MAX) - { - asm volatile("mov r0, #0\n" - "mrc p15, 0, r0, c1, c0, 0\n" - "orr r0, r0, #3<<30\n" /* set to Asynchronous mode*/ - "mcr p15, 0, r0, c1, c0, 0" : : : "r0"); - - FREQ = CPUFREQ_MAX; - } - else - { - asm volatile("mov r0, #0\n" - "mrc p15, 0, r0, c1, c0, 0\n" - "bic r0, r0, #3<<30\n" /* set to FastBus mode*/ - "mcr p15, 0, r0, c1, c0, 0" : : : "r0"); - - FREQ = CPUFREQ_NORMAL; - } -} - -#endif diff --git a/firmware/target/arm/tms320dm320/mrobe-500/system-target.h b/firmware/target/arm/tms320dm320/mrobe-500/system-target.h deleted file mode 100755 index 7adfda6f7d..0000000000 --- a/firmware/target/arm/tms320dm320/mrobe-500/system-target.h +++ /dev/null @@ -1,32 +0,0 @@ -/*************************************************************************** - * __________ __ ___. - * Open \______ \ ____ ____ | | _\_ |__ _______ ___ - * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / - * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < - * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ - * \/ \/ \/ \/ \/ - * $Id$ - * - * Copyright (C) 2002 by Karl Kurbjun - * - * 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 SYSTEM_TARGET_H -#define SYSTEM_TARGET_H - -#include "system-arm.h" - -#define CPUFREQ_SLEEP 32768 -#define CPUFREQ_DEFAULT 24000000 -#define CPUFREQ_NORMAL 30000000 -#define CPUFREQ_MAX 80000000 - -#define inw(p) (*((volatile unsigned short*)((p) + PHY_IO_BASE))) -#define outw(v,p) (*((volatile unsigned short*)((p) + PHY_IO_BASE)) = (v)) - -#endif /* SYSTEM_TARGET_H */ diff --git a/firmware/target/arm/tms320dm320/mrobe-500/timer-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/timer-mr500.c deleted file mode 100644 index 21449ed19f..0000000000 --- a/firmware/target/arm/tms320dm320/mrobe-500/timer-mr500.c +++ /dev/null @@ -1,106 +0,0 @@ -/*************************************************************************** -* __________ __ ___. -* Open \______ \ ____ ____ | | _\_ |__ _______ ___ -* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / -* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2007 by Karl Kurbjun -* -* 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 "cpu.h" -#include "system.h" -#include "timer.h" -#include "logf.h" - -/* GPB0/TOUT0 should already have been configured as output so that pin - should not be a functional pin and TIMER0 output unseen there */ -void TIMER0(void) -{ - if (pfn_timer != NULL) - pfn_timer(); - IO_INTC_IRQ0 |= 1< 1024; prescaler >>= 1, divider++); - - /* Setup the Prescalar */ - IO_TIMER0_TMPRSCL = prescaler; - - /* Setup the Divisor */ - IO_TIMER0_TMDIV = divider; - - set_irq_level(oldlevel); - - return true; -} - -bool __timer_register(void) -{ - bool retval = true; - - int oldstatus = set_interrupt_status(IRQ_FIQ_DISABLED, IRQ_FIQ_STATUS); - - stop_timer(); - - /* Turn Timer0 to Free Run mode */ - IO_TIMER0_TMMD = CONFIG_TIMER0_TMMD_FREE_RUN; - - IO_INTC_EINT0 |= 1< ) \___| < | \_\ ( <_> > < < -* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ -* \/ \/ \/ \/ \/ -* $Id$ -* -* Copyright (C) 2007 by Karl Kurbjun -* -* 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 TIMER_TARGET_H -#define TIMER_TARGET_H - -/* timer is based on PCLK and minimum division is 2 */ -#define TIMER_FREQ (27000000) - -bool __timer_set(long cycles, bool set); -bool __timer_register(void); -void __timer_unregister(void); - -#define __TIMER_SET(cycles, set) \ - __timer_set(cycles, set) - -#define __TIMER_REGISTER(reg_prio, unregister_callback, cycles, \ - int_prio, timer_callback) \ - __timer_register() - -#define __TIMER_UNREGISTER(...) \ - __timer_unregister() - -#endif /* TIMER_TARGET_H */ diff --git a/firmware/target/arm/tms320dm320/mrobe-500/uart-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/uart-mr500.c deleted file mode 100644 index 66e59eaaac..0000000000 --- a/firmware/target/arm/tms320dm320/mrobe-500/uart-mr500.c +++ /dev/null @@ -1,172 +0,0 @@ -/* - * (C) Copyright 2007 Catalin Patulea - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - */ -#include "config.h" -#include "cpu.h" -#include "system.h" - -/* UART 0/1 */ - -#define CONFIG_UART_BRSR 87 -#define MAX_UART_BUFFER 32 -static unsigned char uart1buffer[MAX_UART_BUFFER]; -int uart1read = 0, uart1write = 0, uart1count = 0; - -void do_checksums(char *data, int len, char *xor, char *add) -{ - int i; - *xor = data[0]; - *add = data[0]; - for(i=1;i= 0x20); - - // Write character - IO_UART1_DTRR=ch; -} - -// Unsigned integer to ASCII hexadecimal conversion -void uartPutHex(unsigned int n) { - unsigned int i; - - for (i = 8; i != 0; i--) { - unsigned int digit = n >> 28; - uartPutc(digit >= 10 ? digit - 10 + 'A' : digit + '0'); - n <<= 4; - } -} - -void uartPuts(const char *str) { - char ch; - while ((ch = *str++) != '\0') { - uartPutc(ch); - } -} - -void uartGets(char *str, unsigned int size) { - for (;;) { - char ch; - - // Wait for FIFO to contain something - while ((IO_UART1_RFCR & 0x3f) == 0); - - // Read character - ch = (char)IO_UART1_DTRR; - - // Echo character back - IO_UART1_DTRR=ch; - - // If CR, also echo LF, null-terminate, and return - if (ch == '\r') { - IO_UART1_DTRR='\n'; - if (size) { - *str++ = '\0'; - } - return; - } - - // Append to buffer - if (size) { - *str++ = ch; - --size; - } - } -} - -int uartPollch(unsigned int ticks) { - while (ticks--) { - if (IO_UART1_RFCR & 0x3f) { - return IO_UART1_DTRR & 0xff; - } - } - - return -1; -} - -bool uartAvailable(void) -{ - return uart1count > 0; -} - -void uart1_heartbeat(void) -{ - char data[5] = {0x11, 0x30, 0x11^0x30, 0x11+0x30, '\0'}; - uartPuts(data); -} - -void uartSendData(char* data, int len) -{ - int i; - for(i=0;i 0) - { - *c = uart1buffer[uart1read]; - uart1read = (uart1read+1) % MAX_UART_BUFFER; - uart1count--; - return true; - } - return false; -} - -/* UART1 receive intterupt handler */ -void UART1(void) -{ - if (IO_UART1_RFCR & 0x3f) - { - if (uart1count >= MAX_UART_BUFFER) - panicf("UART1 buffer overflow"); - uart1buffer[uart1write] = IO_UART1_DTRR & 0xff; - uart1write = (uart1write+1) % MAX_UART_BUFFER; - uart1count++; - } - - IO_INTC_IRQ0 = (1< - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License as - * published by the Free Software Foundation; either version 2 of - * the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, - * MA 02111-1307 USA - * - */ -#ifndef UART_H -#define UART_H - -void uart_init(void); -bool uart1_getch(char *c); -void uart1_heartbeat(void); - -void uartPuts(const char *str); -void uartGets(char *str, unsigned int size); -int uartPollch(unsigned int ticks); -void uartPutc(char ch); -void uartPutHex(unsigned int n); - -#endif diff --git a/firmware/target/arm/tms320dm320/spi-mr500.c b/firmware/target/arm/tms320dm320/spi-mr500.c new file mode 100644 index 0000000000..c47ab8f6ed --- /dev/null +++ b/firmware/target/arm/tms320dm320/spi-mr500.c @@ -0,0 +1,77 @@ +/* + * SPI interface driver for the DM320 SoC + * + * Copyright (C) 2007 shirour + * Copyright (C) 2007 Catalin Patulea + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include "system.h" + +#define GIO_TS_ENABLE (1<<2) +#define clr_gio_enable() IO_GIO_BITSET1=GIO_TS_ENABLE +#define set_gio_enable() IO_GIO_BITCLR1=GIO_TS_ENABLE + +int spi_block_transfer(const uint8_t *tx_bytes, unsigned int tx_size, + uint8_t *rx_bytes, unsigned int rx_size) +{ + /* Activate the slave select pin */ + set_gio_enable(); + + while (tx_size--) + { + /* Send one byte */ + IO_SERIAL0_TX_DATA = *tx_bytes++; + + /* Wait until transfer finished */ + while (IO_SERIAL0_RX_DATA & 0x100); + } + + while (rx_size--) + { + /* Make the clock tick */ + IO_SERIAL0_TX_DATA = 0; + + /* Wait until transfer finished */ + unsigned short data; + while ((data = IO_SERIAL0_RX_DATA) & 0x100); + + *rx_bytes++ = data & 0xff; + } + + clr_gio_enable(); + + return 0; +} + +void spi_init(void) +{ + /* Set SCLK idle level = 0 */ + IO_SERIAL0_MODE |= (1<<10); + + /* Enable TX */ + IO_SERIAL0_TX_ENABLE = 0x0001; + + /* Set GIO 18 to output for touch screen slave enable */ + IO_GIO_DIR1&=~GIO_TS_ENABLE; + clr_gio_enable(); +} diff --git a/firmware/target/arm/tms320dm320/spi-target.h b/firmware/target/arm/tms320dm320/spi-target.h new file mode 100644 index 0000000000..866919dc27 --- /dev/null +++ b/firmware/target/arm/tms320dm320/spi-target.h @@ -0,0 +1,29 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2007 by Catalin Patulea + * + * 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 SPI_TARGET_H +#define SPI_TARGET_H + +#include + +void spi_init(void); +int spi_block_transfer(const uint8_t *tx_bytes, unsigned int tx_size, + uint8_t *rx_bytes, unsigned int rx_size); + +#endif diff --git a/firmware/target/arm/tms320dm320/system-mr500.c b/firmware/target/arm/tms320dm320/system-mr500.c new file mode 100644 index 0000000000..fad2d4331e --- /dev/null +++ b/firmware/target/arm/tms320dm320/system-mr500.c @@ -0,0 +1,210 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2007 by Karl Kurbjun + * + * 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 "kernel.h" +#include "system.h" +#include "panic.h" + +#define default_interrupt(name) \ + extern __attribute__((weak,alias("UIRQ"))) void name (void) + +default_interrupt(TIMER0); +default_interrupt(TIMER1); +default_interrupt(TIMER2); +default_interrupt(TIMER3); +default_interrupt(CCD_VD0); +default_interrupt(CCD_VD1); +default_interrupt(CCD_WEN); +default_interrupt(VENC); +default_interrupt(SERIAL0); +default_interrupt(SERIAL1); +default_interrupt(EXT_HOST); +default_interrupt(DSPHINT); +default_interrupt(UART0); +default_interrupt(UART1); +default_interrupt(USB_DMA); +default_interrupt(USB_CORE); +default_interrupt(VLYNQ); +default_interrupt(MTC0); +default_interrupt(MTC1); +default_interrupt(SD_MMC); +default_interrupt(SDIO_MS); +default_interrupt(GIO0); +default_interrupt(GIO1); +default_interrupt(GIO2); +default_interrupt(GIO3); +default_interrupt(GIO4); +default_interrupt(GIO5); +default_interrupt(GIO6); +default_interrupt(GIO7); +default_interrupt(GIO8); +default_interrupt(GIO9); +default_interrupt(GIO10); +default_interrupt(GIO11); +default_interrupt(GIO12); +default_interrupt(GIO13); +default_interrupt(GIO14); +default_interrupt(GIO15); +default_interrupt(PREVIEW0); +default_interrupt(PREVIEW1); +default_interrupt(WATCHDOG); +default_interrupt(I2C); +default_interrupt(CLKC); +default_interrupt(ICE); +default_interrupt(ARMCOM_RX); +default_interrupt(ARMCOM_TX); +default_interrupt(RESERVED); + +static void (* const irqvector[])(void) = +{ + TIMER0,TIMER1,TIMER2,TIMER3,CCD_VD0,CCD_VD1, + CCD_WEN,VENC,SERIAL0,SERIAL1,EXT_HOST,DSPHINT, + UART0,UART1,USB_DMA,USB_CORE,VLYNQ,MTC0,MTC1, + SD_MMC,SDIO_MS,GIO0,GIO1,GIO2,GIO3,GIO4,GIO5, + GIO6,GIO7,GIO8,GIO9,GIO10,GIO11,GIO12,GIO13, + GIO14,GIO15,PREVIEW0,PREVIEW1,WATCHDOG,I2C,CLKC, + ICE,ARMCOM_RX,ARMCOM_TX,RESERVED +}; + +static const char * const irqname[] = +{ + "TIMER0","TIMER1","TIMER2","TIMER3","CCD_VD0","CCD_VD1", + "CCD_WEN","VENC","SERIAL0","SERIAL1","EXT_HOST","DSPHINT", + "UART0","UART1","USB_DMA","USB_CORE","VLYNQ","MTC0","MTC1", + "SD_MMC","SDIO_MS","GIO0","GIO1","GIO2","GIO3","GIO4","GIO5", + "GIO6","GIO7","GIO8","GIO9","GIO10","GIO11","GIO12","GIO13", + "GIO14","GIO15","PREVIEW0","PREVIEW1","WATCHDOG","I2C","CLKC", + "ICE","ARMCOM_RX","ARMCOM_TX","RESERVED" +}; + +static void UIRQ(void) +{ + unsigned int offset = (IO_INTC_IRQENTRY0>>2)-1; + panicf("Unhandled IRQ %02X: %s", offset, irqname[offset]); +} + +void irq_handler(void) __attribute__((interrupt ("IRQ"), naked)); +void irq_handler(void) +{ + /* + * Based on: linux/arch/arm/kernel/entry-armv.S and system-meg-fx.c + */ + + asm volatile( "stmfd sp!, {r0-r7, ip, lr} \n" /* Store context */ + "sub sp, sp, #8 \n"); /* Reserve stack */ + irqvector[(IO_INTC_IRQENTRY0>>2)-1](); + asm volatile( "add sp, sp, #8 \n" /* Cleanup stack */ + "ldmfd sp!, {r0-r7, ip, lr} \n" /* Restore context */ + "subs pc, lr, #4 \n"); /* Return from FIQ */ +} + +void fiq_handler(void) __attribute__((interrupt ("FIQ"), naked)); +void fiq_handler(void) +{ + /* + * Based on: linux/arch/arm/kernel/entry-armv.S and system-meg-fx.c + */ + + asm volatile ( + "sub lr, lr, #4 \r\n" + "stmfd sp!, {r0-r3, ip, lr} \r\n" + "mov r0, #0x00030000 \r\n" + "ldr r0, [r0, #0x518] \r\n" + "ldr r1, =irqvector \r\n" + "ldr r1, [r1, r0, lsl #2] \r\n" + "mov lr, pc \r\n" + "bx r1 \r\n" + "ldmfd sp!, {r0-r3, ip, pc}^ \r\n" + ); +} + +void system_reboot(void) +{ + +} + +void enable_interrupts (void) +{ + asm volatile ("msr cpsr_c, #0x13" ); +} + +void system_init(void) +{ + /* taken from linux/arch/arm/mach-itdm320-20/irq.c */ + + /* Clearing all FIQs and IRQs. */ + IO_INTC_IRQ0 = 0xFFFF; + IO_INTC_IRQ1 = 0xFFFF; + IO_INTC_IRQ2 = 0xFFFF; + + IO_INTC_FIQ0 = 0xFFFF; + IO_INTC_FIQ1 = 0xFFFF; + IO_INTC_FIQ2 = 0xFFFF; + + /* Masking all Interrupts. */ + IO_INTC_EINT0 = 0; + IO_INTC_EINT1 = 0; + IO_INTC_EINT2 = 0; + + /* Setting INTC to all IRQs. */ + IO_INTC_FISEL0 = 0; + IO_INTC_FISEL1 = 0; + IO_INTC_FISEL2 = 0; + + IO_INTC_ENTRY_TBA0 = + IO_INTC_ENTRY_TBA1 = 0; + + /* set GIO26 (reset pin) to output and low */ + IO_GIO_BITCLR1=(1<<10); + IO_GIO_DIR1&=~(1<<10); + + enable_interrupts(); +} + +int system_memory_guard(int newmode) +{ + (void)newmode; + return 0; +} + +#ifdef HAVE_ADJUSTABLE_CPU_FREQ + +void set_cpu_frequency(long frequency) +{ + if (frequency == CPUFREQ_MAX) + { + asm volatile("mov r0, #0\n" + "mrc p15, 0, r0, c1, c0, 0\n" + "orr r0, r0, #3<<30\n" /* set to Asynchronous mode*/ + "mcr p15, 0, r0, c1, c0, 0" : : : "r0"); + + FREQ = CPUFREQ_MAX; + } + else + { + asm volatile("mov r0, #0\n" + "mrc p15, 0, r0, c1, c0, 0\n" + "bic r0, r0, #3<<30\n" /* set to FastBus mode*/ + "mcr p15, 0, r0, c1, c0, 0" : : : "r0"); + + FREQ = CPUFREQ_NORMAL; + } +} + +#endif diff --git a/firmware/target/arm/tms320dm320/system-target.h b/firmware/target/arm/tms320dm320/system-target.h new file mode 100755 index 0000000000..7adfda6f7d --- /dev/null +++ b/firmware/target/arm/tms320dm320/system-target.h @@ -0,0 +1,32 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 by Karl Kurbjun + * + * 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 SYSTEM_TARGET_H +#define SYSTEM_TARGET_H + +#include "system-arm.h" + +#define CPUFREQ_SLEEP 32768 +#define CPUFREQ_DEFAULT 24000000 +#define CPUFREQ_NORMAL 30000000 +#define CPUFREQ_MAX 80000000 + +#define inw(p) (*((volatile unsigned short*)((p) + PHY_IO_BASE))) +#define outw(v,p) (*((volatile unsigned short*)((p) + PHY_IO_BASE)) = (v)) + +#endif /* SYSTEM_TARGET_H */ diff --git a/firmware/target/arm/tms320dm320/timer-mr500.c b/firmware/target/arm/tms320dm320/timer-mr500.c new file mode 100644 index 0000000000..21449ed19f --- /dev/null +++ b/firmware/target/arm/tms320dm320/timer-mr500.c @@ -0,0 +1,106 @@ +/*************************************************************************** +* __________ __ ___. +* Open \______ \ ____ ____ | | _\_ |__ _______ ___ +* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / +* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < +* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +* \/ \/ \/ \/ \/ +* $Id$ +* +* Copyright (C) 2007 by Karl Kurbjun +* +* 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 "cpu.h" +#include "system.h" +#include "timer.h" +#include "logf.h" + +/* GPB0/TOUT0 should already have been configured as output so that pin + should not be a functional pin and TIMER0 output unseen there */ +void TIMER0(void) +{ + if (pfn_timer != NULL) + pfn_timer(); + IO_INTC_IRQ0 |= 1< 1024; prescaler >>= 1, divider++); + + /* Setup the Prescalar */ + IO_TIMER0_TMPRSCL = prescaler; + + /* Setup the Divisor */ + IO_TIMER0_TMDIV = divider; + + set_irq_level(oldlevel); + + return true; +} + +bool __timer_register(void) +{ + bool retval = true; + + int oldstatus = set_interrupt_status(IRQ_FIQ_DISABLED, IRQ_FIQ_STATUS); + + stop_timer(); + + /* Turn Timer0 to Free Run mode */ + IO_TIMER0_TMMD = CONFIG_TIMER0_TMMD_FREE_RUN; + + IO_INTC_EINT0 |= 1< ) \___| < | \_\ ( <_> > < < +* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +* \/ \/ \/ \/ \/ +* $Id$ +* +* Copyright (C) 2007 by Karl Kurbjun +* +* 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 TIMER_TARGET_H +#define TIMER_TARGET_H + +/* timer is based on PCLK and minimum division is 2 */ +#define TIMER_FREQ (27000000) + +bool __timer_set(long cycles, bool set); +bool __timer_register(void); +void __timer_unregister(void); + +#define __TIMER_SET(cycles, set) \ + __timer_set(cycles, set) + +#define __TIMER_REGISTER(reg_prio, unregister_callback, cycles, \ + int_prio, timer_callback) \ + __timer_register() + +#define __TIMER_UNREGISTER(...) \ + __timer_unregister() + +#endif /* TIMER_TARGET_H */ diff --git a/firmware/target/arm/tms320dm320/uart-mr500.c b/firmware/target/arm/tms320dm320/uart-mr500.c new file mode 100644 index 0000000000..66e59eaaac --- /dev/null +++ b/firmware/target/arm/tms320dm320/uart-mr500.c @@ -0,0 +1,172 @@ +/* + * (C) Copyright 2007 Catalin Patulea + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ +#include "config.h" +#include "cpu.h" +#include "system.h" + +/* UART 0/1 */ + +#define CONFIG_UART_BRSR 87 +#define MAX_UART_BUFFER 32 +static unsigned char uart1buffer[MAX_UART_BUFFER]; +int uart1read = 0, uart1write = 0, uart1count = 0; + +void do_checksums(char *data, int len, char *xor, char *add) +{ + int i; + *xor = data[0]; + *add = data[0]; + for(i=1;i= 0x20); + + // Write character + IO_UART1_DTRR=ch; +} + +// Unsigned integer to ASCII hexadecimal conversion +void uartPutHex(unsigned int n) { + unsigned int i; + + for (i = 8; i != 0; i--) { + unsigned int digit = n >> 28; + uartPutc(digit >= 10 ? digit - 10 + 'A' : digit + '0'); + n <<= 4; + } +} + +void uartPuts(const char *str) { + char ch; + while ((ch = *str++) != '\0') { + uartPutc(ch); + } +} + +void uartGets(char *str, unsigned int size) { + for (;;) { + char ch; + + // Wait for FIFO to contain something + while ((IO_UART1_RFCR & 0x3f) == 0); + + // Read character + ch = (char)IO_UART1_DTRR; + + // Echo character back + IO_UART1_DTRR=ch; + + // If CR, also echo LF, null-terminate, and return + if (ch == '\r') { + IO_UART1_DTRR='\n'; + if (size) { + *str++ = '\0'; + } + return; + } + + // Append to buffer + if (size) { + *str++ = ch; + --size; + } + } +} + +int uartPollch(unsigned int ticks) { + while (ticks--) { + if (IO_UART1_RFCR & 0x3f) { + return IO_UART1_DTRR & 0xff; + } + } + + return -1; +} + +bool uartAvailable(void) +{ + return uart1count > 0; +} + +void uart1_heartbeat(void) +{ + char data[5] = {0x11, 0x30, 0x11^0x30, 0x11+0x30, '\0'}; + uartPuts(data); +} + +void uartSendData(char* data, int len) +{ + int i; + for(i=0;i 0) + { + *c = uart1buffer[uart1read]; + uart1read = (uart1read+1) % MAX_UART_BUFFER; + uart1count--; + return true; + } + return false; +} + +/* UART1 receive intterupt handler */ +void UART1(void) +{ + if (IO_UART1_RFCR & 0x3f) + { + if (uart1count >= MAX_UART_BUFFER) + panicf("UART1 buffer overflow"); + uart1buffer[uart1write] = IO_UART1_DTRR & 0xff; + uart1write = (uart1write+1) % MAX_UART_BUFFER; + uart1count++; + } + + IO_INTC_IRQ0 = (1< + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + */ +#ifndef UART_H +#define UART_H + +void uart_init(void); +bool uart1_getch(char *c); +void uart1_heartbeat(void); + +void uartPuts(const char *str); +void uartGets(char *str, unsigned int size); +int uartPollch(unsigned int ticks); +void uartPutc(char ch); +void uartPutHex(unsigned int n); + +#endif -- cgit v1.2.3