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

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

?? core.c

?? 一個Jtag調試仿真程序
?? C
字號:
/*
 * core.c:	implement the routes used to access the core
 *			registers under DEBUG state.
 *
 * Copyright (C) 2004, OPEN-JTAG, All rights reserved.
 */


#include <stdio.h>
#include "../types.h"
#include "../xjerr.h"
#include "../tapctrl.h"
#include "arm7tdmi.h"



/*
 * ARM7TDMI inlcudes 18 regisgers: R0-R14, PC, CPSR & SPSR
 * Plz note that SPSR is unavailable when the ARM7TDMI is in
 * the System/User state. 
 */
u32 arm7tdmi_register[18][2] = {
	{0x0, 0}, {0x0, 0}, {0x0, 0}, {0x0, 0}, {0x0, 0}, {0x0, 0},
	{0x0, 0}, {0x0, 0}, {0x0, 0}, {0x0, 0}, {0x0, 0}, {0x0, 0},
	{0x0, 0}, {0x0, 0}, {0x0, 0}
};



static int arm7tdmi_core_rd_r0(u32 *r0)
{
	u32 shift_in[2];
	u32 shift_out[2];

	//In DEBUG state?
	if(arm7tdmi_status.state != ARM7TDMI_DEBUG_STATE)
		return XJERR_TARGET_RUNNING;
	
	//Select scan chain 1
	if(arm7tdmi_status.scanchain != 1)
			return XJERR_SC1_NOT_SELECTED;

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

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

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

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

	*r0 = shift_out[0];

	return XJ_OK;
}


static int arm7tdmi_core_wri_r0(u32 r0)
{
	u32 shift_in[2];
	u32 shift_out[2];

	//In DEBUG state?
	if(arm7tdmi_status.state != ARM7TDMI_DEBUG_STATE)
		return XJERR_TARGET_RUNNING;
	
	//Select scan chain 1
	if(arm7tdmi_status.scanchain != 1)
			return XJERR_SC1_NOT_SELECTED;

	/* 
	 * Step 1: clear R0
	 * MOV R0, #0 = 0xE3A00000
	 */
	shift_in[0] = 0xE3A00000;
	shift_in[1] = ARM7TDMI_DEBUG_SPEED;
	arm7tdmi_acs_sc1(shift_in, shift_out);

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

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


	/* 
	 * Step 2: set R0
	 * LDR R0, [R0] = 0xE5900000
	 */
	shift_in[0] = 0xE5900000;
	shift_in[1] = ARM7TDMI_DEBUG_SPEED;
	arm7tdmi_acs_sc1(shift_in, shift_out);

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

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

	shift_in[0] = r0;				//New value
	shift_in[1] = ARM7TDMI_DEBUG_SPEED;
	arm7tdmi_acs_sc1(shift_in, shift_out);

	shift_in[0] = ARM7TDMI_NOP;
	shift_in[1] = ARM7TDMI_DEBUG_SPEED;
	arm7tdmi_acs_sc1(shift_in, shift_out);
	
	return XJ_OK;
}


