Exynos4412汇编LED操作代码

发布者:快乐行者最新更新时间:2018-10-14 来源: eefocus关键字:Exynos4412  汇编LED  操作代码 手机看文章 扫描二维码
随时随地手机看文章

从今天开始就正式进入到tiny4412的开发学习中了,今天主要看了一下Tiny4412的启动流程及存储器映射及Exynos4412数据手册,用汇编写了一个跑马灯程序(后续会有C语言版本的出来),先说一下我的开发环境吧:

开发板:Tiny4412 增强版 (底板是Tiny4412ADK 1312)

开发工具:UltraEdit

宿主机:VmWare Ubuntu12.04(64bit)

编译工具:arm-linux-gcc4.5.1

为了便于分类管理,特意开了一个Tiny4412学习专区,希望对大家有所帮助,下面进入正题,说一下跑马灯程序。

一、控制原理说明

tiny4412核心板

tiny4412核心板

先看一下原理图:

tiny4412-led原理图

tiny4412-led原理图

tiny4412-led原理图

tiny4412-led原理图

如上图可知,Tiny4412有4个用户LED灯,控制它们四个引脚分别是GPM4_0~ GPM4_3,由原理可知,当IO引脚为高电平时,LED灯灭,当IO引脚为低电平时LED亮。我们要做的工作就是设置GPM4_0~ GPM4_3为输出功能,且控制且输出电平高低即可。

二、程序说明

1.led.S

由原理图可知,程序只进行了两步操作;

第一步:设置GPM4_0~GPM4_3相对应的控制寄存器GPM4CON,使GPM4_0~ GPM4_3四个引脚为输出功能。

Tiny4412-GPM4CON

Tiny4412-GPM4CON

第二步:设置其对应的数据寄存器GPM4DAT对应的4个bit位为0,使GPM4_0~ GPM4_3为低电平,4个LED灯全亮,等待一段时间将第0位设置为0,其余位设置为1,这样只有第一个灯亮;等待一段时间将第1位设置为0,其余位设置为1,这样只有第二个灯亮;等待一段时间将第2位设置为0,其余位设置为1,这样只有第三个灯亮;等待一段时间将第3位设置为0,其余位设置为1,这样只有第四个灯亮;等待一段时间使GPM4_0~ GPM4_3全为高电平,4个LED灯全灭。这样就实现了跑马灯效果。

程序代码中,也有相关解释这里不做过多说明。

===================================================================

.text

.globl _start

_start:

 

// set GPM4 as output

ldr r0, =0x110002E0 // GPM4CON的地址是0x110002E0

ldr r1, [r0] // 先读出原值

bic r1, r1, #0xff00 // 清除bit[15:8]

bic r1, r1, #0xff // 清除bit[7:0]

orr r1, r1, #0x1100 // 设置bit[15:8]为0b00010001

orr r1, r1, #0x11 // 设置bit[7:0]为0b00010001

str r1, [r0] // 写入GPM4CON


//set GPM4DAT as Low For leds

ldr r0, =0x110002E4 // GPM4DAT的地址是0x110002E0

ldr r1, [r0] // 读出原值

 

leds_loop:

bic r1, r1, #0xf // 清除bit[0-3]为0 全亮

str r1, [r0] // 写入GPM4DAT

ldr r2,=0xffffff

bl delay

 

orr r1, r1, #0xe // 设置bit[0]为0 LED1亮

str r1, [r0] // 写入GPM4DAT

ldr r2,=0xffffff

bl delay

 

bic r1, r1, #0x3 // 设置bit[1]为0 LED2亮

orr r1, r1, #1

str r1, [r0] // 写入GPM4DAT

ldr r2,=0xffffff

bl delay

 

bic r1, r1, #0x6 // 设置bit[2]为0 LED3亮

orr r1, r1, #2

str r1, [r0] // 写入GPM4DAT

ldr r2,=0xffffff

bl delay

 

bic r1, r1, #0xc // 设置bit[3]为0 LED4亮

orr r1, r1, #4

str r1, [r0] // 写入GPM4DAT

