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

📄 skyeye_mach_s3c4510b.c

📁 skyeye-1.2-RC7-3的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
														(INT_UARTRX1);														s3c4510b_update_int (state);														return;													}												}											}										}									}									s3c4510b_update_int (state);								}								#endif								//end koodailar 2005.12.18---------------------------------------------------								/* IO Read Routine								* */								ARMword								s3c4510b_io_read_byte (ARMul_State * state, ARMword addr)								{									//printf("SKYEYE: s3c4510b_io_read_byte error\n");									s3c4510b_io_read_word (state, addr);								}								ARMword								s3c4510b_io_read_halfword (ARMul_State * state, ARMword addr)								{									//printf("SKYEYE: s3c4510b_io_read_halfword error\n");									s3c4510b_io_read_word (state, addr);								}								ARMword								s3c4510b_io_read_word (ARMul_State * state, ARMword addr)								{									ARMword data = -1;									switch (addr) {										case SYSCFG:											data = io.syscfg;											break;											case CLKCON:												data = io.clkcon;												break;												case INTMOD:													data = io.intmod;													break;													case INTPND:														data = io.intpnd;														break;														case INTMSK:															data = io.intmsk;															break;															case INTOFFSET:																case INTPNDTST:																	data = io.intpndtst;																	break;																	case INTOSET_FIQ:																		data = io.intoset_fiq;																		break;																		case INTOSET_IRQ:																			{																				/*find which interrupt is pending */																				int i;																				for (i = 0; i < 26; i++) {																					if (io.intpnd & (1 << i))																						break;																					}																					if (i < 26) {																						data = (i << 2);																					}																					else																						data = 0x54;	/*no interrupt is pending, 0x54 is init data. */																					}																					//data = io.intoset_irq;																					break;																					/*UART*/ case ULCON0:																						data = io.ulcon0;																						break;																						case ULCON1:																							data = io.ulcon1;																							break;																							case UCON0:																								data = io.ucon0;																								break;																								case UCON1:																									data = io.ucon1;																									break;																									case USTAT0:																										data = io.ustat0;																										io.ustat0 &= ~0xf;																										break;																										case USTAT1:																											data = io.ustat1;																											io.ustat1 &= ~0xf;																											break;																											//case UTXBUF0:																											//case UTXBUF1:																											case URXBUF0:																												data = io.urxbuf0;																												io.ustat0 &= ~UART_LSR_DR;																												break;																												case URXBUF1:																													data = io.urxbuf1;																													io.ustat1 &= ~UART_LSR_DR;																													break;																													case UBRDIV0:																														data = io.ubrdiv0;																														break;																														case UBRDIV1:																															data = io.ubrdiv1;																															break;																															/*Timer */																															case TMOD:																																data = io.tmod;																																break;																																case TDATA0:																																	data = io.tdata0;																																	break;																																	case TDATA1:																																		data = io.tdata1;																																		break;																																		case TCNT0:																																			data = io.tcnt0;																																			break;																																			case TCNT1:																																				data = io.tcnt1;																																				break;																																				default:																																					SKYEYE_DBG ("%s (addr = 0x%08x)\n", __FUNCTION__, addr);																																					break;																																				}																																				return data;																																			}																																			/* IO Write Routine																																			* */																																			void																																			s3c4510b_io_write_byte (ARMul_State * state, ARMword addr, ARMword data)																																			{																																				//printf("SKYEYE: s3c4510b_io_write_byte error\n");																																				s3c4510b_io_write_word (state, addr, data);																																			} void																																			s3c4510b_io_write_halfword (ARMul_State * state, ARMword addr, ARMword data)																																			{																																				//printf("SKYEYE: s3c4510b_io_write_halfword error\n");																																				s3c4510b_io_write_word (state, addr, data);																																			} void																																			s3c4510b_io_write_word (ARMul_State * state, ARMword addr, ARMword data)																																			{																																				switch (addr) {																																					case SYSCFG:																																						io.syscfg = data;																																						break;																																						case CLKCON:																																							io.clkcon = data;																																							break;																																							case INTMOD:																																								io.intmod = data;																																								break;																																								case INTPND:																																									/*when write bit 1, we clear apropiate pendind bit.																																									* */																																									io.intpnd &= (~data & INT_MASK_INIT);																																									break;																																									case INTMSK:																																										io.intmsk = data;																																										break;																																										case INTOFFSET:																																											case INTPNDTST:																																												io.intpndtst = io.intpnd = data;																																												break;																																												case INTOSET_FIQ:																																													io.intoset_fiq = data;																																													break;																																													case INTOSET_IRQ:																																														io.intoset_irq = data;																																														break;																																														/*UART*/ case ULCON0:																																															io.ulcon0 = data;																																															break;																																															case ULCON1:																																																io.ulcon1 = data;																																																break;																																																case UCON0:																																																	io.ucon0 = data;																																																	break;																																																	case UCON1:																																																		io.ucon1 = data;																																																		break;																																																		case USTAT0:																																																			io.ustat0 = data;																																																			break;																																																			case USTAT1:																																																				io.ustat1 = data;																																																				break;																																																				case UTXBUF0:																																																					{																																																						char c = data;																																																						write (skyeye_config.uart.fd_out, &c, 1);																																																						io.ustat0 |= (UART_LSR_THRE | UART_LSR_TEMT);																																																						if ((io.ucon0 & 0xc) == 0xc) {	/*enable interrupt */																																																							s3c4510b_set_interrupt (INT_UARTTX0);																																																							s3c4510b_update_int (state);																																																						}																																																					}																																																					break;																																																					case UTXBUF1:																																																						break;																																																						case UBRDIV0:																																																							io.ubrdiv0 = data;																																																							break;																																																							case UBRDIV1:																																																								io.ubrdiv1 = data;																																																								break;																																																								/*Timer */																																																								case TMOD:																																																									io.tmod = data;																																																									if (ENABLE_TIMER0)																																																										io.tcnt0 = io.tdata0;																																																										if (ENABLE_TIMER1)																																																											io.tcnt1 = io.tdata1;																																																											break;																																																											case TDATA0:																																																												if (!ENABLE_TIMER0)																																																													io.tdata0 = data;																																																													/*we manually set tdata0 register,  uclinux's data is so big */																																																													io.tdata0 = 0xfff;																																																													break;																																																													case TDATA1:																																																														//if (!ENABLE_TIMER1)																																																														io.tdata1 = data;																																																														break;																																																														case TCNT0:																																																															io.tcnt0 = data;																																																															break;																																																															case TCNT1:																																																																io.tcnt1 = data;																																																																break;																																																																default:																																																																	SKYEYE_DBG ("%s(0x%08x) = 0x%08x\n", __FUNCTION__, addr,																																																																	data);																																																																	break;																																																																}																																																															}																																																															void																																																															s3c4510b_mach_init (ARMul_State * state, machine_config_t * this_mach)																																																															{																																																																ARMul_SelectProcessor (state, ARM_v4_Prop);																																																																state->lateabtSig = HIGH;																																																																this_mach->mach_io_do_cycle = s3c4510b_io_do_cycle;																																																																this_mach->mach_io_reset = s3c4510b_io_reset;																																																																this_mach->mach_io_read_word = s3c4510b_io_read_word;																																																																this_mach->mach_io_write_word = s3c4510b_io_write_word;																																																																this_mach->mach_io_read_halfword = s3c4510b_io_read_halfword;																																																																this_mach->mach_io_write_halfword = s3c4510b_io_write_halfword;																																																																this_mach->mach_io_read_byte = s3c4510b_io_read_byte;																																																																this_mach->mach_io_write_byte = s3c4510b_io_write_byte;																																																																this_mach->mach_update_int = s3c4510b_update_int;																																																																this_mach->mach_set_intr = s3c4510b_set_interrupt;																																																																this_mach->mach_pending_intr = s3c4510b_pending_intr;																																																																this_mach->mach_update_intr = s3c4510b_update_intr;																																																																//this_mach->mach_mem_read_byte = s3c4510b_mem_read_byte;																																																																//this_mach->mach_mem_write_byte = s3c4510b_mem_write_byte;																																																																this_mach->state = (void *) state;																																																															}

⌨️ 快捷键说明

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