/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2006 Daniel Stenberg * * 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 #include #include #include "cpu.h" #include "system.h" #include "lcd.h" #include "kernel.h" #include "thread.h" #include "ata.h" #include "fat.h" #include "disk.h" #include "font.h" #include "adc.h" #include "backlight.h" #include "panic.h" #include "power.h" #include "file.h" static inline void blink(void) { volatile unsigned int* ptr; int i; ptr = (volatile unsigned int*)0x70000020; *ptr &= ~(1 << 13); for(i = 0; i < 0xfffff; i++) { } *ptr |= (1 << 13); for(i = 0; i < 0xfffff; i++) { } } static inline void slow_blink(void) { volatile unsigned int* ptr; int i; ptr = (volatile unsigned int*)0x70000020; *ptr &= ~(1 << 13); for(i = 0; i < (0xfffff); i++) { } for(i = 0; i < (0xfffff); i++) { } for(i = 0; i < (0xfffff); i++) { } *ptr |= (1 << 13); for(i = 0; i < (0xfffff); i++) { } for(i = 0; i < (0xfffff); i++) { } for(i = 0; i < (0xfffff); i++) { } } static inline unsigned long get_pc(void) { unsigned long pc; asm volatile ( "mov %0, pc\n" : "=r"(pc) ); return pc; } /* These functions are present in the firmware library, but we reimplement them here because the originals do a lot more than we want */ void reset_poweroff_timer(void) { } int dbg_ports(void) { unsigned int gpio_a, gpio_b, gpio_c, gpio_d; unsigned int gpio_e, gpio_f, gpio_g, gpio_h; unsigned int gpio_i, gpio_j, gpio_k, gpio_l; char buf[128]; int line; lcd_setmargins(0, 0); lcd_clear_display(); lcd_setfont(FONT_SYSFIXED); while(1) { gpio_a = GPIOA_INPUT_VAL; gpio_b = GPIOB_INPUT_VAL; gpio_c = GPIOC_INPUT_VAL; gpio_g = GPIOG_INPUT_VAL; gpio_h = GPIOH_INPUT_VAL; gpio_i = GPIOI_INPUT_VAL; line = 0; snprintf(buf, sizeof(buf), "GPIO_A: %02x GPIO_G: %02x", gpio_a, gpio_g); lcd_puts(0, line++, buf); snprintf(buf, sizeof(buf), "GPIO_B: %02x GPIO_H: %02x", gpio_b, gpio_h); lcd_puts(0, line++, buf); snprintf(buf, sizeof(buf), "GPIO_C: %02x GPIO_I: %02x", gpio_c, gpio_i); lcd_puts(0, line++, buf); line++; gpio_d = GPIOD_INPUT_VAL; gpio_e = GPIOE_INPUT_VAL; gpio_f = GPIOF_INPUT_VAL; gpio_j = GPIOJ_INPUT_VAL; gpio_k = GPIOK_INPUT_VAL; gpio_l = GPIOL_INPUT_VAL; snprintf(buf, sizeof(buf), "GPIO_D: %02x GPIO_J: %02x", gpio_d, gpio_j); lcd_puts(0, line++, buf); snprintf(buf, sizeof(buf), "GPIO_E: %02x GPIO_K: %02x", gpio_e, gpio_k); lcd_puts(0, line++, buf); snprintf(buf, sizeof(buf), "GPIO_F: %02x GPIO_L: %02x", gpio_f, gpio_l); lcd_puts(0, line++, buf); line++; snprintf(buf, sizeof(buf), "ADC_1: %02x", adc_read(ADC_0)); lcd_puts(0, line++, buf); snprintf(buf, sizeof(buf), "ADC_2: %02x", adc_read(ADC_1)); lcd_puts(0, line++, buf); snprintf(buf, sizeof(buf), "ADC_3: %02x", adc_read(ADC_2)); lcd_puts(0, line++, buf); snprintf(buf, sizeof(buf), "ADC_4: %02x", adc_read(ADC_3)); lcd_puts(0, line++, buf); lcd_update(); } return 0; } void mpeg_stop(void) { } void usb_acknowledge(void) { } void usb_wait_for_disconnect(void) { } void sys_poweroff(void) { } void system_reboot(void) { } void main(void) { kernel_init(); adc_init(); lcd_init_device(); dbg_ports(); }