S3C2440学习二(基础资源的使用)

发布者:真诚友谊最新更新时间:2016-08-01 来源: eefocus关键字:S3C2440  基础资源 手机看文章 扫描二维码
随时随地手机看文章
虽然有种流水账的感觉,但是这是学习的必经之路,等我渗透ARM三次后,我再全面处理问题,给出最简洁最直接的答案吧。
①ARM有多少个通用寄存器,有什么用?(让我们一个一个记录)

  

通用寄存器

通用寄存器可用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。除此之外,它们还各自具有一些特殊功能。通用寄存器的长度取决于机器字长,汇编语言程序员必须熟悉每个寄存器的一般用途和特殊用途,只有这样,才能在程序中做到正确、合理地使用它们。
  16位cpu通用寄存器共有 8 个:AX,BX,CX,DX,BP,SP,SI,DI.
  八个寄存器都可以作为普通的数据寄存器使用。
  但有的有特殊的用途:AX为累加器,CX为计数器,BX,BP为基址寄存器,SI,DI为变址寄存器,BP还可以是基指针,SP为堆栈指针
  32位cpu通用寄存器共有 8 个: EAX,EBX,ECX,EDX,EBP,ESP,ESI,EDI功能和上面差不多
ARM通用寄存器
          通用寄存器(R0-R15)可分为三类:不分组寄存器R0~R7;分组寄存器R8~R14;程序计数器PC。
          1)不分组寄存器R0~R7
           不分组寄存器R0~R7在所有处理器模式下,它们每一个都访问一样的32位寄存器。它们是真正的通用寄存器,没有体系结构所隐含的特殊用途。
           2)分组寄存器R8~R14
           分组寄存器R8~R14对应的物理寄存器取决于当前的处理器模式。若要访问特定的物理寄存器而不依赖当前的处理器模式,则要使用规定的名字。寄存器R8~R12各有两组物理寄存器:一组为FIQ模式,另一组为除了FIQ以外的所有模式。寄存器R8~R12没有任何指定的特殊用途,只是在作快速中断处理时使用。寄存器R13,R14各对应6个分组的物理寄存器,1个用于用户模式和系统模式,其它5个分别用于5种异常模式。寄存器R13通常用做堆栈指针,称为SP;寄存器R14用作子程序链接寄存器,也称为LR。
          3)程序计数器PC
          寄存器R15用做程序计数器(PC)。
②大概有多少资源模块?
 ARM处理器共有37个寄存器:1) 31个通用寄存器,包括程序计数器(PC)。这些寄存器都是32位的; 2)6个状态寄存器。这些寄存器也是32位的,但是只使用了其中的12位。
