S5PV210的IRAM应用

发布者:CyberJolt最新更新时间:2020-04-01 来源: eefocus关键字:S5PV210  IRAM  堆栈指针 手机看文章 扫描二维码
随时随地手机看文章

准备分析


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

  

资源工具


同《 S5PV210的LED应用(一)》


着手写程序


start.S中的代码拷贝很重要,Makefile中的链接地址很重要。


@******************************************************************************

@ 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的LED应用(一)》


运行调试

       

程序简单,运行正常。


遗留问题

  

1.无

关键字:S5PV210  IRAM  堆栈指针 引用地址:S5PV210的IRAM应用

上一篇:S5PV210的LED应用(二)
下一篇:S5PV210的NandFlash应用(一)

推荐阅读最新更新时间:2024-11-06 14:47

S5PV210开发 -- Linux dd命令
昨天群里有人询问,为什么破坏 BootLoader 破坏不掉。 出现错误:dd: writing '/dev/mtdblock0': Operation not permitted 我说需要插着 SD卡才可以。(这个也不对,不插SD卡也可以,那这个错误还是没有搞清楚) 然后我们来看一下它操作指令: busybox dd if=/dev/zero of=/dev/mmcblk0 bs=512 seek=1 count=1 conv=sync 为了确保执行数据有效,再执行 sync 同步一下,即可破坏掉前一个块的数据。 进而引出了我们今天要讲的 dd命令。 参看:Linux dd命令
[单片机]
<font color='red'>S5PV210</font>开发 -- Linux dd命令
什么是堆栈,51单片机堆栈指针SP的使用举例
SP:堆栈指针。(专用于指出堆栈顶部数据的地址。) 堆栈介绍:日常这样的现象,家里洗的样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时候正好相反,先从最上面取,这种现象我们用一句话来概括: 先进后出,后进先出 。请大家想想,还有什么地方有这种现象?其实比比皆是,建筑工地上堆放的砖头、材料,仓库里放的货物,都是 先进后出,后进先出 ,这实际是一种存取物品的规则,我们称之为 堆栈 。 在单片机中,我们也能在RAM中构造这样一个区域,用来存放数据,这个区域存放数据的规则就是 先进后出,后进先出 ,我们称之为 堆栈 。为什么需要这样来存放数据呢?存储器本身不是能按地址来存放数据吗?对,知道
[单片机]
S5PV210启动烧写过程信息
记录下S5PV210启动烧写过程信息,对分析系统启动及烧写流程大有帮助: 通过串口烧的信息: OEMInitLIb is Success +++InitializeInterrupt() ---InitializeInterrupt() +++OTGDEV_InitOtg OTGDEV_SetSoftDisconnect ---OTGDEV_InitOtg TSR START ADDRESS : 0x47700000 TSR IMAGE SIZE : 0x00080000 DOWNLOADING IS COMPLETED Microsoft Windows CE Bootloader Common Library Version
[单片机]
ATmega128 堆栈指针
堆栈指针主要用来保存临时数据,局部变量和中断/ 自程序的返回地址。堆栈指针总是指 向堆栈的顶部。要注意AVR 的堆栈是向下生长的,即新数据推入堆栈时,堆栈指针的数 值将减小。 堆栈指针指向位于SRAM 的函数及中断堆栈。堆栈空间必须在调用函数或中断使能之前 定义。指针必须指向高于$60 的地址。用PUSH 指令推数据入栈时,堆栈指针将减一, 而当调用函数或中断时,指针将减二。使用POP 指令时,堆栈指针将加一,而用RET 或 RETI 返回时,指针将加二。 AVR堆栈指针占用了I/O空间两个8位寄存器。使用的位数由实际情况决定。注意,在AVR 结构中某些操作使用的数据空间很小,只要SPL 即可 ,此时,不会给出SPH 寄存
[单片机]
ATmega128 <font color='red'>堆栈</font><font color='red'>指针</font>
C++堆栈、参数的传递与指针
//一。指针函数 #include stdafx.h void fun1(int a,int b) { printf( %d %d ,a,b); } int _tmain(int argc, _TCHAR* argv ) { void (*fun)(int x,int y);//void 是被指函数的返回值类型,int为被指函数的形参类型 fun=fun1; fun(10,20); return 0; } 二。参数的传递 // 0224.cpp : 定义控制台应用程序的入口点。 // #include stdafx.h int a=3; int b=4; void fun(i
[单片机]
ARM指针寄存器 -程序计数器PC、堆栈指针SP
堆栈是一种具有“后进先出”(LIFO---Last In First Out)特殊访问属性的存储结构。堆栈一般使用RAM 物理资源作为存储体,再加上LIFO 访问接口实现。 堆栈的实现方法: 在随机存储器区划出一块区域作为堆栈区,数据可以一个个顺序地存入(压入)到这个区域之中,这个过程称为‘压栈’(push )。通常用一个指针(堆栈指针 SP---Stack Pointer)实现做一次调整,SP 总指向最后一个压入堆栈的数据所在的数据单元(栈顶)。从堆栈中读取数据时,按照堆栈 指针指向的堆栈单元读取堆栈数据,这个过程叫做 ‘弹出’(pop ),每弹出一个数据,SP 即向相反方向做一次调整,如此就实现了后进先出的原则。 堆栈
[单片机]
s5pv210----串口设置之输入输出字符
第一节 S5PV210 UART相关说明 通用异步收发器简称UART,即UNIVERSAL ASYNCHRONOUS RECEIVER AND TRANSMITTER,它用来传输串行数据。发送数据时,CPU 将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线的信号,将串行收集在缓冲区中,CPU 即可读取UART获得这些数据。 在S5PV210 中,UART提供了4 对独立的异步串口I/O 端口,有 4 个独立的通道,每个通道可以工作于DMA 模式或者中断模式。其中,通道0 有256byte 的的发送FIFO和256byte 的接收FIFO,通道1 有64byte的的发送FIF
[单片机]
s5pv210----串口设置之输入输出字符
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved