X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Fapps%2Fjtag%2Fjtag430x2.c;h=d0f5709348f497d69af6a90803cfdb843b94bb4d;hp=965c2626eef287344aaff2bed93d6b53dda390a4;hb=d39e9b08dc3f689a6b6a53f73c0943385e053542;hpb=1283fdb830f9ecd0e27e10ef66927562aff674a7 diff --git a/firmware/apps/jtag/jtag430x2.c b/firmware/apps/jtag/jtag430x2.c index 965c262..d0f5709 100644 --- a/firmware/apps/jtag/jtag430x2.c +++ b/firmware/apps/jtag/jtag430x2.c @@ -94,39 +94,40 @@ void jtag430x2_writemem(unsigned long adr, //! Read data from address unsigned int jtag430x2_readmem(unsigned long adr){ unsigned int toret=0; + unsigned int tries=5; - do{ - jtag_ir_shift8(IR_CNTRL_SIG_CAPTURE); - }while(!(jtag_dr_shift16(0) & 0x0301)); - - if(jtag_dr_shift16(0) & 0x0301){ - // Read Memory - CLRTCLK; - jtag_ir_shift8(IR_CNTRL_SIG_16BIT); - if(adr>=0x100){ - jtag_dr_shift16(0x0501);//word read - }else{ - jtag_dr_shift16(0x0511);//byte read - } - - jtag_ir_shift8(IR_ADDR_16BIT); - jtag_dr_shift20(adr); //20 - - jtag_ir_shift8(IR_DATA_TO_ADDR); - SETTCLK; - CLRTCLK; - toret = jtag_dr_shift16(0x0000); - - SETTCLK; + while(1){ + do{ + jtag_ir_shift8(IR_CNTRL_SIG_CAPTURE); + }while(!(jtag_dr_shift16(0) & 0x0301)); - //Cycle a bit. - CLRTCLK; - SETTCLK; - }else{ - return 0xBABE; + if(jtag_dr_shift16(0) & 0x0301){ + // Read Memory + CLRTCLK; + jtag_ir_shift8(IR_CNTRL_SIG_16BIT); + if(adr>=0x100){ + jtag_dr_shift16(0x0501);//word read + }else{ + jtag_dr_shift16(0x0511);//byte read + } + + jtag_ir_shift8(IR_ADDR_16BIT); + jtag_dr_shift20(adr); //20 + + jtag_ir_shift8(IR_DATA_TO_ADDR); + SETTCLK; + CLRTCLK; + toret = jtag_dr_shift16(0x0000); + + SETTCLK; + + //Cycle a bit. + CLRTCLK; + SETTCLK; + return toret; + } } - - return toret; + //return toret; } //! Syncs a POR. @@ -200,8 +201,9 @@ void jtag430x2handle(unsigned char app, switch(verb){ case START: //Enter JTAG mode. - do cmddata[0]=jtag430x2_start(); - while(cmddata[0]==00 || cmddata[0]==0xFF); + //do + cmddata[0]=jtag430x2_start(); + //while(cmddata[0]==00 || cmddata[0]==0xFF); //MSP430 or MSP430X if(jtagid==MSP430JTAGID){ @@ -261,11 +263,7 @@ void jtag430x2handle(unsigned char app, cmddatalong[0]=jtag430_deviceid(); txdata(app,verb,4); break; - case JTAG430_HALTCPU: - //jtag430x2_haltcpu(); - break; - case JTAG430_RELEASECPU: - case JTAG430_SETINSTRFETCH: + case JTAG430_WRITEMEM: case POKE: jtag430x2_writemem(cmddatalong[0], @@ -273,9 +271,16 @@ void jtag430x2handle(unsigned char app, cmddataword[0]=jtag430x2_readmem(cmddatalong[0]); txdata(app,verb,2); break; + + //unimplemented functions + case JTAG430_HALTCPU: + case JTAG430_RELEASECPU: + case JTAG430_SETINSTRFETCH: case JTAG430_WRITEFLASH: case JTAG430_ERASEFLASH: case JTAG430_SETPC: + txdata(app,NOK,0); + break; default: jtaghandle(app,verb,len); }