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

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

?? skyeye_mach_ep9315.c

?? skyeye是一個可以模擬嵌入式硬件開發板的系統軟件
?? C
字號:
/*	skyeye_mach_ep9315.c - define machine ep9315 for skyeye	Copyright (C) 2003 Skyeye Develop Group	for help please send mail to <skyeye-developer@lists.sf.linuxforum.net> 		This program is free software; you can redistribute it and/or modify	it under the terms of the GNU General Public License as published by	the Free Software Foundation; either version 2 of the License, or	(at your option) any later version.	This program is distributed in the hope that it will be useful,	but WITHOUT ANY WARRANTY; without even the implied warranty of	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the	GNU General Public License for more details.	You should have received a copy of the GNU General Public License	along with this program; if not, write to the Free Software	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA  */#include "armdefs.h"#include "clps9312.h"#include "ep9315.h"#include "serial_amba.h"//zzc:2005-1-1#ifdef __CYGWIN__//chy 2005-07-28#include <time.h>//teawater add DBCT_TEST_SPEED 2005.10.04---------------------------------------/*struct timeval{	int tv_sec;	int tv_usec;};*///AJ2D--------------------------------------------------------------------------#endif/* 2007-01-18 added by Anthony Lee : for new uart device frame */#include "skyeye_uart.h"#define TC_DIVISOR	(50)	/* Set your BogoMips here :) */void ep9315_io_write_word (ARMul_State * state, ARMword addr, ARMword data);ARMword ep9315_io_read_word (ARMul_State * state, ARMword addr);#define NR_UART			3#define UART_FR_TXFE	(1<<7)#define UART_FR_RXFE	(1<<4)#define UART_IIR_RIS	(1<<1)#define UART_IIR_TIS	(1<<2)const int TCOI[2] = { 1 << 4, 1 << 5 };const int UART_RXINTR[3] = { 1 << 23, 1 << 25, 1 << 27 };const int UART_TXINTR[3] = { 1 << 24, 1 << 26, 1 << 28 };const int INT_UART[3] = { 1 << (52 - 32), 1 << (54 - 32), 1 << (55 - 32) };const int iConsole = 0;		//index of uart of serial console/*Internal IO Register*/typedef struct ep9315_io{	ARMword syscon_devcfg;	/* System control */	ARMword intsr[2];	/* Interrupt status reg */	ARMword intmr[2];	/* Interrupt mask reg */	struct ep9315_tc_io tc[4];	struct ep9315_uart_io uart[NR_UART];	int tc_prescale;} ep9315_io_t;static ep9315_io_t ep9315_io;#define io ep9315_iostatic voidep9315_update_int (ARMul_State * state){	ARMword requests = io.intsr[0] & io.intmr[0];	requests |= io.intsr[1] & io.intmr[1];	state->NfiqSig = (requests & 0x0001) ? LOW : HIGH;	state->NirqSig = (requests & 0xfffe) ? LOW : HIGH;}static voidep9315_io_reset (ARMul_State * state){	int i;	io.syscon_devcfg = 0;	io.intmr[0] = 0;	io.intmr[1] = 0;	/* reset TC register */	io.tc[0].value = 0;	io.tc[1].value = 0;	io.tc[2].value = 0;	io.tc[0].mod_value = 0xffff;	io.tc[1].mod_value = 0xffff;	io.tc[2].mod_value = 0xffffffff;	io.tc_prescale = TC_DIVISOR;	for (i = 0; i < NR_UART; i++) {		io.uart[i].dr = 0;		io.uart[i].fr = UART_FR_TXFE;	}}voidep9315_io_do_cycle (ARMul_State * state){	int i;	io.tc_prescale--;	if (io.tc_prescale < 0) {		io.tc_prescale = TC_DIVISOR;		/* We must implement TC1, TC2 and TC4 */		for (i = 0; i < 2; i++) {			if (io.tc[i].value == 0) {				if (io.tc[i].ctl & TC_CTL_MODE)					io.tc[i].value = io.tc[i].load;				else					io.tc[i].value = io.tc[i].mod_value;				io.intsr[0] |= TCOI[i];				ep9315_update_int (state);			}			else {				io.tc[i].value--;			}		}		io.tc[3].load++;		if (!(io.intsr[0] & (UART_RXINTR[iConsole]))		    && io.uart[iConsole].dr == 0) {			/* 2007-01-18 modified by Anthony Lee : for new uart device frame */			struct timeval tv;			unsigned char buf;			tv.tv_sec = 0;			tv.tv_usec = 0;			if(skyeye_uart_read(-1, &buf, 1, &tv, NULL) > 0)			{				io.uart[iConsole].dr = (int) buf;				io.intsr[0] |= UART_RXINTR[iConsole];				io.intmr[0] |= UART_RXINTR[iConsole];				io.intsr[1] |= INT_UART[iConsole];				io.intmr[1] |= INT_UART[iConsole];				io.uart[iConsole].iir |= UART_IIR_RIS;				io.uart[iConsole].fr &= ~UART_FR_RXFE;				ep9315_update_int (state);			}		}		//if (!(io.intsr & URXINT))	}}static voidep9315_uart_read (ARMul_State * state, u32 offset, u32 * data, int index){	switch (offset) {	case UART_DR:		*data = io.uart[index].dr;		io.uart[index].dr = 0;		io.intsr[0] &= ~(UART_RXINTR[index]);		io.intsr[1] &= ~(INT_UART[index]);		io.uart[index].iir &= ~UART_IIR_RIS;		io.uart[index].fr |= UART_FR_RXFE;		ep9315_update_int (state);		break;	case UART_RSR:		*data = io.uart[index].rsr;		break;		//case UART_ECR:	case UART_CR_H:	case UART_CR_M:	case UART_CR_L:		break;	case UART_CR:		*data = io.uart[index].cr;		break;	case UART_FR:		*data = io.uart[index].fr;		break;	case UART_IIR:		*data = io.uart[index].iir;		break;		//case UART_ICR:	case UART_ILPR:	case UART_DMACR:	case UART_TCR:	case UART_TISR:	case UART_TOCR:	case UART_TMR:	case UART_MCR:	case UART_MSR:		break;	default:		SKYEYE_DBG ("%s(0x%x, 0x%x)\n", __func__, offset, data);		break;	}}static voidep9315_uart_write (ARMul_State * state, u32 offset, u32 data, int index){	switch (offset) {	case UART_DR:		{			char c = data;#if 0			write (skyeye_config.uart.fd_out, &c, 1);#else			/* 2007-01-18 modified by Anthony Lee : for new uart device frame */			skyeye_uart_write(-1, &c, 1, NULL);#endif		}	case UART_RSR:		//case UART_ECR:	case UART_CR_H:	case UART_CR_M:	case UART_CR_L:		break;	case UART_CR:		{			io.uart[index].cr = data;			if ((data & AMBA_UARTCR_TIE) == 0) {				io.intmr[0] &= ~(UART_TXINTR[index]);				io.intsr[0] &= ~(UART_TXINTR[index]);				io.intsr[1] &= ~(INT_UART[index]);				io.intmr[1] &= ~(INT_UART[index]);				io.uart[index].iir &= ~(UART_IIR_TIS);	//Interrupt Identification and Clear			}			else {				io.intmr[0] |= (UART_TXINTR[index]);				io.intsr[0] |= (UART_TXINTR[index]);				io.intsr[1] = (INT_UART[index]);				io.intmr[1] = (INT_UART[index]);				io.uart[index].iir |= (UART_IIR_TIS);			}			ep9315_update_int (state);		}		break;	case UART_FR:	case UART_IIR:		io.uart[index].iir = data;		break;		//case UART_ICR:	case UART_ILPR:	case UART_DMACR:	case UART_TCR:	case UART_TISR:	case UART_TOCR:	case UART_TMR:	case UART_MCR:	case UART_MSR:		break;	default:		SKYEYE_DBG ("%s(0x%x, 0x%x)\n", __func__, offset, data);	}}/* Timer read/write register  */static voidep9315_tc_read (u32 offset, u32 * data, int index){	if (index == 4) {		if (offset == TC_VALUELOW)			*data = io.tc[index].load;		else if (offset == TC_VALUEHIGH)			*data = io.tc[index].value;	}	switch (offset) {	case TC_LOAD:		*data = io.tc[index].load;		break;	case TC_VALUE:		*data = io.tc[index].value;		break;	case TC_CTL:		*data = io.tc[index].ctl;		break;	case TC_CLEAR:		SKYEYE_DBG ("%s(0x%x, 0x%x): read WO register\n", __func__,			    offset, data);		break;	default:		SKYEYE_DBG ("%s(0x%x, 0x%x)\n", __func__, offset, data);		break;	}}static voidep9315_tc_write (ARMul_State * state, u32 offset, u32 data, int index){	switch (offset) {	case TC_LOAD:		io.tc[index].load = data;		break;	case TC_VALUE:		SKYEYE_DBG ("%s(0x%x, 0x%x): write RO register\n", __func__,			    offset, data);		break;	case TC_CTL:		io.tc[index].ctl = data;		break;	case TC_CLEAR:		io.intsr[0] &= ~TCOI[index];		ep9315_update_int (state);		break;	default:		SKYEYE_DBG ("%s(0x%x, 0x%x)\n", __func__, offset, data);		break;	}}ARMwordep9315_io_read_byte (ARMul_State * state, ARMword addr){	return ep9315_io_read_word (state, addr);}ARMwordep9315_io_read_halfword (ARMul_State * state, ARMword addr){	SKYEYE_DBG ("SKYEYE: %s error\n", __func__);}ARMwordep9315_io_read_word (ARMul_State * state, ARMword addr){	ARMword data = 0;	/* TC1 */	if ((addr >= EP9315_TC_BASE1) &&	    (addr < (EP9315_TC_BASE1 + EP9315_TC_SIZE))) {		ep9315_tc_read ((u32) (addr - EP9315_TC_BASE1),				(u32 *) & data, 0);	}	/* TC2 */	if ((addr >= EP9315_TC_BASE4) &&	    (addr < (EP9315_TC_BASE4 + EP9315_TC_SIZE))) {		ep9315_tc_read ((u32) (addr - EP9315_TC_BASE4),				(u32 *) & data, 3);	}	/* UART1 */	if ((addr >= EP9315_UART_BASE1) &&	    (addr < (EP9315_UART_BASE1 + EP9315_UART_SIZE))) {		ep9315_uart_read (state, (u32) (addr - EP9315_UART_BASE1),				  (u32 *) & data, 0);		return data;	}	/* UART3 */	if ((addr >= EP9315_UART_BASE3) &&	    (addr < (EP9315_UART_BASE3 + EP9315_UART_SIZE))) {		ep9315_uart_read (state, (u32) (addr - EP9315_UART_BASE3),				  (u32 *) & data, 2);		return data;	}	switch (addr) {	case SYSCON_PWRCNT:		break;	case VIC0INTENABLE:		data = io.intmr[0];//              printf("%s(0x%08x) = 0x%08x\n", __func__, addr, data);		break;	case VIC0IRQSTATUS:		data = io.intsr[0];		io.intsr[0] = 0;	//!!!		break;	case VIC1IRQSTATUS:		data = io.intsr[1];		io.intsr[1] = 0;		break;	case RTCDR:	case AACGCR:	case AACRGIS://              printf("%s(0x%08x) = 0x%08x\n", __func__, addr, data);		break;	case SYSCON_DEVCFG:		data = io.syscon_devcfg;		break;	default:		SKYEYE_DBG ("SKYEYE:unknown io addr, %s(0x%08x) = 0x%08x\n",			    __func__, addr, data);		break;	}	return data;}voidep9315_io_write_byte (ARMul_State * state, ARMword addr, ARMword data){	ep9315_io_write_word (state, addr, data);}voidep9315_io_write_halfword (ARMul_State * state, ARMword addr, ARMword data){	SKYEYE_DBG ("SKYEYE: %s error\n", __func__);}voidep9315_io_write_word (ARMul_State * state, ARMword addr, ARMword data){	ARMword tmp;	if ((addr >= EP9315_TC_BASE1) &&	    (addr < (EP9315_TC_BASE1 + EP9315_TC_SIZE))) {		ep9315_tc_write (state, (u32) (addr - EP9315_TC_BASE1), data,				 0);	}	if ((addr >= EP9315_UART_BASE1) &&	    (addr < (EP9315_UART_BASE1 + EP9315_UART_SIZE))) {		ep9315_uart_write (state, (u32) (addr - EP9315_UART_BASE1),				   data, 0);	}	if ((addr >= EP9315_UART_BASE3) &&	    (addr < (EP9315_UART_BASE3 + EP9315_UART_SIZE))) {		ep9315_uart_write (state, (u32) (addr - EP9315_UART_BASE3),				   data, 2);	}	switch (addr) {	case SYSCON_CLKSET1:		break;	case SYSCON_CLKSET2:	case SYSCON_PWRCNT:		break;	case VIC0INTENABLE:		io.intmr[0] = data;		if (data != 0x10 && data != 0x20)			printf ("SKYEYE: write VIC0INTENABLE=0x%x\n", data);		ep9315_update_int (state);		break;	case VIC1INTENABLE:		io.intmr[1] = data;//              printf("SKYEYE: write VIC1INTENABLE=0x%x\n", data);		ep9315_update_int (state);		break;	case VIC0INTENCLEAR:		io.intmr[0] ^= data;		ep9315_update_int (state);		break;	case VIC1INTENCLEAR:		io.intmr[1] ^= data;		ep9315_update_int (state);		break;	case SYSCON_DEVCFG:		io.syscon_devcfg = data;		break;	default:		SKYEYE_DBG			("SKYEYE:unknown io addr, %s(0x%08x, 0x%08x), pc %x \n",			 __func__, addr, data, state->Reg[15]);		break;	}}voidep9315_mach_init (ARMul_State * state, machine_config_t * this_mach){	ARMul_SelectProcessor (state, ARM_v4_Prop);	/* ARM920T uses LOW */	state->lateabtSig = LOW;//      state->Reg[1] = 282;    //for EP9315 2.4.x arch id	state->Reg[1] = 451;	//for EP9315 2.6.x arch id	this_mach->mach_io_do_cycle = ep9315_io_do_cycle;	this_mach->mach_io_reset = ep9315_io_reset;	this_mach->mach_io_read_byte = ep9315_io_read_byte;	this_mach->mach_io_write_byte = ep9315_io_write_byte;	this_mach->mach_io_read_halfword = ep9315_io_read_halfword;	this_mach->mach_io_write_halfword = ep9315_io_write_halfword;	this_mach->mach_io_read_word = ep9315_io_read_word;	this_mach->mach_io_write_word = ep9315_io_write_word;	this_mach->mach_update_int = ep9315_update_int;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一级二级| 91免费版在线| 日韩极品在线观看| 亚洲二区在线视频| 亚洲高清在线视频| 婷婷国产在线综合| 日韩高清欧美激情| 美女一区二区久久| 久久精品二区亚洲w码| 日韩精品久久理论片| 日韩国产在线一| 蜜臀av国产精品久久久久| 蜜臀av性久久久久蜜臀av麻豆| 首页亚洲欧美制服丝腿| 视频一区视频二区中文| 日韩va亚洲va欧美va久久| 麻豆91精品视频| 国产精品99久久久久久久vr| 国产成人在线视频网址| 不卡视频免费播放| 97se狠狠狠综合亚洲狠狠| 色88888久久久久久影院按摩 | 午夜日韩在线电影| 六月婷婷色综合| 成人免费视频一区| 欧美私人免费视频| 欧美一区二区日韩一区二区| 精品粉嫩超白一线天av| 中文字幕乱码一区二区免费| 一区二区三区欧美日| 日本在线不卡视频| 成人免费毛片app| 欧美天堂一区二区三区| 久久婷婷综合激情| 夜夜夜精品看看| 国产一区二区精品久久91| 91天堂素人约啪| 欧美大片一区二区| 亚洲青青青在线视频| 丝袜美腿亚洲综合| caoporen国产精品视频| 欧美一区二区三区喷汁尤物| 国产精品不卡一区二区三区| 日韩精品电影一区亚洲| 欧美日韩一级视频| 亚洲精品一区二区三区在线观看| 亚洲美女视频在线观看| 国产美女在线精品| 在线电影院国产精品| 中文字幕一区二区视频| 国模一区二区三区白浆| 欧美日韩国产一级片| 国产精品久久看| 狠狠网亚洲精品| 欧美巨大另类极品videosbest| 国产精品你懂的在线欣赏| 日韩二区三区四区| 欧美视频在线播放| 亚洲激情av在线| www.欧美日韩国产在线| 久久亚洲影视婷婷| 精品一区二区三区在线播放| 欧美日韩精品一区二区三区四区| 国产精品久久久久影院| 国产呦萝稀缺另类资源| 日韩精品最新网址| 日韩**一区毛片| 欧美狂野另类xxxxoooo| 亚洲国产成人91porn| 91国偷自产一区二区开放时间| 中文一区二区在线观看| 国产精品一级片| 久久久久久久久久久久久女国产乱 | 亚洲精品国产一区二区精华液 | av不卡免费在线观看| 久久精品欧美一区二区三区不卡| 麻豆一区二区99久久久久| 在线播放欧美女士性生活| 国产呦精品一区二区三区网站| 日韩欧美中文字幕制服| 免费人成精品欧美精品| 欧美一区二区三区婷婷月色| 天天综合天天做天天综合| 7777精品伊人久久久大香线蕉 | 91精品国产综合久久香蕉麻豆| 亚洲自拍偷拍欧美| 欧美日韩电影在线播放| 秋霞午夜av一区二区三区| 欧美日韩精品一区二区三区| 日韩精品乱码免费| 91精品国产免费久久综合| 精品一区二区三区免费| 国产亚洲一区字幕| 不卡视频一二三| 亚洲国产欧美在线| 日韩亚洲欧美成人一区| 久久99精品国产麻豆不卡| 国产亚洲精品bt天堂精选| 成人国产精品视频| 亚洲猫色日本管| 欧美电影一区二区| 国产大片一区二区| 亚洲激情校园春色| 欧美高清视频一二三区| 久久 天天综合| 亚洲视频免费在线观看| 欧美精品色综合| 国产精品996| 伊人婷婷欧美激情| 日韩三级精品电影久久久 | 国产性做久久久久久| 91国产成人在线| 国产一区二区三区在线观看免费视频 | 色香蕉久久蜜桃| 蜜臀av一区二区| 亚洲欧美乱综合| 精品国产乱码久久久久久牛牛| 成人a免费在线看| 日本三级亚洲精品| 亚洲欧洲国产日韩| 欧美mv日韩mv| 欧美日韩一区二区在线视频| 国产一区免费电影| 亚洲成人在线观看视频| 国产精品私房写真福利视频| 欧美三级韩国三级日本三斤| 从欧美一区二区三区| 日韩精品福利网| 亚洲精品成a人| 国产丝袜在线精品| 日韩精品一区二区三区中文不卡 | 午夜精品福利视频网站| 亚洲国产精品成人综合| 精品国产免费久久| 91精品黄色片免费大全| 欧美性色黄大片手机版| 成人综合婷婷国产精品久久免费| 日韩精品色哟哟| 亚洲午夜久久久久久久久久久| 日本一区二区三区dvd视频在线 | 久久综合九色综合久久久精品综合| 欧美综合色免费| 色女孩综合影院| 不卡在线视频中文字幕| 成人激情免费电影网址| 国产美女视频一区| 国产一区二区三区免费观看| 毛片av一区二区| 奇米一区二区三区av| 午夜视频在线观看一区| 一区二区三区.www| 亚洲色图20p| 亚洲色欲色欲www在线观看| 国产午夜精品久久久久久免费视| 精品日韩欧美在线| 久久一区二区三区国产精品| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 日韩一区在线看| 中文字幕一区二区三区视频 | 一个色妞综合视频在线观看| 亚洲免费观看视频| 亚洲国产精品久久久男人的天堂| 一区二区在线观看免费视频播放| 尤物av一区二区| 亚洲1区2区3区视频| 日韩av一二三| 韩国女主播一区二区三区| 国产精品一区二区视频| aaa亚洲精品| 欧美色涩在线第一页| 欧美一区二区三区白人 | 高清不卡一区二区在线| 成人黄色软件下载| 欧美午夜精品免费| 91精品国产福利| 国产日韩欧美精品在线| 亚洲女与黑人做爰| 午夜在线成人av| 国产精品一卡二| 91视视频在线观看入口直接观看www | 在线观看精品一区| 欧美一级在线视频| 国产精品久久久久久一区二区三区| 亚洲欧美另类图片小说| 首页亚洲欧美制服丝腿| 国产精品综合网| 色丁香久综合在线久综合在线观看| 在线播放中文字幕一区| 国产无遮挡一区二区三区毛片日本| 亚洲天堂av老司机| 老司机午夜精品99久久| 99精品1区2区| 精品国产精品网麻豆系列 | 天天综合色天天综合| 丁香六月久久综合狠狠色| 欧美日韩一区二区在线视频| 久久久99精品免费观看| 午夜欧美2019年伦理| av在线免费不卡| 精品成人在线观看|