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

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

?? jtag.cpp

?? ARM核的邊界掃描(JTAG)的實現,此代碼在s3c2400上測試通過
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
//////////////////////////////////////////////////////////////////////////////
// JTAG.cpp                                                                 //
//////////////////////////////////////////////////////////////////////////////
/*
	ByteBlasterMV on LPT1

	Programming conventions:
	- functions have JTAG state transition commented. other functions begin/end with 'run test idle'
	- maximum throughput should be achieved using inline & assembly

	States transitions:
		state				TMS		TMS=>0				TMS=>1
		-------------------	-------	------------------- ----------------
		test logic reset	1		run test idle		test logic reset
		run test idle		0		run test idle		select DR scan
		select DR scan		1		capture				select IR scan
		select IR scan		1		capture				test logic reset
		capture				0		shift				exit1
		shift				0		shift				exit1
		exit1				1		pause				update
		pause				0		pause				exit2
		exit2				1		shift				update
		update				1		run testidle		select DR scan

	Clock timings:
		TDI and TMS are sampled on the rising edge of TCK
		TDO output at falling edge of TCK
*/

//////////////////////////////////////////////////////////////////////////////
// Includes                                                                 //
//////////////////////////////////////////////////////////////////////////////
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include "JTAG.h"
#include "Device.h"