S3C2440的片内资源大概可分13类:一,1个LCD控制器(支持STN和TFT带有触摸屏的液晶显示器);二,SDRAM控制器;三,3个通道的UART;四,4个通道的DMA;五,4个具有PWM功能的计时器和1个内部时钟;六,触摸屏接口;七,I2C总线接口;八,2个USB主机接口,1个USB设备接口;九,2个SPI接口;十,SD接口和MMC卡接口;十一,看门狗计数器;十二,117位通用I/O口和24位外部中断源;十三,8通道10位AD控制器。
ARM9主要是一ARM920T为核心,进行上述外围的扩张,使其显示出强大的能力,主要是频率上去了,能做的事情就多了,重点ARM920T的内核稳定。
③对于ARM的寻址是指的RAM吗?对ROM如何寻址?
我理解的寻址是,CPU每部寄存器对立即数的处理,对内部寄存器的处理,如果需要运算的就把中间结果或状态放到RAM中,相当于打草稿,如果是需要使用数据就进入ROM调用,相当于ROM是资料库,如果运算的结果重要就存放到RAM中相当于存档。
其实寻址非常简单,RAM和ROM或FLASH都是对应不同的设备,有不同的驱动方式,还有就是有地址顺序,采用常用的命令,写入读出到相应的地址,一切就顺理成章了。
④有时候用ADS1.2编译程序会出错,但是将编译清楚后,重新编译后,可能会报警,但不会出错,这是预编译和连接中的问题吗?
据说是编译中有个*.O文件,可执行代码的生存,是编译后连接,大概编译后生成*.O文件,然后连接处理行不通了,前面编译大概是对每个文件每个文件的处理,得到许多中间文件,然后再系统性连接处理,说以从头再来过可以解决这个编译问题。
⑤程序中static的着用?
加static 是标明此函数为静态函数,即此函数只能在本文件中使用,不允许别的文件调用此函数.函数后面的const 关键字表示,这个函数的返回值是个常量类型。这个常量类型是有限制的。 他的生存期间就是在这个类中。 
⑥我们知道最终在下载到硬件的是二进制代码,那么命令、数据、地址的区别和联系是什么?
对应硬件来说,每一行代码都是都有个存储顺序,可理解为按汇编的格式先装入操作命令,再是地址或寄存器,再是数据。虽然命令、数据、地址编译到最后就是二进制代码,但是他们有顺序,而且按照对应的命令就能自动分离了。再深入研究芯片的设计就能深入掌握了。
⑦RAM,ROM和flash的区别?
可以把他们看做不同的芯片、不同的设备,都能通过IO读写数据,他们都有各自的地址空间,但是RAM设计之初就是要求速度快,不用永久保留,而ROM要求永久保留(准确的是保留有效的时间,一般百十年就废了),flash又称为闪存,和ROM一个性质,主要是价格问题,做嵌入式不用想PC机要那么大,可以做小一点价格便宜。
⑧FIQ和IRQ的区别?
在ARM中,FIQ模式是特权模式中的一种,同时也属于异常模式一类。用于高速数据传输或通道处理,在触发快速中断请求(FIQ)时进入。
  FIQ和IRQ(外部中断模式)之间有很大的区别。FIQ模式必须尽快处理,处理结束后离开这个模式;IRQ模式可以被FIQ模式中断,但IRQ不能中断FIQ模式;为使FIQ模式响应更快,FIQ模式具有更多的影子(Shadow)寄存器。FIQ模式必须禁用中断;如果一个中断例程必须重新启用中断,应使用IRQ模式而不是FIQ模式。

关键字:S3C2440  基础资源 引用地址:S3C2440学习二(基础资源的使用)

上一篇:S3C2440学习四(如何使用Jlink)
下一篇:S3C2440学习笔记一(系统频率以及一些入门级问题)

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

