Beginnings of info flash support. It isn't very good.
[goodfet] / firmware / apps / jtag / jtag.c
index 20c4360..d0d2118 100644 (file)
 void jtagsetup(){
   P5DIR|=MOSI+SCK+TMS;
   P5DIR&=~MISO;
+  /*
   P5OUT|=0xFFFF;
   P5OUT=0;
+  */
   P4DIR|=TST;
   P2DIR|=RST;
   msdelay(100);
@@ -36,20 +38,17 @@ unsigned char jtagtrans8(unsigned char byte){
     if(bit==7)
       SETTMS;//TMS high on last bit to exit.
     
-    CLRTCK;
-    SETTCK;
-     /* read MISO on trailing edge */
+    TCKTOCK;
+    /* read MISO on trailing edge */
     byte |= READMISO;
   }
   RESTORETCLK;
   
   // exit state
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   // update state
   CLRTMS;
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   
   return byte;
 }
@@ -79,8 +78,7 @@ unsigned long jtagtransn(unsigned long word,
     if(bit==bitcount-1)
       SETTMS;//TMS high on last bit to exit.
     
-    CLRTCK;
-    SETTCK;
+    TCKTOCK;
     /* read MISO on trailing edge */
     word |= READMISO;
   }
@@ -92,12 +90,10 @@ unsigned long jtagtransn(unsigned long word,
   RESTORETCLK;
   
   // exit state
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   // update state
   CLRTMS;
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   
   return word;
 }
@@ -109,20 +105,17 @@ void jtag_stop(){
   P4OUT=0;
 }
 
-unsigned int drwidth=20;
+unsigned int drwidth=16;
 //! Shift all bits of the DR.
 unsigned long jtag_dr_shift20(unsigned long in){
   // idle
   SETTMS;
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   // select DR
   CLRTMS;
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   // capture IR
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   
   // shift DR, then idle
   return(jtagtransn(in,20));
@@ -133,37 +126,50 @@ unsigned long jtag_dr_shift20(unsigned long in){
 unsigned int jtag_dr_shift16(unsigned int in){
   // idle
   SETTMS;
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   // select DR
   CLRTMS;
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   // capture IR
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   
   // shift DR, then idle
   return(jtagtransn(in,16));
 }
 
+//! Shift native width of the DR
+unsigned long jtag_dr_shiftadr(unsigned long in){
+  unsigned long out=0;
+  
+  // idle
+  SETTMS;
+  TCKTOCK;
+  // select DR
+  CLRTMS;
+  TCKTOCK;
+  // capture IR
+  TCKTOCK;
+
+  
+  out=jtagtransn(in,drwidth);
+  
+  // shift DR, then idle
+  return(out);
+}
+
 
 //! Shift 8 bits of the IR.
 unsigned char jtag_ir_shift8(unsigned char in){
   // idle
   SETTMS;
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   // select DR
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   // select IR
   CLRTMS;
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   // capture IR
-  CLRTCK;
-  SETTCK;
+  TCKTOCK;
   
   // shift IR, then idle.
   return(jtagtrans8(in));