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 $@ $<
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』