bootloader---9.点亮led

原创 2016年08月29日 13:52:52

刚开始学习arm开发的时候看的是《S3c2410完全开发流程》,是非常不错的开发入门教程,表达一下对作者的崇高够意,但美中不足的是书中有些寄存器只是针对于2410的,而现在我手中的板子是2440的。虽然道理是相通的,但是如果能有2440的就更好了,谁让咱是新手呢?(什么是新手?新手就是板子必须是一样的,例子完全是一样的才能学习)

一、环境搭建:

1.1 windows XP:

       DNW : 下载编写好的u-boot

       SecureCRT: 显示串口打印消息

       vmware + ubuntu 10.10

    硬件: tq2440 + 电源

           双母头串口线 + usb转串口

        usb下载线   

       虚拟机中,<span times="" new="" roman";="" mso-hansi-font-family:"times="" roman";mso-bidi-font-family:"times="" mso-font-kerning:1.0pt;mso-ansi-language:en-us;mso-fareast-language:zh-cn;="" mso-bidi-language:ar-sa"="" style="word-wrap: break-word; font-size: 10.5pt; font-family: 宋体;">直接解压EABI-4.3.3_EmbedSky_20091210.tar.bz2/目录下,不用设置环境变量。在Makefile中把编译工具链的路径写死就行了。

二、汇编写的点亮LED

2.1 start.S

点击(此处)折叠或打开

  1. .text
  2. .global _start
  3. _start:
  4. ldr r0, =0x56000010
  5. ldr r1, =0x00015400
  6. str r1, [r0]

  7. ldr r0, =0x56000014
  8. mov r1, #0
  9. str r1, [r0]

  10. loop:
  11. b loop
2.2 Makefile

点击(此处)折叠或打开

  1. CROSS_COMPILE = /opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin/ arm-linux-

  2. AS = $(CROSS_COMPILE)as
  3. LD = $(CROSS_COMPILE)ld
  4. CC = $(CROSS_COMPILE)gcc
  5. CPP = $(CC) -E
  6. AR = $(CROSS_COMPILE)ar
  7. NM = $(CROSS_COMPILE)nm
  8. STRIP = $(CROSS_COMPILE)strip
  9. OBJCOPY = $(CROSS_COMPILE)objcopy
  10. OBJDUMP = $(CROSS_COMPILE)objdump RANLIB = $(CROSS_COMPILE)RANLIB

  11. led_on:start.S
  12. $(CC) -g -c -o led_on.o start.S
  13. $(LD) -Ttext 0x0000000 -g led_on.o -o led_on_tmp.o
  14. $(OBJCOPY) -O binary -S led_on_tmp.o led_on
  15. clean:
  16. rm -f led_on
  17. rm -f led_on.o
  18. rm -f led_on_tmp.o

三、c语言写的点亮LED
3.1 start.S

点击(此处)折叠或打开

  1. .text
  2. .global _start
  3. _start:
  4. ldr sp, =1024*4
  5. bl main

  6. loop:
  7. b loop
3.2 main.c

点击(此处)折叠或打开

  1. #define GPBCON (*(volatile unsigned int *) 0x56000000)
  2. #define GPBDAT (*(volatile unsigned int *) 0x56000004)

  3. void main()
  4. {
  5.     GPBCON = 0x15400;
  6.     GPBDAT = 0x0;
  7.     return ;
  8. }
3.3 Makefile

点击(此处)折叠或打开

  1. CROSS_COMPILE = /opt/EmbedSky/crosstools_3.4.5_softfloat/gcc-3.4.5-glibc-2.3.6/arm-linux/bin/ arm-linux-
  2. LD = $(CROSS_COMPILE)ld
  3. CC = $(CROSS_COMPILE)gcc
  4. OBJCOPY = $(CROSS_COMPILE)objcopy

  5. led_on:start.S
  6. $(CC) -g -c -o led_on.o start.S
  7. $(CC) -g -c -o main.o main.c
  8. $(LD) -Ttext 0x0000000 start.o main.o -o led_on_tmp.o
  9. $(OBJCOPY) -O binary -S led_on_tmp.o led_on
  10. clean:
  11. rm -f led_on
  12. rm -f led_on.o
  13. rm -f led_on_tmp.o
四、 c语言写的流水灯
4.1 start.S

点击(此处)折叠或打开

  1. .text
  2. .global _start
  3. _start:
  4. ldr r0, =0x53000000
  5. mov r1, #0x0
  6. str r1, [r0]

  7. ldr sp, =1024*4
  8. bl main

  9. loop:
  10. b loop