//Read a specific core register
int arm7tdmi_core_rd_reg(int reg_idx, u32 *cur_val)
{
	int status;
	u32 r0;
	u32 cpsr;
	u32 shift_in[2];
	u32 shift_out[2];

	if(cur_val == NULL)
		return XJERR_INVALID_PARAMATER;

	//In DEBUG state?
	if(arm7tdmi_status.state != ARM7TDMI_DEBUG_STATE)
		return XJERR_TARGET_RUNNING;
	
	//Check the validity of the register according to the register index
	if(reg_idx < ARM7TDMI_R0 || reg_idx > ARM7TDMI_SPSR)
		return XJERR_INVALID_COREREG;

	//Select scan chain 1
	if(arm7tdmi_status.scanchain != 1){
		status = arm7tdmi_connect_scanchain(1);
		if(status != XJ_OK)
			return status;
	}

	//Anyway, read the value of R0 first.
	arm7tdmi_core_rd_r0(&r0);
	
	//If R0 is the target register, return directly
	if(reg_idx == ARM7TDMI_R0){
		*cur_val = r0;
		return XJ_OK;
	}

	//Execute all the instructions at the DEBUG speed
	shift_in[1] = ARM7TDMI_DEBUG_SPEED;

	if(reg_idx == ARM7TDMI_CPSR){			//Read CPSR
		// MRS R0, CPSR = 0xE10F0000
		shift_in[0] = 0xE10F0000;	
	}else if(reg_idx == ARM7TDMI_SPSR){		//Read SPSR
		// Make sure SPSR is available
		arm7tdmi_core_rd_reg(ARM7TDMI_CPSR, &cpsr);
		if( (cpsr & 0x1F) == 0x10 || (cpsr & 0x1F) == 0x1F )
			return XJERR_COREREG_UNAVAILABLE;

		// MRS R0, SPSR = 0xE14F0000
		shift_in[0] = 0xE14F0000;
	}else{									//Read R1-R15
		// MOV R0, Rx = 0xE1A0000x
		shift_in[0] = (0xE1A00000 | reg_idx);
	}

	//Move the value of the target register to R0
	arm7tdmi_acs_sc1(shift_in, shift_out);

	/*
	 * Next, use STR R0, [R0] to make the value of R0 apear
	 * on the data bus
	 */
	//STR R0, [R0] = 0xE5800000, fetch cycle of STR R0, [R0]
	shift_in[0] = 0xE5800000;				
	arm7tdmi_acs_sc1(shift_in, shift_out);

	//NOP, decode cycle of STR R0, [R0]
	shift_in[0] = ARM7TDMI_NOP;
	arm7tdmi_acs_sc1(shift_in, shift_out);

	//NOP, execute cycle STR R0, [R0]
	shift_in[0] = ARM7TDMI_NOP;
	arm7tdmi_acs_sc1(shift_in, shift_out);

	//NOP, now the value of R0 appears on the data bus
	shift_in[0] = ARM7TDMI_NOP;
	arm7tdmi_acs_sc1(shift_in, shift_out);

	*cur_val = shift_out[0];

	//Restore R0 before return
	arm7tdmi_core_wri_r0(r0);

	return XJ_OK;
}


//Write a specific core register
int arm7tdmi_core_wri_reg(int reg_idx, u32 new_val)
{
	int status;
	u32 r0;
	u32 cpsr;
	u32 shift_in[2];
	u32 shift_out[2];

	//In DEBUG state?
	if(arm7tdmi_status.state != ARM7TDMI_DEBUG_STATE)
		return XJERR_TARGET_RUNNING;
	
	//Check the validity of the register according to the register index
	if(reg_idx < ARM7TDMI_R0 || reg_idx > ARM7TDMI_SPSR)
		return XJERR_INVALID_COREREG;

	//Select scan chain 1
	if(arm7tdmi_status.scanchain != 1){
		status = arm7tdmi_connect_scanchain(1);
		if(status != XJ_OK)
			return status;
	}


	if(reg_idx == ARM7TDMI_R0){			//If R0 is the target, write and return
		arm7tdmi_core_wri_r0(new_val);
		return XJ_OK;
	}else{								//Else, backup R0 and write the new value to R0
		arm7tdmi_core_rd_r0(&r0);
		arm7tdmi_core_wri_r0(new_val);
	}
	
	//Execute all the instructions at the DEBUG speed
	shift_in[1] = ARM7TDMI_DEBUG_SPEED;

	if(reg_idx == ARM7TDMI_CPSR){		//WriteCPSR
		// MSR CPSR, R0 = 0xE12FF000
		shift_in[0] = 0xE12FF000;
	}else if(reg_idx == ARM7TDMI_SPSR){	//Write SPSR
		// Make sure SPSR is available
		arm7tdmi_core_rd_reg(ARM7TDMI_CPSR, &cpsr);
		if( (cpsr & 0x1F) == 0x10 || (cpsr & 0x1F) == 0x1F )
			return XJERR_COREREG_UNAVAILABLE;

		// MSR SPSR, R0 = 0xE16FF000
		shift_in[0] = 0xE16FF000;
	}else{								//Write R1-R15
		//MOV R?, R0 = 0xE1A0?000
		shift_in[0] = 0xE1A00000;		
		shift_in[0] |= ((reg_idx - ARM7TDMI_R0)*0x1000);
	}

	arm7tdmi_acs_sc1(shift_in, shift_out);

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

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

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

	//Restore R0 before return
	arm7tdmi_core_wri_r0(r0);

	return XJ_OK;
}


