版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版、作者信息和本声明。请勿用于商业用途,否则将追究法律责任。http://blog.csdn.net/wfq0624
在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各引脚的功能:
;@ 是输出、是输入、还是其他
MOVR1,#0x00000400
STRR1,[R0] ;@ 设置GPB5为输出口, 位[10:9]=0b01
LDR R0,=0x56000014 ;@ R0设为GPBDAT寄存器。此寄存器
;@ 用于读/写端口B各引脚的数据
MOV R1,#0x00000000 ;@ 此值改为0x00000020,
;@ 可让LED1熄灭
STRR1,[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,因为第一条指令的反汇编是
LDRR0,[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 LDRR0,[PC,#0x0014]
9: MOVR1,#0x00000400
0x00000FE4 E3A01B01 MOVR1,#0x00000400
10:STRR1,[R0];@ 设置GPB5为输出口, 位[10:9]=0b01
0x00000FE8 E5801000 STR R1,[R0]
11:LDR R0,=0x56000014 ;@ R0设为GPBDAT寄存器。此寄存器
12:;@ 用于读/写端口B各引脚的数据
0x00000FEC E59F000C LDRR0,[PC,#0x000C]
13:MOV R1,#0x00000000 ;@ 此值改为0x00000020,
14:;@ 可让LED1熄灭
0x00000FF0 E3A01000 MOVR1,#0x00000000
15:STRR1,[R0];@ GPB5输出0,LED1点亮
16: MAIN_LOOP
0x00000FF4 E5801000 STR R1,[R0]
17:B MAIN_LOOP
0x00000FF8 EAFFFFFEB 0x00000FF8
0x00000FFC 56000010 ???PL
0x00001000 00000000 ANDEQ R0,R0,R0
-------------------------------------------------------------------
---------------GPIO.sct-----------------------------------------
LR_IROM1 0x00000FE00x04000000 { ; load region size_region
ER_IROM1 0x00000FE0 0x04000000 { ; load address = executionaddress
led_on.o (LED, +First)
;*(InRoot$$Sections)
.ANY (+RO)
}
RW_RAM1 0x30000000 UNINIT 0x04000000 { ; RW data
.ANY (+RW +ZI)
}
}
--------------------------------------------------------------------------------
3.实际操作发现进入调试,程序pc会首先跑到0x00000000,而不是我们装载的地方0x00000FE0,
所以我们必须另写一个调试的启动脚本文件,并载keil 里设置
-------------------------GPIO.ini--------------------------------------------
FUNCvoid Setup(void) {
PC = 0x00000FE0;
}
Setup();
---------------------------------------------------------------------------------
代码都准备好了,剩下的工作是在Keil里设置了
在Option for Target“Target1”,或者点击工具栏的魔法棒
分享到:
相关推荐
S3C2440 GPIO 驱动 S3C2440 GPIO 驱动 S3C2440 GPIO 驱动 S3C2440 GPIO 驱动
S3C2440 GPIO Scan & Write Driver
S3C2440 GPIO 控制LED 汇编代码,包含makefile文件,S3C2440入门必学
How to test GPIO on S3c2440 with EVC.
基于linux和s3c2440的gpio驱动程序,同时包含了应用程序例子,能够访问任意的单个IO管脚,设置为输入、输出等
基于S3C2440的GPIO驱动及其访问LED的应用程序 提供了完整的GPIO驱动程序,并给出了以此驱动对LED的访问代码.
GPIO DRIVER FOR THE S3C2440 WITH TEST PROJECTS BOTH IN C# AND C++
由于工作原因,无法开放源码,致歉,编辑成DLL文件供同学们使用,每个函数有详细的中文说明。只需把S3C2440_GPIO.DLL加入到工程中即可使用。
s3c2440跑马灯的实现 led seg
s3c2440的GPIO驱动,已经测试通过,
S3C2440开发板Wince下GPIO实现的例子!
s3c2440基于linux的gpio led字符设备驱动实践
基于KEIL4环境编写,S3C2440芯片GPIO口操作的简单C程序
S3C2440aGPIO的驱动程序,详细的驱动编写,是最简单的驱动开发实例!
该文为方便大家观看,已经改为text文件上传。 博主在自己的ARM9 的板子上实现了蜂鸣器的报警和LED灯的闪烁, 为与之前在博客中GPIO封装原理对应 现将代码的...ARM9 S3C2451 GPIO封装以及点亮LED灯的功能实现 代码合集
FL2440裸板程序例子(GPIO),操作GPIO的简单例子,混编,C
给出全部源代码,相应博客说明,可直接运行。
适合嵌入式ARM9平台下的S3C2440及S3C2451三星开发板的GPIO代码学习,带详细注释
分相自己做的,在WINCE上使用VB.NET制作的S3C2440控制LED灯
gpio keypad driver for S3C2440A & Test Application