亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? jlink.c

?? UrJTAG package is free software, covered by the GNU General Public License, and you are welcome to
?? C
字號:
/* * $Id: jlink.c,v 1.8 2003/08/19 08:42:20 telka Exp $ * * Segger J-Link cable driver * * Large portions of code were taken from the OpenOCD driver written by * Juergen Stuber, which in turn was based on Dominic Rath's and Benedikt * Sauter's usbprog.c. Therefore most of this code is actually * * Copyright (C) 2007 Juergen Stuber * * Modified to work in UrJTAG by K. Waschk in 2008. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA * 02111-1307, USA. * */#include "generic.h"#include "generic_usbconn.h"#include "usbconn.h"#include "usbconn/libusb.h"/* ---------------------------------------------------------------------- */#include "sysdep.h"#include "cable.h"#include "chain.h"#include "jtag.h"#include <usb.h>#include <string.h>#define INFO(...)   printf(__VA_ARGS__)#define ERROR(...)  printf(__VA_ARGS__)#define DEBUG(...)#define JLINK_WRITE_ENDPOINT 0x02#define JLINK_READ_ENDPOINT  0x81#define JLINK_USB_TIMEOUT 100#define JLINK_IN_BUFFER_SIZE  2064#define JLINK_OUT_BUFFER_SIZE 2064/* We use the maximal value observed */#define JLINK_TAP_BUFFER_SIZE 390typedef struct{    /* Global USB buffers */    char usb_in_buffer[JLINK_IN_BUFFER_SIZE];    char usb_out_buffer[JLINK_OUT_BUFFER_SIZE];    int tap_length;    uint8_t tms_buffer[JLINK_TAP_BUFFER_SIZE];    uint8_t tdi_buffer[JLINK_TAP_BUFFER_SIZE];    int last_tdo;}jlink_usbconn_data_t;/* Constants for JLink command */#define JLINK_DO_TRST_CYCLE                0x02#define JLINK_SPEED_COMMAND                0x05#define JLINK_GET_STATUS_COMMAND           0x07#define JLINK_GET_A                        0xc1#define JLINK_GET_B                        0xc2#define JLINK_SET_TMS_LOW_COMMAND          0xc9#define JLINK_SET_TMS_HIGH_COMMAND         0xca#define JLINK_SET_TDI_LOW_COMMAND          0xcb#define JLINK_SET_TDI_HIGH_COMMAND         0xcc#define JLINK_TAP_SEQUENCE_COMMAND         0xcd#define JLINK_SET_SRST_LOW_COMMAND         0xdc#define JLINK_SET_SRST_HIGH_COMMAND        0xdd#define JLINK_SET_TRST_LOW_COMMAND         0xde#define JLINK_SET_TRST_HIGH_COMMAND        0xdf#define JLINK_MAX_SPEED 12000/* Queue command functions */static void jlink_reset( libusb_param_t *params, int trst, int srst);static void jlink_simple_command( libusb_param_t *params, uint8_t command );/* J-Link tap buffer functions */static void jlink_tap_init( jlink_usbconn_data_t *data );static int  jlink_tap_execute( libusb_param_t *params );static void jlink_tap_append_step( jlink_usbconn_data_t *data, int, int);/* Jlink lowlevel functions */static int jlink_usb_message( libusb_param_t *params, int, int );static int jlink_usb_write( libusb_param_t *params, unsigned int );static int jlink_usb_read( libusb_param_t *params );static void jlink_debug_buffer(char *buffer, int length);/* API functions */void jlink_set_frequency( cable_t *cable, uint32_t frequency );/***************************************************************************//* J-Link tap functions */void jlink_reset( libusb_param_t *params, int trst, int srst){    DEBUG("trst: %i, srst: %i\n", trst, srst);    /* Signals are active low */    if (trst == 0)    {        jlink_simple_command( params, JLINK_SET_TRST_HIGH_COMMAND);    }    else if (trst == 1)    {        jlink_simple_command( params, JLINK_SET_TRST_LOW_COMMAND);    }    if (srst == 0)    {        jlink_simple_command( params, JLINK_SET_SRST_HIGH_COMMAND);    }    else if (srst == 1)    {        jlink_simple_command( params, JLINK_SET_SRST_LOW_COMMAND);    }}static void jlink_simple_command( libusb_param_t *params, uint8_t command){    int result;    jlink_usbconn_data_t *data = params->data;    DEBUG("simple_command: 0x%02x\n", command);    data->usb_out_buffer[0] = command;    result = jlink_usb_write( params, 1 );    if (result != 1)    {        ERROR("J-Link command 0x%02x failed (%d)\n", command, result);    }}static int jlink_get_status( libusb_param_t *params ){    int result;    jlink_usbconn_data_t *data = params->data;		jlink_simple_command( params, 0x07 );    result = jlink_usb_read( params );	if(result == 8)	{		int vref = data->usb_in_buffer[0] + (data->usb_in_buffer[1]<<8);		INFO("Vref = %d.%d TCK=%d TDI=%d TDO=%d TMS=%d TRES=%d TRST=%d\n",			vref / 1000, vref % 1000,			data->usb_in_buffer[2],			data->usb_in_buffer[3],			data->usb_in_buffer[4],			data->usb_in_buffer[5],			data->usb_in_buffer[6],			data->usb_in_buffer[7]);		if(vref < 1500) 		{			ERROR("Vref too low. Eventually the target isn't powered or disconnected?\n");			result = -15;		};	}	else    {        ERROR("J-Link command 0x07 (get status) failed (%d)\n", result);    }	return result;}	/***************************************************************************/static void jlink_tap_init( jlink_usbconn_data_t *data ){    data->tap_length = 0;}static void jlink_tap_append_step( jlink_usbconn_data_t *data, int tms, int tdi){    int index = data->tap_length >> 3;    if (index < JLINK_TAP_BUFFER_SIZE)    {        int bit_index = data->tap_length & 7;        uint8_t bit = 1 << bit_index;        if(bit_index == 0)        {            data->tms_buffer[index] = 0;            data->tdi_buffer[index] = 0;        };        if(tms) data->tms_buffer[index] |= bit;        if(tdi) data->tdi_buffer[index] |= bit;        data->tap_length++;    }    else    {        ERROR("jlink_tap_append_step, overflow\n");    }}/* Send a tap sequence to the device, and receive the answer */static int jlink_tap_execute( libusb_param_t *params ){    jlink_usbconn_data_t *data = params->data;    int byte_length;    int tms_offset;    int tdi_offset;    int i;    int result;    if (data->tap_length > 0)    {        byte_length = (data->tap_length + 7) >> 3;        data->usb_out_buffer[0] = JLINK_TAP_SEQUENCE_COMMAND;        data->usb_out_buffer[1] = (data->tap_length >> 0) & 0xff;        data->usb_out_buffer[2] = (data->tap_length >> 8) & 0xff;        tms_offset = 3;        for (i = 0; i < byte_length; i++)        {            data->usb_out_buffer[tms_offset + i] =                  data->tms_buffer[i];        }        tdi_offset = tms_offset + byte_length;        for (i = 0; i < byte_length; i++)        {            data->usb_out_buffer[tdi_offset + i] =                data->tdi_buffer[i];        }        result = jlink_usb_message(            params,             3 + 2 * byte_length,            byte_length);        if (result == byte_length)        {            int bit_index = (data->tap_length - 1) & 7;            uint8_t bit = 1 << bit_index;            data->last_tdo =                 ((data->usb_in_buffer[byte_length-1]) & bit ) ? 1 : 0;        }        else        {            ERROR(                "jlink_tap_execute, wrong result %d, expected %d\n",                result,                byte_length);            return -2;        }        jlink_tap_init( data );    }    return 0;}/* ---------------------------------------------------------------------- *//* Send a message and receive the reply. */static int jlink_usb_message(    libusb_param_t *params,    int out_length,    int in_length){    int result;    result = jlink_usb_write( params, out_length );    if (result == out_length)    {        result = jlink_usb_read( params );        if (result == in_length)        {            return result;        }        else        {            ERROR(                "usb_bulk_read failed (requested=%d, result=%d)\n",                in_length,                result);            return -1;        }    }    else    {        ERROR(            "usb_bulk_write failed (requested=%d, result=%d)\n",            out_length,            result);        return -1;    }}/* ---------------------------------------------------------------------- *//* Write data from out_buffer to USB. */static int jlink_usb_write( libusb_param_t *params, unsigned int out_length ){    int result;    jlink_usbconn_data_t *data;    data = params->data;    if (out_length > JLINK_OUT_BUFFER_SIZE)    {        ERROR("jlink_jtag_write illegal out_length=%d (max=%d)\n", out_length,         JLINK_OUT_BUFFER_SIZE);        return -1;    }    result = usb_bulk_write(        params->handle,         JLINK_WRITE_ENDPOINT,        data->usb_out_buffer,        out_length,        JLINK_USB_TIMEOUT);    DEBUG("jlink_usb_write, out_length = %d, result = %d\n", out_length, result);    jlink_debug_buffer(data->usb_out_buffer, out_length);    return result;}/* ---------------------------------------------------------------------- *//* Read data from USB into in_buffer. */static int jlink_usb_read( libusb_param_t *params ){    jlink_usbconn_data_t *data = params->data;    int result = usb_bulk_read(        params->handle,        JLINK_READ_ENDPOINT,        data->usb_in_buffer,         JLINK_IN_BUFFER_SIZE,         JLINK_USB_TIMEOUT);    DEBUG("jlink_usb_read, result = %d\n", result);    jlink_debug_buffer(data->usb_in_buffer, result);    return result;}/* ---------------------------------------------------------------------- */#define BYTES_PER_LINE  16static void jlink_debug_buffer(char *buffer, int length){    char line[81];    char s[4];    int i;    int j;    for (i = 0; i < length; i += BYTES_PER_LINE)    {        snprintf(line, 5, "%04x", i);        for (j = i; j < i + BYTES_PER_LINE && j < length; j++)        {            snprintf(s, 4, " %02x", buffer[j]);            strcat(line, s);        }        DEBUG(line);        DEBUG("\n");    }}/* ---------------------------------------------------------------------- */static int jlink_init( cable_t *cable ){    int result;    libusb_param_t *params;    jlink_usbconn_data_t *data;    params = cable->link.usb->params;    params->data = malloc(sizeof(jlink_usbconn_data_t));    if(params->data == NULL)    {        return -1;    }    data = params->data;    if (usbconn_open( cable->link.usb )) return -1;    jlink_tap_init( data );    result = jlink_usb_read( params );    if (result != 2 || data->usb_in_buffer[0] != 0x07                    || data->usb_in_buffer[1] != 0x00)    {        INFO("J-Link initial read failed, don't worry (result=%d)\n", result);    }	result = jlink_get_status( params );	if (result < 0)	{		ERROR("Resetting J-Link. Please retry the cable command.\n");		usb_reset ( params->handle ); 		return -1;	}    INFO("J-Link JTAG Interface ready\n");    jlink_set_frequency( cable, 4E6 );    jlink_reset( params, 0, 0);    return 0;}/* ---------------------------------------------------------------------- */staticvoid jlink_free( cable_t *cable ){    jlink_usbconn_data_t *data;    data = ((libusb_param_t*)(cable->link.usb->params))->data;    free(data);    generic_usbconn_free( cable );}/* ---------------------------------------------------------------------- */void jlink_set_frequency( cable_t *cable, uint32_t frequency ){    int result;    int speed = frequency / 1E3;    libusb_param_t *params = cable->link.usb->params;    jlink_usbconn_data_t *data = params->data;    if (1 <= speed && speed <= JLINK_MAX_SPEED)    {        data->usb_out_buffer[0] = JLINK_SPEED_COMMAND;		/* speed = 0xFFFF for automatic (probably needs RTCK) */        data->usb_out_buffer[1] = (speed >> 0) & 0xff;        data->usb_out_buffer[2] = (speed >> 8) & 0xff;        result = jlink_usb_write( params, 3 );        if (result != 3)        {            ERROR("J-Link setting speed failed (%d)\n", result);        }    }    else    {        INFO("Requested speed %dkHz exceeds maximum of %dkHz, ignored\n",             speed, JLINK_MAX_SPEED);    }}/* ---------------------------------------------------------------------- */static voidjlink_clock( cable_t *cable, int tms, int tdi, int n ){    int i;    libusb_param_t *params = cable->link.usb->params;    jlink_usbconn_data_t *data = params->data;    for (i = 0; i < n; i++)    {        jlink_tap_append_step( data, tms, tdi);    }    jlink_tap_execute( params );}/* ---------------------------------------------------------------------- */static intjlink_get_tdo( cable_t *cable ){    libusb_param_t *params = cable->link.usb->params;    jlink_usbconn_data_t *data = params->data;    // TODO: This is the TDO _before_ last clock occured    // ...   Anyone knows how to get the current TDO state?    return data->last_tdo;}/* ---------------------------------------------------------------------- */voidjlink_copy_out_data( jlink_usbconn_data_t *data, int len, int offset, char *buf ){    int i;    for(i=0;i<len;i++)    {        int bit = (1<<(i&7));        int byte = i>>3;        buf[offset+i] = (data->usb_in_buffer[byte] & bit) ? 1 : 0;    }}intjlink_transfer( cable_t *cable, int len, char *in, char *out ){    int i,j;    libusb_param_t *params = cable->link.usb->params;    jlink_usbconn_data_t *data = params->data;    for(j=0, i=0; i<len; i++)    {        jlink_tap_append_step(data, 0, in[i]);        if(data->tap_length >= 8*JLINK_TAP_BUFFER_SIZE)        {            jlink_tap_execute( params );            if(out) jlink_copy_out_data( data, i-j, j, out);            j = i;        }    };    if(data->tap_length > 0)    {        jlink_tap_execute( params );        if(out) jlink_copy_out_data( data, i-j, j, out);    }        return i;}/* ---------------------------------------------------------------------- */static intjlink_set_trst( cable_t *cable, int trst ){    return 1;}cable_driver_t jlink_cable_driver = {    "jlink",    N_("Segger/IAR J-Link, Atmel SAM-ICE and others."),    generic_usbconn_connect,    generic_disconnect,    jlink_free,    jlink_init,    generic_usbconn_done,    jlink_set_frequency,    jlink_clock,    jlink_get_tdo,    jlink_transfer,    jlink_set_trst,    generic_get_trst,    generic_flush_using_transfer,    generic_usbconn_help};usbconn_cable_t usbconn_cable_jlink = {    "jlink",            /* cable name */    NULL,                /* string pattern, not used */    "libusb",            /* usbconn driver */     0x1366,                /* VID */    0x0101                /* PID */};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产不卡视频在线观看| 在线免费不卡电影| 51精品国自产在线| 亚洲成人综合视频| 欧美美女一区二区在线观看| 亚洲高清免费视频| 免费在线观看一区| 亚洲 欧美综合在线网络| 欧美日韩中文字幕一区二区| 日韩欧美一区二区久久婷婷| 精品国产凹凸成av人导航| 日韩中文字幕亚洲一区二区va在线 | 久久免费看少妇高潮| 色琪琪一区二区三区亚洲区| 99久久久久久| 欧美日韩国产色站一区二区三区| 日韩亚洲欧美成人一区| 亚洲女爱视频在线| 精品无人码麻豆乱码1区2区 | 92国产精品观看| 欧美电影一区二区| 欧美日韩一区二区三区在线看 | 懂色av中文字幕一区二区三区| 亚洲欧美日韩久久| av成人免费在线| 欧美视频三区在线播放| 亚洲欧美偷拍卡通变态| 国产一区二区三区在线看麻豆| 欧美精品一卡二卡| 国产精品自拍在线| 91精品国产一区二区三区 | 国产精品久久久久久久久果冻传媒| 成人av资源在线| 色先锋aa成人| 国产精品久久久久久久久免费相片| 国产精品乱码一区二三区小蝌蚪| 亚洲一区二区三区四区不卡| 亚洲永久精品大片| 国产精品自在欧美一区| www久久精品| 国产精品久久久久久久久久免费看 | 欧美精品18+| 韩国女主播一区| 一区二区高清视频在线观看| 精品少妇一区二区三区日产乱码| 91免费视频网址| 激情小说欧美图片| 亚洲午夜三级在线| 国产精品久久久一本精品| 4438x成人网最大色成网站| av亚洲产国偷v产偷v自拍| 另类综合日韩欧美亚洲| 亚洲一区二区三区在线看| 久久噜噜亚洲综合| 8v天堂国产在线一区二区| 97精品久久久午夜一区二区三区| 国内外成人在线视频| 日韩成人午夜精品| 国产精品传媒入口麻豆| 欧美一区二区三区在线视频| 日韩成人免费在线| 日韩一区和二区| 亚洲成人手机在线| 在线播放国产精品二区一二区四区| 亚洲国产精品99久久久久久久久| 国产一区二区电影| 久久综合色综合88| 精品一区二区三区视频在线观看| 精品99一区二区三区| 欧洲另类一二三四区| 国产91精品一区二区麻豆亚洲| 日韩综合小视频| 亚洲国产精品视频| 一区二区久久久| 亚洲欧美偷拍三级| 亚洲手机成人高清视频| 自拍偷自拍亚洲精品播放| 国产精品天天看| 国产日韩视频一区二区三区| 久久久久久久久久电影| www激情久久| 国产三级精品视频| 欧美高清在线精品一区| 国产欧美一区视频| 国产日韩欧美制服另类| 欧美国产乱子伦| 国产精品区一区二区三| 国产精品情趣视频| 亚洲女同一区二区| 亚洲精品五月天| 亚洲国产日韩在线一区模特| 午夜影视日本亚洲欧洲精品| 午夜精品成人在线视频| 奇米777欧美一区二区| 精品一区二区三区在线观看国产| 国产麻豆成人精品| 成人免费高清在线| 色综合久久99| 91精品欧美综合在线观看最新 | 欧美老年两性高潮| 日韩欧美一二区| 久久久99久久| 亚洲婷婷在线视频| 亚洲成人激情社区| 精品一区二区三区免费观看| 国产成人啪免费观看软件| 99精品视频在线观看免费| 在线视频中文字幕一区二区| 欧美精品xxxxbbbb| 国产欧美日韩麻豆91| 亚洲精品国久久99热| 日本一区中文字幕| 国产ts人妖一区二区| 欧美中文字幕一区| 日韩欧美国产一区二区三区| 中文字幕永久在线不卡| 亚洲成精国产精品女| 国产一区二区三区在线观看精品| 一本大道av一区二区在线播放| 欧美日产在线观看| 久久网这里都是精品| 亚洲裸体xxx| 激情深爱一区二区| 日本韩国欧美三级| 欧美xxxxxxxx| 一级特黄大欧美久久久| 精彩视频一区二区三区| 色综合久久久久综合| 久久久亚洲综合| 亚洲国产美国国产综合一区二区| 国产综合久久久久久鬼色| 91色视频在线| 久久男人中文字幕资源站| 亚洲线精品一区二区三区| 国产成人免费在线观看| 69久久夜色精品国产69蝌蚪网| 国产精品美女久久久久aⅴ国产馆| 亚洲成人第一页| 97久久超碰国产精品电影| 26uuu另类欧美| 亚洲.国产.中文慕字在线| 91丝袜国产在线播放| 欧美精品一区二区三区蜜桃视频| 亚洲一区二区在线播放相泽| 成人精品在线视频观看| 2021久久国产精品不只是精品| 亚洲综合久久av| 成+人+亚洲+综合天堂| 久久久久久9999| 美国一区二区三区在线播放| 欧美性生活大片视频| 亚洲天堂免费看| 丰满放荡岳乱妇91ww| wwww国产精品欧美| 久久99久久久欧美国产| 在线不卡一区二区| 亚洲国产一区二区三区青草影视| 91网站在线播放| 国产精品传媒入口麻豆| 成人国产精品免费观看动漫| 久久久久99精品一区| 精品一区二区三区免费视频| 日韩精品一区二区三区在线观看 | 精品国产一区二区三区四区四 | 国产乱码一区二区三区| 欧美一区二区三区播放老司机| 亚洲图片一区二区| 欧美性感一区二区三区| 亚洲精品欧美专区| 欧美综合一区二区三区| 亚洲欧美韩国综合色| 91蝌蚪porny九色| 亚洲一区精品在线| 在线观看91av| 久久精品99久久久| 精品少妇一区二区| 国产精品亚洲а∨天堂免在线| 久久这里都是精品| 国产精品1区二区.| 亚洲国产成人在线| 99精品热视频| 一区二区三区欧美| 在线电影国产精品| 国产一区欧美日韩| 国产精品久久久久久一区二区三区| 99在线精品视频| 自拍av一区二区三区| 91久久精品一区二区二区| 日韩综合小视频| 亚洲精品一区二区三区精华液| 国产夫妻精品视频| 亚洲视频在线观看三级| 欧美日韩一区不卡| 老司机精品视频导航| 欧美高清在线一区二区| 日本韩国欧美一区| 极品美女销魂一区二区三区 | 欧美大尺度电影在线| 国产精品1区2区| 亚洲丝袜美腿综合|