S3C2440的SDRAM驱动
ed灯循环滚动亮5遍,xmain函数返回。
/* C语言函数*/
/*端口F寄存器预定义*/
#defineGPBCON(*(volatile unsigned long *)0x56000010)
#defineGPBDAT(*(volatile unsigned long *)0x56000014)
#defineLEDS(1<5|1<6|1<7|1<8)
#defineDELAYVAL(0x1ffff)
extern int delay(int time);/*声明外部声明汇编函数*/
int i = 5;
int xmain()
{
GPBCON= 0x00015400;//GPF4--GPF7设置为output
while(i > 0) {
//第一个LED灯亮
GPBDAT=(GPBDAT&(~LEDS)) | (1<6|1<7|1<8);
delay(DELAYVAL);//调用汇编语言编写的延时程序
//第二个LED灯亮
GPBDAT=(GPBDAT&(~LEDS)) | (1<5|1<7|1<8);
delay(DELAYVAL);//调用汇编语言编写的延时程序
//第三个LED灯亮
GPBDAT=(GPBDAT&(~LEDS)) | (1<5|1<6|1<8);
delay(DELAYVAL);//调用汇编语言编写的延时程序
//第四个LED灯亮
GPBDAT=(GPBDAT&(~LEDS)) | (1<5|1<6|1<7);
delay(DELAYVAL);//调用汇编语言编写的延时程序
i--;
}
return 0;
}
delay.s:本程序文件主要通常汇编来实现延时功能。
;汇编指令延时程序
EXPORT delay
AREADELAY,CODE,READONLY;该伪指令定义了一个代码段,段名为Init,属性只读
;下面是延迟子程序
delay
sub r0,r0,#1;r0=r0-1
cmp r0,#0x0;将r0的值与0相比较
bne delay;比较的结果不为0(r0不为0),继续调用delay,否则执行下一条语句
mov pc,lr;返回
END;程序结束符
内存的初始化也可以用下面的C程序实现:
C语言版本:
#defineMEM_CTL_BASE0x48000000
#defineMEM_CTL_END0x48000034
/* SDRAM 13个寄存器的值*/
unsigned longconstmem_cfg_val[]={//声明数组存放内存控制器设置数据
0x22000000,//BWSCON
0x00000700,//BANKCON0
0x00000700,//BANKCON1
0x00000700,//BANKCON2
0x00000700,//BANKCON3
0x00000700,//BANKCON4
0x00000700,//BANKCON5
0x00018005,//BANKCON6
0x00018005,//BANKCON7
0x008e07a3,//REFRESH(HCLK = 12MHz,该值为0x008e07a3
//HCLK = 100MHz 0x008e04f5)
0x000000b1,//BANKSIZE
0x00000030,//MRSRB6
0x00000030,//MRSRB7
};
void mem_init(void)
{
inti = 0;
unsigned long *p = (unsigned long *)MEM_CTL_BASE;
for(; i < (MEM_CTL_END - MEM_CTL_BASE)/4; i++)
p[i] = mem_cfg_val[i];
}
S3C2440SDRAM驱 相关文章:
- S3C2440的SDRAM驱动 (11-10)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)