#include "jtag.h"
-
-
//! Set up the pins for JTAG mode.
void jtagsetup(){
P5DIR|=MOSI+SCK+TMS;
return byte;
}
-//! Shift 8 bits in and out.
-unsigned int jtagtrans16(unsigned int word){
+//! Shift n bits in and out.
+unsigned long jtagtransn(unsigned long word,
+ unsigned int bitcount){
unsigned int bit;
SAVETCLK;
- for (bit = 0; bit < 16; bit++) {
+ for (bit = 0; bit < bitcount; bit++) {
/* write MOSI on trailing edge of previous clock */
if (word & 0x8000)
{SETMOSI;}
{CLRMOSI;}
word <<= 1;
- if(bit==15)
+ if(bit==bitcount-1)
SETTMS;//TMS high on last bit to exit.
CLRTCK;
SETTCK;
- /* read MISO on trailing edge */
+ /* read MISO on trailing edge */
word |= READMISO;
}
RESTORETCLK;
return word;
}
+/*
+//! Shift 16 bits in and out.
+unsigned int jtagtrans16(unsigned int word){ //REMOVEME
+ unsigned int bit;
+ SAVETCLK;
+
+ for (bit = 0; bit < 16; bit++) {
+ // write MOSI on trailing edge of previous clock
+ if (word & 0x8000)
+ {SETMOSI;}
+ else
+ {CLRMOSI;}
+ word <<= 1;
+
+ if(bit==15)
+ SETTMS;//TMS high on last bit to exit.
+
+ CLRTCK;
+ SETTCK;
+ // read MISO on trailing edge
+ word |= READMISO;
+ }
+ RESTORETCLK;
+
+ // exit state
+ CLRTCK;
+ SETTCK;
+ // update state
+ CLRTMS;
+ CLRTCK;
+ SETTCK;
+
+ return word;
+}*/
+
//! Stop JTAG, release pins
void jtag_stop(){
P5OUT=0;
P4OUT=0;
}
-
-//! Shift 16 bits of the DR.
-unsigned int jtag_dr_shift16(unsigned int in){
+unsigned int drwidth=20;
+//! Shift all bits of the DR.
+unsigned long jtag_dr_shift(unsigned long in){
// idle
SETTMS;
CLRTCK;
// capture IR
CLRTCK;
SETTCK;
-
+
// shift DR, then idle
- return(jtagtrans16(in));
+ return(jtagtransn(in,drwidth));
+}
+
+
+//! 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);
}