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个时钟周期”的计算方法不一样。
版权声明:本文为博主原创文章,转载请注明出处。 举报

相关文章推荐

s5pv210点亮第一个led详解

这里主要介绍如何点亮s5pv210的led,用来学习如何操作gpio的步骤: 1、硬件电路图,我们先了解接口资源 led1对应GPJ0_3,led的正极接了电源VDD_IO,因此我们需要给GP...

STM32点亮LED

点亮LED灯是嵌入式里的hello world,那么开始愉快的hello world之旅吧。 准备 (1)硬件 STM32开发板,jlink仿真器(用于烧入程序) (2)软件 a)集成开发环境...

精选:深入理解 Docker 内部原理及网络配置

网络绝对是任何系统的核心,对于容器而言也是如此。Docker 作为目前最火的轻量级容器技术,有很多令人称道的功能,如 Docker 的镜像管理。然而,Docker的网络一直以来都比较薄弱,所以我们有必要深入了解Docker的网络知识,以满足更高的网络需求。

pcDuino点亮LED

从买到板子, 到真正把LED点亮, 前会用了差不多一周的时间。 原谅我的效率之低吧, 我也是受害者。 首先声明一下, 大部分代码是从网上找的, 我只是负责整理。 我是一个有节操的人, 如有侵权, 请...

TQ210 —— 点亮LED

TQ210 —— 点亮LED   1、GPIO硬件简介      通用输入输出端口,对IO进行读写操作是所有硬件操作的基础。         S5PV210有237个多功能IO口,通过设置寄存器确定某...

ARM11——点亮LED灯

首先你得有三星公司提供的startup.s文件,用来初始化并通过跳转进入main()函数 使用软件:ADS1.2 使用JLINK调试   //使用加入头文件, //以下头文件中包含了6410...

Android下点亮LED

手上有一个android开发平台,于是想在底层加个自己的硬件模块然后通过Android的HAL方式向上封装出底层驱动供JAVA APP调用。既然是刚上手,那就用led灯来做为先导开发走走流程吧,至少得...

点亮LED灯(一)

想当初都是用汇编来编写单片机的程序,那滋味现在想来都是满满的回忆,还是用C语言写起来爽快啊! 用C写单片机程序,只需要引入头文件即可,实际上该头文件只是定义了特殊功能寄存器地址。 为了今后使用方便,我...

TQ2440之LED点亮

TQ2440端口介绍: 功能:实现四个LED灯的显示(全亮,轮询点亮...),管脚配置如下                  &...

OK6410 点亮LED灯

OK6410gpio 控制led led原理图如下:

点亮LED小灯

忙活了半天,准备工作做了那么多,终于要编写我们的程序代码了。如果学过 C 语言的话,你应该很轻松的跟着我的编程自己写出来,如果没学过 C 语言也没关系,你先照着我的抄,我会在合适的位置写出来对 C 语...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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