X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Fjtag%2Fjtag430.c;h=b7b3152d2c183e9b62567aad5b4634de0180e434;hp=f48db8165ba96c94f5fdfe30cadf932d578ceb96;hb=43d125b5bca16f0941450bee6ba7bd94ab41dc72;hpb=42c0903e02d7f9e6c26e7b53faa0961e9c2f0aeb diff --git a/firmware/apps/jtag/jtag430.c b/firmware/apps/jtag/jtag430.c index f48db81..b7b3152 100644 --- a/firmware/apps/jtag/jtag430.c +++ b/firmware/apps/jtag/jtag430.c @@ -275,13 +275,25 @@ void jtag430_setinstrfetch(){ //! Handles classic MSP430 JTAG commands. Forwards others to JTAG. void jtag430handle(unsigned char app, unsigned char verb, - unsigned char len){ - register char blocks; + unsigned long len){ unsigned long at; unsigned int i, val; //debugstr("Classic MSP430 handler."); + + /* FIXME + * Sometimes JTAG doesn't init correctly. + * This restarts the connection if the masked-rom + * chip ID cannot be read. Should print warning + * for testing server. + */ + while((i=jtag430_readmem(0xff0))==0xFFFF){ + jtag430_start(); + P1OUT^=1; + } + P1OUT&=~1; + switch(verb){ case START: //Enter JTAG mode. @@ -306,33 +318,24 @@ void jtag430handle(unsigned char app, case JTAG430_READMEM: case PEEK: - /* - cmddataword[0]=jtag430_readmem(cmddataword[0]); - txdata(app,verb,2); - */ - blocks=(len>4?cmddata[4]:1); at=cmddatalong[0]; //Fetch large blocks for bulk fetches, //small blocks for individual peeks. - if(blocks>1) - len=0x80; - - serial_tx(app); - serial_tx(verb); - serial_tx(len); + if(len>5) + len=(cmddataword[2]);//always even. + else + len=2; + len&=~1;//clear lsbit - while(blocks--){ - for(i=0;i>8); - } + txhead(app,verb,len); + for(i=0;i>8); } break; case JTAG430_WRITEMEM: