⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skyeye_mach_pxa250.c

📁 skyeye-1.2-RC7-3的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <sys/time.h>#include <sys/types.h>#include <unistd.h>//koodailar add for mingw 2005.12.18 ----------------------------------------#ifdef __MINGW32__#include "arch/arm/common/armdefs.h"#include "utils/stub/mingw_help.h"#else#include "armdefs.h"#endif// end ----------------------------------------------------------------------#include "pxa.h"/*ywc 2005-03-30*/#include "skyeye_flash.h"#define F_CORE (100 * 1024 * 1024)	//core frequence#define F_RTC 32768		//RTC#define F_OS	3686400		//OS timer#define RT_SCALE (F_CORE / F_RTC) / 50#define OS_SCALE (F_CORE / F_OS / 10) / 50#define FF_SCALE	200	//FF UART//ywc,2004-11-30,declare a external array which stores touchscreen event informationextern unsigned long Pen_buffer[8];	// defined in skyeye_lcd.c//ywc,2004-11-30,declare a external array which stores touchscreen event information,end//chy:  lubbock, cerf, idp are different board// I can add a union to cover the difference in the future//chy:  refer to linux/include/asm-arm/arch-pxa/pxa-regs.h//chy 2005-09-19, the define of pxa27x_io_t is in pxa.hstatic pxa250_io_t pxa250_io;static void refresh_irq (ARMul_State *);static voidpxa250_io_reset (){	memset (&pxa250_io, 0, sizeof (pxa250_io));	//chy 2003-08-25	pxa250_io.cccr = 0x121;	// 1 0010 0001	pxa250_io.cken = 0x17def;	pxa250_io.ts_int = 1 << 15;	pxa250_io.ts_addr_begin = 0x40000300;	pxa250_io.ts_addr_end = 0x4000031f;	//ywc,2004-11-30,evaluate io of LCD and Touchscreen,end};voidpxa250_io_write_byte (ARMul_State * state, ARMword addr, ARMword data){	return;}voidpxa250_io_write_halfword (ARMul_State * state, ARMword addr, ARMword data){	return;}pxa_set_intr (u32 interrupt){	pxa250_io.icpr |= (1 << interrupt);}static intpxa_pending_intr (u32 interrupt){	return ((pxa250_io.icpr & (1 << interrupt)));}static voidpxa_update_intr (void *mach){	struct machine_config *mc = (struct machine_config *) mach;	ARMul_State *state = (ARMul_State *) mc->state;	pxa250_io.icip = (pxa250_io.icmr & pxa250_io.icpr) & ~pxa250_io.iclr;	pxa250_io.icfp = (pxa250_io.icmr & pxa250_io.icpr) & pxa250_io.iclr;	state->NirqSig = pxa250_io.icip ? LOW : HIGH;	state->NfiqSig = pxa250_io.icfp ? LOW : HIGH;}static voidpxa250_update_int (ARMul_State * state){	pxa250_io.icip = (pxa250_io.icmr & pxa250_io.icpr) & ~pxa250_io.iclr;	pxa250_io.icfp = (pxa250_io.icmr & pxa250_io.icpr) & pxa250_io.iclr;	state->NirqSig = pxa250_io.icip ? LOW : HIGH;	state->NfiqSig = pxa250_io.icfp ? LOW : HIGH;}static voidpxa250_io_write_word (ARMul_State * state, ARMword addr, ARMword data){	pxa_ioregnum_t ioregaddr = addr;	//printf("SKYEYE:pxa250_io_write_word: io addr 0x%x, RCNR 0x%x\n",ioregaddr,RCNR);	switch (ioregaddr) {	 /*RTC*/ case RCNR:		pxa250_io.rcnr = data;		break;	case RTAR:		pxa250_io.rtar = data;		break;	case RTSR:		pxa250_io.rtsr |= (data & 0xc);		pxa250_io.rtsr &= ~(data & 0x3);		break;	case RTTR:		pxa250_io.rttr = data & 0x3ffffff;		break;		/*OS timer */	case OSCR:		pxa250_io.oscr = data;		break;	case OSMR0:		pxa250_io.osmr0 = data;		break;	case OSMR1:		pxa250_io.osmr1 = data;		break;	case OSMR2:		pxa250_io.osmr2 = data;		break;	case OSMR3:		pxa250_io.osmr3 = data;		break;	case OWER:		pxa250_io.ower |= data & 0x1;		break;	case OSSR:		/* When the status register is updated, the		   results are seen immediately in the icpr */		pxa250_io.ossr &= ~(data & 0xf);		pxa250_io.icpr &= ~(0xf << OS_IRQ_SHF);		pxa250_io.icpr |= (pxa250_io.ossr << OS_IRQ_SHF);		break;	case OIER:		pxa250_io.oier = data & 0xf;		break;		/*interrupt control */		//ywc,2004-11-30,for touchscreen use ICPR	case ICPR:		/*read only - see 4.2.2.5 Intel PXA255 Processor Developer's Manual */		break;	case ICMR:		pxa250_io.icmr = data;		break;	case ICLR:		pxa250_io.iclr = data;		break;		//ffuart contril	case FFTHR:		{		/*static tx_cnt=0; */			unsigned char c = data;			write (skyeye_config.uart.fd_out, &c, 1);			/*chy 2004-07-21 from luzhetao: after write char, should set some value */			pxa250_io.ffiir &= ~0x2;			pxa250_io.ffiir |= 0x1;			pxa250_io.fflsr &= ~0x60;			//tx_cnt++;			//pxa250_io.ffier|=0x2;			/*			   if(tx_cnt>63){			   tx_cnt=0;			   pxa250_io.ffiir|=0x2;			   pxa250_io.fflsr|=0x60;			   refresh_irq(state);			   }			 */			//printf("SKYEYE: write FFTHR %x, iir %x,lsr %x, ier %x\n",data, pxa250_io.ffiir,pxa250_io.fflsr,pxa250_io.ffier);		}		break;	case FFIER:		pxa250_io.ffier = data & 0xff;		break;	case FFFCR:		//write only		pxa250_io.fffcr = data & 0xc7;		//pxa250_io.ffiir = data & 0xc7 ;		//if(pxa250_io.fffcr & 2		//printf("SKYEYE: write FFFCR %x, but is ffiir %x\n",pxa250_io.fffcr,pxa250_io.ffiir);		break;	case FFLCR:		pxa250_io.fflcr = data & 0xff;		break;		//core clock 	case CCCR:		pxa250_io.cccr = data & 0x3ff;		break;	case CKEN:		pxa250_io.cken = data & 0x17def;		break;	case OSCC:		pxa250_io.oscc = data & 0x3;		break;		//ywc,2004-11-30,add for pxa's LCD simulation#if 0	case LCCR0:		tmp = pxa250_io.lccr0;		pxa250_io.lccr0 = data;		if ((!(tmp & LCCR0_ENB)) && (pxa250_io.lccr0 & LCCR0_ENB)) {			if (once)				break;			once++;			/*			   printf("\nFDADR0=%x,FDADR1=%x",pxa250_io.fdadr0,pxa250_io.fdadr1);			   printf("\n");			   pxa250_io.lcd_addr_begin = pxa250_io.fdadr0 + 16*(2+2);			   printf("\nlcd_addr_begin=%x",pxa250_io.lcd_addr_begin);			   printf("\n");			 */			pxa250_update_lcd (state);		}		break;	case LCCR1:		pxa250_io.lccr1 = data;		break;	case LCCR2:		pxa250_io.lccr2 = data;		break;	case LCCR3:		pxa250_io.lccr3 = data;		break;	case FDADR0:		pxa250_io.fdadr0 = data;		//printf("\nFDADR0=%x",pxa250_io.fdadr0);		//printf("\n");		/*      		   mbp = bank_ptr(pxa250_io.fdadr0); 		   if(!mbp){		   fprintf(stderr, "No bank at address 0x%x", pxa250_io.fdadr0);		   return;		   }   		   fdadr0ADDRESS=(u32 *) &state->mem.rom[mbp - skyeye_config.mem.mem_banks][(pxa250_io.fdadr0 - mbp->addr)];		   printf("\n %p",fdadr0ADDRESS);		 */		//       printf("\n 0: %x",*((u32 *)fdadr0ADDRESS));		//       printf("\n 1: %x",*((u32 *)fdadr0ADDRESS+1));		//       printf("\n 2: %x",*((u32 *)fdadr0ADDRESS+2));		//       printf("\n 3: %x",*((u32 *)fdadr0ADDRESS+3));		//printf("\n");		break;	case FDADR1:		pxa250_io.fdadr1 = data;		//printf("\nFDADR1=%x",pxa250_io.fdadr1);		//printf("\n");		break;	case FSADR0:		pxa250_io.fsadr0 = data;		//printf("\nFSADR0=%x",pxa250_io.fsadr0);		//printf("\n");		break;	case FSADR1:		pxa250_io.fsadr1 = data;		//printf("\nFSADR1=%x",pxa250_io.fsadr1);		//printf("\n");		break;#endif		//ywc,2004-11-30,add for pxa's LCD simulation,end#if 0	case FFIIR:		//read only	case FFMCR:		//no use                   	case FFMSR:		//read only no use	case FFSPR:		// no use	case FFISR:		// no use#endif	default:		//chy 2003-09-03 if debug, uncommit it		//log_msg("SKYEYE: pxa250_io_write_word: unknown addr 0x%x, reg15 0x%x \n", addr,state->Reg[15]);		;	};};ARMwordpxa250_io_read_byte (ARMul_State * state, ARMword addr){	return 0;}ARMwordpxa250_io_read_halfword (ARMul_State * state, ARMword addr){	return 0;}ARMwordpxa250_io_read_word (ARMul_State * state, ARMword addr){	u32 data;	pxa_ioregnum_t ioregaddr = addr;	//ywc,2004-11-30,add for pxa's Touchscreen simulation	u32 ts_addr;	//ywc,2004-11-30,add for pxa's Touchscreen simulation,end	//ywc 2004-11-30 read the touch srceen data buffer,return to the ts device driver	ts_addr = addr & ~3;	// 1 word==4 byte	if (ts_addr >= pxa250_io.ts_addr_begin	    && ts_addr <= pxa250_io.ts_addr_end) {		data = pxa250_io.			ts_buffer[(ts_addr - pxa250_io.ts_addr_begin) / 4];		return data;	}	//ywc 2004-11-30 read the touch srceen data buffer,return to the ts device driver,end	switch (addr) {	 /*RTC*/ case RCNR:		data = pxa250_io.rcnr;		break;	case RTAR:		data = pxa250_io.rtar;		break;	case RTSR:		data = pxa250_io.rtsr;		break;	case RTTR:		data = pxa250_io.rttr;		break;		/*OS timer */	case OSCR:		data = pxa250_io.oscr;		break;	case OSMR0:		data = pxa250_io.osmr0;		break;	case OSMR1:		data = pxa250_io.osmr1;		break;	case OSMR2:		data = pxa250_io.osmr2;		break;	case OSMR3:		data = pxa250_io.osmr3;		break;	case OWER:		data = pxa250_io.ower;		break;	case OSSR:		data = pxa250_io.ossr;		break;	case OIER:		data = pxa250_io.oier;		break;		/*interrupt controler */	case ICPR:		data = pxa250_io.icpr;		break;	case ICIP:		data = (pxa250_io.icmr & pxa250_io.icpr) & ~pxa250_io.iclr;		break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -