×
单片机 > 单片机程序设计 > 详情

2440裸板程序之内存初始化及重定位

发布时间:2020-06-18 发布时间:
|

LED对应的引脚是GPF4、GPF5、GPF6。 

使用的编译器为arm-linux-gcc-4.5.1。 

包括四个文件head.S main.c main.lds Makefile。


实验目的:把点灯的程序搬运到内存中执行。


2440使用nand启动时,会将nand前4k硬件搬运到内部4ksram中。如果需要运行大型程序的话,还要初始化外部内存。



与nGCS6或7片选相连的可以是内存,且6或7只能接同一种大小的内存。 

JZ2440v2采用的是两个钰创EM63A165TS-6G的SDRAM,每个4M word x 16-bit x 4-bank,共512Mbit,也就是64M。两个16bit的组成一个32位bit的内存,共同使用nGCS6。


连接方式如下:


head.S


@memory controller

.equ BWSCON   ,0x48000000

.equ BANKCON0 ,0x48000004

.equ BANKCON1 ,0x48000008

.equ BANKCON2 ,0x4800000C

.equ BANKCON3 ,0x48000010

.equ BANKCON4 ,0x48000014

.equ BANKCON5 ,0x48000018

.equ BANKCON6 ,0x4800001C

.equ BANKCON7 ,0x48000020

.equ REFRESH  ,0x48000024

.equ BANKSIZE ,0x48000028

.equ MRSRB6   ,0x4800002C

.equ MRSRB7   ,0x48000030

.text

.global _start

_start:

            ldr     r0, =0x53000000     @Close WATCHDOG

            mov     r1, #0x0                     

            str     r1, [r0]


            ldr     r0,=BWSCON          @Init sdram

            ldr     r1,=0x22011110

            str     r1,[r0]


            ldr     r0,= BANKCON6

            ldr     r1,=0x00018005

            str     r1,[r0]


            ldr     r0,=REFRESH

            ldr     r1,=0x008c07a3

            str     r1,[r0]


            ldr     r0,=BANKSIZE

            ldr     r1,=0x000000b1

            str     r1,[r0]


            ldr     r0,=MRSRB6

            ldr     r1,=0x00000030

            str     r1,[r0]


            mov     r1,#0x400           @Relacate

            ldr     r2,=0x30000000

            mov     r3,#0x600

1:

            ldr     r4,[r1],#4

            str     r4,[r2],#4

            cmp     r1,r3

            bne     1b


            ldr     sp, =1024*4         @Call C

            ldr     lr,=loop


            @bl      main

            ldr     pc,=0x30000038    @main             @0x800

loop:

            b       loop



main.c


#define GPFCON          (*(volatile unsigned long *)0x56000050)

#define GPFDAT          (*(volatile unsigned long *)0x56000054)


#define GPF4_out        (1<

#define GPF5_out        (1<

#define GPF6_out        (1<

#define GPF7_out        (1<


void  wait(volatile unsigned long dly)

{

        for(; dly > 0; dly--);

}


int main(void)

{

        unsigned long i = 0;


        GPFCON = GPF4_out|GPF5_out|GPF6_out;            //Configure the gpio of led  


        while(1){

                wait(30000);

                GPFDAT = (~(i<<4));                     //Turn 

                if(++i == 8)

                        i = 0;

        }


        return 0;

}



man.lds


SECTIONS {

        . = 0x0;

        first  0x00000000 : { head.o }

        second 0x30000000 : AT(0x400){ main.o }

}


Makefile


objs =  head.o main.o

all: $(objs)

        #arm-linux-ld -T main.lds $^ libgcc.a -o main.elf

        arm-linux-ld -T main.lds $^ -o main.elf

        arm-linux-objcopy -O binary -S main.elf main.bin

        arm-linux-objdump -D main.elf > main.dis

clean:

        rm -f *.bin $(objs) *.elf *.dis

%.o : %.c

        arm-linux-gcc -march=armv4 -c -o $@ $<

%.o : %.S

        arm-linux-gcc -march=armv4 -c -o $@ $<


关键字:2440  裸板程序  内存初始化  重定位

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会