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];
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."""
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);
#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()
//Clear SDA and SCL.
//Direction, not value, is used to set the value.
//(Pull-up or 0.)
+
P5DIR|=(SDA|SCL);
P5REN|=SDA|SCL;
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);
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;
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:
//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
//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