当前位置:首页 > 单片机 > 单片机
[导读]  最近拿出了空闲已久的Tiny6410开发板来玩一下,一直对Linux有变态的崇拜,所以这次过度没有悬念的抛弃诸如ADS1.2或RVDS等IDE开发环境。完全的VIM + GCC搞定一切。  言简意赅,生成的BIN放入SD卡中启动,详细过

  最近拿出了空闲已久的Tiny6410开发板来玩一下,一直对Linux有变态的崇拜,所以这次过度没有悬念的抛弃诸如ADS1.2或RVDS等IDE开发环境。完全的VIM + GCC搞定一切。

  言简意赅,生成的BIN放入SD卡中启动,详细过程参见Tiny6410的帮助文档,配置文件附送光盘里都有。

  这里仅主要介绍一下如何点亮核心板上的4个LED,当然在此之前arm-linux-gcc交叉编译环境要搭建起来,还要添入环境变量之中(在终端中输入arm-linux-gcc -v 看是否能正确的查询到当前交叉编译器的版本号以检查是否添加成功,出现如图所示说明添加成功)。

  为了点亮LED,我们先看一下友善之臂Tiny6410开发板关于LED的原理图部分。

  由图可见,我们要操作的LED分别由GPK[4-7]口控制。

  然后就是看一下三星的datasheet了。

  可见我们把输入方向配置为输出,并输出低电平LED才会亮。  

  首先先看汇编代码。


@********************************************@File:led_on.s@function:LED@author:pang123hui@********************************************.text@定义一个代码段.global_start@定义一个全局入口_start:@全局入口处LDRR0,=0x7F008800@设R0为GPKCON0寄存器MOVR1,#0x11112222@设置GPKC[4-7]为输出STRR1,[R0]LDRR0,=0x7F008808@R0设为GPKDAT寄存器MOVR1,#0x00000000@设置GPKDAT[4-7]为低电平STRR1,[R0]MAIN_LOOP:BMAIN_LOOP


汇编里的B指令为跳转指令,直接向PC寄存器赋值。B跳转是个相对跳转指令,其机器吗格式如下:

  即B跳转指令依赖于当前PC寄存器的值,这个特点使得使用B指令的程序不依赖于代码存储的位置——即不管这条代码放在什么位置,B指令都可以跳到正确的位置。这类指令被称为位置无关码。

  还有一条BL指令,除了条装之外,还将返回地址(BL的下一条指令的地址)保存在LR寄存器中,也是位置无关的指令。

  B和BL指令可跳转的范围是当前指令的前后32MB.

相关Makefile文件。


CC=arm-linux-gccCFLAGS=-g-c-oled_on.bin:led_on.s$(CC)$(CFLAGS)led_on.oled_on.sarm-linux-ld-Ttext0x0000000-gled_on.o-oled_on_elfarm-linux-objcopy-Obinary-Sled_on_elfled_on.binclean:rm-fled_on.binled_on_elf*.o


简单介绍一下相关指令。

A.arm-linux-gcc

-c  对源文件进行预处理、编译、汇编,但不做链接,生成中间OBJ文件,通常以.o结尾。

-g添加调试信息

-o  指定输出文件。如果不指定-o filename选项,默认输出为a.out文件。

B. arm-linux-ld

-Ttext startaddr

-Tdada startaddr

-Tbss startaddr

其中-T选项用来指定代码段、数据段、BSS段的起始地址。

如果不定义数据段和BBS段的起始地址,它们会被依次放在代码段的后面。

C. arm-linux-objcopy

用于将一个目标文件复制到另一个文件内,可以使用不同于源文件的格式输出到目的文件。常用于格式转化。

-O用于指定输出的文件格式。如二进制–O binary

-I  用于指定源文件的格式

-S  不从源文件中复制重定位信息和符号信息到目标文件

D. arm-linux-objdump

用于显示二进制文件住处。常用于进行反汇编,方便调试。

-D  反汇编所有段

-m  指定反汇编目标文件所使用的架构,如–m arm指定为ARM体系架构。

-b指定输入文件的格式,这不是必须的,arm-linux-objdump能自动识别多种格式。

C语言代码。


#definerGPKCON0(*(volatileunsigned*)(0x7F008800))#definerGPKCON1(*(volatileunsigned*)(0x7F008804))#definerGPKDAT(*(volatileunsigned*)(0x7F008808))#definerGPKPUD(*(volatileunsigned*)(0x7F00880C))intmain(void){//设置GPKCON[4-7]为输出rGPKCON0=0x11112222;//设置GPKDAT[4-7]为低电平rGPKDAT=0xffffff0f;return0;}


  有些学习过Bootloader和内核的朋友肯定会知道,在调用C语言函数之前肯定会有一段汇编代码在前面铺路,进行一些必要的初始化工作;而那些只学过单片机而没有学过ARM的朋友肯定会觉得很奇怪,在单片机中写C代码,前面完成可以不用任何汇编代码。这是为什么呢?

  这主要是因为我们的开发环境(这里主要是指编译环境)的不同,在开发单片机程序的时候,开发环境(如KEIL)会在编译C代码的时候,给我添加启动代码(startup-51)或者在编译时已经由编译器在后台为我们初始化好了。而在开发ARM程序时,ARM处 理器支持多种模式,多种功能,而在不同的领域不同的项目里面,我们可以有选择的、适当的选择这些功能,这时,编译器就不知道我们需要什么功能,需要什么模 式,编译器也就无法给我们提供默认的“初始化”代码,所以,编译器干脆就“不管”这些了,把这些工作交由我们开发者来处理。

