S3C44B0 BIOS的keil CARM版
0赞
发表于 4/15/2011 8:50:09 AM
阅读(3635)
/**********************************************************************
说明:S3C44B0 BIOS的keil CARM版
源代码来自互连网,由本人进行了一些修改,使其在keil UV3 2.5A上编译通过。
主要修改的地方在启动文件,FLASH的烧录部分,另外在控制台中增加了几个命令。
硬件平台为: CPU:S3C44B0;SDRAM:HY57V641620;FLASH:29LV160DB;网卡芯片:RTL8019AS。
本软件仅供学习交流使用,不得用于其它用途,否则后果自负。
修改者:computer00
**********************************************************************/
S3C44B0-BIOS-KEIL源代码包下载:
1674293672922.rar
该开发板的原理图下载(注意U4和R39不要安装,R8接VCC5.0端改为接地
1638747603130.rar
又对代码做了一点更改,启动代码s3c44b0x.s中添加了几句判断是否要复制代码的指令,如下,请找到相关部分修改:
;****************************************************************************
;为BDMA改变BDMACON的复位值
;BDMA目的寄存器
BDIDES0 EQU 0x1f80008
BDIDES1 EQU 0x1f80028
;为BDMA改变BDMACON的复位值
;BDMA目的寄存器
BDIDES0 EQU 0x1f80008
BDIDES1 EQU 0x1f80028
LDR R2, =BDIDES0
LDR R1, =0x40000000 ;BDIDESn reset value should be 0x40000000
STR R1, [r2]
LDR R1, =0x40000000 ;BDIDESn reset value should be 0x40000000
STR R1, [r2]
LDR R2, =BDIDES1
LDR R1, =0x40000000 ;BDIDESn reset value should be 0x40000000
STR R1, [r2]
;****************************************************************************
LDR R1, =0x40000000 ;BDIDESn reset value should be 0x40000000
STR R1, [r2]
;****************************************************************************
;****************************************************************************
;将FLASH中的代码段(0x1E0000-0x1EFFFF)复制到RAM中(0xC7C0000-0xC7CFFFF)
;如果已经在RAM中运行,则不要复制
MOV R1,PC
LDR R2,=0x0C000000 ;SDRAM的起始地址
CMP R2,R1
BLS EndCopy
;将FLASH中的代码段(0x1E0000-0x1EFFFF)复制到RAM中(0xC7C0000-0xC7CFFFF)
;如果已经在RAM中运行,则不要复制
MOV R1,PC
LDR R2,=0x0C000000 ;SDRAM的起始地址
CMP R2,R1
BLS EndCopy
LDR R1,=0x001E0000 ;BIOS在FLASH中的地址
LDR R2,=0x0C7C0000 ;BIOS在SDRAM中的地址
LDR R7,=0x0C7D0000-4 ;BIOS总共64K
LOOP:
LDMIA R1!,{R3-R6} ;装入4个字到寄存器中
STMIA R2!,{R3-R6} ;将4个字保存到RAM中
CMP R2,R7 ;比较拷贝是否完成
BLS LOOP ;循环
LDR R2,=0x0C7C0000 ;BIOS在SDRAM中的地址
LDR R7,=0x0C7D0000-4 ;BIOS总共64K
LOOP:
LDMIA R1!,{R3-R6} ;装入4个字到寄存器中
STMIA R2!,{R3-R6} ;将4个字保存到RAM中
CMP R2,R7 ;比较拷贝是否完成
BLS LOOP ;循环
EndCopy:
;****************************************************************************
;****************************************************************************
;自己的代码结束
;****************************************************************************
;****************************************************************************
另外,在main函数中将PortInit();前面的注释去掉,然后找到PortInit()函数,修改成如下代码:
/****************************************************************************
【功能说明】IO端口功能、方向设定
****************************************************************************/
void PortInit(void)
{
//其它IO在S3C44B0X.s里面已经配置好了。直接使用keil提供的Configuration Wizard设置更方便
//当然也可以在这里来配置
rPDATG = 0xff;
rPCONG = 0x000f; //enable extint0 extint1
rPUPG = 0x00; //enabled pull up register
rEXTINT = 0x42; //所有的外部硬件中断为低电平触发, extint0 为下降沿,extint1为上升沿
rINTCON = 5; // non vector mode, irq enable
rINTMOD = 0; //all are irq mode
}
【功能说明】IO端口功能、方向设定
****************************************************************************/
void PortInit(void)
{
//其它IO在S3C44B0X.s里面已经配置好了。直接使用keil提供的Configuration Wizard设置更方便
//当然也可以在这里来配置
rPDATG = 0xff;
rPCONG = 0x000f; //enable extint0 extint1
rPUPG = 0x00; //enabled pull up register
rEXTINT = 0x42; //所有的外部硬件中断为低电平触发, extint0 为下降沿,extint1为上升沿
rINTCON = 5; // non vector mode, irq enable
rINTMOD = 0; //all are irq mode
}
