Beginning SETREG and GETREG instructions for the MSP430.
authortravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 25 Jan 2010 00:23:58 +0000 (00:23 +0000)
committertravisutk <travisutk@12e2690d-a6be-4b82-a7b7-67c4a43b65c8>
Mon, 25 Jan 2010 00:23:58 +0000 (00:23 +0000)
git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@282 12e2690d-a6be-4b82-a7b7-67c4a43b65c8

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

index e1c6dc6..22687da 100644 (file)
 
 unsigned int jtag430mode=MSP430X2MODE;
 
-//! Set the program counter.
-void jtag430_setpc(unsigned int adr){
+//! Set a register.
+void jtag430_setr(u8 reg, u16 val){
   jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
   jtag_dr_shift16(0x3401);// release low byte
   jtag_ir_shift8(IR_DATA_16BIT);
-  jtag_dr_shift16(0x4030);//Instruction to load PC
+  
+  //0x4030 is "MOV #foo, r0"
+  //Right-most field is register, so 0x4035 loads r5
+  jtag_dr_shift16(0x4030+reg);
   CLRTCLK;
   SETTCLK;
-  jtag_dr_shift16(adr);// Value for PC
+  jtag_dr_shift16(val);// Value for the register
   CLRTCLK;
   jtag_ir_shift8(IR_ADDR_CAPTURE);
   SETTCLK;
-  CLRTCLK ;// Now PC is set to "PC_Value"
+  CLRTCLK ;// Now reg is set to new value.
   jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
   jtag_dr_shift16(0x2401);// low byte controlled by JTAG
 }
 
+//! Set the program counter.
+void jtag430_setpc(unsigned int adr){
+  jtag430_setr(0,adr);
+}
+
 //! Halt the CPU
 void jtag430_haltcpu(){
   //jtag430_setinstrfetch();
@@ -412,7 +420,16 @@ void jtag430handle(unsigned char app,
     jtag430_setpc(cmddataword[0]);
     txdata(app,verb,0);
     break;
-    
+  case JTAG430_SETREG:
+    jtag430_setr(cmddata[0],cmddataword[1]);
+    txdata(app,verb,0);
+    break;
+  case JTAG430_GETREG:
+    //jtag430_getr(cmddata[0]);
+    debugstr("JTAG430_GETREG not yet implemented.");
+    cmddataword[0]=0xDEAD;
+    txdata(app,verb,2);
+    break;
   case JTAG430_COREIP_ID:
   case JTAG430_DEVICE_ID:
     cmddataword[0]=0;
index 1fe9e42..417a855 100644 (file)
@@ -120,7 +120,7 @@ void delay(unsigned int count);
 //! MSDelay
 void msdelay(unsigned int ms);
 
-
+void jtag430_setr(u8 reg, u16 val);
 void monitorhandle(unsigned char, unsigned char, unsigned long);
 void spihandle(unsigned char, unsigned char, unsigned long);
 void i2chandle(unsigned char, unsigned char, unsigned long) WEAKDEF;
index 149ea85..59a0e51 100644 (file)
@@ -156,6 +156,8 @@ void jtag430_por();
 #define JTAG430_RELEASECPU 0xA1
 #define JTAG430_SETINSTRFETCH 0xC1
 #define JTAG430_SETPC 0xC2
+#define JTAG430_SETREG 0xD2
+#define JTAG430_GETREG 0xD3
 #define JTAG430_WRITEMEM 0xE0
 #define JTAG430_WRITEFLASH 0xE1
 #define JTAG430_READMEM 0xE2