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

📄 sysinit.c

📁 本程序是arm开发bios的实例代码
💻 C
字号:
#include "board.h"#include "utils.h"#include "bios.h"/* * Caculate system registers */static unsigned long get_width_bits(unsigned long width){	unsigned long bits;		switch (width) {	case 8:		bits = 1;		break;	case 16:		bits = 2;		break;	case 32:		bits = 3;		break;	default:		bits = 0;	}		return bits;}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 |= get_width_bits(system_table->rom_table[i].width) << (i * 2);	for (i = 0; i < 4; i++)		sys_regs.extdbwth |= get_width_bits(system_table->dram_table[i].width) << (i * 2 + 12);	for (i = 0; i < 4; i++)		sys_regs.extdbwth |= get_width_bits(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].flags & ~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].flags & ~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->ext_base & 0x03ff0000) >> 16) | 0xce298000;	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].flags & 0xffff) |		((system_table->ext_table[1].flags & 0xffff) << 16);	outl(r, EXTACON0);	r = (system_table->ext_table[2].flags & 0xffff) |		((system_table->ext_table[3].flags & 0xffff) << 16);	outl(r, EXTACON1);	outl(system_table->iop.iopmod, IOPMOD);	outl(system_table->iop.iopcon, IOPCON);	outl(system_table->iop.iopdata, IOPDATA);	return 0;}

⌨️ 快捷键说明

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