一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇
来源:互联网 发布:mysql中nvl函数用法 编辑:程序博客网 时间:2024/04/30 06:18
接着上一篇关闭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小灯,发一张效果截图:
0 0
- 一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇
- OK6410上裸机点亮LED程序
- 【OK6410裸机程序】点亮LED
- 嵌入式驱动开发笔记(裸机程序篇)---点亮LED灯
- 裸机开发之点亮LED
- S3C2440裸机程序开发点亮LED
- OK6410裸机程序 ----led
- 4412裸机程序之点亮LED
- OK6410裸机开发之LED灯
- OK6410裸机开发之LED灯
- OK6410之裸机led
- ok6410-第06篇-裸机led程序
- 嵌入式Linux开发——裸板程序点亮开发板上的LED灯
- 嵌入式Linux裸机开发(一)——点亮Led
- 飞凌OK6410之点亮LED
- OK6410(s3c6410)之LED点亮
- 第一个裸机程序---点亮led小灯
- mini2440裸机程序之二--点亮LED灯
- JQuery EasyUI combobox动态添加option
- jvm 性能监控与分析工具
- 第七周上机实践项目 项目2-友元类
- 欢迎使用CSDN-markdown编辑器
- Struts与页面值传递
- 一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇
- 串
- Hibernate(一)——简介
- 回文字符串判断
- GUI编程基础
- js跨站之 window.name方法
- 查找算法——javascript算法实现
- Quaternion.Slerp的使用
- [UVa 10943] How do you add? (计数+隔板法+重叠隔板)