亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美日韩中文字幕一区| 亚洲欧洲另类国产综合| 国产亚洲欧美激情| 亚洲国产wwwccc36天堂| 国产精品1区2区3区| 欧美三区在线视频| 国产精品久久久久三级| 国产麻豆精品在线| 日韩欧美视频一区| 亚洲国产精品一区二区www| 不卡欧美aaaaa| 国产日韩欧美麻豆| 国产一区二区按摩在线观看| 91精品在线免费| 午夜精品久久久久久| jlzzjlzz亚洲女人18| 久久精品视频在线看| 麻豆精品精品国产自在97香蕉| 色综合久久天天| 国产精品久久777777| 国产大陆a不卡| 久久综合狠狠综合久久激情 | 亚洲午夜视频在线| 99久久综合国产精品| 国产日韩影视精品| 国产老肥熟一区二区三区| 91精品黄色片免费大全| 亚洲va在线va天堂| 欧美日韩高清一区| 日韩中文字幕一区二区三区| 欧洲在线/亚洲| 一区二区三区日本| 93久久精品日日躁夜夜躁欧美| 日本一二三不卡| 成人免费不卡视频| 国产精品网曝门| av在线播放不卡| ●精品国产综合乱码久久久久 | 国产精品久久三| 不卡的看片网站| 中文字幕亚洲成人| 在线观看亚洲精品| 日本欧美一区二区在线观看| 欧美一区二区不卡视频| 久久国产剧场电影| 国产视频在线观看一区二区三区 | 国产精品久久久久久亚洲毛片| 国产高清在线精品| 国产精品国产a| 欧美日韩一区国产| 免费av成人在线| 国产欧美日韩综合精品一区二区| 成人免费高清在线| 亚洲免费色视频| 欧美精品第1页| 国产精品996| 一区二区三区欧美| 日韩欧美一区电影| 丰满亚洲少妇av| 亚洲国产美女搞黄色| 337p日本欧洲亚洲大胆色噜噜| 国产精品91一区二区| 亚洲综合av网| 久久久久久久久久久电影| 91亚洲男人天堂| 日韩中文字幕1| 国产欧美视频一区二区| 欧美揉bbbbb揉bbbbb| 国产精品18久久久| 性感美女久久精品| 中文字幕亚洲在| 欧美日本精品一区二区三区| 国产精品综合视频| 五月天亚洲婷婷| 成人欧美一区二区三区小说| 欧美人体做爰大胆视频| 成人国产精品免费网站| 美女在线观看视频一区二区| **欧美大码日韩| 精品国产91久久久久久久妲己 | 高清在线观看日韩| 午夜精品免费在线观看| 国产三级一区二区三区| 欧美久久免费观看| 91社区在线播放| 国产乱妇无码大片在线观看| 亚洲成av人片www| 国产精品大尺度| 久久天堂av综合合色蜜桃网| 欧美日韩在线播放三区| 99久久久精品| 国产99精品国产| 青青国产91久久久久久| 亚洲影视在线观看| 亚洲人妖av一区二区| 久久久久久久久久看片| 日韩精品在线网站| 91精品久久久久久久久99蜜臂| 一本大道久久a久久综合| 成人免费高清在线观看| 国产成人亚洲精品青草天美| 久久99精品久久久久久动态图| 亚洲第一福利一区| 亚洲午夜电影在线观看| 一级日本不卡的影视| 综合中文字幕亚洲| 国产精品成人在线观看| 亚洲欧洲日本在线| 一色屋精品亚洲香蕉网站| 国产亚洲制服色| 精品久久久三级丝袜| 精品国产不卡一区二区三区| 欧美一区二区三区日韩视频| 欧美军同video69gay| 在线播放欧美女士性生活| 欧美伦理电影网| 日韩欧美一级二级三级久久久| 日韩一区二区视频| 精品国产免费久久| 久久婷婷久久一区二区三区| 欧美极品美女视频| 亚洲日本在线观看| 午夜精品久久久久久久99樱桃| 日本成人在线一区| 精品一区二区三区不卡| 国产在线播精品第三| 成人国产精品免费| 精品污污网站免费看| 欧美一区永久视频免费观看| 精品久久久久久久人人人人传媒| 精品理论电影在线观看| 国产精品蜜臀av| 亚洲高清在线精品| 麻豆91在线播放| 成人中文字幕在线| 欧美亚洲国产bt| 日韩精品一区二区三区在线 | 久久青草欧美一区二区三区| 久久精品一区二区三区四区| 国产精品毛片久久久久久久| 亚洲老妇xxxxxx| 美国一区二区三区在线播放| 国产在线日韩欧美| 91丨九色丨黑人外教| 欧美日韩一区二区三区不卡| 精品国产网站在线观看| 亚洲婷婷国产精品电影人久久| 天堂在线一区二区| 播五月开心婷婷综合| 欧美三级电影精品| 欧美激情在线看| 日韩影视精彩在线| 成人动漫视频在线| 日韩一区二区三免费高清| 中文字幕在线不卡一区| 日韩国产在线观看| av中文字幕在线不卡| 91精品国产麻豆国产自产在线| 国产人成一区二区三区影院| 亚洲国产色一区| 国产高清成人在线| 欧美高清视频www夜色资源网| 亚洲精品在线三区| 亚洲一线二线三线久久久| 国产黑丝在线一区二区三区| 777奇米四色成人影色区| 中文字幕一区免费在线观看| 免费成人在线视频观看| 欧美性感一类影片在线播放| 久久精品欧美一区二区三区不卡 | 亚洲一级二级三级在线免费观看| 久久国产视频网| 欧美日韩国产美女| 中文字幕在线免费不卡| 精品一区二区日韩| 欧美放荡的少妇| 亚洲精品大片www| jlzzjlzz欧美大全| 久久亚洲二区三区| 秋霞电影一区二区| 欧美日韩色一区| 一区二区三区精品久久久| 国产.欧美.日韩| 欧美极品xxx| 国产成人精品亚洲日本在线桃色 | 欧美成人女星排名| 亚洲成a人v欧美综合天堂| 色天天综合色天天久久| 日本一区二区动态图| 国产精品资源网站| 精品国产乱码久久久久久免费| 丝袜美腿亚洲一区二区图片| 欧美色网站导航| 亚洲资源在线观看| 欧洲人成人精品| 亚洲一区二区三区四区在线 | 日韩精品五月天| 欧美日韩国产综合草草| 香蕉久久一区二区不卡无毒影院| 91黄色激情网站|