第3章 32 Bit RISC微
处理器S3C2410A
S3C2410A简介
S3C2410A内部结构
S3C2410是Samsung公司推出的16/32位RISC处理器,主要面向
高性价比、低功耗的手持设备应用。S3C2410有S3C2410X和
S3C2410A两个型号,A型是X型的改进型,具有更好的性能和更
低的功耗。
为了降低系统的成本,S3C2410A在片上集成了单独的16KB指令
Cache和16KB数据Cache、用于虚拟存储器管理的MMU、支持
STN和TFT的LCD控制器、NAND Flash Boot Loader、系统管理器
(片选逻辑和SDRAM控制器)、3通道UART、4通道DMA、4通道
PWM定时器、I/O口、RTC、8通道10位ADC和触摸屏接口、I2C总
线接口、I2S总线接口、USB主设备、USB从设备、SD主卡和
MMC(Multi Media Card,多媒体卡)卡接口、2通道的
SPI(Serial Peripheral Interface,串行外围设备接口)以及PLL时
钟发生器。S3C2410A的CPU内核采用的是16/32位ARM920T 内核,
同时还采用了AMBA(Advanced Microcontroller Bus Architecture
,先进的微控制器总线体系结构)新型总线结构。
ARM920T采用了MMU,AMBA总线和Harvard高速缓存体系结构,
该结构具有独立的16KB指令Cache和16KB数据Cache,每个Cache
都是由8字长的行组成的。
S3C2410A提供一组完整的系统外围设备接口,从而大大减少了整
个系统的成本,省去了为系统配置额外器件的开销。S3C2410A集
成的片上功能包括:
● 内核电压
● 具有16KB的I-Cache和16KB的D-Cache以及MMU;
● 外部存储器控制器(SDRAM控制和片选逻辑);
● LCD控制器(最大支持4K彩色STN和256K彩色TFT)提供1通道
LCD专用DMA;
● 4通道DMA并有外部请求引脚端;
● 3通道UART(,16字节Tx FIFO和16字节Rx FIFO)/2通
道SPI;
● 1通道多主设I2C总线和1通道I2S总线控制器;
● 版本主接口和兼容版MMC卡协议;
● 2个USB主设接口/1个USB从设接口(版本);
● 4通道PWM定时器和1通道内部定时器;
● 看门狗定时器;
● 117位通用I/O口和24通道外部中断源;
● 电源控制模式有正常、慢速、空闲和电源关断4种模式;
● 8通道10位ADC和触摸屏接口;
● 具有日历功能的RTC;
● 使用PLL的片上时钟发生器。
S3C2410A的内部结构方框图如图所示。
图 S3C2410A内部结构方框图
S3C2410A的技术特点
S3C2410A具有如下特点:
1.体系结构
● 采用ARM920T CPU内核,具有16/32位RISC体系结构和强大的
指令集,为手持设备和通用嵌入式应用提供片上集成系统解决方
案;
● 增强的ARM体系结构MMU,支持WinCE、EPOC 32和Linux;
● 使用指令Cache、数据Cache、写缓冲器和物理地址TAG RAM减
少主存储器带宽和反应时间对性能的影响;
● ARM920T CPU内核支持ARM调试体系结构;
● 内部采用先进的微控制器总线体系结构(AMBA)(,
AHB/APB)。
2.系统管理器
● 支持小/大端方式。
● 地址空间:每bank 128 MB(byte)(总共1GB)。
● 每个bank支持可编程的8/16/32位数据总线宽度。
● bank0~bank6都采用固定的bank起始地址。
● bank7具有可编程的bank起始地址和大小。
● 8个存储器bank:
一6个用于ROM、SRAM及其他;
一2个用于ROM、SRAM和同步DRAM。
● 所有的存储器bank都具有可编程的访问周期。
● 支持使用外部等待信号来填充总线周期。
● 支持掉电时的SDRAM自刷新模式。
● 支持各种类型的ROM启动(booting),包括NOR/NAND Flash
和EEPROM等。
3.NAND Flash Boot Loader(启动装载)
● 支持从NAND Flash存储器的启动。
采用4 KB内部缓冲器用于启动引导。
● 支持启动之后NAND存储器仍然作为外部存储器使用。
4.Cache存储器
● I-Cache(16 KB)和D-Cache(16 KB)为64路组相联Cache。
● 每行8字长度,其中每行带有一个有效位和两个脏位(dirty
bits)。
● 采用伪随机数或循环替换算法。
● 采用写直达(Write-through)或写回(Write-back)Cache操
作来更新主存储器。
● 写缓冲器可以保存16个字的数据值和4个地址值。
5.时钟和电源管理
● 片上MPLL和UPLL:
一UPLL产生用于USB主机/设备操作的时钟;
一MPLL产生操作MCU的时钟,时钟频率最高可达266 MHz(
内核电压)。
● 通过软件可以有选择地为每个功能模块提供时钟。
● 电源模式包括正常、慢速、空闲和掉电模式:
一正常模式为正常运行模式;
一慢速模式为不加PLL的低时钟频率模式;
一空闲模式只停止CPU的时钟;
一掉电模式切断所有外设和内核的电源。
● 可以通过EINT[15:0]或RTC报警中断从掉电模式中唤醒处理器。
6.中断控制器
● 55个中断源(1个看门狗定时器、5个定时器、9个UART、24个
外部中断、4个DMA、2个RTC、2个ADC、1个I2C、2个SPI、1个
SDI、2个USB、1个LCD和1个电池故障);
● 支持电平/边沿触发模式的外部中断源;
● 可编程的电平/边沿触发极性;
● 为紧急中断请求提供快速中断服务(FIQ)支持。
7.具有脉冲宽度调制(PWM)的定时器
● 具有PWM功能的4通道16位定时器,可基于DMA或中断操作的1通道16
位内部定时器;
● 可编程的占空比周期、频率和极性;
● 能产生死区;
● 支持外部时钟源。
8.RTC(实时时钟)
● 完整的时钟特性:秒、分、时、日期、星期、月和年;
● 工作频率 kHz;
● 具有报警中断;
● 具有时钟滴答中断。
9.通用I/O口
● 24个外部中断口;
● 多路复用的I/O口。
10.UAR
● 3通道UART,可以基于DMA模式或中断模式操作;
● 支持5位、6位、7位或者8位串行数据发送/接收(Tx/Rx);
● 支持外部时钟作为UART的运行时钟(UEXTCLK);
● 波特率可编程;
● 支持IrDA ;
● 支持回环(Loopback)测试模式;
● 每个通道内部都具有16字节的发送FIFO和16字节的接收FIFO 。
11.DMA控制器
● 4通道的DMA控制器;
● 支持存储器到存储器、I/O到存储器、存储器到I/O和I/O到I/O的
传送;
● 采用突发传送模式提高传送速率。
12.A/D转换和触摸屏接口
● 8通道多路复用ADC;
● 转换速率最大为500 KSPS(Kilo Samples Per Second,每秒采样
千点),10位分辨率。
13.LCD控制器STN LCD显示特性
● 支持3种类型的STN LCD显示屏:4位双扫描、4位单扫描和8位
单扫描显示类型;
● 对于STN LCD支持单色模式、4级灰度、16级灰度、256彩色和4
096彩色;
● 支持多种屏幕尺寸,典型的屏幕尺寸有:640×480,320×240
,160×160;
● 最大虚拟屏幕大小是4 MB;
● 在256彩色模式下支持的最大虚拟屏幕尺寸是:4 096×1 024,
2 048×2 048,1 024×4 0960或者其它尺寸。
14. TFT(Thin Film Transistor,薄膜场效应晶体管)彩色显示
特性
● 彩色TFT支持1、2、4或8bpp(bit per pixel,每像素所占位数)
调色显示;
● 支持16bpp无调色真彩显示;
● 在24bpp模式下支持最大16M彩色TFT;
支持多种屏幕尺寸,典型的屏幕尺寸有:640×480,320×320,
160×160或者其它尺寸;
● 最大虚拟屏大小是4 MB;
● 在64彩色模式下支持的最大虚拟屏幕尺寸是:2 048×1 024或
者其它尺寸。
15.看门狗定时器
● 16位看门狗定时器;
● 定时器溢出时产生中断请求或系统复位。
16.I2C总线接口
● 1通道多主机I2C总线;
● 串行、8位、双向数据传送,在标准模式下数据传送速率可达
100kb/s,在快速模式下可达400kb/s。
17.I2S总线接口
● 1通道音频I2S总线接口,可基于DMA方式操作;
● 串行,每通道8/16位数据传输;
串行,每通道8/16位数据传输;
● 发送和接收(Tx/Rx)具备128字节FIFO(64字节发送FIFO+64
字节接收FIFO);
● 支持I2S格式和MSB-justified数据格式。
18.USB主设备
● 2个USB主设接口;
● 遵从OHCI 标准;
● 兼容USB 标准。
19.USB从设备
● 1个USB从设接口;
● 具备5个USB设备端口;
● 兼容USB 标准。
20.SD主机接口
● 兼容SD存储卡协议版;
● 兼容SDIO卡协议版;
发送和接收采用字节FIFO;
● 基于DMA或中断模式操作;
● 兼容MMC卡协议版。
21.SPI接口
● 兼容2通道SPI协议版;
● 发送和接收采用2字节的移位寄存器;
● 基于DMA或中断模式操作。
22.工作电压
● 内核电压:,最高工作频率200 MHz(S3C2410A-20);
V,最高工作频率266 MHz(S3C2410A-26)。
● 存储器和I/O电压: V。
23.封装
● 采用272-FBGA封装。
S3C2410A存储器控制器
S3C2410A的存储器控制器特性
S3C2410A的存储器控制器提供访问外部存储器所需要的存储器控
制信号,具有以下特性:
● 支持小/大端(通过软件选择)。
● 地址空间:每个bank有128 MB(总共有8个bank,共1 GB)。
● 除bank0只能是16/32位宽之外,其他bank都具有可编程的访问
位宽(8/16/32位)。
● 总共有8个存储器bank(bank0~bank7):
一其中6个用于ROM,SRAM等;
一剩下2个用于ROM,SRAM,SDRAM等。
● 7个固定的存储器bank(bank0~bank6)起始地址。
● 最后一个bank(bank7)的起始地址是可调整的。
● 最后两个bank(bank6和bank7)的大小是可编程的。
●所有存储器bank的访问周期都是可编程的。
● 总线访问周期可以通过插入外部等待来扩展。
● 支持SDRAM的自刷新和掉电模式。
S3C2410A的存储器映射
S3C2410A复位后,存储器的映射情况如图所示,bank6和
bank7对应不同大小存储器时的地址范围参见表。
[不使用NAND Flash作为启动ROM] [使用NAND Flash]作为启动ROM]
注意:①SROM表示是ROM或SRAM类型的存储器;
②SFR指特殊功能寄存器。
图 S3C2410A复位后的存储器映射
表 bank 6和bank 7地址
注:bank 6和bank 7必须具有相同的存储器大小。
复位、时钟和电源管理
1.复位电路
在系统中,复位电路主要完成系统的上电复位和系统在运行时用
户的按键复位功能。复位电路可由简单的RC电路构成,也可以使
用其他的相对较复杂,但功能更完善的电路。
为了提供高效的电源监视性能,选取了专门的系统监视复位芯片
IMP811S。该芯片性能优良,可以通过手动控制系统的复位,同
时还可以实时监控系统的电源。一旦系统电源低于系统复位的阀
值(),IMP811S将会对系统进行复位。系统复位电路如图
所示。
图 系统复位电路
也可以采用如图所示较简单的RC复位电路,经使用证明,其
复位逻辑是可靠的。该复位电路的工作原理如下:在系统上电时,
通过电阻R108向电容C162充电,当C162两端的电压未达到高电
平的门限电压时,RESET端输出为高电平,系统处于复位状态;
当C162两端的电压达到高电平的门限电压时,RESET端输出为低
电平,系统进入正常工作状态。
当用户按下按钮RESET时,C162两端的电荷被放掉,RESET端输
出为高电平,系统进入复位状态,再重复以上的充电过程,系统
进入正常工作状态。
两级非门电路用于按钮去抖动和波形整形;nRESET端的输出状态
与RESET端相反,用于低电平复位的器件;通过调整R108和C162
的参数,可调整复位状态的时间。
图 系统的复位电路
2.时钟电路
在S3C2410A中的时钟控制逻辑能够产生CPU所需的FCLK时钟信号。
AHB总线外围设备所需的HCLK时钟信号,以及APB总线外围设备
所需的PCLK时钟信号。
S3C2410A有两个锁相环(Phase Locked Loops,PLL),一个用
于FCLK,HCLK和PCLK,另一个专门用于USB模块(48 MHz)。
时钟控制逻辑可以在不需要PLL的情况下产生慢速时钟,并且可以
通过软件来控制时钟与每个外围模块是连接还是断开,从而降低
功耗。
S3C2410A微处理器的主时钟可以由外部时钟源提供,也可以由外
部振荡器提供,如图所示,采用哪种方式通过引脚OM[3:2]
来进行选择。
● OM[3:2]=00时,MPLL和UPLL的时钟均选择外部晶体振荡器;
● OM[3:2]=0l时,MPLL的时钟选择外部晶体振荡器;UPLL选择
外部时钟源;
● OM[3:2]=10时,MPLL的时钟选择外部时钟源;UPLL选择外部
晶体振荡器;
● OM[3:2]=11时,MPLL和UPLL的时钟均选择外部时钟源。
在系统中选择OM[3:2]均接地的方式,即采用外部振荡器提供系
统时钟。系统时钟源直接采用外部晶振,内部PLL电路可以调整
系统时钟,使系统运行速度更快。S3C2410X的系统时钟电路见图
,其外部振荡器由12MHz晶振和2个15pF的微调电容组成。
振荡电路输出接到S3C2410X微处理器的XTIPLL脚,输入由
XTOPLL提供。由于片内的PLL电路兼有频率放大和信号提纯的功
能,因此,系统可以以较低的外部时钟信号获得较高的工作频率,
从而降低因高速开关时钟所造成的高频噪声。
图 S3C2410X微处理器外部时钟电路
3.电源电路
对于电源控制逻辑,S3C2410A具有多种电源管理方案,对于每个
给定的任务都具有最优的功耗。在S3C2410A中的电源管理模块具
有正常模式、慢速模式、空闲模式和掉电模式4种有效模式。
在正常模式,电源管理模块为CPU和S3C2410A中的所有外围设备
提供时钟。在这个模式,由于所有外围设备都处于开启状态,因
此功耗达到最大。用户可以通过软件来控制外围设备的操作。例
如,如果不需要定时器,那么用户可以断开定时器的时钟,以降
低功耗。
慢速模式又称无PLL模式。与正常模式不同,在慢速模式不使用
PLL,而使用外部时钟(XTIPLL或EXTCLK)直接作为S3C2410A中
的FCLK。在这种模式下,功耗大小仅取决外部时钟的频率,功耗
与PLL无关。
在空闲模式下,电源管理模块只断开CPU内核的时钟(FCLK),
但仍为所有其他外围设备提供时钟。空闲模式降低了由CPU内核
产生的功耗。任何中断请求可以从空闲模式唤醒CPU。
在掉电模式,电源管理模块断开内部电源。因此,除唤醒逻辑以
外,CPU和内部逻辑都不会产生功耗。激活掉电模式需要两个独
立的电源,一个电源为唤醒逻辑供电;另一个为包括CPU在内的
其他内部逻辑供电,并且这个电源开/关可以控制。在掉电模式
下,为CPU和内部逻辑供电的第二个电源将关断。通过
EINT[15:0]或RTC报警中断可以从掉电模式唤醒S3C2410A。
在设计系统电源电路之前对S3C2410A的电源引脚进行分析:
VDDalive引脚给处理器复位模块和端口寄存器提供电压;
VDDi和VDDiarm为处理器内核提供电压;VDDi_MPLL为MPLL
提供模拟电源和数字电源;VDDi_UPLL为UPLL提供模拟
电源和数字电源;VDDOP和VDDMOP分别为处理器端口和处理器
存储器端口提供电压;VDD_ADC为处理器内的ADC系统提供
电压;VDDRTC为时钟电路提供电压,该电压在系统掉
电后仍需要维持。系统需要使用和的直流稳压电源。
为简化系统电源电路的设计,要求整个系统的输入电压为高质量
的5V直流稳压电源。提供给VDDMOP,VDDIO,
VDDADC和VCC引脚,提供给VDDi_X。
5V输入电压经过DC-DC转换器可完成5V到和的电压转换。
系统中RTC所需电压由电源和后备电源共同提供,在系统工
作时电压有效,系统掉电时后备电池开始工作,以供RTC电
路所需的电源,同时使用发光二极管指示电源状态。S3C2410A电
源电路如图所示。
(a)电源电路
(b)电源电路
(电阻R203=100K,R204=,阻值需要修改)
图 电源电路
S3C2410A的I/O口
S3C2410A的I/O口配置
S3C2410A共有117个多功能复用输入/输出端口(I/O口),分
为端口A~端口H 8组,其中8组I/O口按照其位数的不同又可分为:
端口A(GPA)是1个23位输出口;端口B(GPB)和端口
H(GPH)是2个11位I/O口;端口C(GPC)、端口D(GPD)、
端口E(GPE)和端口G(GPG)是4个16位I/O口;端口F(GPF)
是1个8位I/O口。
为了满足不同系统设计的需要,每个I/O口可以很容易地通过软件
对进行配置。每个引脚的功能必须在启动主程序之前进行定义。
如果一个引脚没有使用复用功能,那么它可以配置为I/O口。注意:
端口 A除了作为功能口外,只能够作为输出口使用。
S3C2410A的I/O口配置情况如表~所列。
表 S3C2410A的端口A I/O口配置情况
端口A 可选择的引脚端功能
GPA22 输出 nFCE –
GPA21 输出 nRSTOUT –
GPA20 输出 nFRE –
GPA19 输出 nFWE –
GPA18 输出 ALE –
GPA17 输出 CLE –
GPA16~GPA12 输出 nGCS5~nGCS1 –
GPA11~GPA1
输出 ADDR26~
ADDR16
–
GPA0 输出 ADDR0 –
端口B 可选择的引脚端功能
GPB10
输入/
输出
nXDREQ
0
–
GPB9
输入/
输出
nXDAC
K0
–
GPB8
输入/
输出
nXDREQ
1
–
GPB7
输入/
输出
nXDAC
K1
–
GPB6
输入/
输出
nXBREQ –
GPB5
输入/
输出
nXBAC
K
–
GPB4
输入/
输出
TCLK0 –
GPB3~
GPB0
输入/
输出
TOUT3
~
TOUT0
–
表 S3C2410A的端口B I/O口配置情况
端口C 可选择的引脚端功能
GPC15
~GPC8
输入/
输出
VD7 ~
VD0
–
GPC7~
GPC5
输入/
输出
LCDVF2
~
LCDVF0
–
GPC4
输入/
输出
VM –
GPC3
输入/
输出
VFRAME –
GPC2
输入/
输出
VLINE –
GPC1
输入/
输出
VCLK –
GPC0
输入/
输出 LEND –
表 S3C2410A的端口C I/O口配置情况
端口D 可选择的引脚端功能
GPD15
输入/输出
VD23 nSS0
GPD14
输入/输出
VD22 nSS1
GPD13~GPD0
输入/输出
VD21~VD8 –
表 S3C2410A的端口D I/O口配置情况
端口E 可选择的引脚端功能
GPE15 输入/输出 IICSDA –
GPE14 输入/输出 IICSCL –
GPE13 输入/输出 SPICLK0 –
GPE12 输入/输出 SPIMOSI0 –
GPE11 输入/输出 SPIMISO0 –
GPE10~
GPE7
输入/输出
SDDAT3~SDDAT0 –
GPE6 输入/输出 SDCMD –
GPE5 输入/输出 SDCLK –
表 S3C2410A的端口E、F I/O口配置情况
GPE4 输入/输出 I2SSDO I2SSDI
GPE3 输入/输出 I2SSDI nSS0
GPE2 输入/输出 CDCLK –
GPE1 输入/输出 I2SSCLK –
GPE0
输入/输出
I2SLRCK –
端口F
GPF7~ GPF0 输入/输出 EINT7 ~EINT0 –
端口G 可选择的引脚端功能
GPG15 输入/输出 EINT23 nYPON
GPG14 输入/输出 EINT22 YMON
GPG13 输入/输出 EINT21 nXPON
GPG12 输入/输出 EINT20 XMON
GPG11 输入/输出 EINT19 TCLK1
GPG10~
GPG8
输入/输出
EINT18~EINT16 –
GPG7 输入/输出 EINT15 SPICLK1
表 S3C2410A的端口G I/O口配置情况
GPG6
输入/
输出
EINT14
SPIMOSI
1
GPG5
输入/
输出
EINT13
SPIMISO
1
GPG4
输入/
输出
EINT12
LCD_PW
REN
GPG3
输入/
输出
EINT11 nSS1
GPG2
输入/
输出
EINT10 nSS0
GPG1
输入/
输出
EINT9 –
GPG0
输入/
输出 EINT8 –
端口 H 可选择的引脚端功能
GPH10 输入/输出 CLKOUT1 –
GPH9 输入/输出 CLKOUT0 –
GPH8 输入/输出 UEXTCLK –
GPH7 输入/输出 RXD2 nCTS1
GPH6 输入/输出 TXD2 nRTS1
GPH5 输入/输出 RXD1 –
GPH4 输入/输出 TXD1 –
GPH3 输入/输出 RXD0 –
GPH2 输入/输出 TXD0 –
GPH1 输入/输出 nRTS0 –
GPH0 输入/输出 nCTS0 –
表 S3C2410A的端口H I/O口配置情况
S3C2410A的I/O口寄存器
在S3C2410A中,大多数的引脚端都是复用的,所以对于每一个引
脚端都需要定义其功能。为了使用I/O口,首先需要定义引脚的功
能。每个引脚端的功能通过端口控制寄存器(PnCON)来定义(配
置)。与配置I/O口相关的寄存器包括:端口控制寄存器(GPACON
~GPHCON)、端口数据寄存器(GPADAT~GPHDAT)、端口上
拉寄存器(GPBUP~GPHUP)、杂项控制寄存器以及外部中断控制
寄存器(EXTINTN)等。在掉电模式,如果GPF0~GPF7和GPG0~
GPG7用作为唤醒信号,那么这些端口必须配置为中断模式。
如果端口配置为输出口,数据可以写入到端口数据寄存器
(PnDAT)的相应位中;如果将端口配置为输入口,则可以从端口
数据寄存器(PnDAT)的相应位中读出数据。
端口上拉寄存器用于控制每组端口的上拉电阻为使能/不使能。如
果相应位设置为0,则表示该引脚的上拉电阻使能;为1,则表示该
引脚的上拉电阻不使能。如果使能了端口上拉寄存器,则不论引脚
配置为哪种功能(输入、输出、DATAn、EINTn等),上拉电阻都
会起作用。
杂项控制寄存器用于控制数据端口的上拉电阻、高阻状态、USB
Pad和CLKOUT的选择。
24个外部中断通过不同的信号方式被请求。EXTINTn寄存器用于
配置这些信号对于外部中断请求采用的是低电平触发、高电平触
发、下降沿触发、上升沿触发还是双边沿触发。有8个外部中断
有数字滤波器。仅16 EINT引脚端(EINT[15:0])用来作为唤醒源。
所有GPIO寄存器的值在掉电模式下都会被保存。外部中断屏蔽寄
存器EINTMASK不能阻止从掉电模式唤醒,但是如果EINTMASK正
在屏蔽的是EINT[15:4]中的某位,则可以实现唤醒,不过寄存
器SRCPND的位EINT4 和EINT8 23在刚刚唤醒后不能设置为1。
相关寄存器的设置分别描述如下:
寄存器 地址 读/写 描述 复位值
GPACON 0x56000000 R/W
配置端口A引脚端,使用位
[22:0]。设置为0:输出引脚
端;
设置为1:第2功能
0x7FFFFF
GPADAT 0x56000004 R/W
端口A数据寄存器,使用位
[22:0]
未定义
保留 0x56000008 – 保留 未定义
保留 0x5600000C – 保留 未定义
1.端口A控制寄存器(参见表)
表 端口A控制寄存器
寄存器 地址 读/写 描述 复位值
GPBCON 0x56000010 R/W
配置端口B引脚端,使用位
[21:0],分别对端口B的11个
引脚端进行配置。
00:输入;01:输出;10:
第2功能;11:保留
0x0
GPBDAT 0x56000014 R/W
端口B数据寄存器,使用位
[10:0]
未定义
GPBUP 0x56000018 R/W
端口B上拉电阻不使能寄存
器,使用位[10:0] 。
0:使能;1:不使能
0x0
保留 0x5600001C – 保留 未定义
2.端口B控制寄存器(参见表)
表. 端口B控制寄存器
寄存器 地址 读/写 描述 复位值
GPCCON 0x56000020 R/W
配置端口C引脚端,使用
位[31:0],分别对端口B的
16个引脚端进行配置。
00:输入;01:输出;10
:第2功能;11:保留
0x0
GPCDAT 0x56000024 R/W
端口C数据寄存器,使用
位[15:0]
未定义
GPCUP 0x56000028 R/W
端口C上拉电阻不使能寄
存器,使用位[15:0] 。
0:使能;1:不使能
0x0
保留 0x5600002C – 保留 未定义
3.端口C控制寄存器(参见表)
表 端口 C控制寄存器
寄存器 地址 读/写 描述 复位值
GPDCON 0x56000030 R/W
配置端口D引脚端,使用位
[31:0],分别对端口B的16个
引脚端进行配置。
00:输入;01:输出;10:
第2功能;11:保留/第3功能
0x0
GPDDAT 0x56000034 R/W
端口D数据寄存器,使用位
[15:0]
未定义
GPDUP 0x56000038 R/W
端口D上拉电阻不使能寄存
器,使用位[15:0]。
0:使能;1:不使能
0xF000
保留 0x5600003C – 保留 未定义
4.端口D控制寄存器(参见表)
表 端口D控制寄存器
寄存器 地址 读/写 描述 复位值
GPECON 0x56000040 R/W
配置端口E引脚端,使用位
[31:0],分别对端口B的16个
引脚端进行配置。
00:输入;01:输出;10:
第2功能;11:保留/第3功能
0x0
GPEDAT 0x56000044 R/W
端口E数据寄存器,使用位
[15:0]
未定义
GPEUP 0x56000048 R/W
端口E上拉电阻不使能寄存器,
使用位[15:0] 。
0:使能;1:不使能
0x0
保留 0x5600004C – 保留 未定义
5.端口E控制寄存器(参见表)
表 端口 E控制寄存器
寄存器 地址 读/写 描述 复位值
GPFCON 0x56000050 R/W
配置端口F引脚端,使用
位[15:0],分别对端口B的
8个引脚端进行配置。
00:输入;01:输出;10
:第2功能;11:保留
0x0
GPFDAT 0x56000054 R/W
端口F数据寄存器,使用
位[7:0]
未定义
GPFUP 0x56000058 R/W
端口F上拉电阻不使能寄
存器,使用位[7:0] 。
0:使能;1:不使能
0x0
保留 0x5600005C – 保留 未定义
6.端口F控制寄存器(参见表)
表 端口F控制寄存器
寄存器 地址 读/写 描述 复位值
GPGCON 0x56000060 R/W
配置端口G引脚端,使用位
[31:0],分别对端口B的16个
引脚端进行配置。
00:输入;01:输出;10:
第2功能;11:保留/第3功能
0x0
GPGDAT 0x56000064 R/W
端口G数据寄存器,使用位
[15:0]
未定义
GPGUP 0x56000068 R/W
端口G上拉电阻不使能寄存器,
使用位[15:0] 。
0:使能;1:不使能
0xF800
保留 0x5600006C – 保留 未定义
7.端口G控制寄存器(参见表)
表 端口G控制寄存器
寄存器 地址 读/写 描述 复位值
GPHCON 0x56000070 R/W
配置端口H引脚端,使用位
[21:0],分别对端口B的11个引
脚端进行配置。
00:输入;01:输出;10:第
2功能;11:保留/第3功能
0x0
GPHDAT 0x56000074 R/W
端口H数据寄存器,使用位
[10:0]
未定义
GPHUP 0x56000078 R/W
端口H上拉电阻不使能寄存器,
使用位[10:0] 。
0:使能;1:不使能
0x0
保留 0x5600007C – 保留 未定义
8.端口H控制寄存器(参见表)
表 端口H控制寄存器
寄存器 地址 读/写 描述 复位值
MISCCR 0x56000080 R/W
上拉电阻、高阻状态、
USB Pad和
CLKOUT的选择控
制 0x10330
9.杂项控制寄存器(参见表)
表 杂项控制寄存器
寄存器 地址 读/写 描述 复位值
DCLKCON
0x560000
84 R/W
DCLK0/1 控制,位
[27:16]控制DCLK1
,位[11:0]控制
DCLK9 0x0
10.DCLK控制寄存器(参见表)
表 DCLK控制寄存器
寄存器 地址 读/写 描述 复位值
EXTINT0 0x56000088 R/W
外部中断控制寄存器0 ,使用
位[30:0],分别对EINT7~
EINT0触发信号进行配置。
000:低电平触发;001:高
电平触发;01x:下降沿下降;
10x:上升沿触发;11x:双
边沿触发
0x0
EXTINT1 0x5600008C R/W
外部中断控制寄存器1,使用
位[30:0],分别对EINT15~
EINT8触发信号进行配置。
000:低电平触发;001:高
电平触发;01x:下降沿下降;
10x:上升沿触发;11x:双
边沿触发
0x0
11.外部中断控制寄存器(参见表)
表 外部中断控制寄存器
EXTINT2 0x56000090 R/W
外部中断控制寄存器2,使
用位[30:0],分别对
EINT23~EINT16触发信
号进行配置。
000:低电平触发;001:
高电平触发;01x:下降沿
下降;10x:上升沿触发;
11x:双边沿触发。
位31为EINT23滤波器使能
控制,1:使能;0:不使
能
0x0
寄存器 地址 读/写 描述 复位值
EINTFLT0 0x56000094 R/W 保留
EINTFLT1 0x56000098 R/W 保留
EINTFLT2
0x5600009
C
R/W
外部中断控制寄存器 2 ,
控制EINT19~EINT16的
滤波器时钟和带宽
0x0
EINTFLT3
0x4C6000A
0
R/W
外部中断控制寄存器 3 ,
控制EINT23~EINT20的
滤波器时钟和带宽
0x0
12.外部中断滤波寄存器(参见表)
表 外部中断滤波寄存器
寄存器 地址 读/写 描述 复位值
EINTMAS
K
0x560000A
4 R/W
外部中断屏蔽寄存器,使用位
[23:4] 控制EINT23~
EINT4中断屏蔽。
0:使能中断;1:屏蔽中断 0x00FFFFF0
寄存器 地址 读/写 描述 复位值
EINTPEN
D 0x560000A8 R/W
外部中断挂起寄存器,使
用位[23:4] 控制
EINT23~EINT4中断
请求。
0:不被请求;1:被请求
0x0
14.外部中断挂起寄存器(参见表)
表 外部中断挂起寄存器
13.外部中断屏蔽寄存器(参见表)
表 外部中断屏蔽寄存器
寄存器 地址 读/写 描述 复位值
GSTATUS0 0x560000AC R 外部引脚端状态 Undefined
GSTATUS1 0x560000B0 R 芯片ID 0x32410000
GSTATUS2 0x560000B4 R/W 复位状态 0x1
GSTATUS3 0x560000B8 R/W
Infrom 寄存器,可以利用
nRESET和看门狗定时器
清零
0x0
GSTATUS4 0x560000BC R/W
Infrom寄存器,可以利用
nRESET和看门狗定时器
清零
0x0
15.通用状态寄存器(参见表)
表 通用状态寄存器
S3C2410A的中断控制
ARM系统的中断处理
在ARM系统中,支持复位、未定义指令、软中断、预取中止、数据
中止、IRQ和FIQ 7种异常,每种异常对应于不同的处理器模式,
有对应的异常向量(固定的存储器地址)。
在ARM系统中,一旦有中断发生,正在执行的程序都会停下来,通
常都会执行如下的中断步骤:
(1)保存现场。保存当前的PC值到R14,保存当前的程序运行状
态到SPSR。
(2)模式切换。根据发生的中断类型,进入IRQ模式或FIQ模式。
(3)获取中断服务子程序地址。PC指针跳到异常向量表所保存的
IRQ或FIQ地址处,IRQ或FIQ的异常向量地址处一般保存的是中断
服务子程序的地址,PC指针跳入到中断服务子程序,进行中断处
理。
(4)多个中断请求处理。在ARM系统中,可以存在多个中断请求
源,比如串口中断、AD中断、外部中断、定时器中断及DMA中断
等,所以可能出现多个中断源同时请求中断的情况。为了更好地
区分各个中断源,通常为这些中断定义不同的优先级别,并为每一
个中断设置一个中断标志位。当发生中断时,通过判断中断优先
级以及访问中断标志位的状态来识别哪一个中断发生了,进而调
用相应的函数进行中断处理。
(5)中断返回,恢复现场。当完成中断服务子程序后,将SPSR中
保存的程序运行状态恢复到CPSR中,R14中保存的被中断程序的
地址恢复到PC中,继续执行被中断的程序。
S3C2410A的中断控制器
S3C2410A采用ARM920T CPU内核,ARM920T CPU的中断包含有
IRQ和FIQ。IRQ是普通中断,FIQ是快速中断,FIQ的优先级高于
IRQ。FIQ中断通常在进行大批量的复制、数据传输等工作时使用。
S3C2410A通过对程序状态寄存器(PSR)中的F位和I位进行设置
控制CPU的中断响应。如果设置PSR的F位为1,则CPU不会响应来
自中断控制器的FIQ中断;如果设置PSR的I位为1,则CPU不会响
应来自中断控制器的IRQ中断。如果设置PSR的F位或I位设置为0,
同时将中断屏蔽寄存器(INTMSK)中的相对应位设置为0,CPU响
应来自中断控制器的IRQ或FIQ中断请求。
中断屏蔽寄存器用于指示中断是否禁止。如果设置中断屏蔽寄存器
中的相对应屏蔽位为1,表示相对应的中断禁止;如果设置为0,表
示中断发生时将正常执行中断服务。如果发生中断时相对应的屏蔽
位正好为1,则中断挂起寄存器中的相对中断源挂起位将置1。
S3C2410A有SRCPND(中断源挂起寄存器)和INTPND(中断挂起
寄存器)两个中断挂起寄存器。SRCPND和INTPND两个挂起寄存器
用于指示某个中断请求是否处于挂起状态。当多个中断源请求中断
服务时,SRCPND寄存器中的相应位设置为1,仲裁过程结束后
INTPND寄存器中只有1位被自动设置为1。
S3C2410A中的中断控制器能够接收来自56个中断源的请求,这些
中断源来自DMA控制器、UART、I2C及外部中断引脚等。从表
可以看出,S3C2410A共有32个中断请求信号。S3C2410A采用了中
断共享技术,INT_UARTO、INT_UART1、INT_UART2、EINT8_23
和EINT4_7为多个中断源共享使用的中断请求信号。中断请求的优
先级逻辑是由7个仲裁器组成的,其中包括6个一级仲裁器和1个二
级仲裁器,如图所示。每个仲裁器是否使能由寄存器
PRIORITY[6:0]决定。每个仲裁器可以处理4~6个中断源,从中选
出优先级最高的。优先级顺序由寄存器PRIORITY[20:7]的相应位
决定。
表
S3C2
410A
的中
断源
中断源 描述 仲裁器分组
INT_ADC ADCEOC和触摸中断
(INT_ADC/INT_TC)
ARB5
INT_RTC RTC报警中断 ARB5
INT_SPI1 SPI1中断 ARB5
INT_UART0 UART0中断(故障、接收和发送) ARB5
INT_IIC I2 C中断 ARB4
VINT_USBH USB主设备中断 ARB4
INT_USB USB从设备中断 ARB4
保留 保留 ARB4
INT_UART1 UART1中断(故障、接收和发送) ARB4
INT_SPI0 SPI0中断 ARB4
INT_SDI SDI中断 ARB3
INT_DMA3 DMA通道3中断 ARB3
INT_DMA2 DMA通道2中断 ARB3
INT_DMA1 DMA通道1中断 ARB3
INT_DMA0 DMA通道0中断 ARB3
INT_LCD LCD中断 ARB3
INT_UART2 UART2中断(故障、接收和发送) ARB2
INT_TIMER4 定时器4中断 ARB2
INT_TIMERS 定时器3中断 ARB2
INT_TIMER2 定时器2中断 ARB2
INT_TIMER1 定时器1中断 ARB2
INT_TIMER0 定时器0中断 ARB2
INT_WDT 看门狗定时器中断 ARB1
INT_TICK RTC时钟滴答中断 ARB1
nBATT_FLT 电源故障中断 ARB1
保留 保留 ARB1
EINT8_23 外部中断8~23 ARB1
EINT4_7 外部中断4~7 ARB1
EINT3 外部中断3 ARB0
EINT2 外部中断2 ARB0
EINTI 外部中断1 ARB0
EINT0 外部中断0 ARB0
图 优先级生成模块
寄存器 地址 R/W 描述 复位值
SRCPN
D
0X4A00
0000
R/W 中断源挂起寄存器,为0时,无中断请求;
当有中断产生,相应位置1。
所有来自中断源的中断请求首先被登记到
中断源挂起寄存器中
0x00000
000
INTM
OD
0X4A00
0004
R/W 中断模式寄存器:0=IRQ模式,1=FIQ模式。
多个IRQ中断的仲裁过程在优先级寄存器
进行。
0x00000
000
INTMS
K
0X4A00
0008
R/W 中断屏蔽寄存器:0=允许中断,1=屏蔽中
断。
中断屏蔽寄存器的主要功能是屏蔽相应中
断的请求,即使中断挂起寄存器的相应位
已经置1,也就是说已经有相应的中断请
求发生了;但是如果此时中断屏蔽寄存器
的相应位置1,则中断控制器将屏蔽该中
断请求CPU不会响应该中断
0xFFFF
FFFF
S3C2410A中断控制器的特殊寄存器如表所示,中断控制需要正确
的设置这些寄存器,寄存器中每一位的含义请参阅S3C2410A数据手册。
表中断控制器的特殊寄存器
PRIORITY 0x4A000
00C
R/W IRQ中断优先级控制寄存器 0x7F
INTPND 0X4A000
010
R/W 中断状态指示寄存器:0=该中断没
有请求,1=该中断源发出中断请求
0x000000
00
INTOFFSE
T
0X4A000
014
R 中断偏移寄存器,指示IRQ中断源 0x000000
00
SUBSRCP
ND
0X4A000
018
R/W 子中断源状态寄存器,指示中断请
求的状态。
0=该中断没有请求,1=该中断源发
出中断请求
0x000000
00
INTSUBM
SK
0X4A000
01C
R/W 定义哪几个中断源屏蔽。
0=中断服务允许,1=中断服务屏蔽
0x7FF
S3C2410A的中断编程实例
本小节介绍一个通过定时器1控制一个led灯每1秒钟改变一次状态,
需要完成的主要工作如下。
(1)对定时器1初始化,并设定定时器的中断时间为1,具体代码
参见Timed init( )函数。
void Timerl_init(void){
rGPBCON = rGPBCON&0xfffffffc&0x00000001;
rGPBDAT= rGPBDAT |0x001;
rTCFG0 = 255;
rTCFG1 = 0<<4;
rTCNTB1 = 48828; //在pclk = 50MHz下,1s的
记数值rTCNTB1 = 50000000/4/256=48828;
rTCMPB1 = 0x00;
rTCON = (1+11) | (1<<9) | (0<<8);//禁用定时器1,
手动加载
rTCON = (1+11) | (0<<9) | (1<<8);//启动定时器1,
自动装载
}
(2)为了使CPU响应中断,在中断服务子程序执行之前,必须打
开ARM920T的CPSR中的I位,以及相应的中断屏蔽寄存器中的位。
打开相应的中断屏蔽寄存器中的位,是在TimerlINT Init()函数中
实现的,具体代码如下。
void TimerlINT_Init(void){ //定时器接口使能
if((rINTPND&BIT_TIMERI)){
rSRCPND | = BIT_TIMER1;
}
pISR_TMER1=(int)Timerl_ISR; //写入定时器1中断服务子程
序的入口地址
rINTMSK &=~(BIT_TIMERI); //开中断;
}
(3)等待定时器中断,通过一个死循环,如“while(1);”实
现等待过程。
(4)根据设置的定时时间,产生定时器中断。中断发生后,首先
进行现场保护,然后转人中断的入口代码处执行。该部分代码通常
使用汇编语言编写。在执行中断服务程序之前,要确保HandleIRQ
地址处保存中断分发程序IsrIRQ的入口地址,代码如下。
ldr r0,= HandleIRQ
ldr r1,= IsrIRQ
str r1,[r0〕
接下来将执行IsrIRQ中断分发程序,具体代码如下。
IsrIRQ
sub sp,sp,#4; //为保存PC预留堆栈空间
stmfd sp!,{r8-r9}
ldr r9,= INTOFFSET
ldr r9,[r9]; //加载INTOFFSET寄存器值到r9
ldr r8,=HandleEINT0; //加载中断向量表的基地址到
r8
add r8,r8,r9,lsl #2; //获得中断向量
ldr r8, [r8]; //加载中断服务程序的入口地址到
r8
str r8,[sp,#8]; //保存sp,将其作为新的pc值
ldmfd sp!,(r8-r9,pc}; //跳转到新的pc处执行,即跳
转到中断服务子程序执行
(5)执行中断服务子程序,该子程序实现led灯每一秒钟改变一次
状态。看到LEDl灯闪烁一次,则说明定时器发生了一次中断。具体
实现见函数Timerl_ISR()。
int f ;
void _ _irq Timer1_ISR(void)
{
If (f= = 0)
{ rGPBDAT = rGPBDAT | 0x001;
f=1;
}
If (f= = 1)
{ rGPBDAT= rGPBDAT &0x0;
f=0;
}
rSRCPND |= BIT_TIMER1;
rINTPND |= BIT_TIMER1;
}
(6)从中断返回,恢复现场,跳转到被中断的主程序继续执行,
等待下一次中断的到来。
S3C2410A的DMA控制
器
DMA工作原理
DMA(Direct Memory Acess,直接存储器存取)方式是指存储器
与外设在DMA控制器的控制下,直接传送数据而不通过CPU,传
输速率主要取决于存储器存取速度。在DMA传输过程中,DMA控
制器负责管理整个操作,并且无须CPU介入,从而大大提高了
CPU的工作效率。DMA方式为高速I/O设备和存储器之间的批量数
据交换提供了直接的传输通道。由于I/O设备直接同内存发生成块
的数据交换,可以提高I/O效率。现在大部分计算机系统均采用
DMA技术。许多输入/输出设备的控制器都支持DMA方式。
在进行DMA数据传送之前,DMA控制器会向CPU申请总线控制权,
CPU如果允许,则将控制权交出。因此,在数据交换时,总线控
制权由DMA控制器掌握,在传输结束后,DMA控制器将总线控制
权交还给CPU。采用DMA方式进行数据传输的具体过程如下。
(1)外设向DMA控制器发出DMA请求。
(2)DMA控制器向CPU发出总线请求信号。
(3)CPU执行完现行的总线周期后,向DMA控制器发出响应请求
的回答信号。
(4)CPU将控制总线、地址总线及数据总线让出,由DMA控制器
进行控制。
(5)DMA控制器向外部设备发出DMA请求回答信号。
(6)进行DMA传送。
(7)数据传送完毕,DMA控制器通过中断请求线发出中断信号。
CPU在接收到中断信号后,转人中断处理程序进行后续处理。
(8)中断处理结束后,CPU返回到被中断的程序继续执行。CPU
重新获得总线控制权。
S3C2410A的DMA控制器
在系统总线和外围总线之间,S3C2410A有4个DMA控制器。每个
DMA控制器可以处理以下4种情况:
(1)源和目的都在系统总线上;
(2)源在系统总线上,目的在外围总线上;
(3)源在外围总线上,目的在系统总线上;
(4)源和目的都在外围总线上。
如果DCON寄存器选择采用硬件(H/W)DMA请求模式,DMA控
制器可以从对应通道的DMA请求源中选择一个。如果DCON寄存
器选择采用软件(S/W)DMA请求模式,那么这些DMA请求源将
没有任何意义。DMA请求源如表所示。
通道 请求
源0
请求
源1
请求
源2
请求
源3
请求
源4
通道0 nXDR
EQ0
UART
0
SDI 定时
器
USB
设备
EP1
通道1 nXDR
EQ1
UART
I
I2
SSDI
SPI0 USB
设备
EP2
通道2 I2SSD
O
I2SSD
I
SDI 定时
器
USB
设备
EP3
通道3 UART
2
SDI SPI1 定时
器
USB
设备
EP4
表 DMA请求源
DMA的操作过程可以用一个3种状态的FSM(Finite State Machine
,有限状态机)来描述,具体步骤如下:
(1)状态1
状态1为初始状态,DMA等待一个DMA请求。如果出现DMA请求,
进入状态2。在这种状态下,DMA ACK和INT REQ为0。
(2)状态2
在状态2,DMA ACK变为1,并且从DCON[19:0]寄存器向计数器
(CURR TC)加载计数值。注意,此时DMA ACK一直是1,直到被
清零。
(3)状态3
在状态3,子FSM使DMA的微操作被初始化。子FSM从源地址读取
数据,并将其写入目标地址。在这个操作过程中,需要考虑数据
大小(尺寸)和传输大小(尺寸)。这一操作重复执行,直到在
整体服务模式下的计数器 (CURR_TC)变为0;这一操作在单个
服务模式下则只执行一次。子FSM每完成一次微操作,主FSM将
CURR_TC进行一次向下计数。另外,当CURR_TC变为0时,主FSM
将INT REQ信号置1,并将DCON寄存器的中断设置位[29]置1。
除此以外,如果发生以下情况,则对DMA ACK清零。
在单个服务模式下,主FSM的3种状态执行完后就停止,并等待下
一个DMA请求。如果又产生了新的DMA请求,则所有3个状态都
将被重复。因此,对于每一个微传送操作,DMA ACK先后置1和
清零。相反,在整体服务模式下,主FSM一直在状态3等待直到
CURR TC变为0,因此DMA ACK在整个传送过程中都置1,当TC为
时则清零。
S3C2410A每个DMA通道有9个控制寄存器,4个通道共有36个寄
存器。每个DMA通道的9个控制寄存器中有6个用于控制DMA传输,
另外3个用于监控DMA控制器的状态。要进行DMA操作,首先需
要对这些寄存器进行正确配置。相关寄存器介绍如下:
(1)DMA初始化源寄存器(DISRC)
如表所示,DMA初始化源寄存器(DISRC)用于存放要传输
的源数据的起始地址。
寄存器 地址 读/写 描述 复位值
DISRCO 0x4B00 0000
读/写
DMA0初始化源寄存器
0x0000
0000
DISRCI 0x4B00 0040 DMAl初始化源寄存器
DISRC2 0x4B00 0080 DMA2初始化源寄存器
DISRC3 0x4B00 00C0 DMA3初始化源寄存器
表 DMA初始化源寄存器
寄存
器
地址
读
/
写
描述
复位
值
DISR
CC0
0x4B
00
0004
读
/
写
DMA0~DMA3
初始化源控制寄存
器。
位[1]:位[1]=0
,源数据在AHB总
线上;
位[1]=1,源数
据在APB总线上。
位[0]:位[0]=0
,传送数据后,源
地址增加;
位[0]=1,地址
固定不变
0x00
00
0000
DISR
CC1
0x4B
00
0044
DISR
CC2
0x4B
00
0084
DISR
CC3
0x4B
00
00C4
表 DMA初始化源控制寄存器
(2)DMA初始化源控制寄存器(DISRCC)
如表所示,DMA初始化源控制寄存器(DISRCC)用于控制源
数据在AHB总线还是APB总线上并控制地址增长方式
寄存
器
地址
读/
写
描述
复位
值
DIDS
T0
0x4B00
0008
读/
写
DMAO初始
化目标地址
寄存器
0x000
0
0000
DIDS
T1
0x4B00
0048
DMA1初始化
目标地址寄
存器
DIDS
T2
0x4B00
0088
DMA2初始化
目标地址寄
存器
DIDS
T3
0x4B00
00C8
DMA3初始化
目标地址寄
存器
3)DMA初始化目标地址寄存器(DIDST),
如表所示,DMA初始化目标地址寄存器(DIDST)用于存放
传输目标的起始地址。
表 DMA初始目标地址寄存器
寄存
器
地址
读
/
写
描述
复位
值
DID
STC
0
0x4B
00
000C
读
/
写
DMAn初始化目
标控制寄存器。
位[1]:位[1]=0
,目标在AHB总线
上;
位[1]=1,目标
在APB总线上。
位[0]:位[0]=0
,传送数据后,目
标地址增加;
位[0]=1,地址
固定不变
0x000
0
0000
DID
STC
1
0x4B
00
004C
DID
STC
2
0x4B
00
008C
DID
STC
3
0x4B
00
00CC
(4)DMA初始化目标控制寄存器(DIDSTC)
如表所示,DMA初始化目标控制寄存器(DIDSTC)用于控制
目标位于AHB总线还是APB总线上,并控制地址增长方式。
表 DMA初始化目标控制寄存器
寄存器 地址 读/写 描述 复位值
DCON0
0x4B00
0010
读/写
DMA0控制寄存
器
0x0000
0000
DCON1
0x4B00
0050
DMA1控制寄存
器
DCON2
0x4B00
0090
DMA2控制寄存
器
DCON3
0x4B00
00D0
DMA3控制寄存
器
(5)DMA控制寄存器(DCON)
如表所示,有4个DMA控制寄存器(DCON)(DCON0~
DCON3),DMA控制寄存器的位描述如表所示。
表 DMA控制寄存器
DCONn 位 描述
DMD HS [31]
请求模式或握手模式选择。
0:请求模式;1:握手模式
SYNC [30]
DREQ/DACK同步模式选择。
0:DREQ和DACK与APB时钟同步
1:DREQ和DACK与AHB时钟同步
INT [29]
CURR_TC中断使能设置。
0:禁止中断;1:使能中断
TSZ [28]
选择传输单位的大小。
0:单位传输;1:长度为4的突发式传输
SERVMO
DE
[27]
服务模式选择。
0:单个服务模式;1:整体服务模式
表 DMA控制寄存器的位描述
HWS
RCSE
L
[2
6:
24
]
为DMA设置DMA请求源。
DCONO:000一nXDREQ0;
001一UART0;010一SDI;011一定
时器;
100一USB设备EP1;
DCONl:000一nXDREQ1;
001一UART1;010一I2SSDI;011一
SPI;
100一USB设备EP2;
DCON2:000-I2SSD0;001一
I2SSDI;010一SDI; 011一定时器;
100一USB设备EP3;
DCON3:000--UART2;001-
SDI;010-SPI;011一定时器;
100一USB设备EP4
SWHW_
SEL
[23]
选择DMA软件请求源和硬件请求源。
0:软件请求模式,DMA通过设置DMASKTRIG
寄存器SW_TRIG位触发;
1:硬件请求模式,DMA通过设置该寄存器的
HWSRCSEL位触发
RELOAD [22]
设置是否重新加载(当前计数器值等于零后)。
0:自动加载;1:DMA通道关闭,不重新加载
DSZ
[21:
20]
传输数据的大小。
00:字节 01:半字 10:字 11:保留
TC
[19:
0]
初始化计数器
寄存器 地址 读/
写
描述 复位值
DSTAT0 0x4B00
0014
只读 DMA0~DMA3计
数寄存器。
位[21:20]:0一
DMA控制器就绪;
1一DMA控制器忙。
位[19:0]:传输计
数的当前值
0x0000 0000
DSTAT1 0x4B00
0054
DSTAT2 0x4B00
0094
DSTAT3 0x4B00
00D4
(6)DMA状态寄存器(DSTAT)
如表所列,DMA状态寄存器(DSTAT)保存DMA0~DMA3
计数寄存器状态。
表 DMA状态寄存器
寄存器 地址
读/
写
描述 复位值
DCSRC0
0x4B00
0018
只读
DMA0当前源寄
存器
0x0000
0000
DCSRCI
0x4B00
0058
DMA1当前源寄
存器
DCSRC2
0x4B00
0098
DMA2当前源寄
存器
DCSRC3
0x4B00
00D8
DMA3当前源寄
存器
(7)DMA当前源寄存器(DCSRC)
如表所列,DMA当前源寄存器(DCSRC)用于保存DMAn
的当前源地址。
表 DMA当前源寄存器
寄存器 地址
读/
写
描述 复位值
DCDST0
0x4B00
001C
只读
DMA0当前目
标寄存器
0x0000
0000
DCDST1
0x4B00
005C
DMA1当前目
标寄存器
DCDST2
0x4B00
009C
DMA2当前目
标寄存器
DCDST3
0x4B00
00DC
DMA3当前目
标寄存器
(8)DMA当前目标寄存器(DCDST)
如表所列,DMA当前目标寄存器(DCDST)用于保存DMAn
的当前目标地址。
表 DMA当前目标寄存器
寄存器 地址
读
/
写
描述 复位值
DMASK
TRIG0
0x4B00
0020
读
/
写
DMA0~DMA3屏蔽触发寄存器。
·位[2]:STOP位,停止DMA操作。
位[2]=1:当前微传输操作结束后,DMA
停止。如果当前没有微传输操作,DMA立
即停止,CURR_TC将取值为0。
位[1]:ON_OFF位,DMA通道开关位。
·位[1]=0:通道关闭,忽略DMA请求。
位[1]=1:通道打开。
·位[0]:SW_TRIG位,DMA通道通过软件
请求模式触发
位[0]=1:对这个DMA控制器请求一次
DMA操作。
注:这个位只有在DCONn[23」置1并且
ON_OFF位也置1时才能生效。当DMA操作
开始后,本位自动清。
0x0000
0000
DMASK
TRIG1
0x4B00
0060
DMASK
TRIG2
0x4B00
00A0
DMASK
TRIG3
0x4B00
00E0
(9)DMA屏蔽触发寄存器(DMASKTRIG)
如表所列,DMA屏蔽触发寄存器(DMASKTRIG)控制DMA0~DMA3触发状态。
表 DMA屏蔽触发寄存器
S3C2410A的DMA编程实例
本小节给出一个使用DMA方式实现从存储器发送数据到UART0的
实例,以下是程序代码。
#include””
#define S_DATA (*(volatile unsigned char *)0x30800000)
#define S_ADDR ((volatile unsigned char *)0x30800000) //
数据起始地址
void UART0_DMA(void){
volatile unsigned char*p = S_DATA;
int i;
Init();
Delay(5000);
S_DATA = 0x12;
for(I = 0;I <256; i++) {
*p++ = 0x12 + i; //准备将要发送的数据
}
rUCON0 = rUCON0&0xff3|0x8; //UART0设置为DMA形
式
//DMA相关寄存器初始化
rDISRC0 = (U32)( S_ADDR);
rDISRCC0 = (0<<1)|0;
rDIDST0 = (U32)UTXH0;
rDIDSTC0(1<<1)|(1<<0);
rDCON0 = 0x0;
rDCON0 = (1<<29)|(1<<24)|(1<<23)|(1<<22)|(50);
rDMASKTRIG0 = (1<<1); //打开DMA通道0
for( ; ; );
}
第3章 思考题与习题
19 简述采用DMA方式进行数据传输的过程。
20 简述S3C2410A的DMA控制器功能。
21 S3C2410A的DMA通道有几个控制寄存器?各自具有什么功
能?
22 S3C2410A的DMA初始化有几个控制寄存器?各自具有什么
功能?
23 简述DMA控制寄存器的位功能。
24 简述DMA屏蔽触发寄存器的功能。