加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Realview MDK第一个程序

发布时间:2020-12-15 18:44:21 所属栏目:百科 来源:网络整理
导读:在mini2440(S3C2440)的板子上运行点亮LED 的程序,使GPB5输出低电平,会点亮LED. ??1.Led_on.S的完整程序如下 程序代码: ??-----------------------------led_on.S---------------------------------------------------- ??PRESERVE8??? ;保持堆栈8字节对齐,

在mini2440(S3C2440)的板子上运行点亮LED 的程序,使GPB5输出低电平,会点亮LED.

??1.Led_on.S的完整程序如下

程序代码:

??-----------------------------led_on.S----------------------------------------------------

??PRESERVE8??? ;保持堆栈8字节对齐,符合新的ARM ABI标准,所以压入堆栈的数据寄存器也必须是偶数个

??AREA??? LED,CODE,READONLY
??ENTRY?

START1?
??????????? LDR???? R0,=0x56000010????? ;@ R0设为GPBCON寄存器。此寄存器
??????????????????????????????????????? ;@ 用于选择端口B各引脚的功能:
??????????????????????????????????????? ;@ 是输出、是输入、还是其他
??????????? MOV???? R1,#0x00000400???????
??????????? STR???? R1,[R0]???????????? ;@ 设置GPB5为输出口,位[10:9]=0b01
??????????? LDR???? R0,=0x56000014????? ;@ R0设为GPBDAT寄存器。此寄存器
??????????????????????????????????????? ;@ 用于读/写端口B各引脚的数据
??????????? MOV???? R1,#0x00000000????? ;@ 此值改为0x00000020,
??????????????????????????????????????? ;@ 可让LED1熄灭
??????????? STR???? R1,[R0]???????????? ;@ GPB5输出0,LED1点亮
MAIN_LOOP
??????????? B?????? MAIN_LOOP
??END

?---------------------------------------------------------------------------------------------??

?2.使用分散加载文件GPIO.sct

?; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; *************************************************************
????? ;LR_IROM1结尾地址不能超过4KB

????? ;因为S3C2440的内部Stepingstone只有4KB,如果超过了4KB ,就必须从NAND搬移代码到SDRAM里,

;而主程序里并没有搬移的程序,也就是保证装载的程序必须在4KB以内的flash里。

;其实还有个隐形的条件。LR_IROM1 0x00000FE0 最大也只能为0x00000FE0,因为第一条指令的反汇编是

LDR?????? R0,[PC,#0x0014],要保证PC+0X0014是小于0x1000,当设置为0x00000fe0,这条指令的是把

地址0x00000fe8+0x0014=0x00000FFC的内容装载到R0里,仔细看代码,果真如此。

;PC指针是指向下两条指令的位置:(执行A,取指B,译码C),当执行A指令,PC已经指向C指令位置了。

如果设置成0x00000fe4,那么地址是0x00000fec+0x0014=0x1000,已经不小于0x1000,所以不能设置成0x000000FE4。
------------------------------disassembly----------------------------------------------------

???? 6:???????????? LDR???? R0,=0x56000010????? ;@ R0设为GPBCON寄存器。此寄存器
???? 7:???????????????????????????????????????? ;@ 用于选择端口B各引脚的功能:
???? 8:???????????????????????????????????????? ;@ 是输出、是输入、还是其他
0x00000FE0? E59F0014? LDR?????? R0,#0x0014]
???? 9:???????????? MOV???? R1,#0x00000400????????
0x00000FE4? E3A01B01? MOV?????? R1,#0x00000400
??? 10:???????????? STR???? R1,位[10:9]=0b01
0x00000FE8? E5801000? STR?????? R1,[R0]
??? 11:???????????? LDR???? R0,=0x56000014????? ;@ R0设为GPBDAT寄存器。此寄存器
??? 12:???????????????????????????????????????? ;@ 用于读/写端口B各引脚的数据
0x00000FEC? E59F000C? LDR?????? R0,#0x000C]
??? 13:???????????? MOV???? R1,
??? 14:???????????????????????????????????????? ;@ 可让LED1熄灭
0x00000FF0? E3A01000? MOV?????? R1,#0x00000000
??? 15:???????????? STR???? R1,[R0]???????????? ;@ GPB5输出0,LED1点亮
??? 16: MAIN_LOOP
0x00000FF4? E5801000? STR?????? R1,[R0]
??? 17:???????????? B?????? MAIN_LOOP
0x00000FF8? EAFFFFFE? B???????? 0x00000FF8
0x00000FFC? 56000010? ???PL????
0x00001000? 00000000? ANDEQ???? R0,R0,R0

?????-------------------------------------------------------------------

---------------GPIO.sct-----------------------------------------

LR_IROM1 0x00000FE0 0x04000000? {??? ; load region size_region
? ER_IROM1 0x00000FE0 0x04000000? {? ; load address = execution address
?? led_on.o (LED,+First)????
?? ;*(InRoot$$Sections)
?? .ANY (+RO)
? }
? RW_RAM1 0x30000000 UNINIT 0x04000000? {? ; RW data
?? .ANY (+RW +ZI)
? }
}

--------------------------------------------------------------------------------

3.实际操作发现进入调试,程序pc会首先跑到0x00000000,而不是我们装载的地方0x00000FE0,

所以我们必须另写一个keildebug的启动脚本文件,并载keil 里设置

-------------------------GPIO.ini--------------------------------------------

FUNC void Setup(void) {
PC = 0x00000FE0;
}

Setup();

---------------------------------------------------------------------------------

代码都准备好了,剩下的工作是在Keil里设置了

在Option for Target “Target1”,或者点击工具栏的魔法棒

?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读