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 源码
.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工具


最后感谢韦东山老师深入浅出的讲解
原创粉丝点击