ldr r2,=0xffffff

bl delay

 

orr r1, r1, #0xf

str r1, [r0] // 写入GPM4DAT 全灭

ldr r2,=0xffffff

bl delay

 

b leds_loop

halt_loop:

b halt_loop

 

delay:

//跑马灯延时程序

sub r2,r2,#1 //sub 减法

cmp r2,#0x0 //将r0 与0比较

bne delay //b是跳 ne 是不相等 ,不相等就跳到delay

mov pc,lr //lr 里存的是调用函数时的下一条指令,让Pc指针指向lr就可以完成函数的返回

==================================================================

2. MakeFile说明

1

2

3

4

5

6

7

led.bin : led.S

arm-linux-gcc -c -o led.o led.S

arm-linux-ld -Tled.lds -N led.o -o led.elf

arm-linux-objcopy -O binary -S led.elf led.bin

arm-linux-objdump -D -m arm led.elf > led.dis

clean:

rm -f *.dis *.bin *.elf *.o

当我们在Makefile所在目录下执行make命令时,系统会进行如下操作:

第一步 执行arm-linux-gcc -c -o led.o led.S命令将当前目录下存在的汇编文件led.S编译成led.o文件;

第二步 执行arm-linux-ld -Tled.lds -N led.o -o led.elf将.o文件链接成elf文件,-Tled.lds 其中led.lds位链接脚本,告诉连接器如何对程序进行链接,以及链接地址等等(下面会有讲解);

第三步 执行arm-linux-objcopy -O binary -S led.elf led.bin将elf文件抽取为可在开发板上运行的bin文件;

第四步 执行arm-linux-objdump -D -m arm led.elf > led.dis将elf文件反汇编,便于我们对程序的分析,查找错误等等;

3. 链接脚本led.lds说明

1

2

3

4

5

6

7

SECTIONS {

. = 0x02023400;

.text : { *(.text) }

.rodata ALIGN(4) : {*(.rodata*)}

.data ALIGN(4) : { *(.data*) }

.bss ALIGN(4) : { *(.bss) *(COMMON) }

}

本文不对链接脚本的具体语法进行介绍,读者可以自已自行google了解

第2行表示程序的连接地址从0x02023400开始,这表示我们的程序运行之前应该位于内存地址0x02023400字节处,

BL1会把 BL2复制到0x02023400地址处,再启动它。

第 3~6行,表示从 0x02023400 开始,依次排放程序的代码段、 只读数据段、数据段、BSS段。

三、程序编译及烧写

1.编译

通过FTP或者其他工具将led.s、Makefile、led.lds 三个文件上传到服务器上去,输入make命令进行编译将得到led.bin文件。

2.烧写

将SD卡插入电脑,并让VmWare里的Ubuntu识别出来,然后执行如下命令:

1

sudo ./sd_fusing.sh /dev/sdb ../01.led/led.bin

Tiny4412-Prog

Tiny4412-Prog

如图所示,SD卡烧写成功,将SD卡插到Tiny4412开发板上,并设置为SD卡启动,这时你就会看到LED灯在闪烁。

说明:sd_fusing.sh是一个shell脚本,这个脚本文件,一键烧写程序到 SD 卡中。我们分析该脚本程序,发现其核心命令就3条

1

2

3

4

5

dd iflag=dsync oflag=dsync if=/work/4412/tools/E4412_N.bl1.bin of=$1 seek=$signed_bl1_position

 

dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position

 

sync

第 1行的命令用于将E4412_N.bl1.bin烧写到 SD卡的第 1个扇区 (扇区从 0编号 );

第 2行的命令用于将bl2.bin烧写到SD卡的第17个扇区;

第 3行的命令用于将内存缓冲区数据写入磁盘.

E4412_N.bl1.bin(BL1) 是由三星原厂提供, 没有源码;

bl2.bin 是通过 mkbl2 工具处理源文件得到,具体实现如下:

1

./mkbl2 leds_on.bin bl2.bin 14336

mkbl2 是用来生成 bl2.bin 的工具,通过编译 V310-EVT1-mkbl2.c 文件得到,具体如下:

