JZ2440开发板之GPIO实验
(1)纯汇编语句,Makefile 文件
命令中有一个参数是: Text 00000000 .引申出了2440的两种启动方式:NAND启动和NOR启动
NOR Flash属于内存类期间,它可以像内存一样读,但是不能像内存一样写,要写的话必须经过复杂的步骤
NAND Flash不属于内存类设备,没有地址线。
NOR启动时,0地址在NOR上
NAND启动时,0地址在片内SRAM上,
(2)用C语言编程序,
因为是将ARM当成单片机来用,所以得自己做启动文件(调用main函数)
a. 设置栈(调用main函数之前得保存当前的环境,等main函数返回后,再出栈)
就是将sp指针指向一个内存地址,可以是SRAM ,其不用初始化就可以使用。如果指向SDRAM,那就需要初始化后才能用。
b. 设置返回地址(main函数的)
c. 调用main函数
d. 返回后进行清理工作
由a.可以想到还有其他的硬件需要初始化:
a. 关看门狗
b. 初始化时钟
c. 初始化SDRAM
代码:
a. 启动文件:crt0.s
1 .text 2 .global _start 3 _start: 4 ldr r0, =0x53000000 5 mov r1, #0x0 6 str r1, [r0] /* 关看门狗 */ 7 8 ldr sp, =1024*4 /* 设置栈 */ 9 bl main /* 调用main 函数 */ 10 halt_loop: 11 bl halt_loop
b. C 文件
1 #define GPFCON (*(volatile unsigned long *)0x56000050) 2 #define GPFDAT (*(volatile unsigned long *)0x56000054) 3 4 5 int main() 6 { 7 GPFCON = 0X00000100; 8 GPFDAT = 0x00000000; 9 return 0; 10 }
c. Makefile文件
1 led_main.bin:led_main.c crt0.s 2 arm-linux-gcc -g -c -o crt0.o crt0.s 3 arm-linux-gcc -g -c -o led_main.o led_main.c 4 arm-linux-ld -Ttext 0x00000000 -g crt0.o led_main.o -o led_main_elf 5 arm-linux-objcopy -O binary -S led_main_elf led_main.bin 6 arm-linux-objdump -D -m arm led_main_elf > led_main.dis 7 clean: 8 rm -f *.o led_main.dis led_main_elf led_main.bin
posted on 2014-12-18 16:06 shenlanse8805 阅读(250) 评论(0) 编辑 收藏 举报