搜索
您的当前位置:首页正文

ARM微处理器 S3C2410的简介

来源:知库网


ARM微处理器 S3C2410的简介

1.1 ARM微处理器的介绍

1)ARM微处理器的工作状态和工作模式

从编程的角度看,ARM微处理器的工作状态有两种,可在两种状态之间切换:

第一种为ARM状态,此时处理器执行32位的字对齐的ARM指令; 第二种为Thumb状态,此时处理器执行16位的、半字对齐的Thumb指令。 2)ARM微处理器支持7种运行模式,分别为: 用户模式(USR):ARM处理器正常程序执行的模式。

快速中断模式( FIQ ):用于高速数据传输或通道处理用于快速中断服务程序。当处理器的快速中断请求引脚有效,且CPSR(6位)中F位为0时(开中断),会产生FIQ异常。

外部中断模式( IRQ ):用于通用的中断处理,当处理器的外部中断请求引脚有效,且CPSR(7位)中I位为0时(开中断),会产生IRQ异常。系统的外设可通过该异常请求中服务。

特权模式或管理员模式(SVE):操作系统使用的保护。执行软件中断SWI指令和复位指令时,就进入管理模式,在对操作系统运行时工作在该模式下。

1.2 S3C2410微处理器

1.2.1 概述

S3C2410是韩国三星公司的一款基于ARM920T内核的16/32位RISC嵌入式微处理器,主要面向手持设备以及高性价比,低功耗的应用。运行的频率可以达到203MHz。

ARM920T核由ARM9TDMI,存储管理单元(MMU)和高速缓存三部分组成。其中MMU可以管理虚拟内存,高速缓存由独立的16KB地址和16KB数据高速Cache组成。

ARM920T有两个协处理器:CP14和CP15。CP14用于调试控制,CP15用于存储系统控制以及测试控制。

ARM920T体系结构框图

图2-1 ARM920T体系结构框图

1.2.2 S3C2410微处理器的结构 S3C2410内部结构原理 内部原理框图如下:

图2-2 S3C2410内部结构原理

ARM 微处理器中共定义了37个编程可见寄存器,每个寄存器的长度均为

32位。根据不同的用途,可将其划分为以下几下:30个通用寄存器,在任意一种处理器模式下,只有15个通用寄存器可以使用,编号分别为r0, …, r14。其中,r13一般作为堆栈指针寄存器( SP: Stack Pointer )。该寄存器由ARM编译器自动使用。r14一般作为链接寄存器( LR: Link Register )。当系统中发生子程序调用时,用r14来记录返回地址。如果返回地址已经保存在堆栈中,则该寄存器也可以用于其它用途。

程序指针( PC: Program Counter )PC即为r15,用于记录程序当前的运行地址。ARM处理器每执行一条指令,都会把PC增加4字节(Thumb模式为两个字节)。此外,相应的分支指令(如BL等)也会改变PC的值。

1) 状态备份寄存器( SPSR: Saved Program Status Resister ) CPSR用于存储条件码。各种模式公用该寄存器

SPSR寄存器主要是在处理器异常发生时,用来保存CPSR (Current Program Status Resister)。每一种处理器模式下将使用一个SPSR来保存CPSR,而用户模式和系统模式下不需要SPSR,因为该模式下不会发生异常。

ARM 高级中断控制器有 8 种优先控制权,可屏蔽特定中断源,提供中断向量控制器,同时可以接受 32 个中断源请求,ARM 中断体系充分减少中断响应时间,提高系统的实时性。

图2-3 S3C2410B系统应用板

S3C2410B开发板是采用Samsung S3C2410B ARM920T微处理器的最小系统板,具有开放式设计、集成度高、尺寸小、可扩展性强、低功耗等特点。S3C2410B开发板适用于下一代无线应用、数字家电、车载设备、通信终端等应用场合,是嵌入式工程师进行上述应用开发的最佳选择。

S3C2410X最小系统

