准备分析
 

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. 轮子来袭 vJine.Core Orm 之 03_架构分析

    1.vJine.Core ORM 架构: 如上图所示,vJine.Core ORM的特点如下: 所有操作均以DataManager为核心: DataManager业务部分的增删改查操作依赖于Class ...

  2. 2016ACM竞赛训练暑期课期末考试 a题

    描述 给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合. 输入 第一行是一个正整数n(n<=600).第二行是n个不同的整数,相邻两个整数之间用单个空格隔开. ...

  3. OpenJudge 2694 逆波兰表达式

    1.链接地址: http://bailian.openjudge.cn/practice/2694/ 2.题目: 总时间限制: 1000ms 内存限制: 65536kB 描述 逆波兰表达式是一种把运算 ...

  4. 专题三、ArrayList遍历方式以及效率比较

    一.遍历方式 ArrayList支持三种遍历方式. 1.第一种,随机访问,它是通过索引值去遍历 由于ArrayList实现了RandomAccess接口,它支持通过索引值去随机访问元素. 代码如下: ...

  5. sql执行超时处理

    首先设置数据库的配置文件  看看效果 如果程序还是超时则在连接字符串中做出处理 不然程序会自动kind的连接进程   程序和数据库方面都要配置缺一不可

  6. Openstack 目录

    [一] OpenStack 基础环境 [二] OpenStack 认证服务 KeyStone [三] OpenStack 镜像服务 Glance [四] OpenStack 计算服务 Nova [五] ...

  7. php QQ登录

    基本原理: 就是获取唯一的openid,此值只要与自己数据库表中的值对应,就说明是此用户, 没有,则说明是新用户,其实就是找对应关系,因为openid与QQ号是唯一对应关系 放置按钮: 如在首页 in ...

  8. Convert.ToInt32()与int.Parse()的区别 (转载)

    Convert.ToInt32()与int.Parse()的区别(1)这两个方法的最大不同是它们对null值的处理:Convert.ToInt32(null)会返回0而不会产生任何异常,但int.Pa ...

  9. memcached全面剖析--2

    理解memcached的内存存储 下面是<memcached全面剖析>的第二部分. 发表日:2008/7/9 作者:前坂徹(Toru Maesaka) 原文链接:http://gihyo. ...

  10. VB6-系统打印常识

    在一次做图片打印的时候,对位置的调整老是不得法,后来通过CBM666老师的帮助才解决问题,分享以下他给的帮助.     , , picA.Width , picA.Height Printer.End ...