硬件:飞凌OK6410 A型
系统:windows xp sp3; Ubuntu12.04 LTS
软件:ARM GCC; JLink Command
工具:Jlink V8
调试:暂无
资料:ARM1176JZF-S手册;三星SRC6410芯片手册;OK6410硬件原理图

一 操作步骤:
1 环境搭建:
软件-》在ubuntu系统上,放置好arm-linux-gnu 工具,设置好路径$PATH
硬件-》安装JLink驱动(V4.10i),使用JLink comman工具测试Jlink正确连接。
2 编写源文件
GNU汇编格式,注意不同于ARM汇编
3 编译命令:
arm-linux-gcc -c -o start.o start.S 
arm-linux-ld -Ttext 0 -o led.elf start.o 
arm-linux-objcopy -O binary led.elf led.bin
4 连接OK6410 JLink,连接好以后供电,注意不要热插拔jtag接口
5 连接测试:
JLink 命令
halt @暂停
power off mmu  @关掉ARM的mmu功能
wreg cpsr,0x0000001f @ 设置ARM的系统模式
loadbin <bin文件所在路径> 0x50000000 @src6410的RAM内存首地址
setpc 0x50000000 @cpu的的代码寄存器指向内存首地址
g @运行

二 源文件分析
1 源码

.globl _start
_start:
/* 启动设置 */
/* 硬件相关的设置 : 把外设的基地址告诉CPU*//* Peripheral port setup */ldr r0, =0x70000000  /* 伪汇编指令 */orr r0, r0, #0x13mcr p15,0,r0,c15,c2,4       @ 256M(0x70000000-0x7fffffff)/* 关看门狗 */
/* 往WTCON(0x7E004000)写0 */ldr r0, =0x7E004000mov r1, #0str r1, [r0] @ str, store,/*功能实现*/
/* 设置GPMCON让GPM0~GMP3作为输出引脚 */ldr r1, =0x7F008820ldr r0, =0x1111str r0, [r1]/* 设置GPMDAT让GPM0、GMP、GPM3输出0 GPM1输出为1 */ldr r1, =0x7F008824mov r0, #2str r0, [r1]
halt:b halt

2 分析
裸机程序一般分为两个部分,
第一部分 硬件设置
也就是启动设置,OK6410要求把外设的基地址以及基地址大小告诉处理器并且关闭看门狗
第二部分 功能代码
简单的可以用汇编写,复杂的要用到C语言。
简单的流程是:扩展板原理图上的标示符-》核心板上对应的src6410引脚-》从src6410手册中找到引脚寄存器的设置
首先OK6410的扩展板原理图上找到LED的标识号,然后到核心板上找到这些
标识号对应的CPD的接口,发现在GPM0~4的引脚处。
从src6410的手册中找到这些接口的定义:
GPMCON 寄存器用来控制GPM的功能,这里需要设置成output模式,地址位于0x7F008820
GPMDAT 设置输出的数据,GPM[5:0]对应了它的[5:0],我们这里用[4:0]位
从核心板的原理图中可以看到led2对应的是GPM1,将其设置为1(灯不亮),其余设置为0

三 总结
至此开发板被正确点亮,看似简单的功能却要求有以下技能(*号的为必须的):
1* 能读硬件原理图以及芯片手册
2* 会写GNU的汇编程序
3* 熟悉ARM指令
4* 懂的GCC工具的使用
5 能够使用linux操作系统
6 会使用JLink工具

最后感谢韦东山老师深入浅出的讲解

