From 2b654b579b948558edecc63dd7ab3aa4543f050d Mon Sep 17 00:00:00 2001 From: travisutk Date: Fri, 11 Sep 2009 08:10:25 +0000 Subject: [PATCH] Poking works in MSP430X2. Changing '430 from 16-bit words to 32-bit words for queries. git-svn-id: https://svn.code.sf.net/p/goodfet/code/trunk@127 12e2690d-a6be-4b82-a7b7-67c4a43b65c8 --- client/GoodFET.py | 6 ++++++ client/GoodFETMSP430.py | 5 +++-- client/goodfet.monitor | 5 +++++ firmware/apps/i2c/i2c.c | 3 ++- firmware/apps/jtag/jtag430x2.c | 14 ++++++++------ firmware/include/platform.h | 4 ++-- 6 files changed, 26 insertions(+), 11 deletions(-) diff --git a/client/GoodFET.py b/client/GoodFET.py index 5645f52..cf01c85 100755 --- a/client/GoodFET.py +++ b/client/GoodFET.py @@ -68,6 +68,12 @@ class GoodFET: return self.data; #Monitor stuff + def out(self,byte): + """Write a byte to P5OUT.""" + self.writecmd(0,0xA1,1,[byte]); + def dir(self,byte): + """Write a byte to P5DIR.""" + self.writecmd(0,0xA0,1,[byte]); def peekbyte(self,address): """Read a byte of memory from the monitor.""" self.data=[address&0xff,address>>8]; diff --git a/client/GoodFETMSP430.py b/client/GoodFETMSP430.py index 83154c0..cdb83bb 100644 --- a/client/GoodFETMSP430.py +++ b/client/GoodFETMSP430.py @@ -37,8 +37,9 @@ class GoodFETMSP430(GoodFET): return DeviceID; def MSP430peek(self,adr): """Read the contents of memory at an address.""" - self.data=[adr&0xff, (adr&0xff00)>>8]; - self.writecmd(self.MSP430APP,0x02,2,self.data); + self.data=[adr&0xff, (adr&0xff00)>>8, + (adr&0xff0000)>>16,(adr&0xff000000)>>24]; + self.writecmd(self.MSP430APP,0x02,4,self.data); return ord(self.data[0])+(ord(self.data[1])<<8); def MSP430poke(self,adr,val): """Write the contents of memory at an address.""" diff --git a/client/goodfet.monitor b/client/goodfet.monitor index 3c07c94..991c53e 100755 --- a/client/goodfet.monitor +++ b/client/goodfet.monitor @@ -22,6 +22,11 @@ if(len(sys.argv)==1): client=GoodFET(); client.serInit() +if(sys.argv[1]=="on"): + client.dir(0xFF); + client.out(0xFF); +if(sys.argv[1]=="off"): + client.out(0x00); if(sys.argv[1]=="info"): a=client.peekbyte(0xff0); diff --git a/firmware/apps/i2c/i2c.c b/firmware/apps/i2c/i2c.c index 1171ee1..e183deb 100644 --- a/firmware/apps/i2c/i2c.c +++ b/firmware/apps/i2c/i2c.c @@ -37,7 +37,7 @@ #define I2C_CLOCK_HI() SETSCL #define I2C_CLOCK_LO() CLRSCL -#warning "Using internal resistors. Won't work on 161x devices." +//#warning "Using internal resistors. Won't work on 161x devices." //! Inits bitbanging port, must be called before using the functions below void I2C_Init() @@ -46,6 +46,7 @@ void I2C_Init() //Clear SDA and SCL. //Direction, not value, is used to set the value. //(Pull-up or 0.) + P5DIR|=(SDA|SCL); P5REN|=SDA|SCL; diff --git a/firmware/apps/jtag/jtag430x2.c b/firmware/apps/jtag/jtag430x2.c index 44d4941..5e76aa5 100644 --- a/firmware/apps/jtag/jtag430x2.c +++ b/firmware/apps/jtag/jtag430x2.c @@ -46,11 +46,13 @@ unsigned char jtag430x2_start(){ return jtag430x2_jtagid(); } +//! Grab the core ID. unsigned int jtag430_coreid(){ jtag_ir_shift8(IR_COREIP_ID); return jtag_dr_shift16(0); } +//! Grab the device ID. unsigned long jtag430_deviceid(){ jtag_ir_shift8(IR_DEVICE_ID); return jtag_dr_shift20(0); @@ -65,20 +67,20 @@ unsigned int jtag430x2_writemem(unsigned long adr, CLRTCLK; jtag_ir_shift8(IR_CNTRL_SIG_16BIT); if(adr>=0x100) - jtag_ir_shift8(0x0500);//word mode + jtag_dr_shift16(0x0500);//word mode else - jtag_ir_shift8(0x0510);//byte mode + jtag_dr_shift16(0x0510);//byte mode jtag_ir_shift8(IR_ADDR_16BIT); jtag_dr_shift20(adr); SETTCLK; jtag_ir_shift8(IR_DATA_TO_ADDR); - jtag_ir_shift8(data);//16 word + jtag_dr_shift16(data);//16 word CLRTCLK; jtag_ir_shift8(IR_CNTRL_SIG_16BIT); - jtag_ir_shift8(0x0501); + jtag_dr_shift16(0x0501); SETTCLK; CLRTCLK; @@ -154,8 +156,8 @@ void jtag430x2handle(unsigned char app, break; case JTAG430_READMEM: case PEEK: - cmddataword[0]=jtag430x2_readmem(cmddataword[0]); - //cmddataword[0]=jtag430_readmem(cmddataword[0]); + //cmddataword[0]=jtag430x2_readmem(cmddataword[0]); + cmddataword[0]=jtag430x2_readmem(cmddatalong[0]); txdata(app,verb,2); break; case JTAG430_COREIP_ID: diff --git a/firmware/include/platform.h b/firmware/include/platform.h index e6cbcec..16b3e84 100644 --- a/firmware/include/platform.h +++ b/firmware/include/platform.h @@ -8,7 +8,7 @@ //Use P3 instead of P5 for target I/O on chips without P5. #ifndef __MSP430_HAS_PORT5__ #ifndef __MSP430_HAS_PORT5_R__ -//#warning "No P5, using P3 instead. Will break 2618 and 1612 support." +#warning "No P5, using P3 instead. Will break 2618 and 1612 support." #define P5OUT P3OUT #define P5DIR P3DIR #define P5REN P3REN @@ -20,7 +20,7 @@ //Use false P5REN for 1612. #ifdef __MSP430_HAS_PORT5__ #ifndef __MSP430_HAS_PORT5_R__ -//#warning "1xx, using fake P5REN for external pulling resistors." +#warning "1xx, using fake P5REN for external pulling resistors." #define P5REN P5OUT #endif #endif -- 2.20.1