S3C2440 GPIO例子在ISRAM内仿真分析

发布者:科技奇才最新更新时间:2019-02-13 来源: eefocus关键字: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  {  ; 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  ISRAM  仿真分析 引用地址:S3C2440 GPIO例子在ISRAM内仿真分析

上一篇:MDK S3C2440启动代码简单分析
下一篇:S3C2440 FLASH 介绍

推荐阅读最新更新时间:2024-03-16 16:23

keil4.74中运行s3c2440程序出现警告 进行一步骤修改
安装提示 一步一步的修改 解析 警告 warning: A1608W: MOV pc, rn  instruction used, but BX  rn  is preferred。  这需要配置keil软件 在option属性中Asm选项卡中去掉Enable ARM/Thumb Interworking选项。 编译出现一个警告 src2440init.s(341): warning: A1876W: Use of '|' as a synonym for the :OR: operator is deprecated. 警告信息:warning: A1876W: Use of ‘|’ as
[单片机]
keil4.74中运行<font color='red'>s3c2440</font>程序出现警告 进行一步骤修改
三 ARM9(S3C2440)的串口UART——程序实例讲解
串口通信程序编写步骤 UART通信程序可以采用查询、中断和DMA模式。我们通过使用较多的中断方式来介UART通信程序的编写。简单做法是,UART通信程序的编写参照例子程序。 选通道,通过函数Uart_Select();选UART0~UART2; 选波特率和波特率发生器时钟,选波特率通过函数Uart_Pclk_En(int ch, int baud)或Uart_Pclk_En(int ch, int baud)来进行。时钟选UCLK ,rUCON0|=0x400;时钟选PCLK ,rUCON0&=0x3ff。 通信协议(rULCON0)设定,如果正常通信,一位停止位,8位数据位,无奇偶效验: rULCON0=(0 6)|(0
[单片机]
自动驾驶仿真平台的关键构成及技术趋势分析
1. 自动驾驶仿真平台的关键构成 自动驾驶仿真平台需支持车辆动力学仿真、环境感知传感器仿真、交通场景仿真等; 车辆动力学仿真:基于多体动力学搭建的模型,将车体、转向、悬架、轮胎、制动、I/O硬件接口等在内的多个真实部件进行参数化建模,来实现车辆模型运动过程中的姿态和运动学仿真模拟;虽然是比较传统的一部分,却是构建自动驾驶仿真测试系统的不可或缺的重要基础。 环境感知传感器仿真:主要包括摄像头、激光雷达、毫米波雷达、GPS/IMU等传感器的建模仿真,它是构建自动驾驶仿真系统的关键技术和重要环节; 交通场景仿真:包括静态场景还原和动态场景仿真两部分,静态场景还原主要通过高精地图和三维建模技术来实现;动态场景仿真既可通过把真实路采
[嵌入式]
自动驾驶<font color='red'>仿真</font>平台的关键构成及技术趋势<font color='red'>分析</font>
STM32入门学习之GPIO(STM32F030F4P6基于CooCox IDE)(二)
不好意思,忘了,使用CooCox IDE,还需要安装交叉编译工具 gcc-arm-none-eabi-XXXXXXXXX版本,自己下载 https://launchpad.net/gcc-arm-embedded/+download 安装完成后,对Coocox IDE进行配置 Project——Select Toolchain Path,选择刚才安装的GUN Tools ARM Embedded XXX版本 bin 目录,确认即可
[单片机]
STM32入门学习之<font color='red'>GPIO</font>(STM32F030F4P6基于CooCox IDE)(二)
第19章 STM32F429的GPIO应用之按键FIFO
19.1 初学者重要提示 学习本章节前,务必保证已经学习了第15,16和17章。 按键FIFO驱动扩展和移植更简单,组合键也更好用。支持按下、弹起、长按和组合键。 19.2 按键硬件设计 V6开发板有三个独立按键和一个五向摇杆,下面是三个独立按键的原理图: 注意,K1(S1)、K2(S2)和K3(S3)按键的上拉电阻是接在5V电压上,因为这三个按键被复用为PS/2键盘鼠标接口,而PS/2是需要5V供电的(注,V5和V6开发板做了PS/2复用)。实际测试,K1、K2、K3按键和PS/2键盘是可以同时工作的。 下面是五向摇杆的原理图: 通过这个硬件设计,有如下两个知识点为大家做介绍: 19.2.1 硬件设计 按
[单片机]
第19章 STM32F429的<font color='red'>GPIO</font>应用之按键FIFO
S3c2440ARM异常与中断体系详解3---Thumb指令集程序示例
在上节视频里说ARMCPU有两种状态 ARM State 每条指令会占据4byte Thumb State 每条指令占据2byte 我们说过Thumb指令集并不重要,本节演示把一个程序使用Thumb指令集来编译它 使用上一章节的重定位代码,打开Makefile和Start.S Makefile文件 all: arm-linux-gcc -c -o led.o led.c arm-linux-gcc -c -o uart.o uart.c arm-linux-gcc -c -o init.o init.c arm-linux-gcc -c -o main.o main.c arm-linu
[单片机]
基于S3C2440的MiniGUI移植
随着嵌入式系统的迅速发展,图形用户界面(Graphic User Interface,GUI)需求越来越明显。MiniGUI是面向实时嵌入式系统的轻量级图形用户界面支持系统,以轻型、占用资源少、高性能、可配置等特点广泛应用于通信、医疗、工控、电子、机顶盒、多媒体等领域。本文正是针对这种需求,介绍如何在S3C240上移植MiniGUI的全过程。 1 图形用户界面MiniGUI MiniGUI是由原清华大学教师魏永明主持开发的轻量级图形系统,遵循GPL公约。所支持的操作系统已不仅仅限于Linux,它还可以在μCli nux,μC/OS-Ⅱ,eCos和VxWorks等系统上运行。已验证的硬件平台包括Intelx86,ARM(ARM
[单片机]
基于<font color='red'>S3C2440</font>的MiniGUI移植
基于ADVISOR的动力系统设计及其仿真分析
引言 为了解决世界的能源和环保问题,电动汽车的研发倍受关注。但我国电动汽车的研发工作,大多建立在对现有燃油汽车进行改装设计的基础上完成的。因此,为了研制出经济、实用的电动汽车,利用先进的仿真技术对其性能进行仿真分析是非常必要的。本文在对某微型燃油汽车底盘进行改装设计的基础上,利用ADVISOR仿真软件对其性能进行仿真分析,从而为该微型电动汽车的设计和产业化提供参考。 1 动力系统设计及主要部件选择 电动汽车与传统的燃油汽车的真正区别在于动力系统。电动汽车是用电力驱动车辆,由蓄电池供电,通过电动机及控制器将电能转化为机械能来驱动整车。由某微型燃油汽车底盘改装设计的微型电动汽车动力系统结构如图1所示。 作为电动汽车的动力源蓄电
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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