unsigned long jtagtransn(unsigned long word,
unsigned int bitcount){
unsigned int bit;
unsigned long jtagtransn(unsigned long word,
unsigned int bitcount){
unsigned int bit;
- unsigned int high=(word>>16);
- SAVETCLK;
+ //0x8000
+ unsigned long high;
+ if(bitcount==20)
+ high=0x80000;
+ if(bitcount==16)
+ high= 0x8000;
for (bit = 0; bit < bitcount; bit++) {
/* write MOSI on trailing edge of previous clock */
for (bit = 0; bit < bitcount; bit++) {
/* write MOSI on trailing edge of previous clock */
{SETMOSI;}
else
{CLRMOSI;}
{SETMOSI;}
else
{CLRMOSI;}
unsigned int drwidth=20;
//! Shift all bits of the DR.
unsigned int drwidth=20;
//! Shift all bits of the DR.
-unsigned long jtag_dr_shift(unsigned long in){
+unsigned long jtag_dr_shift20(unsigned long in){
SETTCK;
// shift DR, then idle
SETTCK;
// shift DR, then idle
- return(jtagtransn(in,drwidth));
+ return(jtagtransn(in,20));
}
//! Shift 16 bits of the DR.
unsigned int jtag_dr_shift16(unsigned int in){
}
//! Shift 16 bits of the DR.
unsigned int jtag_dr_shift16(unsigned int in){
- //This name is deprecated, kept around to find 16-bit dependent code.
- return jtag_dr_shift(in);
+ // idle
+ SETTMS;
+ CLRTCK;
+ SETTCK;
+ // select DR
+ CLRTMS;
+ CLRTCK;
+ SETTCK;
+ // capture IR
+ CLRTCK;
+ SETTCK;
+
+ // shift DR, then idle
+ return(jtagtransn(in,16));
CLRTCLK;
jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
CLRTCLK;
jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
if(adr>0xFF)
jtag_dr_shift16(0x2409);//word read
else
if(adr>0xFF)
jtag_dr_shift16(0x2409);//word read
else
unsigned long jtag430_deviceid(){
jtag_ir_shift8(IR_DEVICE_ID);
unsigned long jtag430_deviceid(){
jtag_ir_shift8(IR_DEVICE_ID);
- return jtag_dr_shift(0);
+ return jtag_dr_shift20(0);
}
//! Set the program counter.
void jtag430x2_setpc(unsigned long pc){
}
//! Set the program counter.
void jtag430x2_setpc(unsigned long pc){
unsigned short Mova;
unsigned short Pc_l;
unsigned short Mova;
unsigned short Pc_l;
jtag_dr_shift16(0x4303);
CLRTCLK;
jtag_ir_shift8(IR_ADDR_CAPTURE);
jtag_dr_shift16(0x4303);
CLRTCLK;
jtag_ir_shift8(IR_ADDR_CAPTURE);
- jtag_dr_shift(0x00000);
+ jtag_dr_shift20(0x00000);
+ }else{
+ while(1) P1OUT^=1; //Lock LED if locked up.
//! Read data from address
unsigned int jtag430x2_readmem(unsigned int adr){
unsigned int toret;
//! Read data from address
unsigned int jtag430x2_readmem(unsigned int adr){
unsigned int toret;
- //SETPC_430Xv2(StartAddr);
SETTCLK;
jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
jtag_dr_shift16(0x0501);
SETTCLK;
jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
jtag_dr_shift16(0x0501);
drwidth=16;
}else if(jtagid==MSP430X2JTAGID){
jtag430mode=MSP430X2MODE;
drwidth=16;
}else if(jtagid==MSP430X2JTAGID){
jtag430mode=MSP430X2MODE;
}else{
txdata(app,NOK,1);
return;
}else{
txdata(app,NOK,1);
return;
case JTAG430_READMEM:
case PEEK:
cmddataword[0]=jtag430x2_readmem(cmddataword[0]);
case JTAG430_READMEM:
case PEEK:
cmddataword[0]=jtag430x2_readmem(cmddataword[0]);
+ //cmddataword[0]=jtag430_readmem(cmddataword[0]);
txdata(app,verb,2);
break;
case JTAG430_COREIP_ID:
txdata(app,verb,2);
break;
case JTAG430_COREIP_ID: