📄 skyeye_mach_pxa270.c
字号:
#include <sys/time.h>#include <sys/types.h>#include <unistd.h>#include "armdefs.h"#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/* 2007-01-18 added by Anthony Lee : for new uart device frame */#include "skyeye_uart.h"//ywc,2004-11-30,declare a external array which stores touchscreen event informationextern unsigned int Pen_buffer[8]; // defined in skyeye_lcd.c//ywc,2004-11-30,declare a external array which stores touchscreen event information,end//chy 2005-09-19, the define of pxa27x_io_t is in pxa.h//static pxa270_io_t pxa270_io;pxa270_io_t pxa270_io;static void refresh_irq (ARMul_State *);static voidpxa270_io_reset (){ memset (&pxa270_io, 0, sizeof (pxa270_io)); //chy 2003-08-25 pxa270_io.cccr = 0x121; // 1 0010 0001 pxa270_io.cken = 0x17def; pxa270_io.ts_int = 1 << 15; pxa270_io.ts_addr_begin = 0x40000300; pxa270_io.ts_addr_end = 0x4000031f; //ywc,2004-11-30,evaluate io of LCD and Touchscreen,end};voidpxa270_io_write_byte (ARMul_State * state, ARMword addr, ARMword data){ return;}voidpxa270_io_write_halfword (ARMul_State * state, ARMword addr, ARMword data){ return;}staticpxa_set_intr (u32 interrupt){ pxa270_io.icpr |= (1 << interrupt);}static intpxa_pending_intr (u32 interrupt){ return ((pxa270_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; pxa270_io.icip = (pxa270_io.icmr & pxa270_io.icpr) & ~pxa270_io.iclr; pxa270_io.icfp = (pxa270_io.icmr & pxa270_io.icpr) & pxa270_io.iclr; state->NirqSig = pxa270_io.icip ? LOW : HIGH; state->NfiqSig = pxa270_io.icfp ? LOW : HIGH;}static voidpxa270_update_int (ARMul_State * state){ pxa270_io.icip = (pxa270_io.icmr & pxa270_io.icpr) & ~pxa270_io.iclr; pxa270_io.icfp = (pxa270_io.icmr & pxa270_io.icpr) & pxa270_io.iclr; state->NirqSig = pxa270_io.icip ? LOW : HIGH; state->NfiqSig = pxa270_io.icfp ? LOW : HIGH;}static voidpxa270_io_write_word (ARMul_State * state, ARMword addr, ARMword data){ pxa_ioregnum_t ioregaddr = addr; //ywc,2004-11-30,add for pxa's LCD simulation u32 tmp; mem_bank_t *mbp; //ywc,2004-11-30,add for pxa's LCD simulation,end //printf("SKYEYE:pxa270_io_write_word: io addr 0x%x, value 0x%x\n",ioregaddr,data); switch (ioregaddr) { /*RTC*/ case RCNR: pxa270_io.rcnr = data; break; case RTAR: pxa270_io.rtar = data; break; case RTSR: pxa270_io.rtsr |= (data & 0xc); pxa270_io.rtsr &= ~(data & 0x3); break; case RTTR: pxa270_io.rttr = data & 0x3ffffff; break; /*OS timer */ case OSCR: pxa270_io.oscr = data; break; case OSMR0: pxa270_io.osmr0 = data; break; case OSMR1: pxa270_io.osmr1 = data; break; case OSMR2: pxa270_io.osmr2 = data; break; case OSMR3: pxa270_io.osmr3 = data; break; case OWER: pxa270_io.ower |= data & 0x1; break; case OSSR: pxa270_io.ossr &= ~(data & 0xf); break; case OIER: pxa270_io.oier = data & 0xf; break; /*interrupt control */ //ywc,2004-11-30,for touchscreen use ICPR case ICPR: pxa270_io.icpr = data; //printf("\n write ICPR=%x",pxa270_io.icpr); //printf("\n"); break; //ywc,2004-11-30,for touchscreen use ICPR,end //case ICIP: //case ICFP: /*read only */ // break; case ICMR: pxa270_io.icmr = data; pxa270_io.icpr &= ~data; break; case ICLR: pxa270_io.iclr = data; break; //ffuart contril case FFTHR: { /*static tx_cnt=0; */ unsigned char c = data; /* 2007-01-18 modified by Anthony Lee : for new uart device frame */ skyeye_uart_write(-1, &c, 1, NULL); /*chy 2004-07-21 from luzhetao: after write char, should set some value */ pxa270_io.ffiir &= ~0x2; pxa270_io.ffiir |= 0x1; pxa270_io.fflsr &= ~0x60; //tx_cnt++; //pxa270_io.ffier|=0x2; /* if(tx_cnt>63){ tx_cnt=0; pxa270_io.ffiir|=0x2; pxa270_io.fflsr|=0x60; refresh_irq(state); } */ //printf("SKYEYE: write FFTHR %x, iir %x,lsr %x, ier %x\n",data, pxa270_io.ffiir,pxa270_io.fflsr,pxa270_io.ffier); } break; case FFIER: pxa270_io.ffier = data & 0xff; break; case FFFCR: //write only pxa270_io.fffcr = data & 0xc7; //pxa270_io.ffiir = data & 0xc7 ; //if(pxa270_io.fffcr & 2 //printf("SKYEYE: write FFFCR %x, but is ffiir %x\n",pxa270_io.fffcr,pxa270_io.ffiir); break; case FFLCR: pxa270_io.fflcr = data & 0xff; break; //core clock case CCCR: pxa270_io.cccr = data & 0x3ff; break; case CKEN: pxa270_io.cken = data & 0x17def; break; case OSCC: pxa270_io.oscc = data & 0x3; break; //ywc,2004-11-30,add for pxa's LCD simulation#if 0 case LCCR0: tmp = pxa270_io.lccr0; pxa270_io.lccr0 = data; if ((!(tmp & LCCR0_ENB)) && (pxa270_io.lccr0 & LCCR0_ENB)) { if (once) break; once++; /* printf("\nFDADR0=%x,FDADR1=%x",pxa270_io.fdadr0,pxa270_io.fdadr1); printf("\n"); pxa270_io.lcd_addr_begin = pxa270_io.fdadr0 + 16*(2+2); printf("\nlcd_addr_begin=%x",pxa270_io.lcd_addr_begin); printf("\n"); */ pxa270_update_lcd (state); } break; case LCCR1: pxa270_io.lccr1 = data; break; case LCCR2: pxa270_io.lccr2 = data; break; case LCCR3: pxa270_io.lccr3 = data; break; case FDADR0: pxa270_io.fdadr0 = data; //printf("\nFDADR0=%x",pxa270_io.fdadr0); //printf("\n"); /* mbp = bank_ptr(pxa270_io.fdadr0); if(!mbp){ fprintf(stderr, "No bank at address 0x%x", pxa270_io.fdadr0); return; } fdadr0ADDRESS=(u32 *) &state->mem.rom[mbp - skyeye_config.mem.mem_banks][(pxa270_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: pxa270_io.fdadr1 = data; //printf("\nFDADR1=%x",pxa270_io.fdadr1); //printf("\n"); break; case FSADR0: pxa270_io.fsadr0 = data; //printf("\nFSADR0=%x",pxa270_io.fsadr0); //printf("\n"); break; case FSADR1: pxa270_io.fsadr1 = data; //printf("\nFSADR1=%x",pxa270_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 //printf("SKYEYE: pxa270_io_write_word: unknown addr 0x%x, reg15 0x%x \n", addr,state->Reg[15]); ; };};ARMwordpxa270_io_read_byte (ARMul_State * state, ARMword addr){ return 0;}ARMwordpxa270_io_read_halfword (ARMul_State * state, ARMword addr){ return 0;}ARMwordpxa270_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; //printf("SKYEYE:pxa270_io_read_word: begin io addr 0x%x \n",ioregaddr); //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 >= pxa270_io.ts_addr_begin && ts_addr <= pxa270_io.ts_addr_end) { data = pxa270_io. ts_buffer[(ts_addr - pxa270_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 = pxa270_io.rcnr; break; case RTAR: data = pxa270_io.rtar; break; case RTSR: data = pxa270_io.rtsr; break; case RTTR: data = pxa270_io.rttr; break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -