历史上的今天

今天是:2024年10月21日(星期一)

正在发生

2018年10月21日 | ARM裸机程序之LED灯

发布者:CreativeDreamer 来源: eefocus关键字:ARM  裸机程序  LED灯 手机看文章 扫描二维码
随时随地手机看文章

从3月份开始看arm的裸机程序,到现在一个半月了,做到后来,发现自己越做到综合的程序,越吃力,还是得回头看看,为了最终写一个bootloader打下点基础吧,所以以这篇文章为开始,总结一下之前做过的裸机程序,希望会有所收获,我用的开发板是友善之臂的mini2440。


首先声明一点我都是在linux环境下写裸机程序的,因为这样能知道更多底层的东西,不过在这里面写就是有点不方便的是调试的时候,所以你程序要是调试不出来,你得把程序移植到一些编译器里调试(请注意移植的时候格式有点不同),所以偶尔在keil或ADS里面调试程序。在linux里面写程序最后编译,要配置交叉编译环境,怎么配置交叉编译环境我这里就不介绍了。



下面开始介绍第一个裸机程序,LED灯:


源文件1:led1.s


.text

.global _start

_start:

bl disable_watch_dog        @关闭看门狗

ldr r0, =0x56000010         @设置GPBCON寄存器

mov r1, #0x15400            @设置GPB5,GPB6,GPB7,GPB8为输出引脚

str r1, [r0]

 

ldr r0, =0x56000018        @设置上拉电阻

mov r1, #0x0

str r1, [r0]

 

ldr r0, =0x56000014        @配置GPBDAT寄存器

MAIN_LOOP:                         @进入一个死循环,间隔一段时间点亮4个LED

mov r1, #0x0               @点亮LED

str r1, [r0]

mov r2, #0x50000

bl delay                   @调用下面的延时函数

 

mov r1, #0x1e0             @相应的位设置成高电平,关闭LED

str r1, [r0]

mov r2, #0x50000

bl delay

b MAIN_LOOP

 

disable_watch_dog:

ldr r0, =0x53000000

mov r1, #0x0

str r1, [r0]

mov pc, r14                @把链接寄存器里的值给PC,可以实现函数的返回

delay:

sub r2, r2, #0x1

cmp r2, #0x0

bne delay

mov pc, lr


Makefile:

ledpp1.bin : led1.s

arm-linux-gcc -g -c -o led1.o led1.s

arm-linux-ld -Ttext 0x00000000 -g led1.o -o ledpp1_elf

arm-linux-objcopy -O binary -S ledpp1_elf ledpp1.bin

arm-linux-objdump -D -m arm ledpp1_elf > ledpp1.dis

clean:

rm -rf ledpp1.bin ledpp1_elf ledpp1.dis *.o


第一个程序就是这两个文件,程序实现的功能是开发板上4个LED灯 间隔2S左右的时间闪烁,因为这个程序我没有用定时器,所以那个2S是我估算的。

首先分析这个程序的Makefile:第一句表示生成一个ledpp1.bin的可执行文件(这个文件是最后下载到开发板上的),冒号的右边的led1.s文件是这个ledpp1.bin文件锁依赖的文件,也就是说ledpp1.bin依赖于led1.s,还有一点是你可以把这条语句理解成一个条件判断语句,如果led1.s的时间比ledpp1.bin时间新的话,就执行下面4条语句,一下四条分别是汇编生成led1.o文件,链接生成ledpp1_elf文件,arm-linux-objcopy生成.bin文件,最后一步生成反汇编代码。最后clean:里面的就是每次在make的时候删除除了led1.s 和Makefile的其他文件了。




下面分析led1.s的代码,首先关闭看门狗,为了不使程序反复地重启。这里涉及到三个寄存器:1.GPBCON寄存器,可以查看s3c2440A的芯片手册284页,这个寄存器的作用,配置开发板上各个引脚时输入引脚,还是输出引脚,还有中断引脚等等,这里是把LED配置成输出引脚。至于为什么配置成输出引脚,涉及一点硬件的知识,自行百度即可。


2.GPBUP寄存器:设置引脚是否上拉。


3.GPBDAT寄存器:这里写对应上面GPBCON寄存器,例如GPBDAT寄存器的第5位设置为1,表示输出高电平,设置为0表示设置低电平,LED的各个引脚时低电平使能的。


说到这里讲解完毕,几条汇编指令bl指令,ldr指令都挺有意思的,想更深入理解这些指令,可以看看最后生成的反汇编文件ledpp1.dis文件,看懂反汇编,以后去破解破解正版软件好像挺不错的样子

