projects
/
goodfet
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
WEAKDEFed ejtaghandle.
[goodfet]
/
firmware
/
apps
/
jtag
/
jtag430.c
diff --git
a/firmware/apps/jtag/jtag430.c
b/firmware/apps/jtag/jtag430.c
index
3a2fe68
..
7aea264
100644
(file)
--- a/
firmware/apps/jtag/jtag430.c
+++ b/
firmware/apps/jtag/jtag430.c
@@
-10,23
+10,31
@@
unsigned int jtag430mode=MSP430X2MODE;
unsigned int jtag430mode=MSP430X2MODE;
-//! Set
the program coun
ter.
-void jtag430_set
pc(unsigned int adr
){
+//! Set
a regis
ter.
+void jtag430_set
r(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_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;
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;
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
}
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();
//! Halt the CPU
void jtag430_haltcpu(){
//jtag430_setinstrfetch();
@@
-199,19
+207,17
@@
void jtag430_resettap(){
SETTDI; //430X2
SETTMS;
//SETTDI; //classic
SETTDI; //430X2
SETTMS;
//SETTDI; //classic
-
SETT
CK;
+
TCKTO
CK;
// Navigate to reset state.
// Should be at least six.
for(i=0;i<4;i++){
// Navigate to reset state.
// Should be at least six.
for(i=0;i<4;i++){
- CLRTCK;
- SETTCK;
+ TCKTOCK;
}
// test-logic-reset
}
// test-logic-reset
- CLRTCK;
CLRTMS;
CLRTMS;
-
SETT
CK;
+
TCKTO
CK;
SETTMS;
// idle
SETTMS;
// idle
@@
-238,7
+244,9
@@
void jtag430_start(){
SETTST;
SETRST;
delay(0xFFFF);
SETTST;
SETRST;
delay(0xFFFF);
-
+
+
+ #ifndef SBWREWRITE
//Entry sequence from Page 67 of SLAU265A for 4-wire MSP430 JTAG
CLRRST;
delay(100); //100
//Entry sequence from Page 67 of SLAU265A for 4-wire MSP430 JTAG
CLRRST;
delay(100); //100
@@
-249,6
+257,7
@@
void jtag430_start(){
SETRST;
P5DIR&=~RST;
delay(0xFFFF);
SETRST;
P5DIR&=~RST;
delay(0xFFFF);
+ #endif
//Perform a reset and disable watchdog.
jtag430_por();
//Perform a reset and disable watchdog.
jtag430_por();
@@
-257,26
+266,21
@@
void jtag430_start(){
jtag430_haltcpu();
}
jtag430_haltcpu();
}
-//! St
art normally, not
JTAG.
+//! St
op
JTAG.
void jtag430_stop(){
void jtag430_stop(){
+ debugstr("Exiting JTAG.");
jtagsetup();
//Known-good starting position.
//Might be unnecessary.
jtagsetup();
//Known-good starting position.
//Might be unnecessary.
- SETTST;
+ //SETTST;
+ CLRTST;
SETRST;
delay(0xFFFF);
//Entry sequence from Page 67 of SLAU265A for 4-wire MSP430 JTAG
CLRRST;
delay(0xFFFF);
SETRST;
delay(0xFFFF);
//Entry sequence from Page 67 of SLAU265A for 4-wire MSP430 JTAG
CLRRST;
delay(0xFFFF);
- /*
- delay(100); //100
- CLRTST;
- delay(50); //50
- SETTST;
- delay(50); //50
- */
SETRST;
//P5DIR&=~RST;
//delay(0xFFFF);
SETRST;
//P5DIR&=~RST;
//delay(0xFFFF);
@@
-319,7
+323,8
@@
void jtag430handle(unsigned char app,
P1OUT^=1;
}
P1OUT&=~1;
P1OUT^=1;
}
P1OUT&=~1;
-
+
+
switch(verb){
case START:
//Enter JTAG mode.
switch(verb){
case START:
//Enter JTAG mode.
@@
-327,10
+332,11
@@
void jtag430handle(unsigned char app,
//TAP setup, fuse check
jtag430_resettap();
//TAP setup, fuse check
jtag430_resettap();
- txdata(app,verb,0);
+ cmddata[0]=jtag_ir_shift8(IR_BYPASS);
+ txdata(app,verb,1);
+
break;
case STOP:
break;
case STOP:
- debugstr("Resetting target.");
jtag430_stop();
txdata(app,verb,0);
break;
jtag430_stop();
txdata(app,verb,0);
break;
@@
-416,7
+422,16
@@
void jtag430handle(unsigned char app,
jtag430_setpc(cmddataword[0]);
txdata(app,verb,0);
break;
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;
case JTAG430_COREIP_ID:
case JTAG430_DEVICE_ID:
cmddataword[0]=0;