From 9e8395fdcb27a6696fdcb37dd2a66a9678aecc64 Mon Sep 17 00:00:00 2001 From: travisutk Date: Mon, 25 Jan 2010 00:23:58 +0000 Subject: [PATCH 1/1] Beginning SETREG and GETREG instructions for the MSP430. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@282 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- firmware/apps/jtag/jtag430.c | 29 +++++++++++++++++++++++------ firmware/include/command.h | 2 +- firmware/include/jtag.h | 2 ++ 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/firmware/apps/jtag/jtag430.c b/firmware/apps/jtag/jtag430.c index e1c6dc6..22687da 100644 --- a/firmware/apps/jtag/jtag430.c +++ b/firmware/apps/jtag/jtag430.c @@ -10,23 +10,31 @@ 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; diff --git a/firmware/include/command.h b/firmware/include/command.h index 1fe9e42..417a855 100644 --- a/firmware/include/command.h +++ b/firmware/include/command.h @@ -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; diff --git a/firmware/include/jtag.h b/firmware/include/jtag.h index 149ea85..59a0e51 100644 --- a/firmware/include/jtag.h +++ b/firmware/include/jtag.h @@ -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 -- 2.20.1