当前位置:首页 > 单片机 > 单片机
[导读]一、目的 通过实现FS2410板子上的D9、D10、D11、D12四个发光二极管的循环点亮,了解ARM嵌入式开发的基本流程。二、建立开发环境 (1) 安装编译器 arm-linux-gcc 我用的是 arm-linux-gcc-3.4.1, 执行安装步骤如下: ta

一、目的
通过实现FS2410板子上的D9、D10、D11、D12四个发光二极管的循环点亮,了解ARM嵌入式开发的基本流程。

二、建立开发环境
(1) 安装编译器 arm-linux-gcc
我用的是 arm-linux-gcc-3.4.1, 执行安装步骤如下:
tar xjvf arm-linux-gcc-3.4.1.tar.bz2 -C /

(2) 生成的编译工具在 /usr/local/arm/3.4.1/bin下, 修改 /etc/profile 将arm-linux-gcc 加入到 PATH环境变量, 这样以后可以直接使用 arm-linux-gcc 等 编译工具而不必指定路径, 方便不少:

PATH=$PATH:/usr/local/arm/3.4.1/bin
export

注意重启后生效, 可通过 which arm-linux-gcc 来检测你的设置是否生效。

三、简单了解开发板
因为我们是要控制开发板上的D9、D10、D11、D12四个发光二极管,让它们依次循环点亮,所以有必要了解FS2410开发板是如何控制它们的。通过查此开发板的原理图, 我们发现,实际上 D9、D10、D11、D12 对应 GPFCON 寄存器的 GPF7、GPF6、GPF5、GPF4,而 GPF4,5,6,7分别是GPFCON寄存器的 第9和8、11和10、13和12、15和14位,对应关系如下:

-----------------------------------------------------
GPFCON Bit Description
-----------------------------------------------------
GPF7[15:14]00 = Input 01 = Output
10 = EINT7 11 = Reserved
-----------------------------------------------------
GPF6[13:12]00 = Input 01 = Output
10 = EINT6 11 = Reserved
-----------------------------------------------------
GPF5[11:10]00 = Input 01 = Output
10 = EINT5 11 = Reserved
-----------------------------------------------------
GPF4[9:8]00 = Input 01 = Output
10 = EINT4 11 = Reserved
-----------------------------------------------------

需将 GPF4,5,6,7 设置成 output 以控制点亮D12, D11, D10 和 D9 四个发光二极管。
因为这四个发光二极管均为低电平有效,需要设置 GPFDAT 的对应位为0。

四、编写程序
(1) 一段汇编程序:
; led_on.s
.text
.global _start
_start:
mov r3, #4 ; 记数器,用以循环点亮四个灯
ldr r0, =0x56000050; 设置 R0 为GPFCON寄存器,此寄存器
; 用以选择端口F各个引脚的功能是输出、
; 输入、还是其它
mov r1, #0x1
mov r2, r1, LSL#8
_loop:
ldr r4, =100000
str r2, [r0]

ldr r5, =0x56000054; 设置 R5 为GPFDAT寄存器,用于读/写
; 端口F各引脚的数据
mov r1, #0x0
str r1, [r5]

_delay:
nop
subs r4, r4, #1
bne _delay

mov r2, r2, LSL#2
subs r3, r3, #1
bne _loop

b _start

呵呵, 你也许要问为何要用汇编, 因为我们现在是直接跑在“裸”的芯片上, 没有 操作系统的支持,无法初始化 C 环境, 而且我们的程序将来要烧写到Nand flash 的前 4K里,而Nand flash是没有地址总线的, 如果用C, 它的变量、函数是无法找到的。

(2) 编写 Makefile
Linux下写程序离不开Makefile, 它能减化你的编译过程:
led_on:led_on.s
arm-linux-gcc -c -o led_on.o led_on.s
arm-linux-ld -Ttext 0x00000000 -g led_on.o -o led_on_tmp.o
arm-linux-objcopy -O binary -S led_on_tmp.o led_on

clean:
rm -f led_on.o
rm -f led_on
rm -f led_on_tmp.o

注意, Makefile 中相应的命令前要有一个TAB。

(3) 编译程序
执行 make -f Makefile 来生成 led_on, 呵呵, 我们要的终于生成了

五、烧写程序
把刚刚生成的 led_on 拿到 winxp下, 我们通过 JTAG 将它烧到开发板的Nand flash 执行 sjf2410.exe /f:led_on 回车后, 当出现提示时依次输入 0, 0, 0, 烧写完成后
出现提示, 输入 2 退出即可。

Reset 一下开发板, 看到依次被循环点亮的发光二极管了吗


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

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