From 3b6cc1c3c28df3dc747a5d620ed3347db12c79e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Hohensohn?= Date: Thu, 11 Mar 2004 18:02:53 +0000 Subject: option to hold power, for FM+V2 git-svn-id: svn://svn.rockbox.org/rockbox/trunk@4366 a1c6a512-1295-4272-9138-f99709370657 --- flash/uart_boot/uart_boot.c | 63 +++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 16 deletions(-) (limited to 'flash/uart_boot/uart_boot.c') diff --git a/flash/uart_boot/uart_boot.c b/flash/uart_boot/uart_boot.c index 8110e9b678..acfbb8e9c5 100644 --- a/flash/uart_boot/uart_boot.c +++ b/flash/uart_boot/uart_boot.c @@ -21,6 +21,7 @@ struct char* szDumpfile; // file to dump into char* szExecfile; // file with the executable bool bTest; // debug action + bool bHold; // hold power (for FMs & V2s) bool bBlink; // blink red LED bool bNoDownload; } gCmd; @@ -43,6 +44,7 @@ int ProcessCmdLine(int argc, char* argv[]) printf("-recorder (this is a recorder/FM, default is player if not specified)\n"); printf("-archos (use Archos bootloader, this one needs powerup while program waits)\n"); printf("-nodownload (no MiniMon download, it's already active)\n"); + printf("-hold (hold the power, useful for FMs and V2s, so you can release ON)\n"); printf("-spindown (spindown the harddisk, else it stays on by default)\n"); printf("-id (read manufacturer and device ID of flash, no checks)\n"); printf("-flash \n"); @@ -122,6 +124,10 @@ int ProcessCmdLine(int argc, char* argv[]) { gCmd.bTest = true; } + else if (!strncmp("-hold", *argv, 2)) + { + gCmd.bHold = true; + } else if (!strncmp("-blink", *argv, 2)) { gCmd.bBlink = true; @@ -194,21 +200,37 @@ int main(int argc, char* argv[]) } } + // do the action + if (gCmd.bHold) + { + // hold power for FM + reg = ReadHalfword(serial_handle, 0x05FFFFC2); // PBDR + reg |= 0x0020; // set PB5 to keep power + WriteHalfword(serial_handle, 0x05FFFFC2, reg); + + reg = ReadHalfword(serial_handle, 0x05FFFFC6); // PBIOR + reg |= 0x0020; // make PB5 an output + WriteHalfword(serial_handle, 0x05FFFFC6, reg); + printf("Power hold, you can release ON button now.\n"); + } + if (gCmd.bSpindown) { - // spindown the disk (works only for master) - UINT32 ata; // address of ATA_ALT_STATUS - printf("Harddisk spindown..."); - ata = (gCmd.bRecorder && (ReadHalfword(serial_handle, 0x020000FC) & 0x0100)) ? 0x06200206 : 0x06200306; - WriteHalfword(serial_handle, 0x05FFFFCA, 0xBF99); // PACR2 (was 0xFF99) - WriteHalfword(serial_handle, 0x05FFFFC4, 0x0280); // PAIOR (was 0x0000) - WriteHalfword(serial_handle, 0x05FFFFC0, 0xA27F); // PADR (was 0xA0FF) - while (ReadByte(serial_handle, ata) & 0x80); // ATA_ALT_STATUS & STATUS_BSY - WriteByte(serial_handle, 0x06100107, 0xE0); // ATA_COMMAND = CMD_STANDBY_IMMEDIATE; - //while (ReadByte(serial_handle, ata) & 0x80); // ATA_ALT_STATUS & STATUS_BSY - printf("\b\b\b done.\n"); + // power down the disk + reg = ReadHalfword(serial_handle, 0x05FFFFCA); // PACR2 + reg &= ~0x0400; // clear bit 10: GPIO + WriteHalfword(serial_handle, 0x05FFFFCA, reg); + + reg = ReadHalfword(serial_handle, 0x05FFFFC4); // PAIOR + reg |= 0x0020; // set bit 5: output + WriteHalfword(serial_handle, 0x05FFFFC4, reg); + + reg = ReadHalfword(serial_handle, 0x05FFFFC0); // PADR + reg &= ~0x0020; // clear PA5 to power down + WriteHalfword(serial_handle, 0x05FFFFC0, reg); + printf("Harddisk powered down.\n"); } @@ -307,13 +329,22 @@ int main(int argc, char* argv[]) if (gCmd.bTest) { - // test code: query keypad + // test code: toggle PA5 to test FM IDE power + reg = ReadHalfword(serial_handle, 0x05FFFFCA); // PACR2 + reg &= ~0x0400; // clear bit 10: GPIO + WriteHalfword(serial_handle, 0x05FFFFCA, reg); + + reg = ReadHalfword(serial_handle, 0x05FFFFC4); // PAIOR + reg |= 0x0020; // set bit 5: output + WriteHalfword(serial_handle, 0x05FFFFC4, reg); + + printf("Toggling PA5 forever... (stop with Ctrl-C)\n"); + reg = ReadHalfword(serial_handle, 0x05FFFFC0); // PADR while (1) { - WriteByte(serial_handle, 0x05FFFEE8, 0x24); // ADCSR - while (!(ReadByte(serial_handle, 0x05FFFEE8) & 0x80)); - reg = ReadHalfword(serial_handle, 0x05FFFEE0); // ADDRA - printf("ADC(4): %d\n", reg>>6); + reg ^= 0x0020; + WriteHalfword(serial_handle, 0x05FFFFC0, reg); // PADR + Sleep(1000); } } -- cgit v1.2.3