X-Git-Url: http://git.rot13.org/?p=goodfet;a=blobdiff_plain;f=firmware%2Finclude%2Fjtag.h;h=59a0e511d73cd3d659a5c9aac7a637be76f1ae7a;hp=17833d66a3bf6784dd9791199242d476697bbccb;hb=9e8395fdcb27a6696fdcb37dd2a66a9678aecc64;hpb=a653ba1562dc444e4be791e22264a89a3c6b4a19 diff --git a/firmware/include/jtag.h b/firmware/include/jtag.h index 17833d6..59a0e51 100644 --- a/firmware/include/jtag.h +++ b/firmware/include/jtag.h @@ -1,18 +1,36 @@ +/*! \file jtag.h + \author Travis Goodspeed + \brief JTAG handler functions. +*/ #include #include #include +extern unsigned int drwidth; + +#define MSP430MODE 0 +#define MSP430XMODE 1 +#define MSP430X2MODE 2 +extern unsigned int jtag430mode; + // Generic Commands +//! Shift n bytes. +unsigned long jtagtransn(unsigned long word, + unsigned int bitcount); //! Shift 8 bits of the IR. unsigned char jtag_ir_shift8(unsigned char); //! Shift 16 bits of the DR. unsigned int jtag_dr_shift16(unsigned int); +//! Shift 20 bits of the DR, MSP430 specific. +unsigned long jtag_dr_shift20(unsigned long in); //! Stop JTAG, release pins void jtag_stop(); +//! Setup the JTAG pin directions. +void jtagsetup(); // JTAG430 Commands @@ -21,6 +39,9 @@ void jtag430_start(); //! Reset the TAP state machine, check the fuse. void jtag430_resettap(); +//! Defined in jtag430asm.S +void jtag430_tclk_flashpulses(int); + //High-level Macros follow //! Write data to address. void jtag430_writemem(unsigned int adr, unsigned int data); @@ -83,7 +104,12 @@ extern int savedtclk; #define SAVETCLK savedtclk=P5OUT&TCLK; #define RESTORETCLK if(savedtclk) P5OUT|=TCLK; else P5OUT&=~TCLK -//JTAG commands, bit-swapped +//Replace every "CLRTCK SETTCK" with this. +#define TCKTOCK CLRTCK,SETTCK + + +//16-bit MSP430 JTAG commands, bit-swapped +//Rewrite these with MSP430 prefix. #define IR_CNTRL_SIG_16BIT 0xC8 // 0x13 #define IR_CNTRL_SIG_CAPTURE 0x28 // 0x14 #define IR_CNTRL_SIG_RELEASE 0xA8 // 0x15 @@ -103,3 +129,42 @@ extern int savedtclk; // Bypass instruction #define IR_BYPASS 0xFF // 0xFF +//MSP430X2 unique +#define IR_COREIP_ID 0xE8 // 0x17 +#define IR_DEVICE_ID 0xE1 // 0x87 + +//MSP430 or MSP430X +#define MSP430JTAGID 0x89 +//MSP430X2 only +#define MSP430X2JTAGID 0x91 + +//! Syncs a POR. +unsigned int jtag430x2_syncpor(); +//! Executes an MSP430X2 POR +unsigned int jtag430x2_por(); +//! Power-On Reset +void jtag430_por(); + +//JTAG commands +#define JTAG_IR_SHIFT 0x80 +#define JTAG_DR_SHIFT 0x81 +#define JTAG_DR_SHIFT20 0x91 + + +//JTAG430 commands +#define JTAG430_HALTCPU 0xA0 +#define JTAG430_RELEASECPU 0xA1 +#define JTAG430_SETINSTRFETCH 0xC1 +#define JTAG430_SETPC 0xC2 +#define JTAG430_SETREG 0xD2 +#define JTAG430_GETREG 0xD3 +#define JTAG430_WRITEMEM 0xE0 +#define JTAG430_WRITEFLASH 0xE1 +#define JTAG430_READMEM 0xE2 +#define JTAG430_ERASEFLASH 0xE3 +#define JTAG430_ERASECHECK 0xE4 +#define JTAG430_VERIFYMEM 0xE5 +#define JTAG430_BLOWFUSE 0xE6 +#define JTAG430_ISFUSEBLOWN 0xE7 +#define JTAG430_COREIP_ID 0xF0 +#define JTAG430_DEVICE_ID 0xF1