⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usbjtag.cpp

📁 usb-jtag转换,sparc芯片反汇编,sparc芯片调试的工具,可以对芯片内的gpio,sdram,flash进行读写,还可以一次下载64K大小的数据,反汇编,在线调试.
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// usbjtag.cpp: implementation of the usbjtag class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "DebugTool.h"
#include "usbjtag.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

// include "amtxhal.h"
#include "amtxhal.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

/****************************************/
// function: Initialize all parameter
// input:
//			none
// output: 
//			none
/****************************************/
Cusbjtag::Cusbjtag()
{
	 // initialize amtxhal parameter
	 
	 Status = AMTXHAL_STATUS_SUCCESS;
     long iceHandle = 0; 
     long vrefLevel = 0;
     long vrefVoltage = 0;

	 for(int i = 0; i < 128; i++)
	 {
	    tdiByteBuffer[i] = (char)0xff; 
	    tdoByteBuffer[i] = (char)0xff;
	 }

	 // initialize amba scan parameter

     LEON3_IO_AREA = 0xfff00000;
     LEON3_CONF_AREA = 0xff000;
     LEON3_AHB_SLAVE_CONF_AREA = (1 << 11);
     base = 0x080ff000;
     LEON3_AHB_CONF_WORDS = 8;
     LEON3_APB_CONF_WORDS = 2;
     LEON3_AHB_MASTERS = 8;
     LEON3_AHB_SLAVES = 16;
     LEON3_APB_SLAVES = 16;
     LEON3_APBUARTS = 8;
	 // kenichi 11 2007.7.30 >> 
	 irLength = 0;
	 addressCmd = 35; //
	 dataCmd = 33;
	 // <<
	 
}

Cusbjtag::~Cusbjtag()
{

}


/****************************************/
// function: do ir path scan
// input: 
//			long handle
//			long length
//			char *buffer
// output:
//			status
/****************************************/
long Cusbjtag::add_ir_scan_in(long handle, long length, char *buffer)
{
	long Status;
	Status = AMTXHAL_CMDQ_Add_jtag_scan(
					handle, //long l_iceHandle,
					AMTXHAL_PORT_IO_LEVEL_0, //long l_portID,
					AMTXHAL_TARGET_ID_DEFAULT, //long l_targetID,
					AMTXHAL_SCAN_ID_DEFAULT, //long l_scanID,
					AMTXHAL_BOOLEAN_TRUE, //long l_scanInEn,
					AMTXHAL_BOOLEAN_FALSE, //long l_scanOutEn,
					AMTXHAL_BOOLEAN_FALSE, //long l_scanCheckEn,
					AMTXHAL_JTAG_STATE_IRSHIFT, //long l_scanState, <- HERE YOU SELECT IR
					length, //long l_scanLength,
					buffer, //char *pc_scanInTdiByteBuffer,
					buffer, //char *pc_scanCheckExpectedTdoByteBuffer,
					buffer, //char *pc_scanCheckMaskedTdoByteBuffer,
					AMTXHAL_JTAG_STATE_IDLE );
	return Status;
}

/****************************************/
// function: do dr path scan
// input: 
//			long handle
//			long length
//			char *buffer
// output:
//			status
/****************************************/
long Cusbjtag::add_dr_scan_in(long handle, long length, char *buffer)
{
	long Status;
	Status = AMTXHAL_CMDQ_Add_jtag_scan(
					handle, //long l_iceHandle,
					AMTXHAL_PORT_IO_LEVEL_0, //long l_portID,
					AMTXHAL_TARGET_ID_DEFAULT, //long l_targetID,
					AMTXHAL_SCAN_ID_DEFAULT, //long l_scanID,
					AMTXHAL_BOOLEAN_TRUE, //long l_scanInEn,
					AMTXHAL_BOOLEAN_FALSE, //long l_scanOutEn,
					AMTXHAL_BOOLEAN_FALSE, //long l_scanCheckEn,
					AMTXHAL_JTAG_STATE_DRSHIFT, //long l_scanState, <- HERE YOU SELECT IR
					length, //long l_scanLength,
					buffer, //char *pc_scanInTdiByteBuffer,
					buffer, //char *pc_scanCheckExpectedTdoByteBuffer,
					buffer, //char *pc_scanCheckMaskedTdoByteBuffer,
					AMTXHAL_JTAG_STATE_IDLE );
	return Status;
}

