ARMS3C2440A讲解

合集下载

S3C2440时钟设置详解

S3C2440时钟设置详解

S3C2440A中的时钟控制逻辑可以产生必须的时钟信号,包括CPU的FCLK,AHB总线外设的HCLK以及APB总线外设的PCLK。

S3C2440A包含两个锁相环(PLL):一个提供给FCLK、HCLK和PCLK,另一个专用于USB模块(48MHz)。

时钟控制逻辑可以不使用PLL来减慢时钟,并且可以由软件连接或断开各外设模块的时钟,以降低功耗。

S3C2440A的主时钟源由外部时钟(EXTCLK)或者外部晶振(XTIPll)提供,输入时钟源由模式控制引脚OM3和OM2控制选择,在复位信号的上升沿参考OM3和OM2的引脚将OM[3:2]的状态在内部锁定,如图1所示图1 引导启动时的时钟源选择选择不同输入时钟源时连接方式如图2所示:图2 时钟连接参考通过在片内集成的2个锁相环:MPLL和UPLL,可对输入的Fin=12MHz的晶振频率进行倍频。

S3C2440使用了三个倍频因子MDIV、PDIV和SDIV来设置倍频,通过寄存器MPLLCON和UPLLCON可设置倍频因子。

其中MPLLCON寄存器用于设置处理器内核时钟主频FCLK,其输入输出频率间的关系为FCLK=MPLL=(2*m*Fin)/(p*2^s)其中m=(MDIV+8), p=(PDIV+2), s=SDIV。

其中UPLLCON寄存器用于产生48MHz或96MHz,提供USB时钟(UCLK),其输入输出频率间的关系为UCLK=UPLL=(m * Fin) / (p * 2^s)其中m=(MDIV+8), p=(PDIV+2), s=SDIV。

手工计算相对复杂些,我们可以根据欲得到的主频FCLK大小,直接通过查表来获知各倍频因子的设置参数,详见。

S3C2440的数据手册中提供了一个表格来查询各个输出频率和输入频率所对应的MPLL中参数m、p和s 的值,使用的时候最好只使用该表格中推荐的数值。

图3 PLL真值表通过图3的真值表,我们可以得到如果输入时钟为12MHz,输出时钟FCLK为405MHz,可以选择MDIV 为127,PDIV为2,SDIV为1。

S3C2440存储控制器的地址空间与MMU分析介绍

S3C2440存储控制器的地址空间与MMU分析介绍

S3C2440存储控制器的地址空间与MMU分析介绍一、S3C2440存储控制器如果大家写过S3C2440的ARM裸机程序都应该知道通常SDRAM的起始地址是0X30000000,但是大家有没有想过为什么呢?下面我将给大家做一个简要的介绍。

查S3C2440的手册可知S3C2440可寻址1G的地址范围,但是S3C2440的地址线只有27根,理论上只能寻址2的27次方等于128M的地址范围。

于是S3C2440通过一个叫BANK 的东东解决了这个问题。

S3C2440引出了8根BANK线(对应nGCS0~ nGCS7),通过这个8根线来选通和关闭不同的存储器,这样S3C2440最多就可以连接8个128M的存储器,只要在某一时刻只选通一个BANK就可以实现1G的寻址空间每个BANK有个地址,对该BANK地址的访问实际上就是选通该BANK,于是ARM核只要发出一个地址,然后S3C2440的储存控制器只要把该地址解释成两部分:一部分是BANK地址一部分是连接到该BANK存储器内部的地址就可以访问了。

而作为32位的CPU,可以使用的地址范围理论上可以达到2的32次方等于4G,除去上述的1G地址空间,还有一部分是CPU内部寄存器的地址,剩下的地址空间没有使用。

下面我们来看到S3C2440存储器的地址空间分布图左边的是表示CPU从NOR FLASH启动时的地址空间图,右边是CPU从NAND FLASH 启动时的地址空间图。

从图中可以看出SDRAM接在BANK6上面,地址为0X30000000,这就解释了开始最开始的那个问题。

问题又来了为什么CPU从NAND和NOR启动时地址空间不同?这是因为NOR是线性结构,跟普通的内存差不多,它接在BANK0上。

而NAND则是另外一种结构,S3C2440有专用的NAND控制器和地址线来连接,它不能接在BANK0上。

CPU启动时必定从0地址开始执行程序,而从NAND启动时,0地址没有存储器,那CPU怎么办呢?于是就出现了一种叫“起步石”(stepping stone)的东东,它是S3C2440内部的一块4K的存储器,当从NAND启动时,0地址线会连接到起步石上面,同时CPU会通过内部的硬件将NAND FLASH开始的4K数据复制到起步石里面。

ARM samsung 2440中文手册 s3c2440a_16ADC&TSC

ARM samsung 2440中文手册 s3c2440a_16ADC&TSC

第十六章ADC和触摸屏接口16.1概述10位CMOS的ADC(模数转换器)是有8通道模拟输入的循环类型设备。

其转换模拟输入信号到10位的数字编码,最大的转换率是在2.5MHz转换时钟下达到500KSPS。

AD转换器支持片上采样和保持功能及掉电模式。

触摸屏接口可以控制或选择触摸屏触点用于XY坐标的转换。

触摸屏接口包括触摸触点控制逻辑和有中断产生逻辑的ADC接口逻辑。

16.2特点-分辨率:10位-微分线性误差:±1.0LSB-积分线性误差:±2.0LSB-最大转换速率:500KSPS-低功耗-供电电压:3.3V-输入模拟电压范围:0~3.3V-片上采样保持功能-普通转换模式-分离的XY坐标转换摸-自动连续XY坐标转换模式-等待中断模式16.3ADC及触摸屏接口操作模块图如图16-1所示AD转换器和触摸屏接口的功能模块图。

注意AD转换器设备是一个循环类型。

注意(图标)当触摸屏接口使用时,XM或PM应该接触摸屏接口的地。

当触摸屏设备不使用时,XM或PM应该连接模拟输入信号作为普通ADC转换用。

16.4功能描述16.4.1AD转换时间当GCLK频率为50MHz和预分频器(预定标器)值为49,总共10位转换时间如下:AD转换器频率=50MHz/(49+1)=1MHz转换时间=1/(1MHz/5cycles)=1/200KHz=5us注:AD转换器设计在最大2.5MHz时钟下工作,所以转换率最高达到500KSPS。

16.4.2触摸屏接口模式(1)正常转换模式单个转换模式可能多数是使用在通用目的的ADC转换。

该模式可以通过设置ADCCON(ADC控制寄存器)来初始化并且完成对ADCDAT0的读写操作(ADC数据寄存器0)。

(2)分离XY坐标转换模式触摸屏控制器可以在两种转换模式中的一种模式下操作。

分离的XY坐标转换模式由以下方法操作。

X坐标模式写X坐标转换数据到ADCDAT0,触摸屏接口产生中断源到中断控制器。

S3C2410简介

S3C2410简介
— 可通过软件选择大小端 — 地址空间:每个Bank 128Mbytes (总共 1GB) —除 bank0 (16/32-bit) 外,所有的Bank都可以通过编程选择总线宽度= (8/16/32-bit) — 共 8 个banks
前6个Bank用于控制 ROM, SRAM, etc. 最后2个Bank用于控制 ROM, SRAM, SDRAM, etc . — 7个Bank固定起始地址; — 最后一个Bank可调整起始地址; — 最后两个Bank大小可编程; —所有Bank存储周期可编程控制。
存储器控制是通过相关的寄存器来实施的。 寄存器分为控制寄存器和状态寄存器。可以给控制寄 存器赋值以得到所需要的状态,而状态寄存器会根据情况自 行产生变化。不要试图控制状态寄存器。 存储器控制器是由若干寄存器组成。了解这些寄存器 ,就可以阅读或编写Bootloader程序了。
精选版课件ppt112.7.3 存储器控制器(续1)
S3C4120X具有三种启动方式,可通过OM [1:0]管脚 (OM0为管脚U14, OM1为管脚U15)进行选择。
OM [1:0] = 00 OM [1:0] = 01 OM [1:0] = 10 OM [1:0] = 11
从Nand Flash 启动; 从16位宽的ROM启动; 从32位宽的ROM启动; TEST模式。
S3C2410A具备一个内部SRAM缓冲器--“Steppingstone”。
当系统启动时,NAND flash存储器的前面4KByte字节将被自 动载入到Steppingstone中,然后系统自动执行这些载入的引 导代码。
精选版课件ppt
17
CPU操作 (boot代码)
Steppingstone (4KB Buffer)

s3c2440芯片中文手册2

s3c2440芯片中文手册2

第二章处理器工作模式2.1概述S3C2440采用了非常先进的ARM920T内核,它是由ARM(Advanced RISC Machines) 公司研制的。

2.2 处理工作状态从程序员的角度上看,ARM920T可以工作在下面两种工作状态下的一种:● ARM 状态:执行32位字对齐的ARM指令● THUMB 状态:执行16位半字对齐的THUMB指令。

在这种状态下,PC 寄存器的第一位来选择一个字中的哪个半字注意;这两种状态的转换不影响处理模式和寄存器的内容。

2.3 切换状态进入THUMB 状态进入THUMB 状态,可以通过执行BX指令,同时将操作数寄存器的状态位(0位)置1来实现。

当从异常(IRQ,FIQ,UNDEF,ABORT,SWI等)返回时,只要进入异常处理前处理器处于THUMB状态,也会自动进入THUMB状态。

进入ARM状态进入ARM状态,可以通过执行BX指令,并且操作数寄存器的状态位(0位)清零来实现。

当处理进入异常(IRQ,FIQ,RESET,UNDEF,ABORT,SWI等)。

这时,PC值保持在异常模式下的link寄存器中,并从异常向量地址处开始执行处理程序。

存储空间的格式ARM920T将存储器空间视为从0开始由字节组成的线性集合,字节0到3中保存了第一个字节,字节4到7中保存第二个字,以此类推,ARM920T对存储的字,可以按照小端或大端的方式对待。

大端格式:在这种格式中,字数据的高字节存储在低地址中,而字数据的低字节则存放2.4 指令长度指令可以是32位长度(在ARM状态下) 或16位长度(在THUMB状态) 。

数据类型ARM920T支持字节(8位),半字(16位) 和字(32位) 数据类型。

字必须按照4字节对齐,半字必须是2字节对齐。

2.5 操作模式ARM920T支持7种操作模式:● 用户模式(user模式),运行应用的普通模式● 快速中断模式(fiq模式),用于支持数据传输或通道处理● 中断模式(irq模式),用于普通中断处理● 超级用户模式(svc模式),操作系统的保护模式● 异常中断模式(abt模式),输入数据后登入或预取异常中断指令● 系统模式(sys模式),使操作系统使用的一个有特权的用户模式● 未定义模式(und模式),执行了未定义指令时进入该模式]外部中断,异常操作或软件控制都可以改变中断模式。

keil下的s3c2440启动代码分析

keil下的s3c2440启动代码分析

由于片面问题,所以可能会看起来不太美观,可以看附件中的内容。

ARM启动代码相当于我们电脑的BIOS,也就是ARM启动时对处理器的一些初始化及嵌入式系统硬件的一些初始化。

由于它直接面对处理器内核和硬件控制器进行编程,一般都是用汇编语言。

一般包括:中断向量表,初始化存储器系统,初始化堆栈,初始化有特殊要求的断口,设备初始化,变量初始化等。

这几天对着RealView MDK-ARM中自带的启动代码研究了一下,遇到问题又对着数据手册和指令表看了一下,总算对S3C2440A的硬件有了一个大致的了解。

学习嵌入式系统重在系统,学习ARM只是为学习嵌入式系统铺路,懒猫比较笨可能在上系统之前要裸奔几天以强化以下对S3C2440A内部结构的了解。

