历史上的今天
今天是:2025年04月01日(星期二)
2020年04月01日 | S5PV210的IRAM应用
2020-04-01 来源:eefocus
准备分析
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.无
史海拾趣
|
KEIL C51 消除UNCALLED SEGMENT警告的方法 请教高人得到的答案,共享给大家,去除了警告,看起来舒服多了 第一幅图是在KEIL中的方法 第二幅是在MEDWIN v3中的方法 [ 本帖最后由 soulcoffee 于 2009-9-28 16:26 编辑 ]… 查看全部问答> |
|
规则17.4 只允许用数组索引做指针运算 按照如下方式定义数组和指针: uint8_t a[10]; unit8_t *p; p = a; 则*(p+5) = 0是不允许的,而p[5] = 0 则是允许的,尽管就这段程序而言,二者等价。 以下给出一段程序,读者可参照相应程序行的注释,细 ...… 查看全部问答> |
|
我最近在做这个东西,遇到几个问题想向大家请教一下。 我用的是msp430f2618单片机。无线通信模块用的是cc2520. 温湿度传感器是sht10,光照传感器是tsl2561. 现在电路原理图已经做好了,开始编程序了。请大家就编程模块给我提一些建议。… 查看全部问答> |