/****************************************/
// function: add dr path scan in but stay in dr
// input: 
//			long handle
//			long length
//			char *buffer
// output:
//			status
/****************************************/
long Cusbjtag::add_dr_scan_in_stay(long handle, long length, char *buffer)
{
	long Status;
	Status = AMTXHAL_CMDQ_Add_jtag_scan(
					handle, //long l_iceHandle,
					AMTXHAL_PORT_IO_LEVEL_0, //long l_portID,
					AMTXHAL_TARGET_ID_DEFAULT, //long l_targetID,
					AMTXHAL_SCAN_ID_DEFAULT, //long l_scanID,
					AMTXHAL_BOOLEAN_TRUE, //long l_scanInEn,
					AMTXHAL_BOOLEAN_FALSE, //long l_scanOutEn,
					AMTXHAL_BOOLEAN_FALSE, //long l_scanCheckEn,
					AMTXHAL_JTAG_STATE_DRSHIFT, //long l_scanState, <- HERE YOU SELECT IR
					length, //long l_scanLength,
					buffer, //char *pc_scanInTdiByteBuffer,
					buffer, //char *pc_scanCheckExpectedTdoByteBuffer,
					buffer, //char *pc_scanCheckMaskedTdoByteBuffer,
					AMTXHAL_JTAG_STATE_DRSHIFT );
	return Status;
}

/****************************************/
// function: add dr path scan inout
// input: 
//			long handle
//			long length
//			char *buffer
// output:
//			status
/****************************************/
long Cusbjtag::add_dr_scan_inout(long handle, long length, char *buffer)
{
	long Status;
	Status = AMTXHAL_CMDQ_Add_jtag_scan(
					handle, //long l_iceHandle,
					AMTXHAL_PORT_IO_LEVEL_0, //long l_portID,
					AMTXHAL_TARGET_ID_DEFAULT, //long l_targetID,
					AMTXHAL_SCAN_ID_DEFAULT, //long l_scanID,
					AMTXHAL_BOOLEAN_TRUE, //long l_scanInEn,
					AMTXHAL_BOOLEAN_TRUE, //long l_scanOutEn,
					AMTXHAL_BOOLEAN_FALSE, //long l_scanCheckEn,
					AMTXHAL_JTAG_STATE_DRSHIFT, //long l_scanState, <- HERE YOU SELECT IR
					length, //long l_scanLength,
					buffer, //char *pc_scanInTdiByteBuffer,
					buffer, //char *pc_scanCheckExpectedTdoByteBuffer,
					buffer, //char *pc_scanCheckMaskedTdoByteBuffer,
					AMTXHAL_JTAG_STATE_IDLE );
	return Status;
}

/****************************************/
// function: add dr path scan inout but stay in dr
// input: 
//			long handle
//			long length
//			char *buffer
// output:
//			status
/****************************************/
long Cusbjtag::add_dr_scan_inout_stay(long handle, long length, char *buffer)
{
	long Status;
	Status = AMTXHAL_CMDQ_Add_jtag_scan(
					handle, //long l_iceHandle,
					AMTXHAL_PORT_IO_LEVEL_0, //long l_portID,
					AMTXHAL_TARGET_ID_DEFAULT, //long l_targetID,
					AMTXHAL_SCAN_ID_DEFAULT, //long l_scanID,
					AMTXHAL_BOOLEAN_TRUE, //long l_scanInEn,
					AMTXHAL_BOOLEAN_TRUE, //long l_scanOutEn,
					AMTXHAL_BOOLEAN_FALSE, //long l_scanCheckEn,
					AMTXHAL_JTAG_STATE_DRSHIFT, //long l_scanState, <- HERE YOU SELECT IR
					length, //long l_scanLength,
					buffer, //char *pc_scanInTdiByteBuffer,
					buffer, //char *pc_scanCheckExpectedTdoByteBuffer,
					buffer, //char *pc_scanCheckMaskedTdoByteBuffer,
					AMTXHAL_JTAG_STATE_DRSHIFT );
	return Status;
}

