00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 typedef enum { INSTRUCTION_REGISTER = 0,
00026 DATA_REGISTER,
00027 MAX_SHIFT_REGISTER } SHIFT_REGISTER_TYPE;
00028
00029
00030 typedef enum { TEST_LOGIC_RESET = 0,
00031 RUN_TEST_IDLE,
00032 PAUSE_DR,
00033 PAUSE_IR,
00034 SHIFT_DR,
00035 SHIFT_IR,
00036 UNDEFINED_JTAG_STATE,
00037 MAX_JTAG_STATE
00038 } JTAG_STATE_TYPE;
00039
00040 typedef unsigned char SCAN_DATA_TYPE;
00041
00042
00043 #define TDI_PIN 27
00044 #define TCK_PIN 30
00045 #define TMS_PIN 29
00046 #define TDO_PIN 28
00047 #define TRST_PIN 21
00048 #define TSEL0_PIN 19
00049 #define TSEL1_PIN 20
00050
00051 #define TDI (1 << TDI_PIN)
00052 #define TCK (1 << TCK_PIN)
00053 #define TMS (1 << TMS_PIN)
00054 #define TDO (1 << TDO_PIN)
00055 #define TRST (1 << TRST_PIN)
00056 #define TSEL0 (1 << TSEL0_PIN)
00057 #define TSEL1 (1 << TSEL1_PIN)
00058
00059
00060 #define INSTR_EXTEST 0x00
00061 #define INSTR_IDCODE 0x01
00062 #define INSTR_SAMPLE 0x02
00063 #define INSTR_IMPCODE 0x03
00064 #define INSTR_ADDRESS 0x08
00065 #define INSTR_DATA 0x09
00066 #define INSTR_CONTROL 0x0A
00067 #define INSTR_BYPASS 0xFF
00068
00069
00070 void JTAG_Initialize(void);
00071
00072 void JTAG_ResetJSM(
00073 int Select,
00074 Bool Reset,
00075 JTAG_STATE_TYPE state_e);
00076
00077 void JTAG_ScanIO(
00078 int Select,
00079 SHIFT_REGISTER_TYPE jtag_register_e,
00080 int length_in_bits,
00081 SCAN_DATA_TYPE *out_data,
00082 SCAN_DATA_TYPE *in_data,
00083 JTAG_STATE_TYPE state_e);
00084
00085 unsigned char ClockJTAG(
00086 int Select,
00087 unsigned int,
00088 unsigned int);
00089
00090 void ScanDataInOut(
00091 int Select,
00092 unsigned char *,
00093 unsigned int,
00094 unsigned char *);
00095
00096 void PulseClock(int Select);
00097
00098
00099