准备分析
 

IRAM的大小96k,其实前两个程序都在这里运行的,程序都小于16K。要实现的是从把IRAM从的前16k从IRAM的起始地址0xD0020000拷贝到0xD0024000 处,调用main。堆栈指针设置到了0xD003_7D80处。程序的链接地址是0xD0024010.用图表示如下。本程序只涉及到IRAM,重点为在于重定向。

        
 
资源工具

        同《 S5PV210的LED应用(一)
 
着手写程序
        start.S中的代码拷贝很重要,Makefile中的链接地址很重要。
  1. @******************************************************************************
  2. @ File:start.S
  3. @ 功能:启动代码,设置栈,拷贝16k到0xd0020000处
  4. @******************************************************************************
  5. .text
  6. .global _start
  7. _start:
  8. ldr sp, =0xD0037D80       @ 设置栈,以便调用c函数
  9. adr r0, _start                @ 重定位
  10. @ _start当前所位于的地址:0xd0020010 (前边放有16bit的头信息)
  11. ldr r1, =_start           @ _start的链接地址:0xd0024010
  12. ldr r2, =0xd0028000       @ 0xd0028000 = 0xd0024000 + 0x4000(16k)
  13. cmp r0, r1
  14. beq run_on_dram
  15. copy_loop:
  16. ldr r0, =0xd0020000       @ 源 起始地址
  17. ldr r1, =0xd0024000       @ 目的 起始地址
  18. 1:
  19. ldr r3, [r0], #4          @ 源
  20. str r3, [r1], #4          @ 目的
  21. cmp r1, r2
  22. bne 1b
  23. run_on_dram:
  24. ldr pc, =main             @ 跳转
  25. halt:
  26. b halt
  1. /******************************************************************************/
  2. /* File:main.c
  3. /* 功能:LED闪烁
  4. /******************************************************************************/
  5. #define     GPJ2CON     (*(volatile unsigned long *) 0xE0200280)
  6. #define     GPJ2DAT     (*(volatile unsigned long *) 0xE0200284)
  7. // 延时函数
  8. void delay(unsigned long count)
  9. {
  10. volatile unsigned long i = count;
  11. while (i--)
  12. ;
  13. }
  14. void main()             //LED 闪烁
  15. {
  16. GPJ2CON = 0x00001111;       // 配置引脚
  17. while(1)                    // 闪烁
  18. {
  19. GPJ2DAT = 0;            // LED on
  20. delay(0x100000);
  21. GPJ2DAT = 0xf;          // LED off
  22. delay(0x100000);
  23. }
  24. }

Makefile:

  1. link.bin: start.o main.o
  2. arm-linux-ld -Ttext 0xD0024010 -o link.elf $^
  3. arm-linux-objcopy -O binary link.elf link.bin
  4. arm-linux-objdump -D link.elf > link_elf.dis
  5. gcc mkv210_image.c -o mkv210
  6. ./mkv210 link.bin 210.bin
  7. %.o : %.S
  8. arm-linux-gcc -o $@ $< -c
  9. %.o : %.c
  10. arm-linux-gcc -o $@ $< -c
  11. clean:
  12. rm *.o *.elf *.bin *.dis mkv210 -f
下载运行
 
        同《 S5PV210的LED应用(一)
 
运行调试
       
        程序简单,运行正常。
 
遗留问题
  
        1.无
 
 
原文:http://blog.csdn.net/kangear/article/details/8993247

S5PV210的IRAM应用的更多相关文章

  1. s5pv210中断体系

    一.什么是中断? 1.中断的发明是用来解决宏观上的并行需要的.宏观就是从整体上来看,并行就是多件事情都完成了. 2.微观上的并行,就是指的真正的并行,就是精确到每一秒甚至每一刻,多个事情都是在同时进行 ...

  2. S5PV210的内存分配研究分析

    S5PV210内存一般会使用SDRAM和DDR2 (DDR SDRAM),SDRAM的uboot启动网络已经有很多资料的,对于DDR2还有有很多疑惑,如果有错误的地方,请大家一定指出,醍醐灌顶,不胜感 ...

  3. 9.S5PV210的时钟系统

    1.时钟域:MSYS.DSYS.PSYS(1)因为S5PV210的时钟体系比较复杂,内部外设模块太多,因此把整个内部的时钟划分为3大块,叫做3个域.(2)MSYS: CPU(Cortex-A8内核). ...

  4. S5PV210裸板驱动:启动

    以往2440和6410的启动方式,只要我们把裸板代码烧写到NAND FLASH的开始位置,当开发板上点启动时,处理器会自动从NAND FLASH上拷贝前面一段的代码到内部的RAM中执行.按照以前的方法 ...

  5. 总结:S5PV210时钟系统

    在数据手册<S5PV210_UM_REV1.1>中的section 02_system/3 CLOCK CONTROLLER(354页)   一.时钟域 在S5PV210的SoC中,时钟系 ...

  6. 第一章之s5pv210启动顺序

    我所使用的开发板是:友善之臂smart210,cpu为s5pv210.u-boot版本是:u-boot-2012-10 1,首先在u-boot中配置相对应的开发板的配置文件 #make s5p_gon ...

  7. S5PV210 时钟体系分析

    S5PV210 时钟体系 如下面时钟结构图所示,S5PV210 中包含 3 大类时钟域, 分别是主系统时钟域(简称 MSYS).显示相关的时钟域(简称 DSYS). 外围设备的时钟域(简称 PSYS) ...

  8. S5PV210初始化系统时钟

    S5PV210初始化系统时钟 S5PV210时钟体系S5PV210中包含3大类时钟domain,分别是主系统时钟domain (简称MSYS,下面将使用简称来进行相关讲解).显示相关的时钟domain ...

  9. 三星S5-PV210内存初始化

    一.S5PV210时钟系统 时钟:一定频率的电信号.   时钟系统:基于CMOS工艺的高性能处理器时钟系统,集成PLL可以从内部触发,比从外部触发更快且更准确,能有效地避免一些与信号完整性相关的问题. ...

随机推荐

  1. 前台页面Josn 数组在后台.cs代码中的解析

    后台代码: //解析jObject字符串 json_wang 2015/01/27 //var passengerListStr = BookingTicket_PassengerList_Hidde ...

  2. 【JAVA】在编译期可直接替换的final变量

    一.满足以下三个条件,一个final变量就不再是一个变量,而是一个直接量. 使用final修饰符修饰. 在申明的时候就进行初始化 初始化的值在编译器就可以确定. 二.在什么情况下初始化的值在编译期是可 ...

  3. Brackets 配置

    插件 Brackets Icons  左侧导航的文件图标 FuncDocr  注释工具 QuickDocsJS  js帮助文档 Beautify  格式化代码 Brackets Git  git支持 ...

  4. WPF 程序中启动和关闭外部.exe程序

    当需要在WPF程序启动时,启动另一外部程序(.exe程序)时,可以按照下面的例子来: C#后台代码如下: using System; using System.Collections.Generic; ...

  5. WTL 中CComboBoxEx显示不了的问题

    在使用WTL的CComboBoxEx时,InsertItem之后,运行程序,ComboBox显不了问题,其原因如下: I guess you want to place combo box to di ...

  6. 【转】Windows10下80端口被PID为4的System占用导致Apache无法启动的分析与解决方案

    昨天刚更新了Windows10,总体上来说效果还是蛮不错的,然而今天在开启Apache服务器的时候却发现,Apache莫名其妙的打不开了,起初以为是权限的问题,于是使用管理员身份的控制台去调用命令ne ...

  7. spring 中的<aop:advisor>和<aop:aspect>的区别

    在AOP中有几个概念: — 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象.事务管理是J2EE应用中一个很好的横切关注点例子.方面用Spring的Advisor或拦截器实 ...

  8. 一些浏览器HACKS

    1.选择器HACKS /*IE6及以下*/            *html #uno{...} /*IE7*/                    *:first-child+html #dos{ ...

  9. 51nod1046快速幂取余

    给出3个正整数A B C,求A^B Mod C.   例如,3 5 8,3^5 Mod 8 = 3. Input 3个正整数A B C,中间用空格分隔.(1 <= A,B,C <= 10^ ...

  10. PHP 递归创建目录

    /* 用迭代的方法递归创建目录 其实在PHP5.0.0之后mkdir就已经能递归创建目录了. 这里主要是自己学习迭代,所以拿创建级联目录开刀了. 开发中应该写mkdir('./a/b/c/d/e',0 ...