/****************************************/
// function: add write data to address in ram
// input: 
//			int addr
//			int data
// output:
//			BOOL type
/****************************************/
BOOL Cusbjtag::add_write_ram(int addr,int data)
{

	char caddr[4], coutput[4]; 

	caddr[0]=(addr & 0xFF);
	caddr[1]=(addr & 0xFF00) / 0x100;
	caddr[2]=(addr & 0xFF0000) / 0x10000;
	caddr[3]=(addr & 0xFF000000) / 0x1000000;

 	coutput[0]=(data & 0xFF);
	coutput[1]=(data & 0xFF00) / 0x100;
	coutput[2]=(data & 0xFF0000) / 0x10000;
	coutput[3]=(data & 0xFF000000) / 0x1000000;

	// kenichi 04 2007.7.30 >>
	if (irLength == 10)
	{
		// command ir = 0xe (10)
		tdiByteBuffer[0] = (char)0x0e;
		tdiByteBuffer[1] = (char)0x00;	
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command dr = 0x102 (9)
		tdiByteBuffer[0] = (char)0x02;
		tdiByteBuffer[1] = (char)0x01;	
		if (add_dr_scan_in(iceHandle, irLength - 1, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command ir = 0x0c (10)
		tdiByteBuffer[0] = (char)0x0c;
		tdiByteBuffer[1] = (char)0x00;	
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command dr = addr (35)
		tdiByteBuffer[0] = (char)caddr[0];
		tdiByteBuffer[1] = (char)caddr[1];	
		tdiByteBuffer[2] = (char)caddr[2];
		tdiByteBuffer[3] = (char)caddr[3];
		tdiByteBuffer[4] = (char)0x06;
		if (add_dr_scan_in(iceHandle, addressCmd, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
	    // command ir = 0x0e (10)
		tdiByteBuffer[0] = (char)0x0e;
		tdiByteBuffer[1] = (char)0x00;
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command dr = 0x103(9)
		tdiByteBuffer[0] = (char)0x03;
		tdiByteBuffer[1] = (char)0x01;
		if (add_dr_scan_in(iceHandle, irLength - 1, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command ir = 0x0c (10)
		tdiByteBuffer[0] = (char)0x0c;
		tdiByteBuffer[1] = (char)0x00;
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command write data 
		tdiByteBuffer[0] = (char)coutput[0];
		tdiByteBuffer[1] = (char)coutput[1];	
		tdiByteBuffer[2] = (char)coutput[2];
		tdiByteBuffer[3] = (char)coutput[3];
		tdiByteBuffer[4] = (char)0x00;
		if (add_dr_scan_in(iceHandle, dataCmd, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
	}
	else if (irLength == 6)
	{
		// command dr = 0x02
		tdiByteBuffer[0] = (char)0x02;
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command dr = addr (35)
		tdiByteBuffer[0] = (char)caddr[0];
		tdiByteBuffer[1] = (char)caddr[1];	
		tdiByteBuffer[2] = (char)caddr[2];
		tdiByteBuffer[3] = (char)caddr[3];
		tdiByteBuffer[4] = (char)0x06;
		if (add_dr_scan_in(iceHandle, addressCmd, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;

		// command ir = 0x03 
		tdiByteBuffer[0] = (char)0x03;
		tdiByteBuffer[1] = (char)0x00;
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command write data 
		tdiByteBuffer[0] = (char)coutput[0];
		tdiByteBuffer[1] = (char)coutput[1];	
		tdiByteBuffer[2] = (char)coutput[2];
		tdiByteBuffer[3] = (char)coutput[3];
		tdiByteBuffer[4] = (char)0x00;
		if (add_dr_scan_in(iceHandle, dataCmd, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
	}
	// << 2007.7.31
	return TRUE;
}

/****************************************/
// function: add read data from addr in ram
// input: 
//			int addr
// output:
//			unsigned int type
/****************************************/
BOOL Cusbjtag::add_read_ram(int addr)
{
	char caddr[4] ;
        
	caddr[0]=(addr & 0xFF);
	caddr[1]=(addr & 0xFF00) / 0x100;
	caddr[2]=(addr & 0xFF0000) / 0x10000;
	caddr[3]=(addr & 0xFF000000) / 0x1000000;
			
	// kenichi 04 2007.7.30 >>
	if (irLength == 10)
	{
		// command ir = 0x0e (10);
		tdiByteBuffer[0] = (char)0x0e;
		tdiByteBuffer[1] = (char)0x00;	
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command dr = 0x102 (9)
		tdiByteBuffer[0] = (char)0x02;
		tdiByteBuffer[1] = (char)0x01;	
		if (add_dr_scan_in(iceHandle, irLength - 1, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command ir = 0x0c (10)
		tdiByteBuffer[0] = (char)0x0c;
		tdiByteBuffer[1] = (char)0x00;	
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command dr = addr (35)
		tdiByteBuffer[0] = (char)caddr[0];
		tdiByteBuffer[1] = (char)caddr[1];	
		tdiByteBuffer[2] = (char)caddr[2];
		tdiByteBuffer[3] = (char)caddr[3];
		tdiByteBuffer[4] = (char)0x00;
		if (add_dr_scan_in(iceHandle, addressCmd, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command ir = 0x0e (10)
		tdiByteBuffer[0] = (char)0x0e;
		tdiByteBuffer[1] = (char)0x00;
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command dr = 0x103(9)
		tdiByteBuffer[0] = (char)0x03;
		tdiByteBuffer[1] = (char)0x01;
		if (add_dr_scan_in(iceHandle, irLength - 1, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command ir = 0x0c (10)
		tdiByteBuffer[0] = (char)0x0c;
		tdiByteBuffer[1] = (char)0x00;
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;

		// read data // 32 bit data                                      // Split this read scan in two scan
		tdiByteBuffer[0] = (char)0x00;                                   // Note :only the 32bits util data 
		tdiByteBuffer[1] = (char)0x00;                                   // will be written to the SCOB buffer.
		tdiByteBuffer[2] = (char)0x00;                                   // 
		tdiByteBuffer[3] = (char)0x00;                                   //
		if (add_dr_scan_inout_stay(iceHandle, 32, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false; 
		// read data // Cmd bit                                          //
		tdiByteBuffer[0] = (char)0x00;                                   //
		if (add_dr_scan_in(iceHandle, dataCmd-32, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
	}
	else if (irLength == 6)
	{
		// command ir = 0x2 
		tdiByteBuffer[0] = (char)0x02;
		tdiByteBuffer[1] = (char)0x00;	
		if (add_ir_scan_in(iceHandle, irLength, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;
		
		// command dr = addr (35)
		tdiByteBuffer[0] = (char)caddr[0];
		tdiByteBuffer[1] = (char)caddr[1];	
		tdiByteBuffer[2] = (char)caddr[2];
		tdiByteBuffer[3] = (char)caddr[3];
		tdiByteBuffer[4] = (char)0x00;
		if (add_dr_scan_in(iceHandle, addressCmd, tdiByteBuffer) != AMTXHAL_STATUS_SUCCESS)
			return false;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -