S5PV210的IRAM应用
IRAM的大小96k,其实前两个程序都在这里运行的,程序都小于16K。要实现的是从把IRAM从的前16k从IRAM的起始地址0xD0020000拷贝到0xD0024000 处,调用main。堆栈指针设置到了0xD003_7D80处。程序的链接地址是0xD0024010.用图表示如下。本程序只涉及到IRAM,重点为在于重定向。
- @******************************************************************************
- @ File:start.S
- @ 功能:启动代码,设置栈,拷贝16k到0xd0020000处
- @******************************************************************************
- .text
- .global _start
- _start:
- ldr sp, =0xD0037D80 @ 设置栈,以便调用c函数
- adr r0, _start @ 重定位
- @ _start当前所位于的地址:0xd0020010 (前边放有16bit的头信息)
- ldr r1, =_start @ _start的链接地址:0xd0024010
- ldr r2, =0xd0028000 @ 0xd0028000 = 0xd0024000 + 0x4000(16k)
- cmp r0, r1
- beq run_on_dram
- copy_loop:
- ldr r0, =0xd0020000 @ 源 起始地址
- ldr r1, =0xd0024000 @ 目的 起始地址
- 1:
- ldr r3, [r0], #4 @ 源
- str r3, [r1], #4 @ 目的
- cmp r1, r2
- bne 1b
- run_on_dram:
- ldr pc, =main @ 跳转
- halt:
- b halt
- /******************************************************************************/
- /* File:main.c
- /* 功能:LED闪烁
- /******************************************************************************/
- #define GPJ2CON (*(volatile unsigned long *) 0xE0200280)
- #define GPJ2DAT (*(volatile unsigned long *) 0xE0200284)
- // 延时函数
- void delay(unsigned long count)
- {
- volatile unsigned long i = count;
- while (i--)
- ;
- }
- void main() //LED 闪烁
- {
- GPJ2CON = 0x00001111; // 配置引脚
- while(1) // 闪烁
- {
- GPJ2DAT = 0; // LED on
- delay(0x100000);
- GPJ2DAT = 0xf; // LED off
- delay(0x100000);
- }
- }
Makefile:
- link.bin: start.o main.o
- arm-linux-ld -Ttext 0xD0024010 -o link.elf $^
- arm-linux-objcopy -O binary link.elf link.bin
- arm-linux-objdump -D link.elf > link_elf.dis
- gcc mkv210_image.c -o mkv210
- ./mkv210 link.bin 210.bin
- %.o : %.S
- arm-linux-gcc -o $@ $< -c
- %.o : %.c
- arm-linux-gcc -o $@ $< -c
- clean:
- rm *.o *.elf *.bin *.dis mkv210 -f
S5PV210的IRAM应用的更多相关文章
- s5pv210中断体系
一.什么是中断? 1.中断的发明是用来解决宏观上的并行需要的.宏观就是从整体上来看,并行就是多件事情都完成了. 2.微观上的并行,就是指的真正的并行,就是精确到每一秒甚至每一刻,多个事情都是在同时进行 ...
- S5PV210的内存分配研究分析
S5PV210内存一般会使用SDRAM和DDR2 (DDR SDRAM),SDRAM的uboot启动网络已经有很多资料的,对于DDR2还有有很多疑惑,如果有错误的地方,请大家一定指出,醍醐灌顶,不胜感 ...
- 9.S5PV210的时钟系统
1.时钟域:MSYS.DSYS.PSYS(1)因为S5PV210的时钟体系比较复杂,内部外设模块太多,因此把整个内部的时钟划分为3大块,叫做3个域.(2)MSYS: CPU(Cortex-A8内核). ...
- S5PV210裸板驱动:启动
以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...
- 总结:S5PV210时钟系统
在数据手册<S5PV210_UM_REV1.1>中的section 02_system/3 CLOCK CONTROLLER(354页) 一.时钟域 在S5PV210的SoC中,时钟系 ...
- 第一章之s5pv210启动顺序
我所使用的开发板是:友善之臂smart210,cpu为s5pv210.u-boot版本是:u-boot-2012-10 1,首先在u-boot中配置相对应的开发板的配置文件 #make s5p_gon ...
- S5PV210 时钟体系分析
S5PV210 时钟体系 如下面时钟结构图所示,S5PV210 中包含 3 大类时钟域, 分别是主系统时钟域(简称 MSYS).显示相关的时钟域(简称 DSYS). 外围设备的时钟域(简称 PSYS) ...
- S5PV210初始化系统时钟
S5PV210初始化系统时钟 S5PV210时钟体系S5PV210中包含3大类时钟domain,分别是主系统时钟domain (简称MSYS,下面将使用简称来进行相关讲解).显示相关的时钟domain ...
- 三星S5-PV210内存初始化
一.S5PV210时钟系统 时钟:一定频率的电信号. 时钟系统:基于CMOS工艺的高性能处理器时钟系统,集成PLL可以从内部触发,比从外部触发更快且更准确,能有效地避免一些与信号完整性相关的问题. ...
随机推荐
- Java多线程编程总结(学习博客)
Java多线程编程总结:网址:http://lavasoft.blog.51cto.com/62575/27069/
- oracle数据同步方案
数据同步方案:--用DBLINK 创建与所需同步表的链接------------------------------------------------------------------------ ...
- ###学习《C++ Primer》- 5
点击查看Evernote原文. // @author: gr // @date: 2014-10-20 // @email: forgerui@gmail.com Part 5: 动态内存(第12章) ...
- 利用Ajax改变发送请求方式
由于测试的时候需要模拟Head请求,解决办法:先访问要请求的站点,然后在浏览器的控制台下执行如下代码,请求方式就为参数给的值: var xmlHttp; if (window.ActiveXObjec ...
- 学习之spring注解DI疑惑
接口定义 package com; public interface IPaly { void say(); } 接口实现类 package com; import org.springframewo ...
- OC2_数组操作
// // main.m // OC2_数组操作 // // Created by zhangxueming on 15/6/11. // Copyright (c) 2015年 zhangxuemi ...
- 《C和指针》
<C和指针> static global varibale VS global variable static function VS normal function 数组变量 VS 字符 ...
- Menu bar missing from ClearCase Explorer
See following links: Menu bar missing from ClearCase Explorer Understanding the Rational ClearCase E ...
- FileInputStream 与 BufferedInputStream 效率对比
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3550158.html ,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体 ...
- java三线程循环有序打印ABC
迅雷笔试题: 编写一个程序,开启3个线程,这3个线程的ID分别为A.B.C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示:如:ABCABC….依次递推. 解决思路:每个线 ...