微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2440的SDRAM驱动

S3C2440的SDRAM驱动

时间:11-09 来源:互联网 点击:

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];

}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top