s3c4510.c
资源名称:直接操作并行口.zip [点击查看]
上传用户:fsjiahua
上传日期:2013-03-07
资源大小:89k
文件大小:19k
源码类别:
并口编程
开发平台:
Visual C++
- #define VERSION "1.0"
- #include <stdio.h>
- #include <windows.h>
- #include <time.h>
- #include <conio.h>
- #include "s3c4510.h"
- int pin[] =
- {
- //0
- 1, // UARXD1_IN PEXINT(7) out
- 1, // UARXD1_IN PEXINT(7) out enable
- 1, // nUADSR0_OUT PEXINT(7) observe_only
- 1, // UATXD0_OUT PEXINT(6) out
- 1, // nUADTR0_IN PEXINT(6) out enable
- 1, // UARXD0_IN PEXINT(6) observe_only
- 1, // SDA_OUT PEXINT(5) out
- 1, // SDA_IN PEXINT(5) out enable
- 1, // SCL_OUT PEXINT(5) observe_only
- 1, // SCL_IN PEXINT(4) out
- 1, // P_17_ENB PEXINT(4) out enable
- //10
- 1, // P_17_OUT PEXINT(4) observe_only
- 1, // P_17_IN PEXINT(3) out
- 1, // P_16_ENB PEXINT(3) out enable
- 1, // P_16_OUT PEXINT(3) observe_only
- 1, // P_16_IN PEXINT(2) out
- 1, // P_15_ENB PEXINT(2) out enable
- 1, // P_15_OUT PEXINT(2) observe_only
- 1, // P_15_IN PEXINT(1) out
- 1, // P_14_ENB PEXINT(1) out enable
- 1, // P_14_OUT PEXINT(1) observe_only
- //20
- 1, // P_14_IN PEXINT(0) out
- 1, // P_13_ENB PEXINT(0) out enable
- 1, // P_13_OUT PEXINT(0) observe_only
- 1, // P_13_IN PNXDACK0
- 1, // P_12_ENB PNXDACK0 out enable
- 1, // P_12_OUT PNXDACK0 observe_only
- 1, // P_12_IN PNXDREQ0
- 1, // P_11_ENB PNXDREQ0 out enable
- 1, // P_11_OUT PNXDREQ0 observe_only
- 1, // P_11_IN PNXWAIT
- //30
- 1, // P_10_ENB PNXWAIT out enable
- 1, // P_10_OUT PNXWAIT observe_only
- 1, // P_10_IN PSCLK
- 1, // P_9_ENB PSCLK out enable
- 1, // P_9_OUT PSCKE
- 1, // P_9_IN PSCKE out enable
- 1, // P_8_ENB PNGCS(7)
- 1, // P_8_OUT nGCS_6_OUT
- 1, // P_8_IN nRCS_5_OUT
- 0, // P_7_ENB nRCS_5_OUT enable
- //40
- 1, // P_7_OUT nRCS_4_OUT
- 0, // P_7_IN nRCS_4_OUT enable
- 1, // P_6_ENB nRCS_3_OUT
- 0, // P_6_OUT nRCS_3_OUT enable
- 1, // P_6_IN nRCS_2_OUT
- 0, // P_5_ENB nRCS_2_OUT enable
- 1, // P_5_OUT nRCS_1_OUT
- 0, // P_5_IN nRCS_1_OUT enable
- 1, // P_4_ENB nRCS_0_OUT
- 1, // P_4_OUT nDWE_OUT
- //50
- 1, // P_4_IN nOE_OUT
- 1, // P_3_ENB nWBE_3_OUT
- 1, // P_3_OUT nWBE_3_OUT enable
- 1, // P_3_IN nWBE_2_OUT
- 1, // P_2_ENB nWBE_2_OUT enable
- 1, // P_2_OUT nWBE_1_OUT
- 1, // P_2_IN nWBE_1_OUT
- 0, // P_1_ENB nWBE_DWE_OE_CS0_OUT_ENB
- 1, // P_1_OUT PNCAS(3)
- 0, // P_1_IN PNCAS(3 enable)
- //60
- 1, // P_0_ENB PNCAS(2)
- 0, // P_0_OUT PNCAS(2) enable
- 1, // P_0_IN PNCAS(1)
- 1, // D_31_OUT PNCAS(0)
- 0, // D_31_IN nGCS_6-7_OUT PNCAS(0-1) enable
- 0, // D_30_OUT //a0 66-101 都为0
- 0, // D_30_IN
- 0, // D_29_OUT
- 0, // D_29_IN
- 0, // D_28_OUT
- //70
- 0, // D_28_IN
- 0, // D_27_OUT
- 0, // D_27_IN
- 0, // D_26_OUT
- 0, // D_26_IN
- 0, // D_25_OUT
- 0, // D_25_IN
- 0, // D_24_OUT
- 0, // D_24_IN
- 0, // D_23_OUT
- //80
- 0, // D_23_IN
- 0, // D_22_OUT a15
- 0, // D_22_IN
- 0, // D_21_OUT a16
- 0, // D_21_IN
- 0, // D_20_OUT a17
- 0, // D_20_IN
- 0, // D_19_OUT a18
- 0, // D_19_IN
- 0, // D_18_OUT
- //90
- 0, // D_18_IN
- 0, // D_17_OUT
- 0, // D_17_IN
- 0, // D_16_OUT
- 0, // D_16_IN
- 0, // D_15_OUT
- 0, // D_15_IN
- 0, // D_14_OUT
- 0, // D_14_IN
- 0, // D_13_OUT a24
- //100
- 0, // D_13_IN
- 0, // d0-out
- 0, // d0-in
- 0, // D_11_OUT
- 0, // D_11_IN
- 0, // D_10_OUT
- 0, // D_10_IN
- 0, // D_9_OUT
- 0, // D_9_IN
- 0, // D_8_OUT
- //110
- 0, // D_8_IN
- 0, // D_7_OUT
- 0, // D_7_IN
- 0, // D_6_OUT
- 0, // D_6_IN
- 0, // D_5_OUT d7-out
- 1, // D_5_IN d7-d0-out-enable
- 0, // D_4_OUT
- 0, // D_4_IN d8-out
- 0, // D_3_OUT d8-in
- //120
- 0, // D_3_IN
- 0, // D_2_OUT
- 0, // D_2_IN
- 0, // D_1_OUT
- 0, // D_1_IN
- 0, // D_0_OUT
- 0, // D_0_IN
- 0, //1,// D_OUT_ENB
- 0, // A_21_OUT
- 0, // A_20_OUT
- //130
- 0, // A_19_OUT
- 0, // A_18_OUT
- 0, // A_17_OUT d15 out
- 1, // A_16_OUT d15-d8-out-enable
- 0, // A_15_OUT
- 0, // A_14_OUT D16_OUT
- 1, // A_13_OUT D16_OUT_ENB
- 0, // A_12_OUT D16_IN
- 0, // A_11_OUT
- 1, // A_10_OUT D17_OUT_ENB
- //140
- 0, // A_9_OUT
- 0, // A_8_OUT
- 1, // A_7_OUT D18_OUT_ENB
- 0, // A_6_OUT
- 0, // A_5_OUT
- 1, // A_4_OUT D19_OUT_ENB
- 0, // A_3_OUT
- 0, // A_2_OUT
- 1, // A_1_OUT D20_OUT_ENB
- 0, // A_0_OUT
- //150
- 0, // ExtMACK_OUT
- 1, // ExtMREQ_IN D21_OUT_ENB
- 0, // nWBE_3_OUT
- 0, // nWBE_2_OUT
- 1, // nWBE_1_OUT D22_OUT_ENB
- 0, // nWBE_0_OUT
- 0, // nDWE_OUT
- 1, // nCAS_3_OUT D23_OUT_ENB
- 0, // nCAS_2_OUT
- 0, // nCAS_1_OUT
- //160
- 1, // nCAS_0_OUT D24_OUT_ENB
- 0, // nRAS_3_OUT
- 0, // nRAS_2_OUT
- 1, // nRAS_1_OUT D25_OUT_ENB
- 0, // nRAS_0_OUT
- 0, // nRCS_5_OUT
- 1, // nRCS_4_OUT D26_OUT_ENB
- 0, // nRCS_3_OUT
- 0, // nRCS_2_OUT
- 1, // nRCS_1_OUT D27_OUT_ENB
- //170
- 0, // CLKSEL_IN
- 0, // nRESET_IN
- 1, // MCLK_IN D28_OUT_ENB
- 0, // MCLKO_OUT
- 0, // CLKOEN_IN
- 1, // nRCS_0_OUT D29_OUT_ENB
- 0, // B0SIZE_1_IN
- 0, // B0SIZE_0_IN
- 1, // nOE_OUT D30_OUT_ENB
- 0, // nEWAIT_IN
- //180
- 0, // nECS_3_OUT
- 1, // nECS_2_OUT D31_OUT_ENB
- 1, // nECS_1_OUT D31_IN
- 1, // nECS_0_OUT PTXD0
- 1, // DIS_BUS PTXD0 out enable
- 1, // UCLK_IN PTXD0 observe_only
- 1, // TMODE_IN PRXD0
- 1, // MDC_OUT PRXD0 out enable
- 1, // LITTLE_IN PRXD0 observe_only
- 1, // MDIO_OE PVD(0)
- //190
- 1, // MDIO_OUT PVD(0) out enable
- 1, // MDIO_IN PVD(0) observe_only
- 1, // TX_EN_TXEN_10M_OUT PVD(1)
- 1, // TX_CLK_TXCLK_10M_OUT PVD(1) out enable
- 1, // TX_ERR_PCOMP_10M_OUT PVD(1) observe_only
- 1, // TXD3_OUT PVD(2)
- 1, // TXD2_OUT PVD(2) out enable
- 1, // TXD1_LOOP10_OUT PVD(2) observe_only
- 1, // TXD0_TXD_10M_OUT PVD(3)
- 1, // COL_COL_10M_IN PVD(3) out enable
- //200
- 1, // RX_CLK_RXCLK_10M_IN PVD(3) observe_only
- 1, // RX_ERR_IN PVCLK
- 1, // RXD3_IN PVCLK out enable
- 1, // RXD2_IN PVCLK observe_only
- 1, // RXD1_IN PVLINE
- 1, // RXD0_RXD_10M_IN PVLINE out enable
- 1, // RX_DV_LINK10_IN PVLINE observe_only
- 1, // CRS_CRS_10M_IN PVM
- 1, // TXCBEN PVM out enable
- 1, // TXCB_OUT PVM observe_only
- //210
- 1, // TXCB_IN PVFRAME
- 1, // nSYNCB_OUT PVFRAME out enable
- 1, // RXCB_IN PVFRAME observe_only
- 1, // nDCDB_IN PTOUT(4)
- 1, // nCTSB_IN PTOUT(4) out enable
- 1, // TXDB_OUT PTOUT(4) observe_only
- 1, // nRTSB_OUT PTOUT(3)
- 1, // RXDB_IN PTOUT(3) out enable
- 1, // nDTRB_OUT PTOUT(43) observe_only
- 1, // TXCAEN PTOUT(2)
- //220
- 1, // TXCA_OUT PTOUT(2) out enable
- 1, // TXCA_IN PTOUT(2) observe_only
- 1, // nSYNCA_OUT PTOUT(1)
- 1, // RXCA_IN PTOUT(1) out enable
- 1, // nDCDA_IN PTOUT(1) observe_only
- 1, // nCTSA_IN PTOUT(0)
- 1, // TXDA_OUT PTOUT(0) out enable
- 1, // nRTSA_OUT PTOUT(0) observe_only
- 1, // RXDA_IN PEXTCLK observe_only
- 1, // nDTRA_OUT PIICSCL
- //230
- 1, // nUADSR1_OUT PIICSCL observe_only
- 1, // UATXD1_OUT PIICSDA
- 1 , // nUADTR1_IN PIICSDA observe_only
- 1, // RXCA_IN PSIOTXD
- 1, // nDCDA_IN PSIOTXD out enable
- 1, // nCTSA_IN PSIOTXD observe_only
- 1, // TXDA_OUT PSIORDY
- 1, // nRTSA_OUT PSIORDY out enable
- 1, // RXDA_IN PSIORDY observe_only
- 1, // nDTRA_OUT PSIORXD
- //240
- 1, // nUADSR1_OUT PSIORXD out enable
- 1, // UATXD1_OUT PSIORXD observe_only
- 1 , // nUADTR1_IN PSIOCLK
- 1, // RXCA_IN PSIOCLK out enable
- 1, // nDCDA_IN PSIOCLK observe_only
- 1, // nCTSA_IN PENDIAN
- 1, // TXDA_OUT PENDIAN out enable
- 1, // nRTSA_OUT PENDIAN observe_only
- 1, // RXDA_IN internal
- 1, // nDTRA_OUT internal
- //250
- 1, // nUADSR1_OUT internal
- 1, // UATXD1_OUT internal
- 1 , // nUADTR1_IN PNRESET observe_only
- 1, // nDTRA_OUT PCLKOUT
- 1, // nUADSR1_OUT PCLKOUT out enable
- 1, // UATXD1_OUT PCLKOUT observe_only
- // 1 // nUADTR1_IN
- };
- int lpt_address;
- void error_out(char *error_string)
- {
- printf("%sn",error_string);
- exit(0);
- }
- unsigned short test_port(void) // 不需要改
- {
- // search for valid parallel port
- lpt_address = 0;
- OUTB(LPT1, 0x55);
- if(INB(LPT1) == 0x55) lpt_address = LPT1;
- OUTB(LPT2, 0x55);
- if(INB(LPT2) == 0x55) lpt_address = LPT2;
- OUTB(LPT3, 0x55);
- if(INB(LPT3) == 0x55) lpt_address = LPT3;
- return(lpt_address);
- }
- int putp(int tdi, int tms, int rp)
- {
- // Output pins (LPT driving)
- // LPT D2 Pin 4 and TCK (bit 2 lptaddress )
- // LPT D3 Pin 5 and TDI (bit 3 lptaddress )
- // LPT D1 Pin 3 and TMS (bit 1 lptaddress )
- // LPT D0 Pin 2 and TRST (bit 0 lptaddress )
- //
- // Input pin (S3C4510 board drives)
- // LPT BUSY Pin 11 and TDO (bit 7 lptaddress + 1)
- //std jtag pin connect
- // 13 SELECTED 11 TDO (bit 4 lptaddress + 1)
- // 8 DATA6 5 TDI
- // 3 DATA1 7 TMS
- // 2 DATA0 9 TCK
- // 4 DATA2 3 nTRT
- int tdo = -1;
- int t1,t2;
- t1 = tdi*64+tms*2+4;
- OUTB(lpt_address, t1); //TCK low
- t1= tdi*64+tms*2+1+4;
- OUTB(lpt_address, t1); // TCK high
- if(rp == RP)
- {
- OUTB(lpt_address, tdi*64+tms*2+4); // TCK low
- t1 = INB(lpt_address + 1);
- t2 = (t1 & 0x10)>>4;
- tdo = t2; // get TDO data
- }
- return tdo;
- }
- void reset_jtag(void) //不用动 //对于std jtag,
- //rst没有取反,先写0,后写1
- {
- int i;
- OUTB(lpt_address, 0); // TRST low
- Sleep(5);
- OUTB(lpt_address, 0x4); // TRST high
- Sleep(5);
- for( i=0; i<8; i++) putp(1,1,IP); // move to TEST_LOGIC/RESET
- putp(1,0,IP); // move to Run_Test/Idle
- }
- void test_logic_reset(void)
- {
- putp(1,1,IP); // keep TMS set to 1 force a test logic reset
- putp(1,1,IP); // no matter where you are in the TAP controller
- putp(1,1,IP);
- putp(1,1,IP);
- putp(1,1,IP);
- putp(1,1,IP);
- }
- int check_id(char *device_id)
- {
- // compare passed device ID to the one returned from the ID command
- char in_id[40];
- BOOL error_flag = FALSE;
- int i;
- for(i = 34; i >= 0; i--)
- {
- if(i == 4 || i == 21 || i == 33)
- {
- in_id[i] = ' ';
- i--;
- }
- if(putp(1,0,RP) == 0)
- in_id[i] = '0';
- else
- in_id[i] = '1';
- if((in_id[i] != *(device_id + i)) && (*(device_id + i) != '*'))
- {
- error_flag = TRUE;
- }
- }
- in_id[35] = 0;
- if(error_flag)
- {
- printf("error, failed to read device IDn");
- printf("check cables and powern");
- printf("ACT: %sn",in_id);
- printf("EXP: %snn",device_id);
- return -1;
- }
- if(!strcmp(device_id,S3C4510ID)) // print S3C4510 device revision
- {
- int s3c_rev =
- (int)(in_id[0] - '0') * 8 +
- (int)(in_id[1] - '0') * 4 +
- (int)(in_id[2] - '0') * 2 +
- (int)(in_id[3] - '0');
- printf("S3C44b0x revision %dn",s3c_rev);
- }
- return 0;
- }
- void id_command(void)
- {
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,1,IP);
- putp(1,1,IP); //select IR scan
- putp(1,0,IP); //capture IR
- putp(1,0,IP); //shift IR
- putp(0,0,IP); //S3C4510 IDCODE, LSB first
- putp(1,0,IP); //
- putp(1,0,IP); //
- putp(1,1,IP); //Exit1-IR
- putp(1,1,IP); //Update-IR
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,1,IP); //select DR scan
- putp(1,0,IP); //capture DR
- if(check_id(S3C4510ID))
- error_out("failed to read device ID for the S3C4510");
- putp(1,1,IP); //Exit1-DR
- putp(1,1,IP); //Update-DR
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- }
- void bypass_all(void)
- {
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,1,IP);
- putp(1,1,IP); //select IR scan
- putp(1,0,IP); //capture IR
- putp(1,0,IP); //shift IR
- putp(1,0,IP); //S3C4510 BYPASS
- putp(1,0,IP); //
- putp(1,0,IP); //
- putp(1,1,IP); //Exit1-IR
- putp(1,1,IP); //Update-IR
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- }
- void extest(void)
- {
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,1,IP);
- putp(1,1,IP); //select IR scan
- putp(1,0,IP); //capture IR
- putp(1,0,IP); //shift IR
- putp(0,0,IP); //S3C4510 extest
- putp(0,0,IP); //
- putp(0,0,IP); //
- putp(0,1,IP); //Exit1-IR
- putp(1,1,IP); //Update-IR
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- putp(1,0,IP); //Run-Test/Idle
- }
- void write_rom2(DWORD address, WORD data)
- {
- access_bus2(WRITE, address, data, IP);
- access_bus2(SETUP, address, data, IP); // clear status register
- }
- WORD read_rom2(DWORD address)
- {
- access_bus2(READ, address, 0, IP); //相当于写地址
- return (WORD)(access_bus2(READ, address, 0 , RP)); //相当于读书局
- }
- DWORD access_bus2(int rw, DWORD address, DWORD data, int rp) // acess the cs1 rom bank1
- {
- return s3c4510_bus2(nRCS_0_OUT, rw, address, data, rp);
- }
- DWORD s3c4510_bus2(int cs, int rw, DWORD address, DWORD data, int rp)
- {
- int out_dat[300], i;
- DWORD li, busdat = 0;
- // Preset S3C4510 pins to default values (all others set in S3C4510.h)
- pin[nRCS_0_OUT] = 1;
- pin[nRCS_1_OUT] = 1;
- pin[nRCS_2_OUT] = 1;
- pin[nRCS_3_OUT] = 1;
- /*
- pin[nRCS_4_OUT] = 1;
- pin[nRCS_5_OUT] = 1;
- pin[nECS_0_OUT] = 1;
- pin[nECS_1_OUT] = 1;
- pin[nECS_2_OUT] = 1;
- pin[nECS_3_OUT] = 1;
- */
- pin[nWBE_DWE_OE_CS0_OUT_ENB] = 0;
- pin[nOE_OUT] = 0;
- pin[nWBE_0_OUT] = 1;
- pin[nWBE_1_OUT] = 1;
- pin[nWBE_2_OUT] = 1;
- pin[nWBE_3_OUT] = 1;
- pin[nDWE_OUT] = 1;
- pin[nGCS_6_OUT] = 1; //sdram
- pin[D7_0_OUT_ENB] = 0;
- pin[D15_8_OUT_ENB] = 0;
- pin[A15_1_OUT_ENB] = 0;
- pin[A0_OUT_ENB] = 0;
- pin[A16_OUT_ENB] = 0;
- pin[A17_OUT_ENB] = 0;
- pin[A18_OUT_ENB] = 0;
- pin[A19_OUT_ENB] = 0;
- pin[A20_OUT_ENB] = 0;
- pin[A21_OUT_ENB] = 1;
- pin[A22_OUT_ENB] = 1;
- pin[A23_OUT_ENB] = 1;
- pin[A24_OUT_ENB] = 1;
- for(i = 1; i < 15; i++) //set A1-A14
- pin[67+i] = (int)((address >> i) & 1); // a1 = cell 68
- for(i = 15; i < 25; i++) //set A15-A24
- pin[82+(i-15)*2] = (int)((address >> i) & 1); //a15 = 82
- if(rw == READ)
- {
- pin[cs] = 0;
- pin[D7_0_OUT_ENB] = 1;
- pin[D15_8_OUT_ENB] = 1;
- // pin[D_OUT_ENB] = 1;
- pin[nOE_OUT] = 0;
- }
- if(rw == WRITE)
- {
- pin[cs] = 0;
- pin[nDWE_OUT]= 0; //pin[nWBE_0_OUT]
- pin[nOE_OUT] = 1;
- pin[D7_0_OUT_ENB] = 0;
- pin[D15_8_OUT_ENB] = 0;
- // pin[D_OUT_ENB] = 0; // switch data pins to drive
- for(li = 0L; li < 8L; li++) //设置D0-D7
- pin[102+li*2] = (int)((data >> li) & 1L); // serialize data pins
- for(li = 0L; li < 8L; li++) //设置D8-D15
- pin[119+li*2] = (int)((data >> (li+8)) & 1L); // serialize data pins
- }
- if( rw == HOLD) // just like a write except WE, WE needs setup time
- {
- pin[cs] = 0;
- pin[nOE_OUT] = 1;
- pin[D7_0_OUT_ENB] = 1;
- pin[D15_8_OUT_ENB] = 1;
- // pin[D_OUT_ENB] = 0;
- pin[nDWE_OUT]= 1;
- //pin[nWBE_0_OUT] = 1;
- //for(li = 0L; li < 32L; li++)
- // pin[125-li*2] = (int)((data >> li) & 1L); // serialize data pins
- }
- if(rw == SETUP ) // just like a write except WE, WE needs setup time
- {
- pin[cs] = 0;
- pin[nOE_OUT] = 1;
- pin[D7_0_OUT_ENB] = 0;
- pin[D15_8_OUT_ENB] = 0;
- // pin[D_OUT_ENB] = 0;
- pin[nDWE_OUT]= 1;
- // pin[nWBE_0_OUT] = 1;
- for(li = 0L; li < 8L; li++) //设置D0-D7
- pin[102+li*2] = (int)((data >> li) & 1L); // serialize data pins
- for(li = 0L; li < 8L; li++) //设置D8-D15
- pin[119+li*2] = (int)((data >> (li+8)) & 1L); // serialize data pins
- }
- if(rw == RS) // setup prior to RD_nWR_OUT
- {
- pin[nOE_OUT] = 1;
- pin[cs] = 0;
- //pin[nWBE_0_OUT] = 0;
- pin[nDWE_OUT]= 0;
- }
- putp(1,0,IP); // Run-Test/Idle
- putp(1,0,IP); // Run-Test/Idle
- putp(1,0,IP); // Run-Test/Idle
- putp(1,0,IP); // Run-Test/Idle
- putp(1,1,IP); // select DR scan
- putp(1,0,IP); // capture DR
- putp(1,0,IP); // shift IR
- for(i = 0; i < 256; i++) // shift write data in to JTAG port and read data out
- out_dat[i] = putp(pin[i],0,rp);
- putp(0,1,IP); // Exit1-DR
- putp(1,1,IP); // Update-DR
- putp(1,0,IP); // Run-Test/Idle
- putp(1,0,IP); // Run-Test/Idle
- putp(1,0,IP); // Run-Test/Idle
- busdat = 0;
- for(i = 0; i < 7; i++) // convert serial data to single DWORD
- {
- busdat = busdat | (DWORD)(out_dat[102 + i*2] << i);
- }
- busdat = busdat | (DWORD)(out_dat[117] << 7);
- for(i = 0; i < 7; i++) // convert serial data to single DWORD
- {
- busdat = busdat | (DWORD)(out_dat[119 + i*2] << (i+8)); //????
- }
- busdat = busdat | (DWORD)(out_dat[134] << 15);
- // printf("busdat %xn",busdat);
- return(busdat);
- }