7 //! Set the program counter.
8 void jtag430_setpc(unsigned int adr){
9 jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
10 jtag_dr_shift16(0x3401);// release low byte
11 jtag_ir_shift8(IR_DATA_16BIT);
12 jtag_dr_shift16(0x4030);//Instruction to load PC
15 jtag_dr_shift16(adr);// Value for PC
17 jtag_ir_shift8(IR_ADDR_CAPTURE);
19 CLRTCLK ;// Now PC is set to "PC_Value"
20 jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
21 jtag_dr_shift16(0x2401);// low byte controlled by JTAG
25 void jtag430_haltcpu(){
26 //jtag430_setinstrfetch();
28 jtag_ir_shift8(IR_DATA_16BIT);
29 jtag_dr_shift16(0x3FFF);//JMP $+0
32 jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
33 jtag_dr_shift16(0x2409);//set JTAG_HALT bit
38 void jtag430_releasecpu(){
40 jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
41 jtag_dr_shift16(0x2401);
42 jtag_ir_shift8(IR_ADDR_CAPTURE);
46 //! Read data from address
47 unsigned int jtag430_readmem(unsigned int adr){
51 jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
53 jtag_dr_shift16(0x2409);//word read
55 jtag_dr_shift16(0x2419);//byte read
56 jtag_ir_shift8(IR_ADDR_16BIT);
57 jtag_dr_shift16(adr);//address
58 jtag_ir_shift8(IR_DATA_TO_ADDR);
62 toret=jtag_dr_shift16(0x0000);//16 bit return
67 //! Write data to address.
68 void jtag430_writemem(unsigned int adr, unsigned int data){
70 jtag_ir_shift8(IR_CNTRL_SIG_16BIT);
72 jtag_dr_shift16(0x2408);//word write
74 jtag_dr_shift16(0x2418);//byte write
75 jtag_ir_shift8(IR_ADDR_16BIT);
77 jtag_ir_shift8(IR_DATA_TO_ADDR);
78 jtag_dr_shift16(data);
83 //! Write data to address.
84 void jtag430_writeflash(unsigned int adr, unsigned int data){
85 //TODO; this is complicated.
89 //! Reset the TAP state machine.
90 void jtag430_resettap(){
97 // Navigate to reset state.
98 // Should be at least six.
113 Sometimes this isn't necessary. */
125 //! Start JTAG, take pins
126 void jtag430_start(){
129 //Known-good starting position.
130 //Might be unnecessary.
135 //Entry sequence from Page 67 of SLAU265A for 4-wire MSP430 JTAG
147 //! Set CPU to Instruction Fetch
148 void jtag430_setinstrfetch(){
149 jtag_ir_shift8(IR_CNTRL_SIG_CAPTURE);
151 // Wait until instruction fetch state.
153 if (jtag_dr_shift16(0x0000) & 0x0080)
160 //! Handles unique MSP430 JTAG commands. Forwards others to JTAG.
161 void jtag430handle(unsigned char app,
169 //TAP setup, fuse check
173 case JTAG430_HALTCPU:
177 case JTAG430_RELEASECPU:
178 jtag430_releasecpu();
181 case JTAG430_SETINSTRFETCH:
182 jtag430_setinstrfetch();
187 case JTAG430_READMEM:
189 cmddataword[0]=jtag430_readmem(cmddataword[0]);
192 case JTAG430_WRITEMEM:
194 jtag430_writemem(cmddataword[0],cmddataword[1]);
197 case JTAG430_WRITEFLASH:
198 jtag430_writeflash(cmddataword[0],cmddataword[1]);
202 jtag430_setpc(cmddataword[0]);
206 jtaghandle(app,verb,len);