1.点亮1个led程序分析(汇编)

最终目标:    点亮led灯

1:通过原理图,确定nLED_1的引脚关系 ---- GPF4

2:查看S3C2440手册,找到控制GPF4引脚的方法 ---- GPFCON(配置寄存器) ---- GPFDAT(数据寄存器)

3:往GPFCON和GPFDAT这两个寄存器写数据,实现点亮led灯

 

寄存器相关截图:

 

 

所以,需要点亮nLED_1,我们要通过GPFCON寄存器设置GPF4引脚作为输出引脚,通过GPFDAT寄存器设置0或1开控制LED灯的亮灭。

更直白点是,往0x56000050(GPFCON)、0x56000054(GPFDAT) 写入数据

 

汇编代码:

 

@******************************************************************************
@ File:led_on.S
@ 功能:LED点灯程序,点亮LED1
@******************************************************************************       
            
.text
.global _start
_start:     
            LDR     R0,=0x56000050      @ R0设为GPFCON寄存器。此寄存器
                                        @ 用于选择端口B各引脚的功能:
                                        @ 是输出、是输入、还是其他
            MOV     R1,#0x00000100        
            STR     R1,[R0]             @ 设置GPF4为输出口
            
            LDR     R0,=0x56000054      @ R0设为GPBDAT寄存器。此寄存器
                                        @ 用于读/写端口B各引脚的数据
            MOV     R1,#0x00000000      @ 此值改为0x00000010,
                                        @ 可让LED1熄灭
            STR     R1,[R0]             @ GPF4输出0,LED1点亮
MAIN_LOOP:
            B       MAIN_LOOP


分析:

1. LDR指令

LDR 伪指令用于加载立即数或一个地址值到指定寄存器

LDR     R0,=0x56000050    @加载地址0x56000050到R0寄存器   -----  GPFCON寄存器

 

2.MOV指令

MOV    R1,#0x00000100    @把十六进制数 0x00000100 赋值给R1寄存器 

这里的0x00000100 === 配置GPF4为输出,需要对GPFCON寄存器的[9:8]进行赋值,也就是 0000000100000000b 转换成十六进制 0x00000100


3.STR指令

 STR     R1,[R0]           @向R0寄存器写入R1寄存器的数据   即: CPFCON ===>  0x00000100    设置GPF4为输出引脚


后面的 0x56000054 的操作一样的原理


Makefile文件

---------------------------------------------------------------------

led_on.bin : led_on.S
arm-linux-gcc -g -c -o led_on.o led_on.S                                 #编译 led_on.S 
arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf     #连接成elf可执行程序, -Ttext 0x00000000 定义代码段开始地址(0地址)
arm-linux-objcopy -O binary -S led_on_elf led_on.bin           #转换elf文件为bin文件(方便烧写)
clean:
rm -f   led_on.bin led_on_elf *.o

 --------------------------------------------------------------------


烧写 --- 上电 

nLED_1 成功点亮啦~!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值