S3C2410处理器是Samsung公司基于ARM公司的ARM920T处理器核,采用0.18um制造工艺的32位微控制器。该处理器拥有:独立的16KB指令Cache和16KB数据Cache,MMU,支持TFT的LCD控制器,NAND闪存控制器,3路UART,4路DMA,4路带PWM的Timer ,I/O口,RTC,8路10位ADC,Touch Screen接口,IIC-BUS 接口,IIS-BUS 接口,2个USB主机,1个USB设备,SD主机和MMC接口,2路SPI。S3C2410处理器最高可运行在203MHz。

核心板的尺寸仅相当于名片的2/3大小,尺寸如此小巧的嵌入式核心板是国内首创。开发商可以充分发挥想象力,设计制造出小体积,高性能的嵌入式应用产品。 (1)S3C2410芯片集成了大量的功能单元,包括:

◆ 内部1.8V,存储器3.3V,外部I/O3.3V,16KB数据Cache,16KB指令Cache,MMU。

◆ 内置外部存储器控制器(SDRAM控制和芯片选择逻辑)。 ◆ LCD控制器,一个LCD专业DMA。 ◆ 4个带外部请求线的DMA。

◆ 3个通用异步串行端口(IrDA1.0,16-Byte Tx FIFO and 16-Byte Rx FIFO),2通道SPI

◆ 一个多主I2C总线,一个I2S总线控制器。

◆ SD主接口版本1.0和多媒体卡协议版本2.11兼容。 ◆ 两个USB HOST,一个USB DEVICE(VER1.1)。 ◆ 4个PWM定时器和一个内部定时器。 ◆ 看门狗定时器。 ◆ 117个通用I/O。 ◆ 56个中断源。 ◆ 24个外部中断。

◆ 电源控制模式:标准、慢速、休眠、掉电。 ◆ 8通道10位ADC和触摸屏接口。 ◆ 带日历功能的实时时钟。 ◆ 芯片内置PLL。

◆ 设计用于手持设备和通用嵌入式系统。

◆ 16/32位RISC体系结构,使用ARM920T CPU核的强大指令集。 ◆ 带MMU的先进的体系结构支持WinCE、EPOC32、Linux。 ◆ 指令缓存(Cache)、数据缓存、写缓存和物理地址TAG RAM,减小了对主存储器带宽和性能的影响。

◆ ARM920T CPU核支持ARM调试的体系结构。 ◆ 内部先进的位控制器总线(AMBA)(AMBA2.0,AHB/APB)。 (2)系统管理 ◆ 小端/大端支持

◆ 地址空间:每个BANK128MB(全部为1GB)。 ◆ 每个BANK可编程为8/16/32位数据总线。 ◆ BANK0到BANK6为固定起始地址。 ◆ BANK7可编程BANK起始地址和大小。 ◆ 一共8个存储器BANK。

◆ 前6个存储器BANK用于ROM、SRAM和其它。

◆ 两个存储器BANK用于ROM、SRAM、和SDRAM(同步随机存储器)。 ◆ 支持等待信号用以扩展总线周期。 ◆ 支持SDRAM掉电模式下的自刷新。

◆ 支持不同类型的ROM用于启动(NOR/NAND Flash、EEPROM和其它)。 (3)芯片封装 272-FBGA封装

S3C2410最小系统设计

摘要:介绍了以嵌入式芯片S3C2410为核心的最小嵌入式系统构建方法,给出了S3C2410的复

位电路、电源电路、存储器电路和串口电路等硬件组成。还介绍了在ADS环境下自制的最小Boot loader程序开发和调试方法。 关键字:嵌入式;S3C2410;ADS;Boot loader

S3C2410是Samsung公司基于ARM920T内核的嵌入式微处理器。本文以S3C2410为核心,配置了最基本外围电路构成了最小的嵌入式系统,并在ADS上开发了启动程序,完成硬件初始化,配置运行环境,串口调试功能。通过本文可以从底层了解S3C2410的特性和工作原理,并对Boot loader程序会有深入的认识,为嵌入式系统的学习做铺垫。

S3C2410基本外围电路设计

系统框图

复位电路 Nand Flash JTAG 电源、晶振 S3C2410 SDRAM 串口电路 图1 系统框图 Fig.1 Diagram of System

电源电路

