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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? arm7tdmi.c

?? arm JTAG原理和實現(xiàn)
?? C
?? 第 1 頁 / 共 3 頁
字號:
 *		It is for later use to return from the DEBUG state back to 
 *		the SYSTEM state.
 *
 *		Please modify this function carefully.
 *
 *		@pc:	used to return the value of PC which indicates the next 
 *				instruction to be execute on exit from DEBUG state.
 */
int arm7tdmi_check_dbgstat(u32 *pc)
{
	int status;
	u32 r0;
	u32 dbgstat;
	u32 shift_in[2];
	u32 shift_out[2];

	if(pc == NULL)
		return XJERR_INVALID_PARAMATER;

	//In DEBUG state?
	if(arm7tdmi_status.state == ARM7TDMI_DEBUG_STATE)
		return XJERR_TARGET_HALTED;

	//Select scan chain 2
	status = arm7tdmi_connect_scanchain(2);
	if(status != XJ_OK)
		return status;

	//Check DEBUG status register
	arm7tdmi_ice_read(ARM7TDMI_ICE_DBGSTAT, &dbgstat);
	if(dbgstat & 0x1){
		arm7tdmi_status.state = ARM7TDMI_DEBUG_STATE;
		if (dbgstat & 0x10)
			arm7tdmi_status.from = ARM7TDMI_FROM_THUMB;
		else
			arm7tdmi_status.from = ARM7TDMI_FROM_ARM;
	}else
		return XJERR_TARGET_RUNNING;

	/*
	 * Try to obtain the value of PC when entering DEBUG state. The obtained
	 * value of PC indicates the next instruction to be executed on exit from
	 * DEBUG state.
	 */

	//Select scan chain 1
	status = arm7tdmi_connect_scanchain(1);
	if(status != XJ_OK)
		return status;


	if(arm7tdmi_status.from == ARM7TDMI_FROM_ARM){	//Enter DEBUG from ARM state

		//Step 1 - Read R0 

		//STR R0, [R0] = 0xE5800000					
		shift_in[0] = 0xE5800000;					//Instruction 1
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		/* 
		 * After the ARM7TDMI core has entered debug state from breakpt/watchpt,
		 * the first time the 33rd bit is captured and scanned out, its value 
		 * tells the debugger if the core entered debug state due to a breakpoint
		 * (bit 33 clear) or a watchpoint (bit 33 set).
		 */
		if(shift_out[1] & 0x1)
			arm7tdmi_status.by = ARM7TDMI_BY_WATCHPT;
		else
			arm7tdmi_status.by = ARM7TDMI_BY_BREAKPT;

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					//Instruction 2
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					//Instruction 3
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);
		r0 = shift_out[0];

		//Step 2 - Move PC to R0

		//MOV R0, PC = 0xE1A0000F
		shift_in[0] = 0xE1A0000F;					//Instruction 4
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);	

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//Step 3 - Read the value of PC from R0

		//STR R0, [R0] = 0xE5800000
		shift_in[0] = 0xE5800000;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);
		*pc = shift_out[0];

		/*
		 * Entry into DEBUG state from a breakpoint/watchpoint advances the 
		 * PC by four addresses. Each instruction executed in DEBUG state 
		 * advances the PC by one address. 
		 *
		 * To move the value of PC to R0, 4 instructions have been executed in D
		 * EBUG state. So,  the value of PC which indicates the next instruction
		 * should be executed on exit from DEBUG state is
		 *			pc - 4 x (4 + 4)
		 */
		*pc -= 32;

	}else{		//Enter DEBUG from THUMB state

		//Step 1 - Read R0 

		//STR R0, [R0] = 0x60006000
		shift_in[0] = 0x60006000;					//Instruction 1
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		/* 
		 * After the ARM7TDMI core has entered debug state from breakpt/watchpt,
		 * the first time the 33rd bit is captured and scanned out, its value 
		 * tells the debugger if the core entered debug state due to a breakpoint
		 * (bit 33 clear) or a watchpoint (bit 33 set).
		 */
		if(shift_out[1] & 0x1)
			arm7tdmi_status.by = ARM7TDMI_BY_WATCHPT;
		else
			arm7tdmi_status.by = ARM7TDMI_BY_BREAKPT;

		//NOP 
		shift_in[0] = 0x1C001C00;					//Instruction 2
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP 
		shift_in[0] = 0x1C001C00;					//Instruction 3
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//R0
		shift_in[0] = 0x1C001C00;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);
		r0 = shift_out[0];

		//Step 2 - Move PC to R0

		//MOV R0, PC = 0x46784678
		shift_in[0] = 0x46784678;					//Instruction 4			
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP 
		shift_in[0] = 0x1C001C00;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP 
		shift_in[0] = 0x1C001C00;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//Step 3 - Read the value of PC from R0

		//STR R0, [R0] = 0x60006000
		shift_in[0] = 0x60006000;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP 
		shift_in[0] = 0x1C001C00;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP 
		shift_in[0] = 0x1C001C00;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP 
		shift_in[0] = 0x1C001C00;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);
		*pc = shift_out[0];

		/*
		 * Entry into DEBUG state from a breakpoint/watchpoint advances the 
		 * PC by four addresses. Each instruction executed in DEBUG state 
		 * advances the PC by one address. 
		 *
		 * To move the value of PC to R0, 4 instructions have been executed in D
		 * EBUG state. So,  the value of PC which indicates the next instruction
		 * should be executed on exit from DEBUG state is
		 *			pc - 2 x (4 + 4)
		 */	
		*pc -= 16;

		//Step4 - Switch from THUMB state to ARM state

		/*
		 * When enter DEBUG state, we make ARM7TDMI enter ARM state before any
		 * further debug is performed. When leave from DEBUG state, we make
		 * ARM7TDMI return to THUMB state before the normal operation is resumed.
		 */

		//BX PC = 0x47784778
		shift_in[0] = 0x47784778;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP 
		shift_in[0] = 0x1C001C00;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP 
		shift_in[0] = 0x1C001C00;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);
	}

	//LastStep - Restore R0
	arm7tdmi_core_wri_reg(ARM7TDMI_R0, r0);

	return XJ_OK;
}


