still some bugs, though by setting pll mult -> br of 115200
authorhackbard <hackbard@staubsauger.localdomain>
Fri, 31 Aug 2007 18:17:38 +0000 (20:17 +0200)
committerhackbard <hackbard@staubsauger.localdomain>
Fri, 31 Aug 2007 18:17:38 +0000 (20:17 +0200)
betty/fwflash.c
betty/lpcload.c

index 4fa0479..3023789 100644 (file)
@@ -22,7 +22,7 @@
 #define BANK2                  0x82000000
 #define BANK_SIZE              0x00100000
 #define BOOTLOADER             0x7fffe000
-#define BL_SIZE                        0x00000800
+#define BL_SIZE                        0x00002000
 
 /* flash cmd addresses - flash[0-18] <--> arm[1-19]*/
 #define B0F555 (*((volatile unsigned long *)(BANK0|0xaaa)))    // 0x555
@@ -54,12 +54,24 @@ void mmap_init(u8 memtype) {
        MEMMAP=memtype;
 }
 
+void pll_init(void) {
+
+       /* configuration */
+       PLLCFG=0x02;            // multiplier = 2
+       PLLCON=0x03;            // enable and set as clk source for the lpc
+       /* feed sequence */
+       PLLFEED=0xaa;
+       PLLFEED=0x55;
+       /* wait for lock */
+       while(!(PLLSTAT&(1<<10)))
+               continue;
+}
+
 void uart0_init(void) {
 
        PINSEL0=0x05;                   // pin select -> tx, rx
        UART0_FCR=0x07;                 // enable fifo
        UART0_LCR=0x83;                 // set dlab + word length
-       //UART0_DLL=0x10;                       // br: 9600 @ 10/4 mhz
        UART0_DLL=0x04;                 // br: 38400 @ 10/4 mhz
        UART0_DLM=0x00;
        UART0_LCR=0x03;                 // unset dlab
@@ -161,6 +173,9 @@ int main(void) {
        /* memory mapping of interrupt vectors to static ram */
 
        //mmap_init(MMAP_RAM);
+       
+       /* pll initialization */
+       pll_init();
 
        /* uart initialization */
        uart0_init();
index f7911a8..19d5a5b 100644 (file)
@@ -26,7 +26,7 @@
 #define BANK2_ADDR             0x82000000
 #define BANK_SIZE              0x00100000
 #define BL_ADDR                        0x7fffe000
-#define BL_SIZE                        0x00000800
+#define BL_SIZE                        0x00002000
 
 #define CMD_READ               'R'             // stay compatible to fwflash!
 
@@ -128,7 +128,6 @@ int open_serial_device(t_lpc *lpc) {
 
        // input options -> enable flow control
        
-       //term.c_iflag&=~(IXON|IXOFF|IXANY|INLCR|ICRNL);
        term.c_iflag&=~(INLCR|ICRNL|IXANY);
        term.c_iflag|=(IXON|IXOFF);
        
@@ -139,15 +138,38 @@ int open_serial_device(t_lpc *lpc) {
        // more control options -> timeout / flow control
        
        term.c_cc[VMIN]=0;
-       term.c_cc[VTIME]=10;    // 1 second timeout
-       term.c_cc[VSTART]=0x11;
-       term.c_cc[VSTOP]=0x13;
+       term.c_cc[VTIME]=20;    // 2 seconds timeout
+       //term.c_cc[VSTART]=0x11;
+       //term.c_cc[VSTOP]=0x13;
 
        tcsetattr(lpc->sfd,TCSANOW,&term);
 
        return lpc->sfd;
 }
 
+int reconfig_serial_device(t_lpc *lpc) {
+
+       struct termios term;
+       int ret;
+
+       /* reconfigure the serial device for our lousy loader tool */
+
+       tcgetattr(lpc->sfd,&term);
+
+       // disable flow control
+       
+       term.c_iflag&=~(IXON|IXOFF|IXANY|INLCR|ICRNL);
+
+       // change baudrate
+
+       cfsetispeed(&term,B115200);
+       cfsetospeed(&term,B115200);
+
+       ret=tcsetattr(lpc->sfd,TCSANOW,&term);
+
+       return ret;
+}
+
 int open_firmware(t_lpc *lpc) {
 
        /* open firmware file */
@@ -670,7 +692,7 @@ int main(int argc,char **argv) {
                                        break;
                                }
                                else if(argv[i][2]=='b') {
-                                       lpc.info|=BANK0;
+                                       lpc.info|=BL;
                                        strncpy(lpc.bl,argv[++i],127);
                                        break;
                                }
@@ -724,6 +746,10 @@ int main(int argc,char **argv) {
        /* flush the lpc2220 tx buf */
        lpc_txbuf_flush(&lpc);
 
+       /* reconfigure the serial port */
+       if(reconfig_serial_device(&lpc)<0)
+               goto end;
+
        /* download flash/bootloader content */
        if(lpc.info&BANK0)
                dump_files(lpc.sfd,lpc.b0fd,BANK0_ADDR,BANK_SIZE);