S3C2410工作时内核需要1.8V电压,I/O端口和外设需要3.3V电压[1]。VDDi/VDDiarm引脚是供S3C2410内核的1.8V电压;VDDalive引脚是功能复位和端口状态寄存器电压。 M12引脚RTCVDD是RTC模块的1.8V电压,用电池供电保证系统的掉电后保持实时时钟。VDDOP引脚是I/O端口3.3V电压;VDDMOP引脚是存储器I/O端口电压;还有一系列VSS引脚需要接到电源地上。3.3V电压从5V用

6

AMS1117-3.3转换得到如图2所示;1.8V从3.3V通过MIC5207-1.8转换得到如图3所示。

VDD5VAMS1117-3.33VinVout2C2100uVDD33MIC5207-1.8VDD3312C1310uINOUTGNDBYPEN54C3470pFC210uVDD18 C1

图2 5V转3.3V

1100uGND 图3 3.3V转1.8V

Fig.2 5V to 3.3V

Fig.3 3.3V to 1.8V

晶振电路

S3C2410内部有时钟管理模块,有2个锁相环,其中MPLL产生CPU主频FCLK、AHB总线外设时钟HCLK和APB总线外设时钟PCLK;UPLL产生USB模块的时钟。OM3、OM2都接地时主时钟源和USB模块时钟源都由外接晶振产生[1]。在XTIpll和XTOpll之间连接主晶振,可以选择12MHz晶振,通过内部寄存器的设置产生不同频率的FCLK、HCLK和PCLK;在XTIrtc和XTOrtc上需要接32.768 kHz的晶振供RTC模块使用。同时在MPLLCAP和UPLLCAP上也要外接5pF的环路滤波电容。晶振电路如图4所示。

C1XTIpll15pF15pFY112MHzC2XTOpll15pF15pFR11MC4XTOrtcC65pFUPLLCAPC3XTIrtcC55pFY232.768KHzMPLLCAP

图4 晶振电路 Fig.4 Crystal Circuit

7

VDD33复位电路

S3C2410的J12引脚为nRESET复位引脚,

D11N4148R115K174HC1421+C1274HC14nRESETnRESET上给4个FCLK时间的低电平后就可以复位。可以设计如图5所示的复位电路,其中上电复位是靠RC电路特性完成,开关二极管1N4148在手动复位时

10uS1Reset对电容起快速放电的作用,因此可以把复位电平快速拉到0V。反响门74HC14可以起到延时作用,

图5 复位电路

保证有足够复位时间。

Fig.5 Reset Circuit

JTAG接口

S3C2410有标准的JTAG接口,TCK(H6)为测试时钟输入;TDI(J1)为测试数据输入;TDO(J5)为测试数据输出;TMS(J3)为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;nTRST(H5)为测试复位,输入引脚,低电平有效。其中nTRST、TMS、TCK、TDI需要接10K的上拉电阻。通过JTAG口可以完成芯片测试或在线编程。

1.6SDRAM存储器

S3C2410有32根数据线和27根地址线,因此地址线的寻址范围为128M;但是S3C2410还有8根存储器芯片片选信号线nGCS0~nGCS7,因此总的寻址空间为128M*8=1G。Nand Flash启动模式下复位时S3C2410的存储器映射如图6所示。如当访问物理地址0x08000000~0x10000000内的地址则nGCS1自动为低电平,以此类推。

通过图6可知SDRAM只能连接在nGCS6和nGCS7片选引脚上。S3C2410提供了SDRAM的接口,其中包括nSRAS:行信号锁存;nSCAS:列信号锁存;nSCS[1:0](就是nGCS[6:7]):片选信号;DQM[3:0]:数据屏蔽;SCLK[1:0]:时钟;SCKE:时钟有效;nBE[3:0]:高/低字节有效;nWBE[3:0]:写有效。下面以2片HY57V561620为例介绍SDRAM和S3C2410的连接方法。HY57V561620是4块16位32M的SDRAM存储器,用2片可以构成32位的64M存储器。HY57V561620的行地址13位RA0~RA12,列地址9位CA0~CA8,行和列地址是复用的。HY57V561620包括4个块,通

[1]

8

过BA0、BA1的组合选择块。HY57V561620是16位存储器,因此数据线为DQ0~DQ15,还有CS片选,CLK时钟,CKE时钟使能,RAS行锁存,CAS列锁存, WE写使能等引脚。图7表示了HY57V561620和S3C2410的连接方法,其中BA0、BA1需要连接ADD24和ADDR25,通过S3C2410的说明可知,因为内存总大小是64M因此块选择信号必须使用ADDR24和ADDR25。因为HY57V561620的行列地址复用,因此S3C2410必须知道行列地址各多少位,这个需要在BANKCON6寄存器的SCAN字段指定。

HY57V561620ADDR2-ADDR14DATA0-DATA15ADDR24ADDR25nSRASnSCRAA0-A12D0-D15BA0BA1RASCASLDQMUDQMWECLKCKECSVDD/VSSnWBE0nWBE1nWESCLK0SCKEnGCS6ADDR2-ADDR14DATA16-DATA31ADDR24ADDR25nSRASnSCRAHY57V561620A0-A12D0-D15BA0BA1RASCASLDQMUDQMWECLKCKECSVDD/VSS nWBE0nWBE1图7 SDRAM连接图

nWE SCLK0SCKEFig.7 SDRAM Connection

nGCS6NAND Flash 存储器

S3C2410内部有NAND Flash控制器,支持从NADN Flash启动。图8是K9F1208 64M Flash芯片和S3C2410的连接方式。S3C2410采用一组内部寄存器来完成NAND Flash的操作。

++[2]

VCC1162+

图8 NAND Flash连接图 Fig.8 NAND Flash Connection

DB9

Fig.9 UART Connection

串口电路

S3C2410的UART提供了三个同步串行IO口,图9是COM0的连接方式。串口数据的收发有查询方式、中断方式和DMA方式等,这些可以在UCON0 (UART channel 0 control register )寄存器中设置。UTXH0 (UART channel 0 transmit buffer register )把要发送的数据写入此寄存器。URXH0

[3]

9

+CLEALEnFCEnFREnFWER/nB161798187CLEALECEREWER/BIO1IO2IO3IO4IO5IO6IO7IO82930313241424344DATA0DATA1DATA2DATA3DATA4DATA5DATA6DATA7C1+C1-C2+C2-VDDV+V-GND3J?59483726145K9F1208615141378T1OUTR1INT2OUTR2INT1INR1OUTT2INR2OUT11TXD0(K15)12RXD0(K17)109MAX3232CAS图9 UART连接图

(UART

channel 0 receive buffer register )读此寄存器获得串口接收的数据。串口一般可以用作程序运行信息的输出和程序调试。

S3C2410启动过程[1]

当S3C2410的OM0、OM1引脚接低电平时S3C2410就从NADN Flash启动。在NAND Flash启动模式下上电后NAND Flash控制器自动将NAND Flash的最前面的4k区域拷贝到所谓的“steppingstone”里面。这一过程完全由硬件自动实现。“steppingstone”实际上是S3C2410内部的一个SRAM,因为NADN Flash不支持程序片内运行,因此必须把NAND Flash内的指令拷贝到SRAM或SDRAM中才可以运行。在拷贝完前4k代码后,NAND Flash控制器自动将“steppingstone”映射到arm地址空间0x00000000开始的前4k区域。在映射过程完成后NAND Flash控制器将pc指针直接指向arm地址空间的0x00000000位置,准备开始执行“steppingstone”上的代码。而“steppingstone”上从NAND Flash拷贝过来的4k代码,是程序员写的boot loader的前4k代码。 boot loader之前写好,并已经被烧写到NAND Flash的0x00000000开始区域。

开始设置中断向量表关闭看门狗关闭中断初始化SDRAM初始化串口初始化网口初始化USB处理用户命令结束加载操作系统开始是否启动加载N初始化MMUY简单Boot loader的制作

Boot loader工作原理

[4]

设置堆栈NandFlash拷贝跳转main结束图10 流程图 Fig.10 Flow Chart

Boot loader是引导操作系统的程序,也是开发阶段目标板和PC机的通信工具。Boot loader一般都放在NAND Flash 的起始位置,这样上电后Boot loader的第一个指令被自动执行。由于 Boot Loader 的实现依赖于 CPU 的体系结构,因此大多数 Boot Loader 都分为 stage1 和 stage2 两大部分。依赖于 CPU 体系结构的代码,比如设备初始化代码等,通常都放在 stage1 中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而 stage2 则通常用C语言来实现,这样可以实现给

10

复杂的功能,而且代码会具有更好的可读性和可移植性。阶段1和阶段2的工作流程如图10。

第一阶段

第一阶段主要工作是硬件设备初始化,加载 Boot Loader的stage2,准备RAM 空间;拷贝 Boot Loader的stage2到RAM空间中;设置好堆栈;跳转到 stage2 的 C 入口点。

下面介绍ADS环境下开始制作简单Bootloader的方法。 先建立工程命名为myBoot,定义出程序的基本结构如下:

AREA myBoot, CODE, READONLY ;声明一个代码段,名称为myBoot ENTRY ;程序入口声明,程序的开始执行位置

__ENTRY ;入口名称为__ENTRY …… ;中间写主要代码 END ;程序结束

在myBoot工程的Settings中做一些设置。首先设置Target-->Target Setting--> post Link中选择\"ARM fromELF\",表示在链接生成映像文件后,再调用FromELF命令映像文件转换成其他格式的文件。Linker-->Arm Linker-->Output-->Link Type选Simple 简单连接方式;RO Base设置为0x30008000 代码段连接地址。实际上RO BASE指定了程序的静态连接地址。程序真正被执行时所在的内存地址叫做运行地址。如果连接时用到绝对地址的话运行地址和链接地址保持一致时程序才能正常运行,这种代码叫做与位置有关代码。如果连接时没有涉及到绝对地址那么连接地址和运行地址不一样程序也可以正常运行,这种代码叫做位置无关的代码。但是Bootloader一开始时被加载在0x00位置开始运行,这会不会和RO Base设置地址冲突呢?实际上是会冲突的,解决冲突的办法就采用位置无关代码(PIC)。实际上Boodloader的绝大部分代码最后想让它运行在0x30000800开始的SDRAM里,只有第一阶段代码运行在0x00开始的SRAM里,因此把阶段1用位置无关的汇编代码实现整个程序就正常运行了。RW Base是数据段的开始位置,如果不指定数据段就紧接着代码段放置。如果自己设置的话程序里还需要自己处理加载数据段到实际数据段RW Base的搬移操作,否则具有初始值的变量的初始值不起作用。在Options->Image entry point指定代码的入口__ENTRY。

程序的第一步要设置中断向量表。S3C2410有7种中断,中断入口地址在0x00开始处,每个中断占用4可字节,正好可以放一个跳转指令。程序如下:

b ResetHandler ;复位中断,也是整个程序的入口,b指令是根据当前PC进行跳转,因此可以实现位置无关代码[5]。在ResetHandler中需要做的工作有:关闭看门狗、关闭所有中断、设置主频、初始化SDRAM、设置中断堆栈,最后搬移代码到SDRAM中。最后一步跳转到C程序的入口函数

11

main中。

第二阶段

这阶段代码用C语言编写,从main函数开始。这个阶段的主要任务有串口初始化、MMU的初始化、USB初始化、以太网初始化等。Bootloader工作时显示屏可能还没有工作,或者目标板根本就没有显示屏或键盘等设备,因此人机交互一般通过串口来实现。因此必须初始化串口,通过串口打印运行信息或者接收用户输入。用串口连接到PC上,用专用或通用的串口软件来接收信息或输入信息。USB口、以太网可以实现快速的文件传输,其他程序或操作系统内核可以通过USB或以太网口快速的下载到目标板上。

[6]

程序的下载和调试

编译工程后会得到一个bin文件,这就是在目标板上运行最后文件。Bootloader一般用JTAG口来烧写,因为Bootloader之前板子上其他任何接口(串口、USB、以太网)都是不可用的,Bootloader是板子上运行的第一个程序。PC机上通过JTAG口烧写文件可以用sjf2410.exe这个程序,运行方式如下sjf2410 /f:myBoot.bin。如果JTAG口连接正常的话,会发现CPU,然后根据提示选择相应的位置烧写就可以了。烧写完复位板子后可以在PC上通过串口看到Bootloader的运行情况。

12

因篇幅问题不能全部显示,请点此查看更多更全内容

Top