1:硬件部分连接图
2:对应到芯片上的连接图
比如我们要控制LED1,根据硬件逻辑是:
GPF4引脚输出1(高电平):LED1灯灭。
GPF4引脚输出0(低电平):LED1电亮。
3、如何让引脚输出高/低电平?
(1)配置引脚功能
(2)输出引脚:写值到某个寄存器; 输入引脚:读寄存器的值。
4:查看数据手册设置相应的寄存器,配置引脚
这里要用到GPF组的寄存器:
GPFCON寄存器:用来配置引脚的功能;
GPFDAT:引脚的值。
5:看下对应的汇编代码重点内容
@******************************************************************************
@ File:led_on.S
@ 功能:LED点灯程序,点亮LED1
@******************************************************************************
.text
.global _start
_start:
LDR R0,=0x56000050 @ R0设为GPFCON寄存器。此寄存器
@ 用于选择端口B各引脚的功能:
@ 是输出、是输入、还是其他
MOV R1,#0x00000100
STR R1,[R0] @ 设置GPF4为输出口, 位[8:7]=0b01
LDR R0,=0x56000054 @ R0设为GPBDAT寄存器。此寄存器
@ 用于读/写端口B各引脚的数据
MOV R1,#0x00000000 @ 此值改为0x00000010,
@ 可让LED1熄灭
STR R1,[R0] @ GPF4输出0,LED1点亮
MAIN_LOOP:
B MAIN_LOOP
6:Linux下我们需要重点关注的是Makefile重点内容**
Makefile
led_on.bin : led_on.S
arm-linux-gcc -g -c -o led_on.o led_on.S #-g:加入调试信息 -c只编译不连接
arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf #-Ttext 0x0000000:指定代码段地址0.
arm-linux-objcopy -O binary -S led_on_elf led_on.bin #-O:使用指定格式来输出文件
# binary:二进制的 -S:不从源文件复制重定位信息和符号信息到目标文件中去
clean:
rm -f led_on.bin led_on_elf *.o
这是一篇简单了解Makefile的文章 可以看看
简谈Makefile与交叉编译工具链
7:通过DNW把.bin文件烧写到S3C2440的NAND FLASH中
观察现象:灯亮