资讯详情

s3c2440学习之路-001 汇编点亮led

硬件平台:jz2440 软件平台:Ubuntu16.04 arm-linux-gcc-3.4.5

1.原理分析

 点亮LED最简单的方法是连接二极管的正负极,并在中间串一个电阻 

点亮Led 图1 点亮LED

由于2440芯片Pin脚的驱动能力不够,不能直接使用Pin脚来点亮LED,只能把Pin脚连接到LED负极,作为开关。  当Pin脚为高电平时,LED两端无电压差,LED灭 当Pin脚是低电平时,LED两端有电压差,LED亮 

图2 2440连接LED

2.主要流程

2.1原理图介绍

这里只介绍LED1, LED1负极与2440的GPF4连接,中间串联1K电阻, LED1正极接3.3V, 

图3 LED1对应的Pin脚

图4 LED1的接法

2.2 主要寄存器

主要使用的寄存器只有两个  GPFCON,地址为0x56000050  GPFDAT,数据寄存器, 地址为0x56000054 

图5 主要寄存器

2.3 软件流程

主要流程简单:  1)将GPF4配置输出模式  2)将GPF4输出低电平并点亮LED1 

3源码

3.1汇编源代码,文件名称 led_on.s

.text  .global _start _start:   /* 1, set output mode  *  GPFCON [9:8] 01  *  0x56000050  */     ldr r1, =0x56000050     ldr r0, =0x100     str r0, [r1]  /* 2, set value to 0  * GPFDAT [4] 0  * 0x56000054  */    ldr r1, =0x56000054    ldr r0, =0    str r0, [r1]   loop:     b loop  

3.2 Makefile

all:     arm-linux-gcc -c -o led_on.o led_on.s     arm-linux-ld -Ttext 0 led_on.o -o led_on.elf     arm-linux-objcopy -O binary -S led_on.elf led_on.bin clean:     rm *.elf *.o *.bin -rf  

4dis文件分析

执行Makefile后,会生产led_on.elf文件。再通过  arm-linux-objdump -D led_on.elf > led_on.dis 生成dis文件 

产生的dis文件内容如下

led_on.elf:     file format elf32-littlearm  Disassembly of section .text:  00000000 <_start>:    0:   e59f1014    ldr r1, [pc, #20]   ; 1c <.text 0x1c>    4:   e3a00c01    mov r0, #256    ; 0x100    8:   e5810000    str r0, [r1]    c:   e59f100c    ldr r1, [pc, #12]   ; 20 <.text 0x20>   10:   e3a00000    mov r0, #0  ; 0x0   14:   e5810000    str r0, [r1]  00000018 <loop>:   18:   eafffffe    b   18 <loop>   1c:   56000050    undefined   20:   56000054    undefined  

因为ARM流水线处理分为三个步骤:取指、译码、执行。当执行到某一命令时,。 下面是对dis文件的分析

分析反汇编代码 led_on.elf:     file format elf32-littlearm  Disassembly of section .text:   地址     机器码       汇编指令 00000000 <_start>:             这里是pc 20的值, pc = 当前地址 8 = 0   8             [pc, #20] =  [0   8   20]  = 28 = 0x1c             0x1c 地址值为 56000050             r1 = 56000050    0:   e59f1014    ldr r1, [pc, #20]   ; 1c <.text 0x1c>             r0 = 0x100    4:   e3a00c01    mov r0, #256    ; 0x100             56000050 地址的值 = 0x100    8:   e5810000    str r0, [r1]             [pc, #12] = [ 0xc   8   12] =  32 = 0x20             0x20 56000600054             r1 = 56000054    c:   e59f100c    ldr r1, [pc, #12]   ; 20 <.text 0x20>             r0 = 0   10:   e3a00000    mov r0, #0  ; 0x0             56000064地址的值=0   14:   e5810000    str r0, [r1]  00000018 <loop>: 地址     数值        汇编指令   18:   eafffffe    b   18 <loop>   1c:   56000050    undefined   20:   56000054    undefined  

标签: f100r电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台