ARM 裸机程序学习 01 点亮LED

开始研究ARM了,从最基础最简单的,点亮LED灯开始。  //嗯,最简单的应该是直接把LED灯接在电源上吧……
主要学习一下汇编代码的结构,ARM GPIO口的控制。
 
硬件环境:
s3c2440处理器
GPB5、GPB6、GPB8、GPB10口各接一个发光二极管,
发光二级管正极接电源,负极接GPB口。(即低电平导通并发光)
Code Warrior 编译 
 
汇编代码:
 1    AREA LEDSAMPLE,CODE,READONLY
 2    ENTRY
 3 START
 4    LDR R3, =0x56000010
 5    LDR R4, =0x00DDD7FC
 6    STR R4, [R3]
 7 
 8    LDR R1, =0x56000014
 9    MOV R2, #0X0
10    STR R2, [R1]
11 
12    B START
13    END
注解及笔记:
01 指示一个代码段或者数据段;
   LEDSAMPLE:段名;CODE:表示这是一个代码段;READONLY:表示只读
02 入口
03 标号,用于跳转指令。
   另外标号需要顶格写,也就是说,其他的代码不可以顶格写
04 LDR伪指令(不同于ARM指令LDR),将一个值(立即数0x56000010)存入寄存器R3
   0x56000010为GPB的控制寄存器地址,即GPBCON
   而ARM装载指令LDR用法一般为: LDR R1, [R2] ;读取R2寄存器所保存的值作为一个内存地址,将这个地址上所保存的数据存入R1
05 同04
   其中,对于GPB口,01表示用于输出。GPB5,6,8,10的设置位分别为[11:10][13:12][17:16][21:20]
06 储存指令,读取R3中保存的值作为一个内存地址,并将R4所保存的值保存到这个内存地址上
   即为GPBCON赋值,设置GPB口功能
08 同04
   其中0x56000014为GPBDAT寄存器地址,存放IO数据。此处输出全0,即低电平。
09 传输指令。将一个8位图立即数(0x0)送入R2
   本身主要用于寄存器之间传输数据:MOV R1, R0 ;将R0中保存的值赋给R1
10 同06
12 ARM跳转指令,程序跳转至标号START处
13 结束
/*
 * Yiling Zhou
 * Shanghai, China
 * -.-- .. .-.. .. -. --. / --.. .... --- ..-
 * ... .... .- -. --. .... .- .. --..-- / -.-. .... .. -. .-
 */
原文地址:https://www.cnblogs.com/pastgift/p/2460947.html