1 原理图

从原理图看到,3个LED分别由GPF4、GPF5和GPF6控制。

2 寄存器描述

GPF4、GPF5和GPF6可用作输入输出,或中断功能。要点亮LED,需要将IO设置为输出模式,并输出低电平。怎么做?

关于GPIO的寄存器描述如下(主要关注配置CON和数据DCT寄存器):

3个LED对应的CON与DAT寄存器功能,以及寄存器地址描述:

3 2440启动过程

大多数ARM芯片,CPU从0地址启动。


NorFlash启动时,基地址为0,片内内存地址为0x4000 0000。CPU读出Nor上第1个指令(4字节)执行,CPU继续读出其他指令执行。


NAND启动时,片内4K RAM基地址为0,NorFlash不可访问。2440硬件把NAND前4K内容复制到片内RAM,然后CPU从0地址取出指令开始执行。


CPU内部有两类寄存器:R0、R1~R15,这类寄存器可以直接访问;GPFCON、GPFDAT,这类寄存器,以地址访问。


4 ARM常用汇编

ldr指令:ldr r0, [r1]  假设r1的值为x,则读取地址x上的4字节到r0


str指令:str r0, [r1]  假设r1的值为x,则把r0的值写入到地址x


b指令:跳转


mov指令:mov r0, r1 把r1的值赋值给r0


                  mov r0, #0x100  把立即数0x100赋值给r0


ldr指令: ldr r0,=0x12345678  伪指令,最终会被拆分成几条真正的ARM指令


以下是部分ARM指令介绍:

5 点亮LED灯的汇编代码


/*

 * 点亮LED1: GPF4

 */

.text

.global _start

 

_start:

 

/* 配置GPF4为输出引脚 

 * 把0x100写到地址0x56000050(GPFCON)上

 */

ldr r1, =0x56000050

ldr r0, =0x100

str r0, [r1] /* 把r0的值写到r1的地址 */

 

/* 设置GPF4输出高电平 

 * 把0x00写到0x56000054(GPFDAT)上

 */

ldr r1, =0x56000054

ldr r0, =0x0

str r0, [r1] /* 把r0的值写到r1的地址 */

 

/*

 * 死循环

 */

halt:

b halt

使用arm-linux-gcc进行编译,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 *.bin *.o *.elf

上传到ubuntu进行编译,使用oflash烧录bin文件,可以看到点亮led。


5 ARM寄存器和汇编分析

1 修改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

arm-linux-objdump -D led_on.elf > led_on.dis

 

clean:

rm *.bin *.o *.elf

上述代码反汇编文件:


 

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寄存器描述:

几个重要的寄存器:


sp:stack pointer 栈指针


lr:link register  返回地址


pc:program counter  程序计数器 = 当前指令地址 + 8  (流水线架构),当前执行地址A的指令时,已经在对地址A+4的指令进行译码,已经在读取地址A+8的指令。


反汇编分析:

可以看到,这里的GPFCON、GPFDAT,在CPU看来就是内存。只不过,这些内存你写入或读出,能控制管脚。


字节序:低位保存在低地址。

关键字:点亮LED  汇编  S3C2440 引用地址:04 点亮LED 汇编

上一篇:04 点亮LED C
下一篇:03 2440烧写程序

推荐阅读

