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

PIC单片机之第一个工程分析,点亮LED

电路图如下: 新建一个工程: 然后用工程向导设置工程 Project-》project wizard: 选择芯片: 设置编译器: 选择文件位置: 这里设置工程就完成了 添加C文件,这里...
  • chengdong1314
  • chengdong1314
  • 2016年06月03日 13:50
  • 1329

1.2.第一个实验——点亮LED灯

1.2.第一个实验——点亮LED灯  预备知识: (1)位、字节、IO端口、IO口       字节是内存管理的最小单位,一个字节是八位,每一位可以存放一个二进制位(0或者1)。一个IO端口包括一组I...
  • Hanfeng_1999
  • Hanfeng_1999
  • 2016年04月26日 23:31
  • 1204

(C51学习一)如何点亮led灯

1.找出C51最小系统原理图 2.找出LED模块原理图 3.进行编程 1.找出C51最小系统原理图 在网上买的开发板,一定有光碟的,光碟中一定有原理图,先找出最小系统原理图,这个原理图标明了CPU...
  • u014453898
  • u014453898
  • 2017年02月23日 18:40
  • 697

stm32点亮第一个led灯(初学)

作为一名初学stm32的人应该都具备了51
  • liukuangye123
  • liukuangye123
  • 2014年04月25日 20:03
  • 5368

Android下点亮LED

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

单片机学习之点亮LED小灯

学习视频:手把手教你学单片机http://pan.baidu.com/s/1qWpGYgk 我所学的单片机的类型以及资料 STC89C52宏晶科技出品的一款 51 内核的单片机,具有标准的 51 体...
  • Hei_Ant
  • Hei_Ant
  • 2015年11月21日 11:23
  • 882

STM32学习笔记之点亮LED灯

转载于 http://blog.csdn.net/u010661782/article/details/50281229,感谢原作者非常详细的指导学习。 让我的开发板的LED灯亮灭闪烁 ...
  • sinat_23338865
  • sinat_23338865
  • 2016年07月15日 22:13
  • 801

51汇编程序之点亮全部led

ORG 00H    ;程序的开始地址 LJMP START ;跳到程序的起始位置 ORG 30H    ;主要是为了跳过堆栈段   START:     ;只是一个标号 MOV A,#0...
  • chenqiai0
  • chenqiai0
  • 2012年07月01日 13:53
  • 2850

用FPGA点亮第一颗LED

## 开始学习FPGA ##在大学期间一直听说FPGA这种东西却没有人带着学习,甚至没有见过实物(主要是周围的学长和老师没有人用),开始工作了才真正见到FPGA的实物,自己攒了俩月的工资终于买了一块2...
  • qq_32450275
  • qq_32450275
  • 2017年10月08日 00:11
  • 140

stm8 点亮第一个LED

IAR环境下点亮第一个LED,并且介绍了时钟的配置和结构以及具体编程的实现。...
  • zhuming3834
  • zhuming3834
  • 2015年05月07日 16:11
  • 2894
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bootloader---9.点亮led
举报原因:
原因补充:

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