把MDK自带的S3C2440A.S文件的注释发一下,这些是懒猫结合数据手册与ARM指令表理解了,可能会有错误,放在这里只是引导一下像我一样还没有入门的兄弟们,希望你们不要害怕ARM害怕嵌入式,老毛他老人家说的对,世上无难事,只怕有心人,ARM指令就那么多,看一遍不会就多看几遍,还有一定要学习看软件自带的帮助文件.;/*****************************************************************************/;/* S3C2440.S: Startup file for Samsung S3C440 */;/*****************************************************************************/;/* <<< Use Configuration Wizard in Context Menu >>> */ ;/*****************************************************************************/;/* This file is part of the uVision/ARM development tools. */ ;/* Copyright (c) 2005-2008 Keil Software. All rights reserved. */ ;/* This software may only be used under the terms of a valid, current, */;/* end user licence from KEIL for a compatible version of KEIL softwar e */;/* development tools. Nothing else gives you the right to use this softwa re. */;/*****************************************************************************/;下面这些参数是与CPSR状态寄存器有关;参数的由来:这里各个模式的参数是由寄存器CPSR的模式位设置M[4:0]得来的,;比如这里的用户模式,CPSR的M[4:0]设置为10000就是0x10。

s3c2440工作原理

s3c2440工作原理

s3c2440工作原理
S3C2440是一款ARM11核心的微处理器,其工作原理可以概括为以下几
个方面:
1. 地址空间管理:S3C2440的存储器控制器具有大小端模式选择、可编程
的访问位宽、8个存储器banks等特点。

每个bank有128M 的字节(总
共1G字节/8个banks)。

其中,前6个存储器bank(bank0-bank5)可以是ROM、SRAM等类型的存储器,而后两个存储器bank(bank6-
bank7)则可以作为ROM、SRAM、SDRAM等类型的存储器。

2. 数据传输方式:S3C2440提供了三个UART端口,每个UART端口都可以通过查询、中断和DMA方式传输数据。

当发送数据时,CPU先将数据写入发送FIFO中,然后UART会自动将FIFO中的数据复制到“发送移位器”中,发送移位器将数据一位一位地发送到TXDn数据线上。

接收数据时,“接收移位器”将RXDn数据线上的数据一位一位地接收进来,然后复制到接收FIFO中,CPU即可从中读取数据。

3. 寄存器配置:S3C2440的UART有3个独立通道,每个通道支持的停止位有1位、2位,数据位有5、6、7、8位,支持校验功能,另外还有红外发送/接收功能。

这些功能通过相应的寄存器进行配置。

以上信息仅供参考,如需了解更多信息,建议查阅S3C2440的硬件手册或相关技术文档。

S3C2440A的某装备监测系统模拟信号采集模块设计

S3C2440A的某装备监测系统模拟信号采集模块设计
L U — e ,Z I Yifi HU n h a DU AN u s e g Xi — u , Xi - h n ( r n n eE g ne ig C l g , hj z u n 5 0 3 C ia O d a c n iern o e e S i a h a g 0 0 0 , hn ) l i
¥3 4 0 p o e s r h o g h e i h r lcr u t e l e h c u sto .S fwa e p a f r i a e C2 4 A r c s o ,t r u h t e p r e a i i ,r a i s t e a q iii n p c z o t r l to m s b s d o m b d e p r t g s s e W i d ws CE,a d t e d v l p n fa p ia i n i r a ie y EVC.Th n e e d d o e a i y t m- n o n n h e eo me to p l t e l d b c o s z e d s g e h d o h e i n m t o f e ADC s r a i t r a e d i e sp o r m i e .M e n i t e d i e sa d d t h t t e m n e f c rv r r g a i g v n s a wh l e, h rv ri d e o t e
a a o i n l c u s t n s s e r n t b l y; t s s a c r c n l g s g a s a q iii y t m u s s a i t o i e t c u a y,a d t e c n i u a i n i c mp c ;t e n h o fg r to s o a t h e t n i i t s s r n x e d b l y i t o g,S t p l a i n i v r a u b e i O i a p i t s e y v l a l . s c o Ke r s ¥ C2 4 A ,a a o i n la q ii o s r a i t r a e d i e y wo d : 3 4 0 n l g sg a c u s t n, te m e f c rv i n
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

以下程序在Keil4中建立项目,芯片选S3C 2410A无论是S3C2410A还是S3C2440A,其IO口B都是11位二进制数,xxx xxxx xxxx,现在控制第5、6、7、8为做输出点亮LED灯(共阳极,输出0点亮),即xx8 765x xxxx,GPBCON equ 0x56000010GPBDAT equ 0x56000014GPBUP equ 0x56000018xport xmainarea Init,code,readonlyentryexportxmainldr r0,=GPBCONldr r1,[r0]bic r1,#0x3fC00 ;r1=xx00 0000 00xx xxxx xxxxorr r1,#0x15400 ;r1=xx01 0101 01xx xxxx xxxxstr r1,[r0] ;r1传给GPBCON设置8765位为输出ldr r0,=GPBUPldr r1,[r0]orr r1,#0x1e0 ;r1=xx1 111x xxxxstr r1,[r0] ;开B口第8、7、6、5位上拉电阻ldr r0,=GPBDATldr r2,[r0] ;把B口最初状态保存在R2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;LOOP dr r1,[r2]orr r1,#0x1c0str r1,[r0]bl delay;BL跳转时将PC+4值自动保存在R14即LR中,也就是将程序的下一个语句地址保存在lr中在跳;转后执行mov pc,lr相当于返回,这样BL相当于调用子程序,pc=lr相当于子程序返回;;;;;;;;;;;;;;;;;;dr r1,[r2]orr r1,#0x1a0str r1,[r0]bl delay;;;;;;;;;;;;;;;;;;;;;ldr r1,[r2]orr r1,#0x160str r1,[r0]bl delay;;;;;;;;;;;;;;;;;;;;;;;;ldr r1,[r2]orr r1,#0x0e0str r1,[r0]bl delay;;;;;;;;;;;;;;;;;;;;;;;;b LOOPdelaymov r3,#3delay1 sub r3,r3,#1cmp r3,#0x0bne delay1mov pc,lr ;这句相当于子程序返回语句 end1. A(*(volatile unsigned *)0x56000010)的意思是把0x48000000强制转换成volatile unsigned long类型的指针,暂记为p,那么就是#define A *p,即A为P指针指向位置的内容了。

这里就是通过内存寻址访问到寄存器A,可以读/写操作。

*(volatile unsigned *)0×48000080 含义:因为()优先级高于*,所以先执行(volatile unsigned*)0×48000080 这个表示将0×48000080强制转化为指针类型,指针指向的类型是unsigned,指针存放的地址为0×56000080。

也就是说指针指向寄存器A。

然后在执行()外面的*,表示取出指针所指向的值。

2.在ADS1.2中,可以先添加头文件,再调用。

调用头文件时,由于2440addr.h头文件在调用了option.h头文件的内容,而option.h头文件在有调用了def.h,所以,这三个头文件需要同时调用。

在利用厂家提供的资料制作自己的头文件也用注意这种情况!在keil4中进行时,Keil4已经预装了一些许可芯片的头文件,可以直接调用芯片型号的头文件,如S3C2440芯片,可直接调用#include“S3C2440.h"、如S3C2410芯片,可直接调用#include"S3C2410.h",也可以新建头文件,把下面的内容复制进响应的头文件文本文件中,保存,再在C语言程序中调用这些头文件。

#include"option.h"#include<stdio.h>#include<stdlib.h>#include"def.h"#include"2440addr.h"3. 2440addr.h定义了ARM内所有寄存器的名称,如A~F等多个IO口的控制寄存器名称;option定义了时钟的设置等功能;def.h定义了几个特殊字长名称,如U32为unsigned int(无符号长整型)、U16为unsigned short (短整形),S32为int型(有符号整型),S16为short int,U8为unsigned char ,S8为char等4.ARM开发不会都用汇编语言或C语言单独完成,往往是两者配合使用,一般用汇编编写初始化文件,设置程序入口(根据硬件状况设置),再用C语言编写开发程序。