//Read all the core registers
int arm7tdmi_core_rd_all(void)
{
	int index;
	int status;
	u32 cpsr;
	u32 spsr;
	u32 shift_in[2];
	u32 shift_out[2];
	
	//In DEBUG state?
	if(arm7tdmi_status.state != ARM7TDMI_DEBUG_STATE)
		return XJERR_TARGET_RUNNING;
	
	//Select scan chain 1
	if(arm7tdmi_status.scanchain != 1){
		status = arm7tdmi_connect_scanchain(1);
		if(status != XJ_OK)
			return status;
	}
	

	//1. Read R0-R15

	//STM R0, {R0-R15} = 0xE880FFFF
	shift_in[0] = 0xE880FFFF;
	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);

	for(index = 0; index <= 15; index++){
		shift_in[0] = ARM7TDMI_NOP;
		shift_in[1] = ARM7TDMI_DEBUG_SPEED;
		arm7tdmi_acs_sc1(shift_in, shift_out);
		arm7tdmi_register[index][0] = shift_out[0];
	}

	//2. Read CPSR and SPSR
	status = arm7tdmi_core_rd_reg(ARM7TDMI_CPSR, &cpsr);
	if(status == XJ_OK)
		arm7tdmi_register[ARM7TDMI_CPSR][0] = cpsr;

	status = arm7tdmi_core_rd_reg(ARM7TDMI_SPSR, &spsr);
	if(status == XJ_OK)
		arm7tdmi_register[ARM7TDMI_SPSR][0] = spsr;

	for(index = 0; index <=17; index++)
		printf("0x%0.8x\n", arm7tdmi_register[index][0]);

	return XJ_OK;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美优质美女网站| 国内一区二区视频| 三级影片在线观看欧美日韩一区二区| 午夜精品成人在线视频| 久久机这里只有精品| 91一区二区三区在线观看| 欧美一区二区三区在线观看 | 一本久久综合亚洲鲁鲁五月天 | 91亚洲精品乱码久久久久久蜜桃| 91老师国产黑色丝袜在线| 8v天堂国产在线一区二区| 国产精品久久久久久一区二区三区 | 日韩电影免费一区| 成人午夜碰碰视频| 日韩精品一区二区三区视频播放| 亚洲一区自拍偷拍| 成人av电影在线| 2021中文字幕一区亚洲| 天堂va蜜桃一区二区三区漫画版| 国产成人一级电影| 国产精品系列在线| 九九九久久久精品| 国产精品伦理在线| 日韩专区一卡二卡| 欧美丝袜自拍制服另类| 中文字幕一区二区在线观看| 国产麻豆视频一区| 欧美精品一区二区高清在线观看| 午夜av电影一区| 91福利在线免费观看| 1024亚洲合集| 91日韩精品一区| 1024精品合集| 色婷婷国产精品久久包臀| 亚洲欧美国产毛片在线| 99久久99久久精品免费观看| 国产精品网友自拍| www..com久久爱| 亚洲日本va午夜在线影院| 色综合天天综合在线视频| 亚洲欧洲日韩女同| 色婷婷综合久久久久中文一区二区| 亚洲国产精品黑人久久久| 丁香激情综合五月| 日韩精品在线一区二区| 91在线精品一区二区| 国产精品丝袜久久久久久app| 精品综合免费视频观看| 日韩欧美国产午夜精品| 美女精品自拍一二三四| 久久影院午夜片一区| 成人午夜又粗又硬又大| 国产精品久久久久桃色tv| 色国产综合视频| 午夜久久久久久久久| 欧美videos中文字幕| 国产一区二区美女诱惑| 欧美国产成人精品| 在线观看免费亚洲| 秋霞影院一区二区| 久久精品欧美日韩精品| 99国产欧美另类久久久精品| 免费国产亚洲视频| 日本一区二区三区视频视频| 91视频观看视频| 日韩精品一区第一页| 久久久久久影视| 色综合中文字幕国产 | 一本久久综合亚洲鲁鲁五月天| 一区二区三区国产精华| 日韩一区二区三免费高清| 懂色av一区二区在线播放| 亚洲尤物在线视频观看| 精品剧情v国产在线观看在线| 国产成人一级电影| 午夜精品久久久久久久99水蜜桃| 久久天天做天天爱综合色| 在线视频国内自拍亚洲视频| 精久久久久久久久久久| 亚洲视频免费看| 精品国产免费人成电影在线观看四季| 成人黄色免费短视频| 免费精品视频在线| 亚洲日本护士毛茸茸| 精品国产乱码91久久久久久网站| 91在线小视频| 国产麻豆视频一区二区| 午夜久久电影网| 亚洲欧美在线高清| 欧美精品一区二区三区高清aⅴ | 国产精品不卡一区二区三区| 91精品免费在线观看| 99国产欧美另类久久久精品| 精品在线观看免费| 偷拍与自拍一区| 综合网在线视频| 久久精品视频在线看| 日韩欧美一级二级三级| 欧美日韩一级片在线观看| 92精品国产成人观看免费| 国产成人在线影院| 国产最新精品精品你懂的| 丝袜亚洲另类欧美| 亚洲国产中文字幕在线视频综合| 国产精品久久久久天堂| 国产欧美一区二区三区在线看蜜臀| 欧美一区二区黄色| 91精品国产丝袜白色高跟鞋| 欧美性视频一区二区三区| av动漫一区二区| 99热在这里有精品免费| 欧美猛男男办公室激情| 色噜噜偷拍精品综合在线| jizzjizzjizz欧美| 99re热这里只有精品免费视频 | 天堂影院一区二区| 天天综合天天综合色| 亚洲 欧美综合在线网络| 亚洲综合色区另类av| 一区二区三区四区激情| 亚洲欧美韩国综合色| 一区二区三区四区亚洲| 一区二区三区在线视频观看| 亚洲女爱视频在线| 亚洲黄色免费网站| 亚洲成a人v欧美综合天堂| 亚洲午夜久久久久久久久电影网| 亚洲国产综合在线| 日本在线不卡视频一二三区| 日韩精品午夜视频| 看电影不卡的网站| 国产一区二区精品久久| 国产精品一卡二| 99视频热这里只有精品免费| 99riav久久精品riav| 欧美视频中文字幕| 欧美一区二区免费观在线| 精品美女一区二区| 日本一区二区三区国色天香 | 亚洲乱码一区二区三区在线观看| 中文字幕一区二区三区在线不卡| 中文字幕乱码一区二区免费| 亚洲女同一区二区| 国产精品一区二区在线观看网站 | 国产偷国产偷亚洲高清人白洁| 国产亚洲精品aa| 亚洲欧美日韩电影| 免费看日韩精品| 成人激情av网| 69久久夜色精品国产69蝌蚪网| 亚洲精品一区二区精华| 亚洲图片欧美激情| 日本成人在线视频网站| 成人一级片网址| 欧美日韩国产高清一区二区| 久久色视频免费观看| 亚洲精选免费视频| 九九热在线视频观看这里只有精品| 99视频超级精品| 日韩美女主播在线视频一区二区三区| 国产欧美一区二区精品久导航| 一区二区三区美女| 国精产品一区一区三区mba桃花| 91在线一区二区三区| 91精品在线免费观看| 国产精品美日韩| 蜜桃视频一区二区三区在线观看| 成人综合婷婷国产精品久久免费| 欧美日韩二区三区| 国产精品视频一二三| 日韩国产成人精品| 色综合天天狠狠| 国产亚洲综合在线| 日韩国产欧美视频| 色综合久久久久久久久| 久久久久久久久久电影| 日日摸夜夜添夜夜添亚洲女人| www.欧美日韩| 国产视频一区二区在线| 奇米四色…亚洲| 欧美日韩国产首页| 亚洲色图欧洲色图婷婷| 国产盗摄一区二区三区| 91精品国产91久久久久久最新毛片| 亚洲视频香蕉人妖| 成人天堂资源www在线| 337p日本欧洲亚洲大胆精品| 五月激情综合网| 在线观看不卡视频| 亚洲欧美日韩久久精品| 成人黄动漫网站免费app| 久久久影视传媒| 久99久精品视频免费观看| 制服丝袜亚洲色图| 亚洲成人精品在线观看| 91黄视频在线| 一区二区三区电影在线播| 日本高清免费不卡视频| 亚洲色图在线播放| av网站免费线看精品|