接着上一篇关闭mmu和cache后,这一篇来点亮开发板上的一盏LED小灯,前面所作的初始化工作基本看不到效果,其实这一段也是最麻烦的!如果有问题调试很麻烦!点亮了LED之后就可以用LED来看程序是否如预期那样运行,传说中的一灯大师就要出场了,准备好了吗?

1. LED原理图分析

底板上LED部分的原理图:

然后根据核心板找到LED是由哪个GPIO控制的

可以看到LED1、LED2、LED3、LED4是在GPM这一组GPIO控制的, 依次是GPM0、 GPM1、 GPM2 、GPM3

由数据手册找到GPM部分:

2. 芯片手册导读

6410 datasheetGPIO部分(上面的截图)

3. 程序步骤流程设计

1. 设置GPIO控制寄存器把引脚设置为输出

2. 根据原理图设置GPIO数据寄存器,点亮LED

4. 用代码实现功能

GPIO端口至少需要两个寄存器,一个控制寄存器,一个数据寄存器

这里还要根据之前的架构步骤有一个部分是基地址初始化!

这里贴上代码:

<span style="font-size:18px;">light_led:ldr r1, =0x7F008820ldr r0, =0x1111str r0, [r1]ldr r1, =0x7F008824mov r0,#0x0@mov r0,#0xestr r0,[r1]mov pc, lr</span>

至此整个start.S启动代码:

<span style="font-size:18px;">.text
.global _start
_start:b resetldr pc, _undifined_instruction @跳转到reset标号处 0地址处理就的是reset异常模式    ldr pc, _software_interrupt @ldr伪指令 相当于装载指令ldr pc, _prefetch_abortldr pc, _data_abortldr pc, _not_usedldr pc, _irqldr pc, _fiq@新开一个内存单元 将地址值装载到内存中
_undifined_instruction: .word undifined_instruction @这里再给每种异常模式定义一个标号
_software_interrupt: .word software_interrupt
_prefetch_abort: .word prefetch_abort
_data_abort: .word data_abort
_not_used: .word not_used
_irq: .word irq
_fiq: .word resetundifined_instruction:nopsoftware_interrupt:nopprefetch_abort:nopdata_abort:nopnot_used: @地址0x00000014处 这里什么也不做nopirq:nopfiq: nopreset:bl set_svcbl set_peri_portbl disable_watchdogbl disable_interruptbl disable_mmubl light_ledset_peri_port: @基地址初始化ldr r0, =0x70000000orr r0, r0, #0x13mcr p15,0,r0,c15,c2,4mov pc, lrset_svc:mrs r0, cpsrbic r0, r0,#0x1f @后5位清零orr r0, r0,#0xd3 @相应位置1 10011msr cpsr, r0 @写入GPSR寄存器mov pc, lr#define pWTCON 0x7e004000 @watchdog CON寄存器地址
disable_watchdog:ldr r0, =pWTCON @将地址装载到通用寄存器mov r1, #0x0 @将0传到r1寄存器中str r1, [r0] @将值传到到寄存器地址所在的内存中mov pc, lrdisable_interrupt:mvn r1,#0x0  @写入全1 取反然后填入到r1寄存器中ldr r0,=0x71200014 @用r0保存地址str r1,[r0] @然后将r1中的值写入到ro地址中去ldr r0,=0x71300014str r1,[r0]mov pc, lrdisable_mmu:mcr p15,0,r0,c7,c7,0mrc p15,0,r0,c1,c0,0bic r0, r0, #0x00000007mcr p15,0,r0,c1,c0,0mov pc, lrlight_led:ldr r1, =0x7F008820ldr r0, =0x1111str r0, [r1]ldr r1, =0x7F008824mov r0,#0x0@mov r0,#0xestr r0,[r1]mov pc, lr</span>

编译然后通过SD卡启动,连接好USB下载线,通过dnw工具将编译好的uboot.bin文件下载到目标板上运行!(前面的博文中有讲到如何下载uboot)

这里是点亮上面电路图中的四盏LED小灯,发一张效果截图:

一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇相关推荐

  1. linux开发板led怎么亮,TQ2440开发板上实现按键点亮LED(转载)

    //声明:该文章是在网上搜到的,对作者表示感谢. 文章记录了作者在TQ2440开发板上实现按键点亮LED驱动开发的详细过程,还记录了一些容易出现的错误,以及怎么解决这些错误. 一.驱动开发流程 二.驱 ...

  2. TI CC3200 WIFI实训开发套件(OURS-SDK-WFB)IAR for ARM7.8调试2————对IAR for ARM的熟悉,并在开发板上跑起来第一个程序

    首先安装IAR for ARM7.8,自己搜索安装, 使用电脑Win10 x64 下载资料:https://e2echina.ti.com/group/universityprogram/studen ...

  3. OK6410开发板学习之外部中断(按键点亮led和蜂鸣器)

    中断在嵌入式里面是很常见的一个功能了.通过这个功能,可以让CPU减轻很多负担,不用不断的查询设备的状态.提高了CPU的效率. 中断的大体过程如下: 中断源检测中断信号产生,然后将中断信号发送给中断控制 ...

  4. 飞凌OK6410开发板移植u-boot官方最新版u-boot-2012.10.tar.bz2

    Part0 准备知识 0.1 关键参数说明 0.1.1 开发板说明 OK6410是飞凌公司发布的一款开发板,当前有2个版本,OK6410-A和OK6410-B,我当前使用的是前者:前者也经历过升级,所 ...

  5. OK6410开发板学习之安装linux系统至开发板

    说来惭愧,OK6410开发板自从买来就一直在躺灰,当时连教程也花了1千多大洋了,近来感觉前途迷茫,遂决定将其拿出来研究研究,看是否能够给我新出路. 废话不多说,先上一张OK6410开发板大图: 不要问 ...

  6. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  7. linux开发板led怎么亮,飞凌OK6410开发板(裸板) 第一个点亮LED灯程序

    飞凌OK6410开发板(裸板) 第一个点亮LED灯程序,主要的C程序,完整程序请下载附件. #define rGPMCON          (*(volatile unsigned *)(0x7F0 ...

  8. OK6410开发板学习之一步一步实现精简BootLoader(BL1部分)

    众所周知,ok6410开发板是一块基于s3c6410芯片的开发板,板载资源丰富.s3c6410是三星电子生产的基于arm11内核的芯片.本文旨在总结一下bootloader操作步骤,用于以后复习.查找 ...

  9. 基于OK6410开发板Uboot源码简单分析

    2018-04-07 OK6410开发板是基于三星S3C6410芯片设计的一款开发板,资源比较丰富,可是想要使用这些资源就需要编写相应的启动引导程序,即BootLoader.当然,想要自己凭空写出Bo ...

最新文章

  1. 前端开发学习常用网站网址及介绍(都是免费的)
  2. 浪漫的形式有100种,单身的就1种!
  3. 手撕ArrayList底层,透彻分析源码
  4. arm交叉编译器gnueabi、none-eabi、arm-eabi、gnueabihf的区别
  5. OpenGL Single Point单点移动三角形的实例
  6. 树莓派python交互界面实例_玩转树莓派-RaspBerry,使用Python开发定制界面
  7. COJ1196(Staginner 去爬山)
  8. java字符串字节_Java中字符串与byte数组之间的相互转换
  9. 5010.有限状态机-电梯事件
  10. 【Flink】Flink 操作HDFS报错 hadoop is not in the classpath/dependencies
  11. linux c开发项目,linux c 服务器开发项目
  12. activiti流程消息事件触发messageEventReceived,MessageCatchingEvent 及消息启动流程
  13. js字符串与数字比较大小
  14. 如何从零开始学android?
  15. uniapp 蓝牙连接条码枪/扫描枪 HID模式
  16. 国内十大不可错过的免费学习资源网站(火速收藏中)
  17. rpm 如何安装mysql_如何使用rpm安装MySQL
  18. 解压RAR时出现“不可预料的压缩文件末端”的解决方法
  19. fifa一直连接服务器,FIFA足球世界服务器连接掉线原因及解决方法
  20. Docker(2) 安全加密,habor仓库和Docker网络

热门文章

  1. JAVA渔具销售网站
  2. php构造函数的使用
  3. linux 升级pip3命令,linux如何升级pip
  4. 自然语言处理算法工程师笔试题目_NLP算法工程师(实习生)面试总结(持续更新)...
  5. Codeforces C. Numbers on Whiteboard (Round 96 Rated for Div.2) (思维 / 贪心)
  6. 四川玖益科技:新店运营的注意事项
  7. 安全框架Shiro的简单学习
  8. Linux shell之重定向
  9. 机器学习如何发现你喜欢的音乐
  10. Python图像处理八:图像频域滤波