📄 ft2232.c
字号:
cx_cmd_push( cmd_root, params->low_byte_value | BITMASK_TMS ); cx_cmd_push( cmd_root, params->low_byte_dir | BITMASK_TCK | BITMASK_TDI | BITMASK_TMS ); /* Set Data Bits High Byte default: TRST = 1 TRST buffer enable = 0 SRST = 1 SRST buffer enable = 0 */ params->high_byte_value_trst_active = BITMASK_OOCDLINKS_nSRST; params->high_byte_value_trst_inactive = BITMASK_OOCDLINKS_nTRST | BITMASK_OOCDLINKS_nSRST; params->high_byte_dir = BITMASK_OOCDLINKS_nTRST | BITMASK_OOCDLINKS_nTRST_nOE | BITMASK_OOCDLINKS_nSRST | BITMASK_OOCDLINKS_nSRST_nOE; cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, params->high_byte_value_trst_inactive ); cx_cmd_push( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, params->high_byte_value_trst_inactive ); cx_cmd_push( cmd_root, params->high_byte_dir ); ft2232_set_frequency( cable, FT2232_MAX_TCK_FREQ ); params->last_tdo_valid = 0; return 0;}static intft2232_turtelizer2_init( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); if (usbconn_open( cable->link.usb )) return -1; /* static low byte value and direction: set nJTAGOE to '0' -> activate output enables set RST to 0 -> inactive nSRST */ params->low_byte_value = 0; params->low_byte_dir = BITMASK_TURTELIZER2_nJTAGOE | BITMASK_TURTELIZER2_RST; /* Set Data Bits Low Byte TCK = 0, TMS = 1, TDI = 0 */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, params->low_byte_value | BITMASK_TMS ); cx_cmd_push( cmd_root, params->low_byte_dir | BITMASK_TCK | BITMASK_TDI | BITMASK_TMS ); /* Set Data Bits High Byte default: TX1LED on RX1LED on */ params->high_byte_value_trst_active = 0; params->high_byte_value_trst_inactive = 0; params->high_byte_dir = BITMASK_TURTELIZER2_nTX1LED | BITMASK_TURTELIZER2_nRX1LED; cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, params->high_byte_value_trst_inactive ); cx_cmd_push( cmd_root, params->high_byte_dir ); ft2232_set_frequency( cable, FT2232_MAX_TCK_FREQ ); params->last_tdo_valid = 0; return 0;}static intft2232_usbtojtagif_init( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); if (usbconn_open( cable->link.usb )) return -1; /* static low byte value and direction: nTRST = 1, RST = 1, DBGRQ = 0 */ params->low_byte_value = BITMASK_USBTOJTAGIF_nTRST | BITMASK_USBTOJTAGIF_RST; params->low_byte_dir = BITMASK_USBTOJTAGIF_nTRST | BITMASK_USBTOJTAGIF_RST | BITMASK_USBTOJTAGIF_DBGRQ; /* Set Data Bits Low Byte TCK = 0, TMS = 1, TDI = 0 */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, params->low_byte_value | BITMASK_TMS ); cx_cmd_push( cmd_root, params->low_byte_dir | BITMASK_TCK | BITMASK_TDI | BITMASK_TMS ); /* Set Data Bits High Byte default: RxLED on TxLED on */ params->high_byte_value_trst_active = 0; params->high_byte_value_trst_inactive = 0; params->high_byte_dir = BITMASK_USBTOJTAGIF_nRxLED | BITMASK_USBTOJTAGIF_nTxLED; cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, params->high_byte_value_trst_inactive ); cx_cmd_push( cmd_root, params->high_byte_dir ); /* I-couplers can only work up to 3 MHz ref. http://www.hs-augsburg.de/~hhoegl/proj/usbjtag/usbjtag.html */ ft2232_set_frequency( cable, FT2232_MAX_TCK_FREQ/2 ); params->last_tdo_valid = 0; return 0;}static intft2232_signalyzer_init( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); if (usbconn_open( cable->link.usb )) return -1; /* static low byte value and direction: nTRST = 1, RST = 1, DBGRQ = 0 */ params->low_byte_value = BITMASK_SIGNALYZER_nTRST | BITMASK_SIGNALYZER_nSRST; params->low_byte_dir = BITMASK_SIGNALYZER_nTRST | BITMASK_SIGNALYZER_nSRST; /* Set Data Bits Low Byte TCK = 0, TMS = 1, TDI = 0 */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, params->low_byte_value | BITMASK_TMS ); cx_cmd_push( cmd_root, params->low_byte_dir | BITMASK_TCK | BITMASK_TDI | BITMASK_TMS ); /* Set Data Bits High Byte */ params->high_byte_value_trst_active = 0; params->high_byte_value_trst_inactive = 0; params->high_byte_dir = 0; cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, params->high_byte_value_trst_inactive ); cx_cmd_push( cmd_root, params->high_byte_dir ); ft2232_set_frequency( cable, FT2232_MAX_TCK_FREQ ); params->last_tdo_valid = 0; return 0;}static voidft2232_generic_done( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); /* Set Data Bits Low Byte set all to input */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, 0 ); cx_cmd_push( cmd_root, 0 ); /* Set Data Bits High Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, 0 ); cx_cmd_push( cmd_root, 0 ); cx_xfer( cmd_root, &imm_cmd, cable, COMPLETELY ); generic_usbconn_done( cable );}static voidft2232_jtagkey_done( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); /* Set Data Bits Low Byte disable output drivers */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, BITMASK_JTAGKEY_nOE ); cx_cmd_push( cmd_root, BITMASK_JTAGKEY_nOE ); /* Set Data Bits Low Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, BITMASK_JTAGKEY_nOE ); cx_cmd_push( cmd_root, 0 ); /* Set Data Bits High Byte disable output drivers */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_JTAGKEY_TRST_N_OUT | BITMASK_JTAGKEY_TRST_N_OE_N | BITMASK_JTAGKEY_SRST_N_OUT | BITMASK_JTAGKEY_SRST_N_OE_N ); cx_cmd_push( cmd_root, BITMASK_JTAGKEY_TRST_N_OUT | BITMASK_JTAGKEY_TRST_N_OE_N | BITMASK_JTAGKEY_SRST_N_OUT | BITMASK_JTAGKEY_SRST_N_OE_N ); /* Set Data Bits High Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_JTAGKEY_TRST_N_OUT | BITMASK_JTAGKEY_TRST_N_OE_N | BITMASK_JTAGKEY_SRST_N_OUT | BITMASK_JTAGKEY_SRST_N_OE_N ); cx_cmd_push( cmd_root, 0 ); cx_xfer( cmd_root, &imm_cmd, cable, COMPLETELY ); generic_usbconn_done( cable );}static voidft2232_armusbocd_done( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); /* Set Data Bits Low Byte disable output drivers */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, BITMASK_ARMUSBOCD_nOE ); cx_cmd_push( cmd_root, BITMASK_ARMUSBOCD_nOE ); /* Set Data Bits Low Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, BITMASK_ARMUSBOCD_nOE ); cx_cmd_push( cmd_root, 0 ); /* Set Data Bits High Byte disable output drivers */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_ARMUSBOCD_nTRST | BITMASK_ARMUSBOCD_nTRST_nOE | BITMASK_ARMUSBOCD_nTSRST ); cx_cmd_push( cmd_root, BITMASK_ARMUSBOCD_nTRST | BITMASK_ARMUSBOCD_nTRST_nOE | BITMASK_ARMUSBOCD_nTSRST | BITMASK_ARMUSBOCD_RED_LED ); /* Set Data Bits High Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_ARMUSBOCD_nTRST | BITMASK_ARMUSBOCD_nTRST_nOE | BITMASK_ARMUSBOCD_nTSRST ); cx_cmd_push( cmd_root, 0 ); cx_xfer( cmd_root, &imm_cmd, cable, COMPLETELY ); generic_usbconn_done( cable );}static voidft2232_gnice_done( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); /* Set Data Bits Low Byte disable output drivers */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, 0 ); cx_cmd_push( cmd_root, 0 ); /* Set Data Bits High Byte disable output drivers */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_GNICE_nTRST); cx_cmd_push( cmd_root, BITMASK_GNICE_nTRST | BITMASK_GNICE_nLED); /* Set Data Bits High Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_GNICE_nTRST); cx_cmd_push( cmd_root, 0 ); cx_xfer( cmd_root, &imm_cmd, cable, COMPLETELY ); generic_usbconn_done( cable );}static voidft2232_oocdlinks_done( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); /* Set Data Bits Low Byte set all to input */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, 0 ); cx_cmd_push( cmd_root, 0 ); /* Set Data Bits High Byte disable output drivers */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_OOCDLINKS_nTRST | BITMASK_OOCDLINKS_nTRST_nOE | BITMASK_OOCDLINKS_nSRST | BITMASK_OOCDLINKS_nSRST_nOE ); cx_cmd_push( cmd_root, BITMASK_OOCDLINKS_nTRST | BITMASK_OOCDLINKS_nTRST_nOE | BITMASK_OOCDLINKS_nSRST | BITMASK_OOCDLINKS_nSRST_nOE ); /* Set Data Bits High Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_OOCDLINKS_nTRST | BITMASK_OOCDLINKS_nTRST_nOE | BITMASK_OOCDLINKS_nSRST | BITMASK_OOCDLINKS_nSRST_nOE ); cx_cmd_push( cmd_root, 0 ); cx_xfer( cmd_root, &imm_cmd, cable, COMPLETELY ); generic_usbconn_done( cable );}static voidft2232_turtelizer2_done( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); /* Set Data Bits Low Byte disable output drivers */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, BITMASK_TURTELIZER2_nJTAGOE ); cx_cmd_push( cmd_root, BITMASK_TURTELIZER2_nJTAGOE ); /* Set Data Bits Low Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, BITMASK_TURTELIZER2_nJTAGOE ); cx_cmd_push( cmd_root, 0 ); /* Set Data Bits High Byte switch off LEDs */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_TURTELIZER2_nTX1LED | BITMASK_TURTELIZER2_nRX1LED ); cx_cmd_push( cmd_root, BITMASK_TURTELIZER2_nTX1LED | BITMASK_TURTELIZER2_nRX1LED ); /* Set Data Bits High Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, 0 ); cx_cmd_push( cmd_root, 0 ); cx_xfer( cmd_root, &imm_cmd, cable, COMPLETELY ); generic_usbconn_done( cable );}static voidft2232_usbtojtagif_done( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); /* Set Data Bits Low Byte set all to input */ cx_cmd_queue( cmd_root, 0 ); cx_cmd_push( cmd_root, SET_BITS_LOW ); cx_cmd_push( cmd_root, BITMASK_USBTOJTAGIF_nTRST | BITMASK_USBTOJTAGIF_RST ); cx_cmd_push( cmd_root, 0 ); /* Set Data Bits High Byte disable output drivers */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_USBTOJTAGIF_nRxLED | BITMASK_USBTOJTAGIF_nTxLED ); cx_cmd_push( cmd_root, BITMASK_USBTOJTAGIF_nRxLED | BITMASK_USBTOJTAGIF_nTxLED ); /* Set Data Bits High Byte set all to input */ cx_cmd_push( cmd_root, SET_BITS_HIGH ); cx_cmd_push( cmd_root, BITMASK_USBTOJTAGIF_nRxLED | BITMASK_USBTOJTAGIF_nTxLED ); cx_cmd_push( cmd_root, 0 ); cx_xfer( cmd_root, &imm_cmd, cable, COMPLETELY ); generic_usbconn_done( cable );}static voidft2232_signalyzer_done( cable_t *cable ){ params_t *params = (params_t *)cable->params; cx_cmd_root_t *cmd_root = &(params->cmd_root); /* Set Data Bits Low Byte set all to input */ cx_cmd_queue( cmd_root, 0 );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -