OK6410上裸机点亮LED程序
来源:互联网 发布:数据库集群的优缺点 编辑:程序博客网 时间:2024/04/30 02:27
硬件:飞凌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 源码
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工具
最后感谢韦东山老师深入浅出的讲解
系统: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, #0x13 mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff)/* 关看门狗 *//* 往WTCON(0x7E004000)写0 */ ldr r0, =0x7E004000 mov r1, #0 str r1, [r0] @ str, store,/*功能实现*//* 设置GPMCON让GPM0~GMP3作为输出引脚 */ ldr r1, =0x7F008820 ldr r0, =0x1111 str r0, [r1]/* 设置GPMDAT让GPM0、GMP、GPM3输出0 GPM1输出为1 */ ldr r1, =0x7F008824 mov r0, #2 str 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程序
- 【OK6410裸机程序】点亮LED
- 一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇
- OK6410裸机程序 ----led
- S3C2440裸机程序开发点亮LED
- 4412裸机程序之点亮LED
- ok6410-第06篇-裸机led程序
- OK6410 点亮LED灯
- 【龙芯1c库】龙芯1c上通过pmon引导实现裸机程序点亮led
- OK6410之裸机led
- 在OK6410上点亮指路明灯(LED)
- s3c6410裸机程序,可打印串口和点亮LED
- 嵌入式驱动开发笔记(裸机程序篇)---点亮LED灯
- 基于Cortex-A8裸机,点亮LED灯程序分析
- tiny4412 裸机程序 二、汇编点亮LED灯
- 第一个裸机程序---点亮led小灯
- 裸机程序二:GPIO点亮led灯 汇编
- 裸机程序二:GPIO点亮led灯 c语言
- 中国误读世界。更误读自己。
- android自定义RadioGroup实现可以添加多种布局
- Weka学习 :ADTree
- 行迁移
- 查看ubuntu版本
- OK6410上裸机点亮LED程序
- SDJZ 坑爹的黑店
- uva705
- 查看内核版本
- ViewPageAsImage
- hdu 2203 亲和串 kmp
- iOS 用TFHpple抓取GB-2312编码的html页面,页面返回编码错误
- win7下的IIS启动配置(指定的参数已超出有效值的范围,参数名:site)
- CodeForces 14A