s3c2440裸机-I2c编程-3.i2c程序框架
1.iiC设备的功能 很显然,IIC控制器提供了传输数据的能力,至于数据有什么含义,IIC控制器并不知道,数据的含义有外部i2c从设备,我们需要阅读芯片手册,才知道IIC控制器应该发出怎样的数据。 下图是AT24cxx的操作方法: 2.I2c程序框架 显然我们的程序应该分为两层(IIC设备层,IIC控制器层),框架如下图所示: 最上层是i2c_test层,用来对i2c的功能进行测试和验证。 第2层是i2c设备层,用来对具体某一型号的从设备进行i2c读写 第3层是通用i2c控制器层,用来提供对具体某一型号的i2c主控进行管理操作 最底层是i2c控制器具体的型号层 在通用i2c控制层,我们提供一个统一的接口i2c_transf
[单片机]
<font color='red'>s3c2440</font>裸机-I2c编程-3.i2c程序框架
s3c2440之ADS移植keil
最近把ADS1.2工程转到MDK4.03出现一些error,罗列了可能出现的error,并给予相关的办法,让大家在以后的转换中尽快搞定 1:error : No section matches selector no section to be FIRST/LAST. 把原来的Init 代码段名修改成RESET: ; AREA Init,CODE,READONLY AREA RESET,CODE,READONLY 2:error Undefined symbol Main (referred from 2440
[单片机]
S3C2440驱动简析——串口驱动
对于驱动的学习停歇了几乎一周的时间,期间忙于补习Linux应用编程和搜索驱动、内核相关书籍,以便之后更进一步地学习。在之前友善提供的驱动例程里面,涉及的知识面非常有限,需要研究更多的驱动源码,了解更多的驱动知识,是当务之急。研究别人代码的同时,当然不忘自己也要动手练习。以下贴出串口驱动程序,并在程序里附上简要注释。 view plain copy // linux/drivers/serial/s3c2440.c * * Driver for Samsung S3C2440 and S3C2442 SoC onboard UARTs. * * Ben Dooks, Copyright
[单片机]
arm9(s3c2440)jlink烧写uboot
笔者开发环境:操作系统 win7,开发板GT2440,电脑没有串口,用的u转串口(本文简要摘录,并整理相关资源) 1.连接pc和jlink和开发板 2.安装jlink驱动,配置jlink 3.开发板打到nor flash启动方式,启动开发板 ARM学习笔记之Jlink烧写Uboot: 下载jlink驱动JLINK-V7安装包。解压后找到驱动安装。双击默认安装 安装完后在桌面会出现两个图标 安装完成可以桌面出现两个快捷图标,J-Link ARM 可以用来进行设置和测试,下面我们看一下J-LINK 的测试数据双击J-link ARM在没有连接开发板时出现如下的界面: 如果连接开发板后出现界面如下:说明jlink连上板子
[单片机]
arm9(<font color='red'>s3c2440</font>)jlink烧写uboot
S3C2440—10.代码重定位
本文主要介绍ARM裸机代码重定位的相关知识,以及重定位的实现过程。 下面将由ARM裸机(S3C2440)的启动方式开始分析,引入段的概念,随后介绍链接脚本的使用以及代码重定位的操作,首先会使用汇编语言验证代码重定位的可行性,最后将使用C语言实现代码重定位。 一.启动方式 S3C2440的启动方式有俩种: NOR FLASH启动 NAND FLASH启动 说起ARM裸机的启动方式,就是将程序的bin文件烧写在ARM的存储空间中,ARM从这些地址中读取指令到CPU中执行,需要数据的时候去数据的存储地址取数据。说白了启动方式的不同就是bin文件烧写地址的不同,可以烧在NOR FLASH中,也可以烧在NAND FLASH中,俩种F
[单片机]
<font color='red'>S3C2440</font>—10.代码重定位
s3c2440输入子系统学习 第二节
  先来回忆一下韦老大之前教我们写驱动的几个步骤:   1、 分配主设备号   2、构造一个file_operation函数   3、register_chrdev注册设备   4、出口、入口函数   从第一节我们知道,输入子系统无非就是把我们刚入门时写的驱动分成了号几个部分,拿input.c 为例子,我们可以在驱动中看到主设备号、 file_operations结构体、register_chrdev。不同的是,在file_operations的结构体中,我们到了.open函数,open函数在某个数组里边找到input_handler函数,用里边的fops去调用系统中固有的函数进行读写。由于系统中已经帮我们完成了部分程序,我们只要
[单片机]
<font color='red'>s3c2440</font>输入子系统学习 第二节
基于S3C2440的嵌入式Linux驱动——MMC/SD子系统解读(二)
本文的内容基于如下硬件和软件平台: 目标平台:TQ2440 CPU:s3c2440 内核版本:3.12.5 基于SD规范4.10,即《SD Specifications Part 1 Physical Layer Simplified Specification Version 4.10》。 在阅读MMC子系统时,一个问题随之就会产生:当我们插入一张SD卡时,系统是如何识别到这张SD卡并将它注册进系统的呢? 这一过程,源于MMC控制器驱动的不懈努力。。。。。。下面,我们从控制器驱动开始,来深入挖掘这一过程。 1. MMC控制器驱动 1.1 MMC控制器入口函数及probe方法 本文以三星的s3c2440上的MMC控制
[单片机]
ARM9_S3C2440学习(七)SDRAM学习总结
1.SDRAM的burst mode SDRAM是一种命令型动作的设备,就算读写资料只有一个也要先下命令才可以用,为了增加工作效率,就产生了一种传送一个命令,写多个数据的模式,这就是burst mode。 burst mode是一种利用内部列地址发生器来工作的高速读写模式,只要设置最开始的列地址,后面的地址就可以通过内部的列地址发生器来自动生成。 2.为什么要做precharge动作? 关闭正在作用的SDRAM bank,算是一种结束命令,后面可以下新的命令。我想这是和SDRAM内部管理有关。(这是从网上查到的,感觉不够详细,也不太理解) 3.自动刷新功能? 动态存储器(Dynamic RAM)都存在刷新问题。这里主要
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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