设为首页 加入收藏

TOP

S3C2440 GPIO例子在ISRAM内仿真分析(一)
2014-11-24 12:25:57 来源: 作者: 【 】 浏览:2
Tags:S3C2440 GPIO 例子 ISRAM 仿真 分析

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


将代码在ISRAM 内仿真


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以内的nand flash里。


;其实还有个隐形的条件。LR_IROM10x00000FE0 最大也只能为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,[PC,#0x0014]
9: MOV R1,#0x00000400
0x00000FE4 E3A01B01 MOV R1,#0x00000400
10: STR R1,[R0] ;@ 设置GPB5为输出口, 位[10:9]=0b01
0x00000FE8 E5801000 STR R1,[R0]
11: LDR R0,=0x56000014 ;@ R0设为GPBDAT寄存器。此寄存器
12: ;@ 用于读/写端口B各引脚的数据
0x00000FEC E59F000C LDR R0,[PC,#0x000C]
13: MOV R1,#0x00000000 ;@ 此值改为0x00000020,
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 0x00000FE00x04000000 { ; load region size_region
ER_IROM1 0x00000FE0 0x04000000

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇ARM 如何实现绝对地址的跳转 下一篇基于S3C2410 的MDK 例程移植

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)