1. 原理分析
2. 主要流程
3. 源碼
4. dis文件分析
硬件平臺:jz2440
軟件平臺:Ubuntu16.04 arm-linux-gcc-3.4.5
1.原理分析
點亮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 主要寄存器
主要使用到的寄存器只有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 18: eafffffe b 18 1c: 56000050 undefined 20: 56000054 undefined 因為ARM是流水線處理,分三步:取指,譯碼,執行。當執行到某條命令時,PC的數值已經跳到了當前命令地址+8的位置。 下面是對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 地址的數值是56000054 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 地址 數值 匯編指令 18: eafffffe b 18 1c: 56000050 undefined 20: 56000054 undefined
上一篇:S3C2440 Boot Loader引導代碼功能簡述
下一篇:s3c2440學習之路-012-0 異常中斷基礎知識
推薦閱讀
史海拾趣