1

gcc -o mkbl2 V310-EVT1-mkbl2.c

通过分析 V310-EVT1-mkbl2.c源码,我们可以知道它主要做了这些工作:

1). 从源文件中读取14K 的数据到 Buf 当中;

2). 处理 Buf 中前14332 字节的数据,得到 4字节的checksum ;

3). 组装 Buf 中前 14332 字节的数据和 4字节的 checksum,得到一个新的 14K 的 Buf 数据;

4). 将 3) 中构建的Buf 数据写到bl2.bin文件中

四、上电实验

如下图所示,可以看到4个led轮流着点亮及熄灭

tiny4412流水灯效果

tiny4412流水灯效果

 

完整的程序下载地址(解压密码:WWW.techbulo.Com):

下载地址


关键字:Exynos4412  汇编LED  操作代码 引用地址:Exynos4412汇编LED操作代码

上一篇:Exynos4412的启动过程分析
下一篇:Tiny4412的LCD操作

推荐阅读最新更新时间:2024-03-16 16:16

Exynos4412从SD卡启动的简单网络文件系统制作
1. 简介 嵌入式系统能够在开发板上正常运行,需要先进行系统配置,一个完整的嵌入式系统应该包含的几个部分::uboot,kernel,rootfs,appfs。这几部分在ARM板Flash上的位置关系如下图所示: 嵌入式系统分区结构 注:图片来源于韦东山老师的《嵌入式Linux应用开发完全手册》 rootfs可以不用添加到开发板,而是部署到PC机上,开发板在运行完kernel,要挂载rootfs时,可以通过NFS网络挂载到设定好的PC机上的文件系统上。 操作系统: 内核 + 文件(应用, 配置, 设备, ...); bootloader: u-boot (交互界面) # lsX help
[单片机]
<font color='red'>Exynos4412</font>从SD卡启动的简单网络文件系统制作
51单片机led灯渐变PWM调光(渐亮渐灭)C语言和汇编源程序
PWM控制led灯渐亮渐灭程序 适用ME500开发系统 短接JP41-2选用8个LED灯 PWM—PulseWidthModulation(脉冲宽度调制) PWM足?种周期?走而高低电平的rV空比可以调制的方波信兮. 按K2—下,PWM值减小,则占空比增加。 兗度逐渐增加,直到8个LED灯达到高亮,蜂鸣器响。 按K1—下,PWM值增加,则占空比减小。 立度逐渐减弱,直到8个LED灯达到最峭,蜂鸣器响。 单片机汇编语言源程序如下: ; PWM 控制 LED 灯渐亮渐灭程序 ; 适用 ME500 开发系统 ; 晶振为11.0592M ; 利用定时器控制产生占空比可变的 PWM 波 ; 按K1,PWM值增加,则占空比减小,LED 灯渐
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • Linux内核移植
    实验步骤:(1)准备工作(2)修改顶层Makefile(3)修改falsh 分区(4)配置编译内核下面以Linux2 6 30 4内核移植到gec2440为例:一、准备 ...
  • S5PV210 PWM定时器
    第一节 S5PV210的PWM定时器S5PV210共有5个32bit的PWM定时器,其中定时器0、1、2、3有PWM功能,定时器4没有输出引脚。PWM定时器使用PCLK_PS ...
  • S5PV210 NAND Flash
    NAND Flash关于NAND FlashS5PV210的NAND Flash控制器有如下特点:1) 支持512byte,2k,4k,8k的页大小2) 通过各种软件模式来进行NAND Fl ...
  • S5PV210串口
    串口设置之输入输出字符S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来 ...
  • S5PV210按键控制LED
    原理图如图所示:查询用户手册得到:程序例子:(完整代码见“代码下载链接”)1、轮询的方式查询按键事件 *main c* 核心代码如下:while(1 ...
  • S5PV210控制蜂鸣器
  • S5PV210的启动过程
  • S5PV210点亮LED
  • S5PV210启动过程详解
何立民专栏 单片机及嵌入式宝典

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

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