//////////////////////////////////////////////////////////////////////////////
// Namespace                                                                //
//////////////////////////////////////////////////////////////////////////////
namespace JTAG
{

//////////////////////////////////////////////////////////////////////////////
// Defines                                                                  //
//////////////////////////////////////////////////////////////////////////////
#define PORT				0x378
#define TCK					0x01
#define TMS					0x02
#define TDI					0x40
#define TDO					((unsigned char)~_inp(PORT+1) >> 7)
#define OUTP(tms,tdi,tck)	_outp(PORT, tms*TMS + tdi*TDI + tck*TCK)

#define TMS_IDLE_CAPTURE_SHIFT_PAUSE	0
#define TMS_RESET_SELECT_EXIT_UPDATE	1

#define TMS_RESET				1	// idle -> reset
#define TMS_SELECT				1	// idle/select IR -> select/select DR
#define TMS_CAPTURE				0	// select -> capture
#define TMS_SHIFT				0	// capture -> shift
#define TMS_UPDATE				1	// shift -> update
#define TMS_IDLE				0	// update -> idle
#define TMS_EXIT				1	// shift/pause -> exit1/exit2
#define TMS_PAUSE				0	// exit1 -> pause

//////////////////////////////////////////////////////////////////////////////
// Variables                                                                //
//////////////////////////////////////////////////////////////////////////////
int currentCommand = -1;		// cached instruction register
int currentDataChain = -1;		// cached chain number
int dataLength = -1;			// data register register length
int instructionLength = 4;		// instruction register length

//////////////////////////////////////////////////////////////////////////////
// TMS                                                                      //
//////////////////////////////////////////////////////////////////////////////
// state transition
__forceinline void NextState(int tms)
{
	int tdi = 1;
	OUTP(tms,tdi,0);
	OUTP(tms,tdi,1);
}








//////////////////////////////////////////////////////////////////////////////
// ReadBit                                                                  //
//////////////////////////////////////////////////////////////////////////////
// shift -> shift
__forceinline int ReadBit()
{
	int tdi = 1;
	int tms = 0;
	//OUTP(tms,tdi,0);	// added by DF
	OUTP(tms,tdi,1);
	OUTP(tms,tdi,0);
	return TDO;
}

//////////////////////////////////////////////////////////////////////////////
// ReadLastBit                                                              //
//////////////////////////////////////////////////////////////////////////////
// shift -> exit1
__forceinline int ReadLastBit()
{
	int tdi = 1;
	int tms = 1;
	//OUTP(tms,tdi,0);	// added by DF
	OUTP(tms,tdi,1);
	OUTP(tms,tdi,0);
	return TDO;
}







//////////////////////////////////////////////////////////////////////////////
// WriteBit                                                                 //
//////////////////////////////////////////////////////////////////////////////
// shift -> shift
__forceinline void WriteBit(int tdi)
{
	int tms = 0;
	OUTP(tms,tdi,0);
	OUTP(tms,tdi,1);
}

//////////////////////////////////////////////////////////////////////////////
// WriteLastBit                                                             //
//////////////////////////////////////////////////////////////////////////////
// shift -> exit1
__forceinline void WriteLastBit(int tdi)
{
	int tms = 1;
	OUTP(tms,tdi,0);
	OUTP(tms,tdi,1);
}




//////////////////////////////////////////////////////////////////////////////
// TransferBit                                                              //
//////////////////////////////////////////////////////////////////////////////
// shift -> shift
__forceinline int TransferBit(int tdi = 1)
{
	int tms = 0;
	//OUTP(tms,tdi,0);	// added by DF
	OUTP(tms,tdi,1);
	OUTP(tms,tdi,0);
	return TDO;
}

//////////////////////////////////////////////////////////////////////////////
// TransferLastBit                                                          //
//////////////////////////////////////////////////////////////////////////////
// shift -> exit1
__forceinline int TransferLastBit(int tdi = 1)
{
	int tms = 1;
	//OUTP(tms,tdi,0);	// added by DF
	OUTP(tms,tdi,1);
	OUTP(tms,tdi,0);
	return TDO;
}



//////////////////////////////////////////////////////////////////////////////
// Reset                                                                    //
//////////////////////////////////////////////////////////////////////////////
// * -> test logic reset
__forceinline void Reset()
{
	for (int i=0; i<5; i++)
	{
		NextState(TMS_RESET_SELECT_EXIT_UPDATE);		// * -> test logic reset
	}
}

//////////////////////////////////////////////////////////////////////////////
// ResetToIdle                                                              //
//////////////////////////////////////////////////////////////////////////////
// * -> run test idle
__forceinline void ResetToIdle()
{
	Reset();
	NextState(TMS_IDLE_CAPTURE_SHIFT_PAUSE);	// test logic reset -> run test idle
}

//////////////////////////////////////////////////////////////////////////////
// Idle                                                                     //
//////////////////////////////////////////////////////////////////////////////
void Idle(int n=1)
{
	for (int i=0; i<n; i++)
	{
		NextState(TMS_IDLE_CAPTURE_SHIFT_PAUSE);
	}
}




//////////////////////////////////////////////////////////////////////////////
// ReadIR                                                                   //
//////////////////////////////////////////////////////////////////////////////
// always returns 1
/*unsigned int ReadIR()
{
	NextState(TMS_SELECT);
	NextState(TMS_SELECT);
	NextState(TMS_CAPTURE);
	NextState(TMS_SHIFT);
	int bits = instructionLength;
	unsigned int readData = 0;
	for (int bit=0; bit<bits-1; bit++)		// do all except last bit
	{
		readData += ReadBit() << bit;
	}
	readData += ReadLastBit() << (bits-1);		// do last bit
	//return readData;
	NextState(TMS_UPDATE);
	NextState(TMS_IDLE);

	printf("ReadIR returns %08X (%d)\n", readData, instructionLength);

	return readData;
}*/

//////////////////////////////////////////////////////////////////////////////
// WriteIR                                                                  //
//////////////////////////////////////////////////////////////////////////////
/*void WriteIR(unsigned int writeData)
{
	printf("WriteIR %s\n", Device::sCommands[writeData]);

	NextState(TMS_SELECT);
	NextState(TMS_SELECT);
	NextState(TMS_CAPTURE);
	NextState(TMS_SHIFT);
	int bits = instructionLength;
	while (--bits)		// do all except last bit
	{
		WriteBit(writeData & 1);
		writeData >>= 1;
	}
	WriteLastBit(writeData & 1);			// do last bit
	NextState(TMS_UPDATE);
	NextState(TMS_IDLE);
}*/







//////////////////////////////////////////////////////////////////////////////
// Command                                                                  //
//////////////////////////////////////////////////////////////////////////////
void Command(unsigned int command)
{
	if (currentCommand == command) return;
	//printf("command %01X to %s\n", currentCommand, Device::sCommands[command]);
	currentCommand = command;

	//printf("currentCommand = %X, currentDataChain = %d, dataLength = %d\n", currentCommand, currentDataChain, dataLength);

	printf("%s\n", Device::sCommands[command]);

	NextState(TMS_SELECT);
	NextState(TMS_SELECT);
	NextState(TMS_CAPTURE);
	NextState(TMS_SHIFT);
	unsigned int writeData = command;
	int bits = instructionLength;
	while (--bits)		// do all except last bit
	{
		WriteBit(writeData & 1);
		writeData >>= 1;
	}
	WriteLastBit(writeData & 1);			// do last bit
	NextState(TMS_UPDATE);
	NextState(TMS_IDLE);

	if (Device::commandDataLength[currentCommand] >= 0) dataLength = Device::commandDataLength[currentCommand];
}

//////////////////////////////////////////////////////////////////////////////
// Chain                                                                    //
//////////////////////////////////////////////////////////////////////////////
void Chain(int chain)
{
	if (currentDataChain == chain) return;
	printf("{\n");
	currentDataChain = chain;

	//printf("currentCommand = %X, currentDataChain = %d, dataLength = %d\n", currentCommand, currentDataChain, dataLength);

	int oldCommand = currentCommand;
	Command(Device::SCAN_N);
	Write(chain);
	printf("%s\n", Device::sChains[chain]);
	Command(oldCommand);

	if (Device::chainLength[currentDataChain] >= 0) dataLength = Device::chainLength[currentDataChain];
	printf("}\n");
}





//////////////////////////////////////////////////////////////////////////////
// Read			                                                            //
//////////////////////////////////////////////////////////////////////////////
unsigned int Read()
{
	NextState(TMS_SELECT);
	NextState(TMS_CAPTURE);
	NextState(TMS_SHIFT);
	int bits = dataLength;
	//printf("Read %d\n", bits);
	unsigned int readData = 0;
	for (int bit=0; bit<bits-1; bit++)		// do all except last bit
	{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
午夜久久福利影院| 亚洲成a天堂v人片| 国产亚洲综合av| 精品日韩欧美一区二区| 欧美一区二区三区不卡| 欧美猛男男办公室激情| 欧美色倩网站大全免费| 在线观看日韩一区| 欧美日韩精品欧美日韩精品一 | 成人精品国产一区二区4080| 国产aⅴ综合色| av电影在线观看完整版一区二区| 成人h动漫精品一区二区| 99久久久国产精品免费蜜臀| 91国偷自产一区二区三区成为亚洲经典| 91丨porny丨首页| 欧美中文一区二区三区| 91精品午夜视频| 精品久久国产97色综合| 久久久不卡网国产精品二区| 国产精品毛片高清在线完整版| 亚洲婷婷在线视频| 亚洲成人激情社区| 韩国精品一区二区| 91丨九色丨蝌蚪丨老版| 欧美亚洲日本国产| 日韩欧美电影一区| 中文欧美字幕免费| 一区二区三区免费| 蜜臀久久久99精品久久久久久| 国产一区二区三区精品视频| 成人国产精品视频| 欧美性猛交一区二区三区精品| 538在线一区二区精品国产| 成人app网站| 在线视频一区二区免费| 欧美日韩国产在线播放网站| 欧美男生操女生| 日韩午夜中文字幕| 久久众筹精品私拍模特| 国产精品久久综合| 亚洲国产视频一区| 国产精品123| 69av一区二区三区| 高清不卡一二三区| 捆绑调教美女网站视频一区| 国产一区二区精品久久99| 91免费版在线| 欧美电影免费观看完整版| 国产精品美女久久久久久 | 一区二区在线观看av| 日韩黄色免费网站| 成人av在线电影| 欧美肥胖老妇做爰| 国产精品美女www爽爽爽| 天天综合色天天| 东方aⅴ免费观看久久av| 欧美日韩成人综合| 国产精品久久久久影院老司 | 成人三级伦理片| 91精品国产91久久综合桃花| 国产精品久久久久精k8 | 在线免费观看视频一区| 久久综合丝袜日本网| 午夜精品福利一区二区三区av| 国产精品亚洲а∨天堂免在线| 欧美性高清videossexo| 国产精品看片你懂得| 美脚の诱脚舐め脚责91 | 国产午夜精品在线观看| 日韩av一二三| 欧美性色aⅴ视频一区日韩精品| 国产精品天天看| 久久精品国产免费看久久精品| 在线一区二区三区四区五区| 国产欧美精品一区二区三区四区| 青青草视频一区| 欧美三级在线视频| 国产精品1区二区.| 欧美日韩激情在线| 日日摸夜夜添夜夜添精品视频| 99在线精品一区二区三区| 中文在线一区二区| av一区二区三区黑人| 国产精品不卡在线| 不卡欧美aaaaa| 亚洲日韩欧美一区二区在线| 不卡高清视频专区| 亚洲欧美综合网| 91麻豆精品国产91久久久使用方法 | 亚洲大型综合色站| 一本大道av一区二区在线播放| 久久精品视频免费观看| 国产一区不卡精品| 久久综合色综合88| 国产乱一区二区| 久久综合久久久久88| 美女高潮久久久| 欧美大片拔萝卜| 精品一区二区三区免费毛片爱 | 亚洲三级在线免费| 91网站视频在线观看| 综合欧美一区二区三区| 91在线精品一区二区三区| 综合婷婷亚洲小说| 色婷婷av一区二区三区之一色屋| 一区二区在线看| 色偷偷成人一区二区三区91| 亚洲自拍偷拍av| 99re亚洲国产精品| 亚洲乱码国产乱码精品精可以看| 成人国产电影网| 亚洲欧洲日韩在线| 欧美午夜在线观看| 日韩在线一二三区| 精品久久久久久无| 国产suv精品一区二区三区| 国产精品久久久久久久久免费相片 | 日韩电影免费一区| 日韩美女视频在线| 国产激情视频一区二区在线观看| 亚洲国产成人午夜在线一区| 91视频在线看| 天天亚洲美女在线视频| 日韩欧美专区在线| 高清久久久久久| 欧美一级二级三级乱码| 91久久国产综合久久| 91精品办公室少妇高潮对白| 成人av片在线观看| 高清不卡一区二区| 国产精品亚洲视频| 国产91精品一区二区麻豆网站| 免费一级欧美片在线观看| 亚洲国产欧美日韩另类综合 | 欧美图片一区二区三区| 国产91对白在线观看九色| 成人av综合在线| 欧美肥大bbwbbw高潮| 精品综合久久久久久8888| 国产精品女上位| 欧美性受xxxx黑人xyx性爽| 另类小说综合欧美亚洲| 中文字幕永久在线不卡| 欧美三级欧美一级| 国产成人综合亚洲91猫咪| 亚洲美女精品一区| 欧美精品一区二| 在线看日本不卡| 精品一区二区三区在线视频| 综合久久给合久久狠狠狠97色| 在线综合视频播放| caoporn国产精品| 美女网站视频久久| 亚洲激情男女视频| 久久综合国产精品| 欧美日韩国产不卡| 不卡的电影网站| 美女爽到高潮91| 一级精品视频在线观看宜春院| 精品欧美一区二区三区精品久久| 91麻豆国产精品久久| 国产九色精品成人porny| 亚洲电影第三页| 国产精品沙发午睡系列990531| 91精品国产91久久久久久最新毛片 | 亚洲午夜久久久久久久久电影网| 精品日韩在线一区| 欧美美女bb生活片| 色综合久久综合网97色综合 | 91黄视频在线| 国产精品系列在线播放| 天堂精品中文字幕在线| 亚洲久草在线视频| 日本一区二区三区高清不卡| 日韩一区二区影院| 欧美日韩激情在线| 91精品91久久久中77777| 国产综合色产在线精品| 丝袜诱惑亚洲看片| 一区二区三区不卡在线观看| 2023国产精品视频| 国产精品羞羞答答xxdd| 欧美精品视频www在线观看| 奇米四色…亚洲| 欧美一卡二卡在线观看| 亚洲一区在线视频| 99久久99久久免费精品蜜臀| 国产欧美日韩在线看| 麻豆一区二区99久久久久| 51午夜精品国产| 午夜视频在线观看一区| 欧美日韩免费一区二区三区视频| 国产精品久久久久久久久晋中| 成人av在线播放网址| 亚洲乱码中文字幕| 51久久夜色精品国产麻豆| 欧美日韩在线播放| 欧美午夜片在线看| 欧美日韩综合一区|