关键字:ARM  裸机程序  LED灯 引用地址:ARM裸机程序之LED灯

上一篇:ARM裸机程序之存储管理器控制SDRAM
下一篇:STM32——关于printf重定向到串口的问题

推荐阅读

近日,在由阿里巴巴、百度、腾讯、中国电信、中国移动、中国信息通信研究院以及英特尔联合主办的ODCC峰会期间,电源方案供应商Vicor推出了首款平板电源RFM系列3相AC/DC 48V转换器,仅为iPad大小,但输出功率达10000W,功率密度是传统3向AC/D解决方案的4倍,效率同样高达96%,解决了如今包括超算、AI在内的大功率服务器对于能源密度需求的痛点。这也是Vico...
  目前,位于泸州市蓝田街道江南路三段的城南新能源汽车综合充电站建设项目已完成室外装修,进入室内装修和附属设施建设阶段,预计今年年底前竣工投用。 城南新能源汽车综合充电站   该项目计划投资7500万元,新建充电停车场和配套商业设施,安装充电桩66根。项目建成投用后,将有效带动新能源汽车的推广。(江阳融媒体中心)
企查查显示,IGBT及方案供应商——森未科技近日完成 Pre-A 轮数千万元融资,投资方为朗玛峰创投、泰华创投等。据其官网介绍,成都森未科技有限公司是一家由清华大学和中国科学院博士团队创立的高科技企业,公司主要从事IGBT等功率半导体芯片及产品的设计、开发、销售,是国内为数不多从应用入手进行芯片及产品研发的公司。该公司长期与欧美、日本等国际...
故障现象电流1A量程,输出不受控。检测过程经检测,仪器控制板多个组件损坏,性能不良。维修过程更换控制板损坏组件,工程师整机调整检测仪器。维修结果仪器开机正常,完成修复。

史海拾趣

问答坊 | AI 解惑

如何提高模拟设计水平?

模拟技术是目前所有电子产品设计中不可或缺的部分,我们对模拟技术可以说一点都不陌生,从接触电子产品开始,我们就接触模拟产品了。模拟技术更多需要经验积累,对新入门的工程师来说,如何提升自己的模拟设计水平?我们欢迎广大资深工程师都来谈谈 ...…

查看全部问答∨

降阻剂的危害——你必须知道的接地内幕

为了更好地降低接地电阻,日本人不知道怎么就想出了一昏招,在接地体上包裹导电水泥等导电的混凝土(中国人美其名曰为降阻剂),从而增加接地体散流面,进一步降低接地电阻。使用降阻剂是效率极为低下的降阻措施,而且一般都会腐蚀接地体,大大缩短 ...…

查看全部问答∨

repllog.exe不会自动运行!

加了activesync组件。但是repllog.exe在插上usb时不会自动运行,结果无法同步,需要我自己手动运行repllog.exe。 请问是缺少了什么组件导致repllog.exe不自动运行的。…

查看全部问答∨

linux 下一步nor flash 的驱动

linux内核对nor flash的驱动都是通过cfi的,我可不可直接不用cfi接口,直接把nor flash的驱动挂在mtd下面,另外对nor flash的地址是否需要ioremap?请高手们指教,谢谢!…

查看全部问答∨

世上最小的电脑硬盘在哪里生产?

问下各问同事,请问世上最小的电脑硬盘是在哪里生产的?有的说是在贵州,是不是啊?我在百度里找了下,没有找到5555555…

查看全部问答∨

控制算法提问

请问用dsp开发:自动跟踪摄像头,他的控制算法有哪些呀? 有没有做过或者有头绪的朋友给指点一下 呀! 我在这里先谢过大家了!…

查看全部问答∨

急!!(evc4.0+ado3.1)create database 不成功

程序段如下:         hr=CLSIDFromProgID(g_szADOCE30ConnProgID,&tClsid);         hr= CoCreateInstance(tClsid,NULL,CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER,IID_Connection,(LPVOID*)&m_pAD ...…

查看全部问答∨

LM3S8962板子学习一 共同学习

今天收到了板子。先熟悉学习。再做个毕来设计。 有准备学习的兄弟可以给我留言,我们可以共同讨论共同进步。   有问题记得在这里留言哟。 [ 本帖最后由 zhiha258 于 2011-1-21 16:52 编辑 ]…

查看全部问答∨

网上找不STM32L的MDK,IAR模板啊!

官方有提供数据手册,编程手册。MDK4.13也支持了STM32L,但是没有模板怎么用啊? 不过我在MDK4.13里的BORD文件夹下找到STM32L的工程例子。还是不怎么放心。而且,现在STM32L似乎还买不到!…

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

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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