jtagarm7 abstractions to allow jtagarm9 to leverage much of this code.
[goodfet] / firmware / apps / jtag / jtagarm7.c
index c4c12f6..0e0fbc2 100644 (file)
@@ -34,6 +34,8 @@ unsigned char last_sysstate = 0;
 unsigned char last_ir = -1;
 unsigned char last_scanchain = -1;
 unsigned char current_dbgstate = -1;
+unsigned char g_jtag_ir_size = 4;
+unsigned char g_jtagarm_scan_n_bitsize = 4;
 //unsigned char last_halt_debug_state = -1;
 //unsigned long last_halt_pc = -1;
 
@@ -90,7 +92,7 @@ u8 jtagarm_shift_ir(u8 ir, u8 flags){
   if (last_ir != ir){
        jtag_capture_ir();
        jtag_shift_register();
-    retval = jtag_trans_n(ir, 4, LSB|flags); 
+    retval = jtag_trans_n(ir, g_jtag_ir_size, LSB|flags); 
     last_ir = ir;
   }
   return retval;
@@ -110,7 +112,7 @@ state” to the “Select DR” state each time the “Update” state is reache
     last_scanchain = chain;
        jtag_capture_dr();
        jtag_shift_register();
-    retval = jtag_trans_n(chain, 4, LSB | NORETIDLE);
+    retval = jtag_trans_n(chain, g_jtagarm_scan_n_bitsize, LSB | NORETIDLE);
   }
   jtagarm_shift_ir(testmode, NORETIDLE); 
   return(retval);
@@ -120,23 +122,23 @@ state” to the “Select DR” state each time the “Update” state is reache
 /************************* EmbeddedICE Primitives ****************************/
 //! shifter for writing to chain2 (EmbeddedICE). 
 unsigned long eice_write(unsigned char reg, unsigned long data){
-  unsigned long retval, temp;
+  unsigned long retval;
   jtagarm7tdmi_scan(2, ARM7TDMI_IR_INTEST);
   jtag_capture_dr();
   jtag_shift_register();
   retval = jtag_trans_n(data, 32, LSB| NOEND| NORETIDLE);         // send in the data - 32-bits lsb
-  temp = jtag_trans_n(reg, 5, LSB| NOEND| NORETIDLE);             // send in the register address - 5 bits lsb
+  jtag_trans_n(reg, 5, LSB| NOEND| NORETIDLE);             // send in the register address - 5 bits lsb
   jtag_trans_n(1, 1, LSB);                                        // send in the WRITE bit
   return(retval); 
 }
 
 //! shifter for reading from chain2 (EmbeddedICE).
 unsigned long eice_read(unsigned char reg){               // PROVEN
-  unsigned long temp, retval;
+  unsigned long retval;
   jtagarm7tdmi_scan(2, ARM7TDMI_IR_INTEST);
   jtag_capture_dr();
   jtag_shift_register(); // send in the register address - 5 bits LSB
-  temp = jtag_trans_n(reg, 5, LSB| NOEND| NORETIDLE);
+  jtag_trans_n(reg, 5, LSB| NOEND| NORETIDLE);
   jtag_trans_n(0L, 1, LSB);                                       // clear TDI to select "read only"
   jtag_capture_dr();
   jtag_shift_register(); // Now shift out the 32 bits
@@ -304,6 +306,14 @@ void jtagarm7_handle_fn( uint8_t const app,
     jtagarm7tdmi_start();
     txdata(app,verb,0);
     break;
+  case JTAGARM7_SCAN_N_SIZE:
+    g_jtagarm_scan_n_bitsize = cmddata[0];
+    txdata(app,verb,1);
+    break;
+  case JTAGARM7_IR_SIZE:
+    g_jtag_ir_size = cmddata[0];
+    txdata(app,verb,1);
+    break;
   case JTAG_IR_SHIFT:
     cmddataword[0] = jtagarm_shift_ir(cmddata[0], cmddata[1]);
     txdata(app,verb,1);
@@ -314,25 +324,26 @@ void jtagarm7_handle_fn( uint8_t const app,
     val = cmddata[0];
     if (cmddata[0] > 32)
     {
-        debughex32(cmddatalong[0]);
-        debughex32(cmddatalong[1]);
+        //debughex32(cmddatalong[0]);
+        //debughex32(cmddatalong[1]);
         cmddatalong[1] = jtag_trans_n(cmddatalong[2], val - 32 ,cmddata[1] | NOEND |NORETIDLE);
         cmddatalong[0] = jtag_trans_n(cmddatalong[2], 32, cmddata[1]);
     }
     else
     {
-        debughex32(cmddatalong[0]);
+        //debughex32(cmddatalong[0]);
         cmddatalong[0] = jtag_trans_n(cmddatalong[1], val, cmddata[1]);
     }
     txdata(app,verb,val/8);
     break;
   case JTAG_DR_SHIFT_MORE:
     // assumes you just executed JTAG_DR_SHIFT with NOEND flag set
+    debugstr("JTAG_DR_SHIFT_MORE");
     val = cmddata[0];
     if (cmddata[0] > 32)
     {
-        debughex32(cmddatalong[0]);
-        debughex32(cmddatalong[1]);
+        //debughex32(cmddatalong[0]);
+        //debughex32(cmddatalong[1]);
         cmddatalong[1] = jtag_trans_n(cmddatalong[2], val - 32 ,cmddata[1] | NOEND |NORETIDLE);
         cmddatalong[0] = jtag_trans_n(cmddatalong[2], 32, cmddata[1]);
     }
@@ -382,12 +393,12 @@ void jtagarm7_handle_fn( uint8_t const app,
   case JTAG_RESET_TARGET:
     //FIXME: BORKEN
     debugstr("RESET TARGET");
-    debughex((P3OUT&RST));
+    //debughex((P3OUT&RST));
     CLRRST;
-    debughex((P3OUT&RST));
+    //debughex((P3OUT&RST));
     delay(cmddataword[0]);
     SETRST;
-    debughex((P3OUT&RST));
+    //debughex((P3OUT&RST));
     txdata(app,verb,4);
     break;