2018年10月16日上午,机器人未来城奠基仪式在沈阳市浑南区隆重举行。机器人未来城位于浑南区莫子山公园东侧,同时位于自贸区沈阳片区范围内,占地637亩,总投资逾50亿元。机器人未来城将重点规划人工智能孵化器平台、机器人孵化器平台、云技术智能发展平台、工业智能技术平台、智能装备研发平台、工业4.0示范平台、智能设备研发平台和智创联合研究平台等8...
今天,“互联网之光”博览会在机器人现场弹奏的钢琴声中开幕,一大拨全球互联网顶尖科技成果在乌镇集中亮相。作为世界互联网大会的重要组成部分,每一年的“互联网之光”博览会都堪比“科技盛宴”,在大会开幕之前,带领公众近距离了解全球最前沿的互联网“黑科技”。第六届世界互联网大会将于10月20日至22日在浙江嘉兴乌镇举办。本次大会以“智能互联 开放合...
苹果正在探索利用Apple Watch上的无线充电线圈也提供触觉反馈,有可能导致更小更薄的可穿戴设备。目前的苹果可穿戴设备都配备了一个充电线圈组件,以实现无线充电。但该组件目前只能提供充电功能,而苹果正在开发的技术可以让它起到双重作用。在美国专利和商标局10月15日公布的一份名为 “用于无线充电和触觉输出的带有线圈的电子设备 ”专利申请中,苹...
广告摘要声明广告【文/伍勿武】10月13日,汇川技术发布2021年三季度业绩预告,预计2021年第三季度营收48.06亿元~54.69亿元,同比增长45%~65%,归母净利润8.69亿元~10.13亿元,同比增长20%~40%。可以看到,汇川技术净利润的增幅小于收入的增幅。就此,汇川技术在预报中作出说明,原因主要有三:首先,由于公司产品收入结构变化、大宗商品&芯片涨价等原...

史海拾趣

问答坊 | AI 解惑

请假大家2个关于充电器的问题:

请假大家2个关于充电器的问题: 一:不知道为什么我用的充电器总是烧前级220V近来的电阻; 二:就是我给锂电池充电,2节理电池串联8.4V,请问我若是想在充电器与电池之间加上一个保护二极管,请问充电器的电压要多大?(因为我测试发现二极管的压降 ...…

查看全部问答∨

泰克TDS7254B示波器4通道自我校正问题

泰克TDS7254B示波器4通道自我校正问题 CH1 1.001Kz 726mV CH2 1.001Kz 465mV CH3 1.001Kz 485mV CH4 1.001Kz 817mV 用同一个探棒校正,为什么CH1和CH4电压偏差这么大?造成使用TDSUSB2.0 test Software 无法测试。 请问有办法克服吗????…

查看全部问答∨

HDC泄露问题

大家好,小弟最近在WINCE上开发了一个俄罗斯方块,但运行到一段时间后,方块就不会下落了。经过DEBUG知道,其实程序还是正常运行的,只是图片不再更新了。我用的是bitblt函数去贴图,所以也申请了几个HDC,用完后也删除了。初步估计是这个HDC泄露, ...…

查看全部问答∨

请教熟知嵌入式开发的朋友

要做嵌入式开发需要至少知道哪些基本知识阿? 最基础的知识我对嵌入式开发还一知半解…

查看全部问答∨

为什么我的nfs mount可以成功,却看不到文件列表

PC的NFS服务器配置:      exportfs 文件已经配置                     /nfs *(rw,sync)      showmount 显示:     ...…

查看全部问答∨

从Tornado2.0升级到2.2遇到的关于启动的问题

从2.0升级到2.2,制作完bootrom启动后,从网络启动没有问题,但从CF启动,出现了下面的问题,这种情况在2.0下没有出现。从网络启动到从CF卡启动只是修改了boot行: 网络启动:#define DEFAULT_BOOT_LINE \\         "fei(0 ...…

查看全部问答∨

高分求助:Wince下如何旋转屏幕?平台是PXA270

如题,现在我们的显示是320(x)×240(y),想改成240(x)×320(y).…

查看全部问答∨

CLKOUT输出

请教高手,1114的CLKOUT如何输出时钟,我将IO设置为CLKOUT输出,但是CLKOUT没有输出,不知道是什么原因,谢谢。…

查看全部问答∨

关于stm32IAP的另类实现

iap是在应用编程,也就是说里面有了用户程序,这样要编程的时候就要跳到另一段代码去实现,stm32给的例子是把用户区flash分成2块来实现的。 但是其中给isp用的系统区还是存在的,既然isp的程序代码还在,那干脆就跳到系统区去实现得了。刚刚 ...…

查看全部问答∨

恒流源

我有个0-10的D/A模块,我想用D/A输出的电压值去改变运放横流输出的电流值,要求是输出0-300μA的电流,用lm358p做,负载大小范围0-10K,线性要好,横流效果也要好,谁能帮忙设计下电路,芯片供电只有12v。谢谢了…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved