第二期: 第四节, 裸机编程 LED 汇编代码。
1 首先是 关于汇编代码的解释。
来看看原理图:
再来看看 GPL2_0 的寄存器地址。
来看看代码:
.globl _start
.arm
_start:
// 这是 GPL2_0 的 CON 寄存器的地址。LDR R0,=0x11000100 LDR R1,[R0]//首先是清零,最后4位BIC R1,R1,#0x0000000f//然后是将 最后4位设置成 1 , 也就是 输出模式。ORR R1,R1,#0x00000001//然后写回。STR R1,[R0]
loop://这是 GPL_0 的data寄存器的地址。LDR R0,=0x11000004LDR R1,[R0]//首先是 将 第一位 置一, 也就是输出高电平ORR R1,R1,#0x1STR R1,[R0]
//然后跳到 延时函数。BL delay
//接下来就是 将最后 一位置0 也就是 输出低电平。
//这是在实现闪烁功能。LDR R1,[R0]BIC R1,R1,#0x1STR R1,[R0]BL delay
// 然后是循环的闪烁B loop
delay:LDR R2,=0xfffffff
loop1:
// 这是一个延时函数, 就是从 fffff 不断向下减1, 直到减到0 为止。SUB R2,R2,#0x1CMP R2,#0x0BNE loop1MOV PC,LR
.end
2 然后是关于 关于 makefile 的编写。
TARGET=led
all:arm-none-linux-gnueabi-gcc -O0 -g -c -o $(TARGET).o $(TARGET).sarm-none-linux-gnueabi-ld $(TARGET).o -Ttext 0x40008000 -N -o $(TARGET).elfarm-none-linux-gnueabi-objcopy -O binary -S $(TARGET).elf $(TARGET).bin
clean:rm -rf *.o *.elf *.dis *.bin
3 然后就是 编译+烧写+测试。
烧写 ,编译, 程序在板子上的运行都是正常的。