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
原文地址:https://www.cnblogs.com/bkyysd/p/4171981.html