历史上的今天

今天是:2024年11月04日(星期一)

正在发生

2021年11月04日 | mini2440 裸机编程 -led

发布者:PeacefulAura 来源: eefocus关键字:mini2440  裸机编程  led 手机看文章 扫描二维码
随时随地手机看文章

本系列使用的硬件环境是友善之臂的 mini2440,百问网的OpenJtag,所有程序在 linux gcc下编译, 具体硬件设置  软件环境搭建可见openjtag 文档:

编译器使用友善之臂的 4.4.3 。编译器配置 /etc/profile:


  1. PATH="$PATH:/opt/FriendlyARM/toolschain/4.4.3/bin"  

  2. export PATH  


注意如果在 /etc/provile 里面修改了编译器 之后,只是 source /etc/profile 还是不够的,无法调整所用编译器路径。 正确做法是 先 source /etc/environment  然后再 source /etc/profile


第一个程序是 led 灯控制:

开头 汇编 文件:

  1. @******************************************************************************  

  2. @ File£ºcrt0.S  

  3. @ ¹¦ÄÜ£ºÍ¨¹ýËüתÈëC³ÌÐò  

  4. @******************************************************************************  

  5.   

  6. #define  PXT                            0x12  

  7.   

  8. .text  

  9. .global _start  

  10. _start:  

  11.             ldr     r0, =0x53000000     @ disable WATCHDOG  

  12.             mov     r1, #0x0                       

  13.             str   r1, [r0]              @   

  14.   

  15.             ldr     sp, =1024*4         @ stack pointer point to 4K  

  16.   

  17.             bl      main                  

  18. halt_loop:  

  19.             b       halt_loop  


主函数文件:


  1. #define GPBCON      (*(volatile unsigned long *)0x56000010)  

  2. #define GPBDAT      (*(volatile unsigned long *)0x56000014)  

  3.   

  4. #define GPB5_out    (1<<(5*2))  

  5. #define GPB6_out    (1<<(6*2))  

  6. #define GPB7_out    (1<<(7*2))  

  7. #define GPB8_out    (1<<(8*2))  

  8.   

  9. void  wait(unsigned long dly)  

  10. {  

  11.     for(; dly > 0; dly--);  

  12. }  

  13.   

  14. int main(void)  

  15. {  

  16.     unsigned long i = 0;  

  17.       

  18.     GPBCON = GPB5_out|GPB6_out|GPB7_out|GPB8_out;     

  19.   

  20.     while(1){  

  21.         wait(100000);  

  22.         GPBDAT = (1<< ( (i%4) + 5) );   

  23.         if(++i == 16)  

  24.             i = 0;  

  25.     }  

  26.   

  27.     return 0;  

  28. }  



这个程序实现的功能是点亮led 灯,并实现流水效果。其中高电平熄灭 led 灯。


链接脚本把两个文件链接成一个独立的二进制文件: ( 使用开始的 4K 字节内存)


  1. SECTIONS {  

  2.         . = 0x00000000;  

  3.         .text          :   { *(.text) }  

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

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

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

  7. }  


Makefile 脚本


  1. CFLAGS  := -Wall -Wstrict-prototypes -g -fomit-frame-pointer -ffreestanding  

  2. all : crt0.S  leds.c  

  3.         arm-linux-gcc $(CFLAGS) -c -o crt0.o crt0.S  

  4.         arm-linux-gcc $(CFLAGS) -c -o leds.o leds.c  

  5.         arm-linux-ld -Tleds.lds  crt0.o leds.o -o leds_elf  

  6.         arm-linux-objcopy -O binary -S leds_elf leds.bin  

  7.         arm-linux-objdump -D -m arm  leds_elf > leds.dis  

  8. clean:  

  9.         rm -f   leds.dis leds.bin leds_elf *.o  




首先运行脚本openocd.sh


  1. openocd -f /etc/openocd/interface/openjtag.cfg -f /etc/openocd/target/samsung_s3c2440.cfg  

保持开启不退出状态。


然后另开启一个终端启动 elf 文件调试


  1. arm-linux-gdb -x gdb.init leds_elf  



其中 gdb.init 文件内容:


  1. target remote 127.0.0.1:3333  

  2. monitor halt  

  3. monitor arm920t cp15 2 0  

  4. monitor step   

  5. load  


此时就可以像调试普通程序一样调试这个裸机程序。


工程文件地址:


有一点特别需要注意:

汇编语言文件开头的位置标号必须是 _start:  如果是其它的则会导致 OpenJtag 无法识别,load 之后 用si指令执行导致 PC指针到未知的位置!!。