4.2 main.c

点击(此处)折叠或打开

  1. #define GPBCON (*(volatile unsigned int *) 0x56000010)
  2. #define GPBDAT (*(volatile unsigned int *) 0x56000014)

  3. static inline void delay (unsigned long loops)
  4. {
  5.     __asm__ volatile ("1:\n"
  6.             "subs %0, %1, #1\n"
  7.             "bne 1b":"=r" (loops):"0" (loops));
  8. }

  9. void main()
  10. {
  11.     int i = 1;
  12.     GPBCON = 0x15400;
  13.     while(1)
  14.     { 
  15.         GPBDAT = 0x7FF&(~i<<5);
  16.         i *= 2;
  17.         if(16==i)
  18.             i = 1;
  19.         delay(400000);
  20.     } 
  21.     return ;
  22. }
要注意的是,s3c2440默认情况下是开启了watchdog,所以当运行这个程序时突然灯亮的顺序不对了,要考虑关闭watchdog。
delay(400000); 很接近1s,400000这个数值是凑出来的,具体这个延时是怎么算的,还不太清楚,但是肯定和51“一个机器周期=12个时钟周期”的计算方法不一样。
版权声明:本文为博主原创文章,转载请注明出处。

相关文章推荐

ARM9/ARM11裸机开发笔记1之MDK开发环境和点亮LED

很多从单片机或者从CM3转到ARM9/ARM11的时候,一开始就讲得是Uboot,Linux,然后就是什么QT等高级玩意,不像单片机有什么裸机开发的概念,的确,这些高级ARM本来就是用来跑系统,谁用来...
  • mzwhhwj
  • mzwhhwj
  • 2015年03月22日 08:52
  • 764

东软载波M0,HR8P506开发应用初阶-搭建环境及点亮LED.

基本上,任意一种MCU,只要点亮灯,就代表已经搭建好编译环境及烧录工具了, 这里我将主要介绍怎么搭建HR8P506这颗M0的开发环境及如何点亮第一颗LED. 首先我使用的开发环境是Keil5...
  • i7gly
  • i7gly
  • 2017年01月16日 16:17
  • 1461

Arduino 用两个按键分别控制两个LED灯点亮

实验简介 使用两个按键,分别控制两个LED灯的点亮与关闭。 按一下,亮,再按一下灭,走起...... 先说明一下4脚按键开关的工作原理 示例效果 BOM表 Arduino Uno    *...
  • ling3ye
  • ling3ye
  • 2016年10月26日 15:28
  • 4766

linux平台总线驱动设备模型之点亮LED

上一节中,我们引入Linux input子系统的分离分层概念,发现这样的架构特别容易移植,因为有一部分是已经相对稳定,它已经把公共的部分抽象出来,不用驱动工程师再去修改,只需要添加符合输入设备的设备驱...

编程控制8位LED循环点亮

8个LED正极通过1千欧的限流电阻接到电源正极,负极接单片机控制端P0口。只要P0口管脚输出低电平,对应的LED就会被点亮。原理图如下:       单片机控制外部器件是通过I/O口的操作来实...

嵌入式驱动编写-点亮LED驱动程序

在开发板上,有三个LED灯.如何通过应用程序点亮这三个灯如何编写驱动程序 操作硬件的时候,我们需要准备开发板的原理图和开发手册,,根据这两个文档来进行配置 ...

如何在qualcomm平台Android点亮一个LED工作流程分析

前言: 本篇blog主要是为初次接触高通平台的新手 讲述如何在高通平台点亮一个LED的工作流程。 一、LED流程分层 二、代码分析     1.FW层代码分析 BatteryService.j...
  • weijory
  • weijory
  • 2016年10月10日 13:13
  • 1792

制作esp8266+c51,点亮单片机上的led小灯

最近有朋友让我做一个手机通过wifi控制51单片机led小灯(功能很简单,就是一个床头灯)。我上网查了查,esp8266wifi模块功能很强大,但是没有基于51的(其实有几篇,但是通过实践都不好使,不...

mini2440学习笔记 之01 配置ADS1.2编译调试程序(在sram中点亮LED)

1.打开 CodeWarrior     开始->所有程序->ARM Developer Suite v1.2->CodeWarrior for ARM Developer Suite 2.新...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bootloader---9.点亮led
举报原因:
原因补充:

(最多只允许输入30个字)