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

📄 sysinit.c

📁 这是ARM7上常用的bios-lt74的愿代码包
💻 C
字号:
#include "board.h"#include "utils.h"#include "bios.h"static inline void reset_registers(void);/* * Caculate system registers */int sys_init(struct system_table_struct *system_table, unsigned long rom_base, unsigned dram_base){	struct sys_regs_struct sys_regs;	unsigned long base;	unsigned long r;	int i;	sys_regs.extdbwth = 0;	for (i = 0; i < 6; i++)		sys_regs.extdbwth |= (system_table->rom_table[i].width) << (i * 2);	for (i = 0; i < 4; i++)		sys_regs.extdbwth |= (system_table->dram_table[i].width) << (i * 2 + 12);	for (i = 0; i < 4; i++)		sys_regs.extdbwth |= (system_table->ext_table[i].width) << (i * 2 + 20);	base = rom_base;	for (i = 0; i < 6; i++) {		sys_regs.romcon[i] = (system_table->rom_table[i].flag & ~0x3ffffc00) |			(((base + system_table->rom_table[i].size) & 0x03ff0000) << 4) |			((base & 0x03ff0000) >> 6);		base += system_table->rom_table[i].size;	}	base = dram_base;	for (i = 0; i < 4; i++) {		sys_regs.dramcon[i] = (system_table->dram_table[i].flag & ~0x3ffffc00) |			(((base + system_table->dram_table[i].size) & 0x03ff0000) << 4) |			((base & 0x03ff0000) >> 6);		base += system_table->dram_table[i].size;	}	sys_regs.refextcon = system_table->dram_table[0].refresh;	outl(sys_regs.extdbwth, EXTDBWTH);	outl(sys_regs.romcon[0], ROMCON0);	outl(sys_regs.romcon[1], ROMCON1);	outl(sys_regs.romcon[2], ROMCON2);	outl(sys_regs.romcon[3], ROMCON3);	outl(sys_regs.romcon[4], ROMCON4);	outl(sys_regs.romcon[5], ROMCON5);	outl(sys_regs.dramcon[0], DRAMCON0);	outl(sys_regs.dramcon[1], DRAMCON1);	outl(sys_regs.dramcon[2], DRAMCON2);	outl(sys_regs.dramcon[3], DRAMCON3);	outl(sys_regs.refextcon, REFEXTCON);	r = (system_table->ext_table[0].flag & 0xffff) |		((system_table->ext_table[1].flag & 0xffff) << 16);	outl(r, EXTACON0);	r = (system_table->ext_table[2].flag & 0xffff) |		((system_table->ext_table[3].flag & 0xffff) << 16);	outl(r, EXTACON1);	outl(system_table->iop.iopmod, IOPMOD);	outl(system_table->iop.iopcon, IOPCON);	outl(system_table->iop.iopdata, IOPDATA);	reset_registers();	return 0;}/* * This function exists for supporting soft-reset * of S3C4510B. However, some readonly registers * perhaps don't contail "reset values" after this * function, so it is still possiable that you have * some dirty registers after a soft-reset. So make * sure your application can handl these registers. * * These registers are noted by double slash below. */static inline void reset_registers(void) {	/* Ethernet */	outl(0, BDMATXCON);	outl(0, BDMARXCON);	outl(0xffffffff, BDMATXPTR);	outl(0xffffffff, BDMARXPTR);	outl(0, BDMASTAT);	outl(0, MACON);	outl(0, CAMCON);	outl(0, MACTXCON);	outl(0, MACTXSTAT);	outl(0, MACRXCON);	outl(0, MACRXSTAT);	outl(0, STADATA);	outl(0x00006000, STACON);	outl(0, CAMEN);	outl(0, EMISSCNT);//	outl(0, EPZCNT);//	outl(0, ERMPZCNT);	//	outl(0, ETXSTAT);		/* HDLC channel A */	outl(0, HMODE_A);	outl(0, HCON_A);	outl(0, HSTAT_A);	outl(0, HINTEN_A);//	outl(0, HRXFIFO_A);	outl(0, HBRGTC_A);	outl(0, HPRMB_A);	outl(0, HSAR0_A);	outl(0, HSAR1_A);	outl(0, HSAR2_A);	outl(0, HSAR3_A);	outl(0, HMASK_A);	outl(0xffffffff, DMATXPTR_A);	outl(0xffffffff, DMARXPTR_A);	outl(0, HMFLR_A);	outl(0, HRBSR_A);	/* HDLC channel B */	outl(0, HMODE_B);	outl(0, HCON_B);	outl(0, HSTAT_B);	outl(0, HINTEN_B);//	outl(0, HRXFIFO_B);	outl(0, HBRGTC_B);	outl(0, HPRMB_B);	outl(0, HSAR0_B);	outl(0, HSAR1_B);	outl(0, HSAR2_B);	outl(0, HSAR3_B);	outl(0, HMASK_B);	outl(0xffffffff, DMATXPTR_B);	outl(0xffffffff, DMARXPTR_B);	outl(0, HMFLR_B);	outl(0, HRBSR_B);	/* Interrupt Controller */	outl(0, INTMOD);	outl(0, INTPND);	outl(0x003fffff, INTMSK);	outl(0x03020100, INTPRI0);	outl(0x07060504, INTPRI1);	outl(0x0b0a0908, INTPRI2);	outl(0x0f0e0d0c, INTPRI3);	outl(0x13121110, INTPRI4);	outl(0x00000014, INTPRI5);//	outl(0x00000054, INTOFFSET);//	outl(0x00000054, INTOSET_FIQ);//	outl(0x00000054, INTOSET_IRQ);	/* I2C Bus */	outl(0, IICCON);	outl(0, IICPS);	outl(0, IICCOUNT);	/* GDMA */	outl(0, GDMACON0);	outl(0, GDMACON1);	/* Timers */	outl(0, TMOD);	outl(0, TDATA0);	outl(0, TDATA1);	outl(0xffffffff, TCNT0);	outl(0xffffffff, TCNT1);}

⌨️ 快捷键说明

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