Major JTAG430 and JTAG430X2 patching.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Thu, 3 Feb 2011 22:39:30 +0000 (22:39 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Thu, 3 Feb 2011 22:39:30 +0000 (22:39 +0000)
Swapped the APP numbers to fix the unneighborliness at startup and to let JTAG430 run on its own.

git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@876 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

firmware/apps/jtag/jtag430.c
firmware/apps/jtag/jtag430x2.c
firmware/include/jtag430.h
firmware/include/jtag430x2.h

index 88ff455..88c9f0f 100644 (file)
@@ -400,22 +400,11 @@ void jtag430_handle_fn(uint8_t const app,
   
   switch(verb){
   case START:
   
   switch(verb){
   case START:
-    /* old method, classic MSP430. 
-    //Enter JTAG mode.
-    jtag430x2_start();
-    //TAP setup, fuse check
-    jtag430_resettap();
-    
-    cmddata[0]=jtag_ir_shift8(IR_BYPASS);    
-    txdata(app,verb,1);
-    */
+    debugstr("Using JTAG430 (instead of JTAG430X2)!");
     
     jtag430x2_start();
     cmddata[0]=jtagid;
     
     
     jtag430x2_start();
     cmddata[0]=jtagid;
     
-    if(jtagid!=MSP430JTAGID){
-      debugstr("Using JTAG430 (instead of JTAG430X2)!");
-    }
     jtag430mode=MSP430MODE;
     
     /* So the way this works is that a width of 20 does some
     jtag430mode=MSP430MODE;
     
     /* So the way this works is that a width of 20 does some
@@ -548,7 +537,7 @@ void jtag430_handle_fn(uint8_t const app,
   case JTAG430_DEVICE_ID:
     //cmddatalong[0]=jtag430_deviceid();
     cmddataword[0]=0xdead;
   case JTAG430_DEVICE_ID:
     //cmddatalong[0]=jtag430_deviceid();
     cmddataword[0]=0xdead;
-    cmddataword[0]=0xbeef;
+    cmddataword[1]=0xbeef;
     txdata(app,verb,4);
     break;
   default:
     txdata(app,verb,4);
     break;
   default:
index d671da4..265dae0 100644 (file)
@@ -198,7 +198,27 @@ void jtag430x2_handle_fn( uint8_t const app,
     
     //MSP430 or MSP430X
     if(jtagid==MSP430JTAGID){ 
     
     //MSP430 or MSP430X
     if(jtagid==MSP430JTAGID){ 
-      debugstr("ERROR, using JTAG430X2 instead of JTAG430!");
+      //debugstr("ERROR, using JTAG430X2 instead of JTAG430!");
+      jtag430mode=MSP430MODE;
+      
+      /* So the way this works is that a width of 20 does some
+        backward-compatibility finagling, causing the correct value
+        to be exchanged for addresses on 16-bit chips as well as the
+        new MSP430X chips.  (This has only been verified on the
+        MSP430F2xx family.  TODO verify for others.)
+      */
+      
+      drwidth=20;
+      
+      //Perform a reset and disable watchdog.
+      jtag430_por();
+      jtag430_writemem(0x120,0x5a80);//disable watchdog
+      
+      jtag430_haltcpu();
+      
+      jtag430_resettap();
+      txdata(app,verb,1);
+      
       return;
     }else if(jtagid==MSP430X2JTAGID){
       jtag430mode=MSP430X2MODE;
       return;
     }else if(jtagid==MSP430X2JTAGID){
       jtag430mode=MSP430X2MODE;
index 6ac6fcd..950e80e 100644 (file)
@@ -9,7 +9,7 @@
 #include "app.h"
 #include "jtag.h"
 
 #include "app.h"
 #include "jtag.h"
 
-#define JTAG430 0x11
+#define JTAG430 0x16
 
 extern unsigned int drwidth;
 
 
 extern unsigned int drwidth;
 
index 090697c..86598a8 100644 (file)
@@ -8,7 +8,7 @@
 
 #include "app.h"
 
 
 #include "app.h"
 
-#define JTAG430X2 0x16
+#define JTAG430X2 0x11
 
 extern app_t const jtag430x2_app;
 
 
 extern app_t const jtag430x2_app;