关键字:mini2440  裸机编程  led 引用地址:mini2440 裸机编程 -led

上一篇:mini2440裸机编程------IIS
下一篇:2440+dm9000A裸机以太网通讯

推荐阅读

据报道,日本反垄断监管机构准备明年启动对美国谷歌、亚马逊公司等技术类企业的调查,以确认这些国际互联网巨头在日本市场是否利用行业优势地位剥削供应商、打压竞争对手。amazon(图片来源streeteasy)  现在谷歌、亚马逊、Facebook等美国科技业巨头,对于全球经济、社会的影响力越来越大,也引发了多国政府阻碍市场竞争的忧虑。此前,欧盟委员会已经对...
引言 负电压被用于为汽车信息娱乐系统中数量越来越多的 LCD 显示屏供电。同样,在工业和铁路环境中,负电压轨可满足仪表和监视应用的需要。在所有的情况下,负电压轨均必须用正电源产生,但是正至负 IC 不像降压型控制器那样容易获得。制造商不太可能拥有经过测试的合格负输出转换器,却很可能已经有了一些经过核准的降压型控制器,例如 LTC3892 双输出控...
据中国经济周刊报道,11月3日,在湖南长沙举行的2020年世界计算机大会上,中国工程院院士倪光南表示,中国在开源芯片方向上有可能取得突破,并规避美国可能采取的限制政策。图片来源:潇湘晨报据潇湘晨报报道,倪光南认为,从产业能力来讲,中国大部分行业在世界上还是领先的,但是有些产业本身就是世界性的,比如集成电路、芯片产品,并不是哪个国家能随...
有位使用示波器的朋友说他的示波器自动功能坏掉了,无法自动成功了。我看了一下他发过来的视频,是一条直线。一开始我怀疑是本身就没有信号,但他坚称是有信号的,于是我让他打开频率计看看能不能测出频率,因为频率计是硬件的,即使信号不在示波器屏幕内,也可以测出来。显示的结果是,这个信号的频率是5Hz。我告诉他这个频率的信号是不适合用自动功能的...

史海拾趣

问答坊 | AI 解惑

工控设备维修经验

维修工业电器要具备各种知识,包括机械、液压、当然更不能少了电子方面的知识。 1 V(n.  恒心、耐心、虚心、细心是我们成为高手的必要条件。然后要不断总结经验,维修经验往往能让我们迅速搞定故障。以下是本人在工作中的一点浅见,希望大 ...…

查看全部问答∨

找工作很受用的一段程序

某天突发奇想,是否用C可以实现类似类似C++类的封装呢? 整好今天没干啥事,心理发慌。小试一下,是可以实现,只是没有C++中数据封装的安全性。 假如C++是在C基础上封装的,这种机制是怎么实现的捏,需要考究~~ #include <iostream> #d ...…

查看全部问答∨

请教:大功率三相全控桥的吸收电路怎么设计?

本信息来自合作QQ群:电子工程师技术交流(12425841)   群主在坛子ID:Kata --------------------------------------------------------------------------------------------------- 请问大家:大功率三相全控桥的吸收电路怎么设计?…

查看全部问答∨

Vxworks实现ping命令

请教下,我们现在使用的VXWORKS系统跑在设备上 有些时候想看看能不能PING通接在该嵌入式系统的网络设备,请问该如何实现?…

查看全部问答∨

求GANG430编程器的中文版软件

谁有GANG430编程器的中文版软件?TI的网站上的链接坏了,谁有可以提供一下不?…

查看全部问答∨

后仿真的结果不对,求解!

程序: module time_delay_reg(in,                      clk  ,reset ,out        & ...…

查看全部问答∨

STM32F207

有板子了  但是程序上不了 是软件配置问题还是仿真器配置问题  求高手指点…

查看全部问答∨

764工作室,请给我一张免费的票吧

殷老师,王学长,陈学长,漆学姐,廖部----------------------764的全体室员。。。我代表1109班的孩纸们向你们问好啦,你们辛苦啦。。。。小的来给你打杂来了,请收下偶吧!   我一定好好发奋的!…

查看全部问答∨

我的板子被PCB协会评为2012年最烂的电路板,大家帮我看看有那么差吗?

我相信群众的眼光才是亮的! 下载下来分享给大家,希望不要范和我同样的错误了。不要问我PCB协会在那里啊! [ 本帖最后由 tzl 于 2012-5-23 08:19 编辑 ]…

查看全部问答∨

理解模拟电路:无源器件

本帖最后由 dontium 于 2015-1-23 12:44 编辑 TI还真有些好文章呢! 下面分离给大一篇,关于无源器件的: …

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

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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