/*
 * arm7tdmi_exit_dbgstat() - 
 *		This route is used to exit from the DEBUG state and return to the
 *		normal SYSTEM state. The input pc indicates the next instruction
 *		to be exectued on exit from DEBUG state. After some operations in
 *		the DEBUG state, this route can be used to exit from the DEBUG state
 *		and resume the execution of program under debug.
 *
 *		Please modify this function carefully.
 *
 *		@pc:	the value of pc which indicates the next instruction to
 *				be executed on exit from DEBUG state.
 */
int arm7tdmi_exit_dbgstat(u32 pc)
{
	int status;
	u32 r0;
	u32 shift_in[2];
	u32 shift_out[2];

	//In SYSTEM state?
	if(arm7tdmi_status.state == ARM7TDMI_SYSTEM_STATE)
		return XJ_OK;
	
	//Clear the DEBUGRQ flag in DBGCTRL register 
	status = arm7tdmi_connect_scanchain(2);
	if(status != XJ_OK)
		return status;

	status = arm7tdmi_ice_write(ARM7TDMI_ICE_DBGCTRL, 0x0);
	if(status != XJ_OK)
		return status;

	//Select scan chain 1
	status = arm7tdmi_connect_scanchain(1);
	if(status != XJ_OK)
		return status;

	if(arm7tdmi_status.from == ARM7TDMI_FROM_ARM){	//Enter DEBUG from ARM state

		//Step 1 - Read R0 & Write the new value of PC to R0

		pc &= 0xFFFFFFFC;	//Align
		status = arm7tdmi_core_rd_reg(ARM7TDMI_R0, &r0);
		status = arm7tdmi_core_wri_reg(ARM7TDMI_R0, pc);

		//Step 2 - Move R0 to PC

		//MOV PC, R0 = 0xE1A0F000					
		shift_in[0] = 0xE1A0F000;				
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					//Instruct 1
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					//Instruct 2
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//Step 3 - Restore R0

		//MOV R0, #0 = 0xE3A00000
		shift_in[0] = 0xE3A00000;					//Instruct 3
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					//Instruct 4
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					//Instruct 5
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//LDR R0, [R0] = 0xE5900000
		shift_in[0] = 0xE5900000;					//Instruct 6
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					//Instruct 7
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					//Instruct 8
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//R0 - put the value of R0 to the data bus
		shift_in[0] = r0;
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//Write the value obtained from data bus to R0
		shift_in[0] = ARM7TDMI_NOP;
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//Step 4 - Set SYSTEM speed flag

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					//Instruct 9	
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP + SYSTEM SPEED
		shift_in[0] = ARM7TDMI_NOP;					//Instruct 10		
		shift_in[1] = ARM7TDMI_SYSTEM_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		/*
		 * After move the new value to register PC, 10 instructions have been
		 * executed so far. To exit from DEBUG state and resume the normal 
		 * operation of the program under debug, 10 instructions backwards.
		 */

		//B -10 = 0xEAFFFFF6
		shift_in[0] = 0xEAFFFFF6;					//Final branch
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

	}else{	//Enter DEBUG from THUMB state

		//Step 1 - Read R0 & Write the new value of PC to R0

		pc &= 0xFFFFFFFE;	//Align
		status = arm7tdmi_core_rd_reg(ARM7TDMI_R0, &r0);
		status = arm7tdmi_core_wri_reg(ARM7TDMI_R0, pc + 1);

		//Step 2 - Switch from ARM state back to THUMB state first

		//BX R0 = 0xE12FFF10
		shift_in[0] = 0xE12FFF10;
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//NOP
		shift_in[0] = ARM7TDMI_NOP;					
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);

		//Step 3 - Sbbtract R0 by 1
		
		//SUB R0, #1 = 0x38013801
		shift_in[0] = 0x38013801;					

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频黄 久久| 玖玖九九国产精品| 国产欧美一区二区精品忘忧草| 欧美高清性hdvideosex| 欧美在线小视频| 欧美在线视频你懂得| 制服.丝袜.亚洲.中文.综合| 在线播放日韩导航| 日韩视频免费直播| 国产丝袜欧美中文另类| 国产精品女主播av| 一区二区三区四区五区视频在线观看| 亚洲图片欧美激情| 亚洲国产美国国产综合一区二区| 亚洲v精品v日韩v欧美v专区| 美女网站色91| 成人一级片网址| 色婷婷国产精品| 91精品福利在线一区二区三区| 欧美一区二区三区白人 | 一区二区三区欧美| 婷婷六月综合亚洲| 国产一区高清在线| 99re这里都是精品| 欧美精品黑人性xxxx| 欧美经典一区二区| 亚洲国产精品一区二区久久| 精品一区二区三区欧美| 99久久久免费精品国产一区二区 | 毛片av一区二区| 成人美女视频在线观看| 欧美三级乱人伦电影| 精品国产伦一区二区三区观看方式| 国产精品视频九色porn| 日韩精品五月天| 91在线porny国产在线看| 欧美肥妇bbw| 亚洲视频免费在线观看| 久久国产精品72免费观看| 91亚洲资源网| 欧美精品一区二区在线播放| 亚洲欧美日韩系列| 国产精品一区不卡| 日韩一区二区在线看片| 国产精品大尺度| 另类人妖一区二区av| 色综合天天综合网国产成人综合天 | 国产成人亚洲综合色影视| 欧美在线免费播放| 欧美国产成人在线| 狠狠久久亚洲欧美| 欧美色综合天天久久综合精品| 欧美精品一区二区三区四区| 亚洲午夜久久久久久久久电影院 | 国产精品萝li| 青娱乐精品视频| 色一情一乱一乱一91av| 国产精品视频在线看| 国产一区二区福利| 欧美一区二区免费视频| 亚洲成av人片一区二区三区| 色综合天天做天天爱| 国产精品国产三级国产a | 另类成人小视频在线| 91极品美女在线| 亚洲美女免费在线| 91社区在线播放| 综合激情网...| 色综合一个色综合亚洲| **欧美大码日韩| av午夜精品一区二区三区| 中文字幕精品在线不卡| 成人黄色一级视频| 国产精品第13页| 91丨porny丨蝌蚪视频| 亚洲视频一区二区在线观看| av电影天堂一区二区在线| 中文字幕久久午夜不卡| av电影在线观看一区| 综合电影一区二区三区| 丁香另类激情小说| 亚洲欧洲在线观看av| 91免费国产视频网站| 一区二区三区资源| 欧美片网站yy| 蜜桃av噜噜一区| 精品成人私密视频| proumb性欧美在线观看| 最新国产成人在线观看| 欧美亚洲高清一区| 蜜桃视频一区二区| 久久久美女毛片| 色妞www精品视频| 日日噜噜夜夜狠狠视频欧美人 | 一区二区高清在线| 6080国产精品一区二区| 国产在线观看一区二区| 亚洲欧洲另类国产综合| 欧美日韩一区二区三区在线看| 日本美女一区二区三区视频| 久久精品人人做人人爽人人 | 日韩精品欧美精品| 久久久国际精品| 欧美亚洲动漫制服丝袜| 国产精品一区三区| 亚洲一区二区在线观看视频| 精品久久五月天| heyzo一本久久综合| 日韩高清欧美激情| 国产精品麻豆网站| 日韩你懂的在线播放| eeuss鲁片一区二区三区| 日韩黄色小视频| 一级日本不卡的影视| 精品国产网站在线观看| 91久久精品一区二区三区| 九九精品视频在线看| 亚洲自拍偷拍av| 中文在线一区二区| 日韩午夜三级在线| 91极品美女在线| 成人一区在线观看| 精久久久久久久久久久| 亚洲国产wwwccc36天堂| 中文字幕在线不卡视频| 精品国免费一区二区三区| 欧美在线一二三| 成人动漫一区二区在线| 黄色成人免费在线| 日韩电影一区二区三区四区| 亚洲情趣在线观看| 国产亚洲欧美激情| 精品国产乱子伦一区| 欧美精品 国产精品| 在线中文字幕不卡| 国产成人免费9x9x人网站视频| 免费人成在线不卡| 爽爽淫人综合网网站| 亚洲综合网站在线观看| 亚洲欧美乱综合| 国产精品久久国产精麻豆99网站| 日韩久久精品一区| 日韩欧美国产麻豆| 欧美一区二区三区视频免费播放| 欧美性感一类影片在线播放| av成人老司机| 99re热视频这里只精品| 成人综合在线网站| 福利91精品一区二区三区| 国产一区 二区| 国产精品一区专区| 国产成a人亚洲| 岛国一区二区在线观看| 国产黑丝在线一区二区三区| 激情另类小说区图片区视频区| 蜜桃免费网站一区二区三区| 美腿丝袜亚洲一区| 国精产品一区一区三区mba视频| 另类的小说在线视频另类成人小视频在线 | 欧美一区二视频| 正在播放一区二区| 2017欧美狠狠色| 国产欧美日韩亚州综合| 国产精品福利一区| 亚洲精品国产一区二区精华液| 亚洲激情男女视频| 午夜精品久久久久久久99水蜜桃| 日韩精品免费视频人成| 韩国午夜理伦三级不卡影院| 国产精品一区二区男女羞羞无遮挡| 国产成人午夜精品影院观看视频| 99免费精品在线观看| 欧美日韩在线播放三区| 精品免费99久久| 成人免费视频在线观看| 婷婷夜色潮精品综合在线| 久久精品99国产精品| www..com久久爱| 在线成人高清不卡| 国产色一区二区| 亚洲国产综合人成综合网站| 美国一区二区三区在线播放| 成人av资源在线| 91麻豆精品国产91久久久久| 国产欧美精品区一区二区三区 | 日本欧美一区二区| 国产精品77777| 欧美色图天堂网| 欧美精品一区二区三区视频| 亚洲精选免费视频| 久久电影网电视剧免费观看| 91小视频在线| 欧美mv日韩mv亚洲| 亚洲自拍偷拍九九九| 国产精品亚洲第一区在线暖暖韩国| 日本精品免费观看高清观看| 精品国产电影一区二区| 亚洲午夜国产一区99re久久| 成人一区二区三区在线观看| 日韩欧美国产午夜精品|