嵌入式bootloader开发之十-------裸机程序LED开发(Tiny 6410)
来源:互联网 发布:淘宝u站怎么加入 编辑:程序博客网 时间:2024/06/06 09:04
在看完尚观的S3C2440嵌入式bootloader视频后,想做有关DRAM的实验,但是发现DRAM配置和Tiny 6410相差甚远,很多方面也无法契合,于是开始在网上找新的讲解有关S3C6410裸机开发的例子,有幸找到了韦东山老师的视频,跟着他讲的开始先做简单的LED实验,在做第三个时候发现一个很明显的问题,就是在提供的源码中调用了delay函数,而却并没有进行相应的时钟设置,所以试了很多次都是只能点亮LED,但却不能实现亮灭控制。
修改的方法如下:
1.增加时钟配置模块:clock.S
#define APLL_LOCK0x7e00f000#define MPLL_LOCK0x7e00f004#define EPLL_LOCK0x7e00f008#define LOCK_TIME0xffff#define OTHERS0x7e00f900#define CLK_DIV00x7e00f020#define CLK_SRC0x7e00f01c.text.global clock_initclock_init:@ set the lock time to maxldr r0, =LOCK_TIMEldr r1, =APLL_LOCKstr r0, [r1]ldr r1, =MPLL_LOCKstr r0, [r1]ldr r1, =EPLL_LOCKstr r0, [r1]@ set async modeldr r0, =OTHERSldr r1, [r0]bic r1, r1, #0xc0str r1, [r0]loop1:ldr r0, =OTHERSldr r1, [r0]and r1, r1, #0xf00cmp r1, #0bne loop1@ set the divider#define DIV_VAL( (0)|(1<<4)|(1<<8)|(1<<9)|(3<<12) )ldr r0, =CLK_DIV0ldr r1, =DIV_VALstr r1, [r0]@ set APLL, MPLL, EPLL#define SDIV1#define PDIV3#define MDIV266#define PLL_ENABLE( 1 << 31 )#define APLL_VAL( (SDIV<<0)|(PDIV<<8)|(MDIV<<16)|(PLL_ENABLE) )#define MPLL_VALAPLL_VAL#define EPLL0_VAL( (2<<0)|(1<<8)|(32<<16)|PLL_ENABLE)#define EPLL1_VAL( 0 )#define APLL_CON0x7e00f00c#define MPLL_CON0x7e00f010#define EPLL_CON00x7e00f014#define EPLL_CON10x7e00f018ldr r0, =APLL_CONldr r1, =APLL_VALstr r1, [r0]ldr r0, =MPLL_CONldr r1, =MPLL_VALstr r1, [r0]ldr r0, =EPLL_CON0ldr r1, =EPLL0_VALstr r1, [r0]ldr r0, =EPLL_CON1ldr r1, =EPLL1_VALstr r1, [r0]@ select the source ldr r0, =CLK_SRCmov r1, #7str r1, [r0]mov pc, lr2.在start.S中调用时钟初始化函数
.globl _start_start:/* 硬件相关的设置 : 把外设的基地址告诉CPU */ /* Peri port setup */ ldr r0, =0x70000000 orr r0, r0, #0x13 mcr p15,0,r0,c15,c2,4 @ 256M(0x70000000-0x7fffffff) /* 关看门狗 *//* 往WTCON(0x7E004000)写0 */ldr r0, =0x7E004000mov r1, #0str r1, [r0]bl clock_init/*在此进行时钟初始化*//* 设置栈 */ldr sp, =8*1024bl xxxxx /* 调用C函数 */halt:b halt
3.修改Makefile文件如下:
led.bin: start.o led.o clock.oarm-linux-ld -Ttext 0 -o led.elf start.o clock.o led.oarm-linux-objcopy -O binary led.elf led.binarm-linux-objdump -D led.elf > led.disstart.o : start.Sarm-linux-gcc -o start.o start.S -cclock.o: clock.Sarm-linux-gcc -o clock.o clock.S -cled.o : led.carm-linux-gcc -o led.o led.c -cclean:rm *.o led.elf led.bin led.dis4.make clean;make
下载led.bin后执行,可以发现此次实现隔一段时间后LED1~LED4亮灭。
- 嵌入式bootloader开发之十-------裸机程序LED开发(Tiny 6410)
- 嵌入式bootloader开发之七---裸机watchdog中断开发(Tiny 6410)
- 嵌入式bootloader开发之九----键盘中断控制LED灯(Tiny 6410)
- 嵌入式bootloader开发之二(Tiny 6410)
- 嵌入式bootloader开发之三(Tiny 6410)
- 嵌入式bootloader开发之四(Tiny 6410)
- 嵌入式bootloader开发之五(Tiny 6410)
- 嵌入式bootloader开发之六(Tiny 6410)
- 嵌入式bootloader开发之一(Tiny 6410)
- 嵌入式bootloader开发之八----NAND Flash读写擦除操作实现(Tiny 6410)
- 嵌入式bootloader开发之零----虚拟机环境配置(Tiny 6410)
- 嵌入式驱动开发笔记(裸机程序篇)---点亮LED灯
- 一灯大师之点亮OK6410开发板上4个LED裸机程序---嵌入式回归第十篇
- 嵌入式系统学习(五)-NanoPi2基础实例开发(裸机程序按钮控制LED灯)
- FL2440裸机开发之LED
- 裸机开发之点亮LED
- ARM裸机程序开发之led流水灯程序
- 嵌入式Linux裸机开发(一)——点亮Led
- cocos2dx CallfuncN方法使用
- 不是技术牛人,如何拿到国内IT巨头的Offer
- 一步一步学android控件(之十八)—— ToggleButton & Switch
- 一个面试题:翻转句子中单词的顺序
- 黑马程序员 JAVASE——线程
- 嵌入式bootloader开发之十-------裸机程序LED开发(Tiny 6410)
- HTTP协议 (二) 基本认证
- JQuery datepicker 用法(更新了动态汉化文件包路径)
- java 排序算法总结
- HTTP协议 (三) 压缩
- 制作丝巾 初学者
- HTTP协议 (四) 缓存
- 求最大子序列和
- (work and tools)ubuntu更新后virtualbox无法启动