Diagnostic code added, to find init problems (charging, etc.) when flashed: the whole I/O space is saved on startup, can be dumped to a file via debug menu.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@3912 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jörg Hohensohn 2003-08-02 12:53:57 +00:00
parent 9513236c94
commit f80505c9d0
2 changed files with 58 additions and 0 deletions

View file

@ -193,6 +193,7 @@ bool dbg_mpeg_thread(void)
/* Tool function to calculate a CRC16 across some buffer */
unsigned short crc_16(unsigned char* buf, unsigned len)
{
/* CCITT standard polynomial 0x1021 */
static const unsigned short crc16_lookup[16] =
{ /* lookup table for 4 bits at a time is affordable */
0x0000, 0x1021, 0x2042, 0x3063,
@ -1324,6 +1325,30 @@ bool dbg_save_roms(void)
return false;
}
/* test code, to be removed later */
extern union /* defined in main.c */
{
unsigned char port8 [512];
unsigned short port16[256];
unsigned port32[128];
} startup_io;
bool dbg_save_io(void) /* dump the initial I/O space to disk */
{
int fd;
fd = creat("/startup_io.bin", O_WRONLY);
if(fd >= 0)
{
write(fd, (void *)&startup_io, sizeof(startup_io));
close(fd);
}
return false;
}
/* end of test code */
bool debug_menu(void)
{
int m;
@ -1331,6 +1356,7 @@ bool debug_menu(void)
struct menu_items items[] = {
{ "Dump ROM contents", dbg_save_roms },
{ "Dump startup I/O", dbg_save_io },
{ "View I/O ports", dbg_ports },
#ifdef HAVE_LCD_BITMAP
#ifdef HAVE_RTC

View file

@ -54,6 +54,16 @@
#include "screens.h"
#include "power.h"
/* diagnostic, to be removed later: */
/* snapshot of the I/O space on startup, to compare initialisations */
union
{
unsigned char port8 [512];
unsigned short port16[256];
unsigned port32[128];
} startup_io;
char appsversion[]=APPSVERSION;
void init(void);
@ -225,6 +235,28 @@ void init(void)
int main(void)
{
/* diagnostic, to be removed later: dump I/O space */
int i;
for (i = 0; i < 512; i++)
{ // most can be read with 8 bit access
startup_io.port8[i] = *((volatile unsigned char*)0x5FFFE00 + i);
}
// some don't allow that, read with 32 bit if aligned
startup_io.port32[0x140/4] = *((volatile unsigned char*)0x5FFFF40);
startup_io.port32[0x144/4] = *((volatile unsigned char*)0x5FFFF44);
startup_io.port32[0x150/4] = *((volatile unsigned char*)0x5FFFF50);
startup_io.port32[0x154/4] = *((volatile unsigned char*)0x5FFFF54);
startup_io.port32[0x160/4] = *((volatile unsigned char*)0x5FFFF60);
startup_io.port32[0x170/4] = *((volatile unsigned char*)0x5FFFF70);
startup_io.port32[0x174/4] = *((volatile unsigned char*)0x5FFFF74);
// read the rest with 16 bit
startup_io.port16[0x14A/2] = *((volatile unsigned short*)0x5FFFF4A);
startup_io.port16[0x15A/2] = *((volatile unsigned short*)0x5FFFF5A);
startup_io.port16[0x16A/2] = *((volatile unsigned short*)0x5FFFF6A);
startup_io.port16[0x17A/2] = *((volatile unsigned short*)0x5FFFF7A);
/* end of diagnostic */
app_main();
while(1) {