- 论坛徽章:
- 0
|
本人在linux下编写了一个驱动led的函数,head.s上操作I/O口控制LED灯没问题,在init.c上使用C语言来控制I/O口的LED灯也没问题,为什么使用两个文件同时控制I/O就出现问题了(不能正常控制LED了)
代码如下
init.c下面所示
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
int init()
{
GPBCON |= (1<<10)|(1<<12)|(1<<14)|(1<<16);
GPBDAT |= (1<<5)|(1<<6);
return 0;
}
head.s文件下面所示
.text
.global _start
_start:
ldr sp, =1024*4
ldr r0,=0x53000000
mov r1,#0x0
str r1,[r0]
ldr r0,=0x56000010
mov r1,#0x00015400
str r1,[r0]
ldr r0,=0x56000014
mov r1,#00000000
str r1,[r0]
bl init
stop:
b stop
Makefile文件如下
mmu.bin : head.S init.c
arm-linux-gcc -g -c -o head.o head.S
arm-linux-gcc -g -c -o init.o init.c
arm-linux-ld -Ttext 0x0000000 -g head.o init.o -o mmu_elf
arm-linux-objcopy -O binary -S mmu_elf mmu.bin
arm-linux-objdump -D -m arm mmu_elf > mmu.dis
clean:
rm -f mmu.dis mmu.bin mmu_elf *.o
期待高手指教哦!!!! |
|