OK6410上裸机点亮LED程序相关推荐

  1. Raspberry PI 系列 —— 裸机点亮LED灯

    Raspberry PI 系列 -- 裸机点亮LED灯 背景 近期刚买了Raspberry PI B+,配置执行了官方提供的Raspbian系统,折腾了一周Linux系统,感觉没啥意思,于是就试着想了 ...

  2. dsp点亮led程序_点亮它:使用新的Windows 7功能的应用程序列表

    dsp点亮led程序 I'm digging Windows 7 more and more. So much so, that I'm watching out for apps that use ...

  3. 正点原子stm32MP157 点亮LED程序

    学习正点原子开发板,发现点亮LED个程序并没有讲解的特别详细.我只看了驱动开发指南,不知道是别的文档讲过还是说后面有更好的实现方法,这个程序只是入门.不过既然是学习就仔细一点,至少把不明白的程序搞懂. ...

  4. 一、2440裸机点亮led

    从代码開始(先写一个像普通单片机一样的代码): /********led.c************************/ #define GPFCON  (*(volatile unsigned ...

  5. 分享一个香橙派PC2的C语言点亮LED程序

    首先要编写字符设备驱动,代码大同小异,随便复制粘贴就行了. 但是要注意了,一定要保护好寄存器,不要乱搞,要不然系统崩了,就等着你妈妈喊你回家吃饭吧. led.c #include <linux/ ...

  6. IMX6ULL裸机开发之点亮LED灯

    裸机点亮LED灯 该实验使用正点原子的linux开发板和下载工具 知识储备 GPIO时钟控制器 在<IMX6ULL用户手册>中,时钟控制器模块介绍在第18章 首先看CCM Clock Ga ...

  7. 使用驱动程序点亮LED灯

    继第一节第一个驱动程序框架记录之后,本篇文章将会在上一篇驱动程序的框架下编写点亮LED的驱动程序,同样会对上一个框架进行修改,优化.接下来进入正题 1.点亮LED程序框架分析 在最开始之前先来梳理一下 ...

  8. STM32之点亮LED

    学习一个新的处理器,第一个程序肯定就是点亮LED,它可以让我们较快的.较清晰的了解到一个处理器的程序结构,学习32也不例外,首先第一个程序我们就来点亮LED,点亮LED程序有很多种,这里我们用库函数来 ...

  9. STM32f103 CubeMX封装 led程序

    本文代码使用 HAL 库. 文章目录 前言 一.LED 原理图 二.CubeMX创建工程 三.LED 相关函数 1. 输出电平函数: 2. 延时函数: 3. 翻转电平函数: 四.详细代码 实验现象 : ...

  10. 4412裸机程序之点亮LED

    4412裸机程序之点亮LED 看一下Tiny4412原理图: 在Tiny4412核心板上有4个可编程控制LED,我们来点亮led1, led1右边接3.3V电源,左边接GPM4_0接口,把GPM4_0 ...

最新文章

  1. Android socket 编程 实现消息推送
  2. Hystrix全局配置默认超时时间
  3. asp.net javascrip获取session的值_一篇文章搞定 Django Cookie 与 Session
  4. 面试题 02.01. 移除重复节点
  5. 基于VMware vSphere 5 企业虚拟化部署之六:VMware Center管理ESXi和配置资源池
  6. 前端:JS/18/JS运算符(算术运算符,赋值运算符,字符串运算符,比较运算符,逻辑运算符,三元运算符),window.prompt()
  7. python + opencv: kalman 跟踪
  8. 一根烟上热搜,先让 AI 看看你的肺
  9. Excel对话框大全
  10. BeX5开发中MySQL视图使用的一个小问题
  11. 计算机键盘不能用怎么办,电脑键盘空格键失灵无法使用怎么办|电脑键盘空格键失灵的解决方法...
  12. java对接企业微信
  13. UVALive - 5713
  14. gmail设置双重验证后,第三工具无法登陆解决
  15. ROS快速入门第三讲——ROS的Subscriber订阅者
  16. ProSpec Persephin小鼠重组体解决方案
  17. 超强大的手机端logo设计制作软件免费分享!
  18. 亿级(无限级)并发,没那么难-科普文
  19. 移动充电宝哪个最便宜?便宜又耐用的充电宝推荐
  20. 【优化求解】基于蜘蛛猴算法求解单目标优化问题matlab代码

热门文章

  1. python 录屏_python实现录制全屏和选择区域录屏功能
  2. 怎样低成本的实现网页在移动端的适配
  3. python携程怎么做数据同步_python协程中同步如何使用?
  4. 电源管理芯片之 Regulator 用法 与具体使用实例
  5. Cisco 路由器密码重置步骤
  6. uni-app 插入视频播放器
  7. 【详细服务器配julia】
  8. Partition Refinement
  9. Magento创建主题
  10. Sling CMS 学习:环境搭建(一)