这里最简单的启动代码。


@****************************************@File:startup.s@function:startup@author:pang123hui@****************************************.text.global_start_start:LDRR0,=0x7E004000@WATCHDOG寄存器地址MOVR1,#0x0STRR1,[R0]@写入0,禁止WATCHDOG,否则CPU会不断重启LDRSP,=0x0c001000@设置堆栈,注意:这时我们是将程序直接烧录到SDRAM中,所以堆栈要设置在SDRAM中@如果将程序烧在NANDFLASH中,需将堆栈改为1024*4,因为NANDFLASH中的代码@在复位后会移到内部RAM中,此RAM只有4KBLmain@调用C程序中的main函数halt_loop:Bhalt_loop


这里要注意的一点是S3C6410中RAM的地址,见datasheet,如图。

最后是Makefile文件。


CC=arm-linux-gccCFLAGS=-g-c-oled_on.bin:startup.smain.c$(CC)$(CFLAGS)startup.ostartup.s$(CC)$(CFLAGS)main.omain.carm-linux-ld-Ttext0x0c000000-gstartup.omain.o-oled_on_elfarm-linux-objcopy-Obinary-Sled_on_elfled_on.binclean:rm-fled_on.binled_on_elf*.o


  东西很简单没什么好说的,在此记录,以免忘记,如有疑问或发现本文有何错误,欢迎提出。


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

中国 上海,2025年8月28日——全球领先的智能传感和发射器解决方案供应商艾迈斯欧司朗(SIX:AMS)今日宣布,其全新UV-C LED在辐射灭菌领域取得重大技术突破,并获得评估认可。

关键字: LED 发射器 光电半导体

在LED照明技术向高能效、低电磁干扰(EMI)方向演进的过程中,电流模式控制与动态负载调整算法的协同优化成为突破技术瓶颈的核心路径。本文将从控制架构创新、动态负载补偿机制及EMI抑制策略三个维度,揭示新一代LED驱动器的...

关键字: LED 动态负载调整算法 EMI

在全球倡导节能减排的大背景下,家电产品的能耗问题日益受到关注。电视机作为家庭中使用频率较高的电器之一,其能耗的降低对于节约能源和减少碳排放具有重要意义。LED 驱动技术作为影响电视机能耗的关键因素,正不断发展和创新,为实...

关键字: 驱动技术 能耗 LED

LED是一种能发光的半导体电子元件,这种电子元件早期只能发出低光度的红光,随着技术的不断进步,现在已发展到能发出可见光、红外线及紫外线的程度,光度也有了很大的提高。

关键字: LED

PCB设计在EMI抑制中起着关键作用。合理的布局布线能够有效减少信号的电磁辐射和相互干扰。首先,应将功率电路和控制电路进行物理隔离,避免功率电路中的大电流、高电压信号对控制电路造成干扰。功率器件和电感等高频器件应尽量靠近...

关键字: LED 开关电源

为确保太阳能路灯的稳定工作,建议使用硅酮密封将太阳能路灯组件的接线固定在支架上。在连接路灯部件的线路时,必须遵循正确的顺序,以防止正负连接颠倒导致的短路问题。此外,太阳能路灯灯杆底部的接线应采用适当的密封装置或硅胶进行密...

关键字: LED 路灯

在我们家,WTW已经运行了14年了。它是一种非连接(不在线)的通风机,从房子外面吸收新鲜空气,经过过滤后空运到房子里。新鲜的环境空气是用从房子里大多数房间取出的空气预热的。再加热的能量是通过热交换器从流出的“脏”空气中获...

关键字: Zigbee LED 传感器

中国 上海,2025年8月12日——全球领先的智能传感和发射器解决方案供应商艾迈斯欧司朗(SIX:AMS)今日宣布,使用新一代OSTAR™ Projection Power LED为紧凑型投影系统乃至未来的抬头显示器(H...

关键字: 显示器 LED 座舱

Aug. 6, 2025 ---- 根据TrendForce集邦咨询最新调查,因国际形势变化以及中国相关政策的推动,2025年上半年全球电视品牌出货量达9,250万台,年增2%。由于品牌普遍提前出货,下半年旺季可能面临压...

关键字: LED OLED 电视

艾迈斯欧司朗新一代中功率LED为原始设备制造商(OEM)提供面向未来的超高效、长寿命及节能的解决方案——成为灯槽、线条灯与筒灯等商业照明装置的最优选择。除本次新品外,艾迈斯欧司朗还推出另一系列新款LED,实现超高光效,完...

关键字: LED 发射器 嵌入式
关闭