X-Git-Url: https://www.hackdaworld.org/gitweb/?p=my-code%2Fpnx.git;a=blobdiff_plain;f=jtag.c;h=9d05d5f54cb3970f98f7e73d37b0463e42a796f5;hp=2e8298cf44767d578e14db9746ee07be7db1622f;hb=6c8a5ae62d740c2ca0e43f985b556453911b0880;hpb=73b8a3e23ea9b9760ecf1dd29170558122d1a17b diff --git a/jtag.c b/jtag.c index 2e8298c..9d05d5f 100644 --- a/jtag.c +++ b/jtag.c @@ -1,6 +1,7 @@ /* * jtag.c - basic jtag stuff (good excercise!) * + * build: gcc -Wall jtag.c -o jtag * author: hackbard@hackdaworld.org * */ @@ -164,12 +165,15 @@ int jtag_read_data(u8 *p,int bitlen) { memset(p,0,bitlen+7/8); count=0; + printf(" <- "); while(bitlen) { in=jtag_clock(0,0); p[count/8]|=((in&1)<<(count%8)); + printf("%d",p[count/8]&(1<<(count%8))?1:0); count+=1; bitlen-=1; } + printf("\n"); return 0; @@ -181,11 +185,14 @@ int jtag_write_data(u8 *p,int bitlen) { count=0; + printf(" -> "); while(bitlen) { - jtag_clock(0,p[count/8]&(1<=MAXDEV*MAX_IR_LEN) { + if(bitlen>=MAXDEV*MAXIRLEN) { printf("instruction register too big!\n"); return -1; } - memset(ir,0,MAXDEV*MAX_IR_LEN/8*sizeof(u8)); + memset(ir,0,MAXDEV*MAXIRLEN/8*sizeof(u8)); + count=0; + printf("set ir: "); while(bitlen) { - ir[count/8]|=p[count] ... HIER WEITER ..; + if(s[count]=='1') + ir[count/8]|=(1<<(count%8)); + printf("%d",ir[count/8]&(1<<(count%8))?1:0); count+=1; bitlen-=1; } + printf("\n"); jtag_enter_shift_ir(); - - while(len--) - + jtag_write_data(ir,count); jtag_leave_shift_ir(); + return 0; } @@ -258,6 +269,7 @@ int jtag_set_ir(char *s,int bitlen) { int main(int argc,char **argv) { t_jtag jtag; + u8 io[256]; memset(&jtag,0,sizeof(t_jtag)); @@ -273,6 +285,12 @@ int main(int argc,char **argv) { jtag_chain_init(&jtag); printf("done\n\n"); + printf("testing some instructions ...\n\n"); + jtag_set_ir("000001000001",12); + jtag_enter_shift_dr(); + jtag_read_data(io,64); + jtag_leave_shift_dr(); + return 0; }