如IMPORT xMain ;相当于设置主函数入口,C语言的主函数就必须用xMain(),不能用main()AREA Init,CODE,READONLYENTRYLDR R0,=0x3FF0000 ;LDR也是一种赋值语句,相当于MOV,不同是LDR的数前是=,mov的数前是#BIC R1,R1,#0xF80 ;给立即数0xF8(即1111 1000)取反,再与R1与运算,结果是立即数为1的位对应的R1位全为0;STR R1,[R0]LDR SP,=0x3FE1000BL xMainB . ;注意B后有个点END#define rGPBCON (*(volatile unsigned *)0x56000010)//Port B control#define rGPBDAT (*(volatile unsigned *)0x56000014)//Port B data#define rGPBUP (*(volatile unsigned *)0x56000018)//Pull-up control B//定义了各个特殊功能寄存器地址和名称,要使用必须调用该头文件/*=== 如果不调用该头文件,必须把要使用的定义名称和地址语句在主程序前声明#define rGPBCON (*(volatile unsigned *)0x56000010)//Port B control#define rGPBDAT (*(volatile unsigned *)0x56000014)//Port B data#define rGPBUP (*(volatile unsigned *)0x56000018)//Pull-up control *//* 自定义简单延迟程序 */int delay(int times){int i;for(i=0;i<times;i++);return 0;}/* 主程序 */void xMain(void) //主函数名称与主函数入口地址对应,在上面汇编Init.s中有定义{ //不能随意写成main,或者Main等,要查看或编写init.s文件(见下图)rGPBCON |=0x3fc00; //GPB5-8 able outputrGPBCON &=0x15400; //GPBCON两位管理GPBDAT的方向(见下面对应关系,00-in,01-out,10-other,11-无用);/ / 方向控制GPBCON d21d20 d19d18 d17d16 d15d14 d13d12 d11d10 d9d8 d7d6 d5d4 d3d2 d1d0// 输入输出sfrGPDAT d10 d9 d8 d7 d6 d5 d4 d3 d2 d1 d0rGPBUP |=0x1e0; //disable GPB5-8 pull up res,GPBUP一位管一位,0-链接上拉电阻,1-关闭上拉电祖while(1){rGPBDAT|=0x1e0;//GPB7 output 0rGPBDAT&=0xeff;delay(50000000);//调用汇编语言编写的延时程序rGPBDAT|=0x1e0;//GPB7 output 0rGPBDAT&=0xf7f;delay(50000000);//调用汇编语言编写的延时程序rGPBDAT|=0x1e0;//GPB7 output 0rGPBDAT&=0xfbf;delay(50000000);//调用汇编语言编写的延时程序rGPBDAT|=0x1e0;//GPB7 output 0rGPBDAT&=0xfdf;delay(50000000);//调用汇编语言编写的延时程序 }}ARM汇编程序基本知识1.汇编程序的基本组成ARM汇编语言程序中,程序是以程序段为单位组织代码的。

段是相对独立的指令或者代码序列,拥有特定的名称。

段的种类有代码段、数据段和通用段,代码段的内容为执行代码,数据段存放代码运行时需要用到的数据,通用段不包含用户代码和数据,所有通用段共用一个空间。

段使用AREA 伪操作来定义,并且说明相关属性,如代码段定义AREA Init, CODE, READONLY…数据段定义AREA Stack1,DATA,READWRITE,NOINIT,ALIGN=3……;GPIO寄存器宏定义GPBCON EQU 0x56000010GPBDAT EQU 0x56000014 GPBUP EQU 0x56000018 EXPORT xmainAREA LEDTESTh,CODE,READONLY ENTRYxmainldr r0,=GPBCONldr r1,[r0]bic r1,r1,#0x3fc00orr r1,r1,#0x15400str r1,[r0]ldr r0,=GPBUPldr r1,[r0]orr r1,r1,#0x1e0str r1,[r0]looptestldr r2,=GPBDATldr r3,[r2]bic r3,r3,#0x1e0orr r3,r3,#0xF0str r3,[r2]ldr r0,=0x2ffffffbl delayldr r3,[r2]bic r3,r3,#0x1e0orr r3,r3,#0x1e0str r3,[r2]ldr r0,=0x2ffffffbl delayb looptestdelaysub r0,r0,#1cmp r0,#0x0bne delayldr pc,=looptestEND一个汇编程序至少应该有一个代码段,可以有零或者多个数据段。

相关文档
最新文档