Professional Documents
Culture Documents
微处理器 S3C2410A
3.1 S3C2410A 简介
3.2 S3C2410A 存储器控制器
3.3 复位、时钟和电源管理
3.4 S3C2410A 的 I/O 口
3.5 S3C2410A 的中断控制
3.6 S3C2410A 的 DMA 控制
3.1 S3C2410A 简介
3.1.1 S3C2410A 内部结构
1 .体系结构
● ARM920T CPU 内核, 16/32 位 RISC 体系结构和强大的指令集;
● 增强的 ARM 体系结构 MMU ,支持 WinCE 、 EPOC 32 和 Linux ;
● 使用指令 Cache 、数据 Cache 、写缓冲器和物理地址 TAG RAM
(标记随机存储器)减少主存储器带宽和反应时间对性能的影响;
● 支持 ARM 调试体系结构;
● 先进的微控制器总线体系结构( AMBA : AHB/APB )( P57 )
2. 存储系统管理器
● 支持小/大端方式
● 8 个存储器 bank ,每 bank 128 MB (总共 1GB )
● 可编程 8/16/32 位数据总线宽度及可编程的访问周期
● 支持掉电时的 SDRAM 自刷新模式
● 支持各种类型的 ROM 启动( booting ),如 NOR/NAND Flash 和 EEPROM
3 . NAND Flash Boot Loader (启动装载)
● 支持从 NAND Flash 存储器的启动,启动之后 NAND 存储器仍然作为外
部存储器使用。
4 . Cache 存储器
● I-Cache ( 16 KB )和 D-Cache ( 16 KB )。
● 每行 8 字长度,其中每行带有一个有效位和两个脏位( dirty bits )
。
● 采用伪随机数或循环替换算法。
● 采用写直达( Write-through )或写回( Write-back ) Cache 操作
来更新主存储器。
● 写缓冲器可以保存 16 个字的数据值和 4 个地址值。
5 .时钟和电源管理
● 片上 MPLL 和 UPLL :
---UPLL 产生用于 USB 主机/设备操作的时钟;
---MPLL 产生操作 MCU 的时钟,频率最高可达 266 MHz ( 2.0V 内核电压)。
● 通过软件可以有选择地为每个功能模块提供时钟。
● 电源模式包括正常、慢速、空闲和掉电模式:
--- 正常模式为正常运行模式;
--- 慢速模式为不加 PLL 的低时钟频率模式;
--- 空闲模式只停止 CPU 的时钟;
--- 掉电模式切断所有外设和内核的电源。
● 可以通过 EINT[15:0] 或 RTC 报警中断从掉电模式中唤醒处理器。
6 .中断控制器
10 .看门狗定时器
● 16 位看门狗定时器;
● 定时器溢出时产生中断请求或系统复位。
11 .通用 I/O 口
● 117 个多路复用的 I/O 口;
● 其中 24 个外部中断口( F 口 8 个 +G 口 16 个)。
12. UART
● 3 通道 UART ,可以基于 DMA 模式或中断模式操作;
● 支持 5 位、 6 位、 7 位或者 8 位串行数据发送/接收( Tx/Rx );
● 支持外部时钟作为 UART 的运行时钟( UEXTCLK );
● 波特率可编程;
● 支持 IrDA 1.0 ;
● 支持回环( Loopback )测试模式;
● 每个通道内部都具有 16 字节的发送 FIFO 和 16 字节的接收 FIFO 。
13 . A / D 转换和触摸屏接口
● 8 通道 10 位分辨率多路复用 ADC ;
● 转换速率最大为 500 KSPS ( Kilo Samples Per Second ,每秒采样千
点)。
11 .通用 I/O 口
● 117 个多路复用的 I/O 口;
● 其中 24 个外部中断口( F 口 8 个 +G 口 16 个)。
12 . A / D 转换和触摸屏接口
● 8 通道 10 位分辨率多路复用 ADC ;
● 转换速率最大为 500 KSPS ( Kilo Samples Per Second ,每秒
采样千点)。
14 . LCD 控制器 STN LCD ( Super Twisted Nematic 超扭曲向列型 )显示
特性
● 支持 3 种类型 STN LCD 显示屏: 4 位双扫描、 4 位单扫描和 8 位单扫描显示类型;
● 支持单色模式、 4 级灰度、 16 级灰度、 256 彩色和 4 096 彩色;
● 支持多种屏幕尺寸,如: 640×480 , 320×240 , 160×160 ;
● 最大虚拟屏幕大小是 4 MB ;
● 在 256 彩色模式下支持的最大虚拟屏幕尺寸是: 4096×1024 , 2048×2048 ,
1024×4096 或者其它尺寸。
17 . I2S 总线接口
● 1 通道音频 I2S 总线接口,可基于 DMA 方式操作;
● 串行,每通道 8/16 位数据传输;
● 发送和接收( Tx/Rx )具备 128 字节 FIFO ( 64 字节发送 FIFO + 64 字
节接收 FIFO );
● 支持 I2S 格式和 MSB-justified 数据格式。
18 . USB 主设备
● 2 个 USB 主设接口;
● 遵从 OHCI Revl.0 标准;
● 兼容 USB Verl.1 标准。
19 . USB 从设备
● 1 个 USB 从设接口;
● 具备 5 个 USB 设备端口;
● 兼容 USB Verl.1 标准。
20 . SD 主机接口
● 兼容 SD 存储卡协议 1.0 版;
● 兼容 SDIO 卡协议 1.0 版;
● 发送和接收采用字节 FIFO ;
● 基于 DMA 或中断模式操作;
● 兼容 MMC 卡协议 2.11 版。
21 . SPI 接口
● 兼容 2 通道 SPI 协议 2.11 版;
● 发送和接收采用 2 字节的移位寄存器;
● 基于 DMA 或中断模式操作。
22 .工作电压
● 内核电压: 1.8V ,最高工作频率 200 MHz ( S3C2410A-20 );
2.0 V ,最高工作频率 266 MHz ( S3C2410A-26 )。
● 存储器和 I/O 电压: 3.3 V 。
23 .封装
● 采用 272-FBGA ( Fine-Pitch Ball Grid Array 细间距球栅阵列)封装。
返回
3.2 S3C2410A 存储器控制器
3.2.1 S3C2410A 的存储器控制器特性
提供访问外部存储器所需要的存储器控制信号,特性如下:
● 支持小/大端(通过软件选择)。
● 总共有 8 个存储器 bank ( bank0 ~ bank7 ),每个 bank 128 MB (共 1 GB ):
---- 其中 6 个用于 ROM , SRAM 等;
----- 剩下 2 个用于 ROM , SRAM , SDRAM 等
● 除 bank0 只能是 16/32 位宽之外,其他 bank 都具有可编程位宽
( 8/16/32 位)。
● 7 个固定的存储器 bank ( bank0 ~ bank6 )起始地址。
● 最后一个 bank ( bank7 )的起始地址是可调整的。
● 最后两个 bank ( bank6 和 bank7 )的大小是可编程的。
● 所有 bank 的访问周期可编程。
● 总线访问周期可以通过插入外部等待来扩展。
● 支持 SDRAM 的自刷新和掉电模式。
3.2.2 S3C2410A 的存储器映射
返回
3.3 复位、时钟和电源管理
1 .复位电路
复位电路主要完成系统的上电复位和系统在运行时用户的按键复位
功能。
nReset 为低时,系统开始初始化设置;低位要保证足够长的时间;
nReset 为高时,系统开始执行指令。
复位电路可由 RC 电路构成,也可以使用专门电路。
专门的系统监视复位芯片 IMP811S
通过手动控制系统的复位。
还可以实时监控系统的电源。系统电源低于系统阈值( 2.9V ),即进行复位
两级非门电路用于按钮去抖动和波形整形;
nRESET 端的输出状态与 RESET 端相反;
通过调整 R108 和 C162 的参数,可调整复位状态的时
间。
2 .时钟电路
在 S3C2410A 中的时钟控制逻辑能够产生 :
(1) CPU 所需的 FCLK 时钟信号
(2) AHB 总线外围设备所需的 HCLK 时钟信号
(3) APB 总线外围设备所需的 PCLK 时钟信号。
( P57 ARM AMBA 接口)
端口 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 口均可以通过软件进行配置。
端口 A 除了作为功能口外,只能够作为输出口使用。
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 –
S3C2410A 的端口 B I/O 口配置情况
端口 B 可选择的引脚端功能
GPB10 输入 / 输出 nXDREQ0 –
GPB9 输入 / 输出 nXDACK0 –
GPB8 输入 / 输出 nXDREQ1 –
GPB7 输入 / 输出 nXDACK1 –
GPB6 输入 / 输出 nXBREQ –
GPB5 输入 / 输出 nXBACK –
GPB4 输入 / 输出 TCLK0 –
端口 C 可选择的引脚端功能
GPC4 输入 / 输出 VM –
GPC3 输入 / 输出 VFRAME –
GPC2 输入 / 输出 VLINE –
GPC1 输入 / 输出 VCLK –
输入 / 输出
GPC0 LEND –
S3C2410A 的端口 D I/O 口配置情况
端口 D 可选择的引脚端功能
输入 / 输出
GPD15 VD23 nSS0
输入 / 输出
GPD14 VD22 nSS1
输入 / 输出
GPD13 ~ GPD0 VD21 ~ VD8 –
S3C2410A 的端口 E 、 F I/O 口配置情况
端口 E 可选择的引脚端功能
GPE15 输入 / 输出 IICSDA –
GPE14 输入 / 输出 IICSCL –
GPE13 输入 / 输出 SPICLK0 –
GPE12 输入 / 输出 SPIMOSI0 –
GPE11 输入 / 输出 SPIMISO0 –
GPE6 输入 / 输出 SDCMD –
GPE5 输入 / 输出 SDCLK –
GPE4 输入 / 输出 I2SSDO I2SSDI
GPE2 输入 / 输出 CDCLK –
GPE1 输入 / 输出 I2SSCLK –
输入 / 输出
GPE0 I2SLRCK –
端口 F
输入 / 输出
GPF7 ~ GPF0 EINT7 ~ EINT0 –
S3C2410A 的端口 G I/O 口配置情况
端口 G 可选择的引脚端功能
GPG1 输入 / 输出 EINT9 –
输入 / 输出
GPG0 EINT8 –
S3C2410A 的端口 H I/O 口配置情况
端口 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 –
3.4.2 S3C2410A 的 I / O 口寄存器
大多数引脚复用,需要定义其功能。
端口上拉寄存器用于控制每组端口的上拉电阻为使能 / 不使能。
如果相应位设置为 0 ,则表示该引脚的上拉电阻使能;
为 1 ,则表示该引脚的上拉电阻不使能。
杂项控制寄存器用于控制数据端口的
上拉电阻、高阻状态、 USB Pad 和 CLKOUT 的选择。
24 个外部中断通过不同的信号方式被请求。
EXTINTn 寄存器用于配置这些信号对于外部中断请求采用的是低电平触
发、高电平触发、下降沿触发、上升沿触发还是双边沿触发。
所有 GPIO 寄存器的值在掉电模式下都会被保存。
外部中断屏蔽寄存器 EINTMASK 不能阻止从掉电模式唤醒,但是如果
EINTMASK 正在屏蔽的是 EINT[15:4 ]中的某位,则可以实现唤醒,不过
寄存器 SRCPND 的位 EINT4 和 EINT8 23 在刚刚唤醒后不能设置为 1
。
相关寄存器的设置分别描述如下:
端口 A ( 23 位)控制寄存器
读/
寄存器 地址 描述 复位值
写
配置端口 A 引脚端,使用位
[22:0] 。
GPACON 0x56000000 R/W 0x7FFFFF
设置为 0 :输出引脚端;
设置为 1 :第 2 功能
端口 A 数据寄存器,使用位
GPADAT 0x56000004 R/W 未定义
[22:0]
未定义
保留 0x56000008 – 保留
未定义
保留 0x5600000C – 保留
端口 B ( 11 位)控制寄存器
寄存器 地址 读 / 写 描述 复位值
配置端口 B 引脚端,使用位
[21:0] ,分别对端口 B 的 11
GPBCON 0x56000010 R/W 个引脚端进行配置。 0x0
00 :输入; 01 :输出;
10 :第 2 功能; 11 :保留
端口 B 数据寄存器,使用位
GPBDAT 0x56000014 R/W 未定义
[10:0]
端口 B 上拉电阻不使能寄存器,
GPBUP 0x56000018 R/W 使用位 [10:0] 。 0x0
0 :使能; 1 :不使能
保留 0x5600001C – 保留 未定义
端口 C ( 16 位)控制寄存器
寄存器 地址 读 / 写 描述 复位值
配置端口 C 引脚端,使用位
[31:0] ,分别对端口 C 的
16 个引脚端进行配置。
GPCCON 0x56000020 R/W 0x0
00 :输入; 01 :输
出
10 :第 2 功能; 11 :保留
端口 C 数据寄存器,使用位
GPCDAT 0x56000024 R/W 未定义
[15:0]
端口 C 上拉电阻不使能寄存
GPCUP 0x56000028 R/W 器,使用位 [15:0] 。 0x0
0 :使能; 1 :不使能
保留 0x5600002C – 保留 未定义
端口 D ( 16 位)控制寄存器
读/
寄存器 地址 描述 复位值
写
配置端口 D 引脚端,使用位 [31:0]
,分别对端口 D 的 16 个引脚端进行
0x5600003
GPDCON R/W 配置。 0x0
0
00 :输入; 01 :输出;
10 :第 2 功能; 11 :保留 / 第 3 功能
0x5600003
GPDDAT R/W 端口 D 数据寄存器,使用位 [15:0] 未定义
4
端口 D 上拉电阻不使能寄存器,使用
0x5600003
GPDUP R/W 位 [15:0] 。 0xF000
8
0 :使能; 1 :不使能
0x5600003
保留 – 保留 未定义
C
返回
端口 E ( 16 位)控制寄存器
寄存器 地址 读 / 写 描述 复位值
配置端口 E 引脚端,使用位 [31:0]
,分别对端口 E 的 16 个引脚端进行
0x5600004 配置。
GPECON R/W 0x0
0 00 :输入; 01 :输出;
10 :第 2 功能; 11 :保留 / 第 3 功
能
0x5600004
GPEDAT R/W 端口 E 数据寄存器,使用位 [15:0] 未定义
4
端口 E 上拉电阻不使能寄存器,使用
0x5600004
GPEUP R/W 位 [15:0] 。 0x0
8
0 :使能; 1 :不使能
0x5600004
保留 – 保留 未定义
C
返回
端口 F ( 8 位)控制寄存器
寄存器 地址 读 / 写 描述 复位值
配置端口 F 引脚端,使用位
[15:0] ,分别对端口 F 的 8
GPFCON 0x56000050 R/W 个引脚端进行配置。 0x0
00 :输入; 01 :输出
10 :第 2 功能; 11 :保留
端口 F 数据寄存器,使用位
GPFDAT 0x56000054 R/W 未定义
[7:0]
端口 F 上拉电阻不使能寄存
GPFUP 0x56000058 R/W 器,使用位 [7:0] 。 0x0
0 :使能; 1 :不使能
保留 0x5600005C – 保留 未定义
端口 G ( 16 位)控制寄存器
读/
寄存器 地址 描述 复位值
写
配置端口 G 引脚端,使用位 [31:0]
,分别对端口 G 的 16 个引脚端进行
0x5600006 配置。
GPGCON R/W 0x0
0 00 :输入; 01 :输出;
10 :第 2 功能; 11 :保留 / 第 3 功
能
0x5600006 端口 G 数据寄存器,使用位 [15:0]
GPGDAT R/W 未定义
4
端口 G 上拉电阻不使能寄存器,使用
0x5600006
GPGUP R/W 位 [15:0] 。 0xF800
8
0 :使能; 1 :不使能
0x5600006
保留 – 保留 未定义
C
端口 H ( 11 位)控制寄存器
寄存器 地址 读/写 描述 复位值
配置端口 H 引脚端,使用位 [21:0]
,分别对端口 H 的 11 个引脚端进行
0x5600007
GPHCON R/W 配置。 0x0
0
00 :输入; 01 :输出;
10 :第 2 功能; 11 :保留 / 第 3 功能
0x5600007
GPHDAT R/W 端口 H 数据寄存器,使用位 [10:0] 未定义
4
端口 H 上拉电阻不使能寄存器,使用
0x5600007
GPHUP R/W 位 [10:0] 。 0x0
8
0 :使能; 1 :不使能
0x5600007
保留 – 保留 未定义
C
杂项控制寄存器
读/
寄存器 地址 描述 复位值
写
MISCCR
(多状态控 0x560000 上拉电阻、高阻状态、 USB 0x103
制) 80 R/W Pad 和 CLKOUT 的选择控制 30
DCLK 控制寄存器
寄存器 地址 读/写 描述 复位值
DCLK0/1 控制,
位 [27:16] 控制
DCLK1 ,
DCLKCON 0x5600008 位 [11:0] 控制
(外部时钟源时钟) 4 R/W DCLK0 0x0
外部中断控制寄存器
读/
寄存器 地址 描述 复位值
写
外部中断控制寄存器 0 ,使用位 [30:0] ,
分别对 EINT7 ~ EINT0 触发信号进行配置
0x5600008 。
EXTINT0 R/W 0x0
8 000 :低电平触发; 001 :高电平触发;
01x :下降沿下降; 10x :上升沿触发;
11x :双边沿触发
外部中断控制寄存器 1 ,使用位 [30:0] ,分
0x5600008
EXTINT1 R/W 别对 EINT15 ~ EINT8 触发信号进行配置。 0x0
C
配置同上
读/
寄存器 地址 描述 复位值
写
0x560000
EINTFLT0 R/W 保留
94
0x560000
EINTFLT1 R/W 保留
98
外部中断挂起寄存器
读/
寄存器 地址 描述 复位值
写
0x560000
外部中断挂起寄存器,使用位 [23:4]
EINTPEND A8 R/W 0x0
控制 EINT23 ~ EINT4 中断请求。
0 :不被请求; 1 :被请求
通用状态寄存器
读/
寄存器 地址 描述 复位值
写
0x560000A Undefine
GSTATUS0 R 外部引脚端状态
C d
0x560000B 0x324100
GSTATUS1 R 芯片 ID
0 00
0x560000B
GSTATUS2 R/W 复位状态 0x1
4
0x560000B Infrom 寄存器,可以利用
GSTATUS3 R/W 0x0
8 nRESET 和看门狗定时器清零
对 I/O 口的操作是通过对相关各个寄存器的读/写实现的
要对寄存器进行读/写操作,首先要对寄存器进行定义。
要想实现对 D 口的配置,只要在地址 0x5600 0030
(GPDCON) 中给 32 位的每一位赋值就可以了。
如果 D 口的某个引脚被配置为输出引脚,在 GPDDAT
(0x5600 0034) 对应位写入 1 时,该引脚输出高电平;
写入 0 时该引脚输出低电平。
对应汇编程序关键语句
LDR R0,=0X56000030 ; GPDCON
LDR R1,=0X56000034 ; GPDDAT
MOV R2, #0X100 ;( R2 ) = 0000 0000 0000 0000 0000 0001 0000
0000 B
MOV R3, #0X200 ; ( R3 ) = 0000 0000 0000 0000 0000 0010 0000
0000 B
LDR R4, [R1] ; 将 rGPDDAT 的值读入 R4 中
BIC R4, R4, R2 ; 位清除第 8 位为 0 (低电平)
ORR R4,R4,R3 ; 或操作设置第 9 位为 1 (高电平)
STR R4 , [R1] ; 将 R4 中设置好的值写入 rGPDDAT
有关 I/O 口相关寄存器的宏定义代码如下:
//Port A 控制寄存器
#define rGPACON ( * ( volatile unsigned* ) 0x56000000 );有固定地
址的整体普通变量; volatile 防止编译器优化时将变量优化掉或变成对另外一个存储空
间的操作
//Port A 数据寄存器
#define rGPADAT ( * ( volati1e unsigned* ) 0x56000004 )
//Port B 控制寄存器
#define rGPBCON ( * ( volatile unsigned* ) 0x56000010 )
//Port B 数据寄存器
#define rGPBDAT ( * ( volatile unsigned* ) 0x56000014 )
//Port B 上拉电阻禁止寄存器
#define rGPBUP ( * ( volatile unsigned* ) 0x56000018 )
//Port C 控制寄存器
#define rGPCCON ( * ( volatile unsigned* ) 0x56000020 )
//Port C 数据寄存器
#define rGPCDAT ( * ( volatile unsigned* ) 0x56000024 )
//Port C 上拉电阻禁止寄存器
#define rGPCUP ( * ( volatile unsigned* ) 0x56000028 )
//Port D 控制寄存器
#define rGPDCON ( * ( volatile unsigned* ) 0x56000030 )
//Port D 数据寄存器
#define rGPDDAT ( * ( volatile unsigned* ) 0x56000034 )
//Port D 上拉电阻禁止寄存器
#define rGPDUP ( * ( volatile unsigned* ) 0x56000038 )
//Port E 控制寄存器
#define rGPECON ( * ( volatile unsigned* ) 0x56000040 )
//Port E 数据寄存器
#define rGPEDAT ( * ( volatile unsigned* ) 0x56000044 )
//Port E 上拉电阻禁止寄存器
#define rGPEUP ( * ( volatile unsigned* ) 0x56000048 )
//Port F 控制寄存器
#define rGPFCON ( * ( volatile unsigned* ) 0x56000050 )
//Port F 数据寄存器
#define rGPFDAT ( * ( volatile unsigned* ) 0x56000054 )
//Port F 上拉电阻禁止寄存器
#define rGPFUP ( * ( volatile unsigned* ) 0x56000058 )
//Port G 控制寄存器
#definerGPGCON ( * ( volati1e unsigned* ) 0x56000060 )
//Port G 数据寄存器
#definerGPGDAT ( * ( volatile unsigned* ) 0x56000064 )
//Port G 上拉电阻禁止寄存器
#definerGPGUP ( * ( volatile unsigned* ) 0x56000068 )
//Port H 控制寄存器
#definerGPHCON ( * ( volatile unsigned* ) 0x56000070 )
//Port H 数据寄存器
#definerGPHDAT ( * ( volatile unsigned* ) 0x56000074 )
//Port H 上拉电阻禁止寄存器
#definerGPHUP ( * ( volatile unsigned* ) 0x56000078 )
实现 LED1 和 LED2 轮流闪烁的程序代码。
void Main ( void )
{
int flag , i ;
Target Init (); // 进行硬件初始化操作,包括对 I / O 口的初始化操作
返回
3.5 S3C2410A 的中断控制
3.5.1 ARM 系统的中断处理
每种异常对应于不同的处理器模式,
有对应的异常向量(固定的存储器地址)。
S3C2410 的中断系统
S3C2410 的中断系统分成两级 :
一级是控制内部外围 I/O 端口或部件、或者芯片外部中断引脚( EINTn )的中断控制;
另一级是 ARM920T 内核的异常中断控制,采用了固定向量中断方式。
• S3C2410 芯片中的中断控制器可以支持 56 个中断源提出的中断请
• 求。
56 个中断源中有些中断共用中断请求信号线,因此,实际中断请求信号有 32 个。
• 当 S3C2410 芯片的内部 I/O 端口或部件提出中断请求、或者芯片外部中断引
脚( EINTn )收到中断请求时,中断控制器经过仲裁之后请求 ARM9 核的 FIQ 或
IRQ 中断 (ARM 内核 2 个外部中断输入信号 nIRQ 和 nFIQ) 。
S3C2410A 的中断源( 1 )
中断源 描述 仲裁器分组
INT_ADC ADCEOC 和触摸中断 (INT_ADC/INT_TC) (2 ARB5
个)
INT_RTC RTC 报警中断 ARB5
INT_SPI1 SPI1 中断 ARB5
INT_UART0 UART0 中断(故障、接收和发送) (3 个 ) ARB5
INT_IIC I2 C 中断 ARB4
VINT_USBH USB 主设备中断 ARB4
INT_USB USB 从设备中断 ARB4
保留 保留 ARB4
INT_UART1 UART1 中断(故障、接收和发送) (3 个 ) ARB4
INT_SPI0 SPI0 中断 ARB4
S3C2410A 的中断源( 2 )
中断源 描述 仲裁器分组
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 中断( INT_FrSyn 、 INT_FiCnt ) (2 ARB3
个)
S3C2410A 的中断源( 3 )
INT_UART2 UART2 中断(故障、接收和发送) (3 个 ) ARB2
INT_TIMER4 定时器 4 中断 ARB2
INT_TIMERS 定时器 3 中断 ARB2
INT_TIMER2 定时器 2 中断 ARB2
INT_TIMER1 定时器 1 中断 ARB2
INT_TIMER0 定时器 0 中断 ARB2
S3C2410A 的中断源( 4 )
INT_WDT 看门狗定时器中断 ARB1
INT_TICK RTC 时钟滴答中断 ARB1
nBATT_FLT 电源故障中断 ARB1
保留 保留 ARB1
EINT8_23 外部中断 8 ~ 23 ( 16 个) ARB1
32 个中断请求信号,在系统复位初始
状态下,按照前图中由上到下的顺序,
中断优先级由高到低排列,即 EINT0
中断优先级最高, INT_ADC 中断优先
级最低。
32 个中断请求的优先级仲裁
判决机制采用了中断优先级
编码判断电路原理。裁决逻
辑由 7 个基本裁决器组成,
其中 6 个一级裁决器和 1 个
二级裁决器。
中断控制寄存器
用 S3C2410 的中断方式来控制 I/O 端口或部件操作
对 I/O 端口或部件的相应寄存器进行初始化设置
对中断控制器的控制寄存器进行初始化设置
中断控制器的特殊寄存器
寄存器 地址 R/W 描述 复位值
SRCPND 0X4A00000 R/W 中断源未决寄存器(中断挂起寄存器) 0x0000
0 无中断请求,相应位清 0 ;
有中断产生,相应位置 1 。 0000
所有中断请求首先被登记到中断源挂起寄存器中
INTMOD 0X4A00000 R/W 中断模式寄存器: 0=IRQ 模式, 1=FIQ 模式。多个 0x0000
4 IRQ 中断的仲裁过程在优先级寄存器进行。
0000
INTMSK 0X4A00000 R/W 中断屏蔽寄存器,屏蔽相应中断的请求: 0xFFFF
8 0= 允许中断, 1= 屏蔽中断。
即使中断挂起寄存器的相应位已经置 1 ,若中断屏蔽 FFFF
寄存器的相应位置 1 , CPU 也不会响应该中断请求
。
中断控制器的特殊寄存器(续)
寄存器 地址 R/W 描述 复位值
PRIORITY 0x4A00000 R/W IRQ 中断优先级控制寄存器 0x7F
C
INTPND 0X4A00001 R/W 中断状态指示 ( 未决 ) 寄存器 0x0000000
0 0= 该中断没有请求; 0
1= 该中断源发出中断请求
INTOFFSET 0X4A00001 R 中断偏移寄存器,指示 IRQ 中断源 ( x 位为 0x0000000
4 1 ,该寄存器的值就为 x, 值为 0-31 ) 0
SUBSRCPND 0X4A00001 R/W 子中断源状态 ( 未决 ) 寄存器,指示中断请 0x0000000
8 求的状态。 0
0= 该中断没有请求
1= 该中断源发出中断请求
INTSUBMSK 0X4A00001 R/W 定义哪几个子中断源屏蔽 0x7FF
C 0= 中断服务允许, 1= 中断服务屏蔽
其中 5 个主要的寄存器
源未决 ( 挂起 ) 寄存器( SRCPND )
中断模式寄存器 ( INTMOD )
中断屏蔽寄存器 ( INTMASK )
优先级判别寄存器( PRIORITY )只对 IRQ 模式有效
中断未决寄存器 ( INTPND ) 只对 IRQ 模式有效
源未决寄存器 SRCPND
32 位,每一位与一个中断请求信号相关联。
当某个中断源请求中断服务时, SRCPND 寄存器的相应位被置为 1 ,即首先在源
未决寄存器中登记。
该寄存器记录了哪个中断源的请求在等待处理。
注意:
SRCPND 寄存器的每一位由中断源自动设置,而不管中断屏蔽寄存器
( INTMASK )中对应的位是否被屏蔽。
SRCPND 寄存器也不受中断控制器的优先级逻辑影响。
中断模式寄存器 INTMOD
S3C2410 的中断模式有 2 种: FIQ 模式和 IRQ 模式。
32 位中每一位都与一个中断源相关联
------ 若被设置成 1 ,则相应的中断按 FIQ 模式处理。
------ 若被设置成 0 ,则相应的中断按 IRQ 模式处理。
即使某屏蔽位设置为 1 ,其对应的中断源产生中断请求时,
源未决寄存器 SRCPND 中的相应位也将设置成 1 。
优先级判别寄存器 PRIORITY
IRQ 中断模式下的中断优先级控制寄存器 .
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 )执行中断服务子程序 Timerl_ISR ()
该子程序实现 led 灯每一秒钟改变一次状态。
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 )从中断返回,恢复现场,跳转到被中断的主程序继续执行,等待下一次中
断的到来。
标准的 ARM 指令编译器提供了一个用来声明中断处理函数的关键字 _ _irq 。
编译后的代码在处理异常事件前保存现场信息,处理异常事件后对现场信息进行
恢复。
可用 _ _irq 关键字来编写简单单级中断处理程序,以及调用子例程的中断处
理程序。
不能用 _ _irq 关键字来编写 reentrant (重入)中断处理程序,因它对
SPSR 不进行存储或恢复。
“ 重入”的含义是指处理程序能再次设置中断并能将其自身中断。
_ _irq 关键字:
( 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 个寄存器。
寄存器 地址 读/ 写 描述 复位值
0x4B00
DISRCC0
0004
0x4B00 DMA0 ~ DMA3 初始化源控制寄存器。
DISRCC1 位 [1] = 0 ,源数据在 AHB 总线上;
0044 0x0000
读/ 写 位 [1] = 1 ,源数据在 APB 总线上。
0x4B00 0000
DISRCC2 位 [0] = 0 ,传送数据后,源地址增加
0084 位 [0] = 1 ,地址固定不变
0x4B00
DISRCC3
00C4
3 ) DMA 初始化目标地址寄存器( DIDST ),
--- 用于存放传输目标的起始地址。
#include”config.h”
#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 章 思考题与习题
1 登录 www.samsung.com ,查阅 S3C2410A 有关资料,分析其内部结
构组成与功能。
2 简述 S3C2410A 存储器控制器的特性。
3 画出 S3C2410A 复位后的存储器映射图,并分析不同存储器的地址范
围。
4 试分析复位电路的工作过程。
5 登录 www.impweb.com ,查阅 IMP811S 有关资料,分析其内部结构
、引脚端功能与应用电路。
6 简述 S3C2410A 时钟电路的特点。
7 S3C2410A 的电源管理模块具有哪几种工作模式?各有什么特点?
8 登录 www.analogmicro.com ,查阅 AME1117 有关资料,分析其内部
结构、引脚端功能与应用电路。
9 登录 www.micrel.com ,查阅 MIC5207 有关资料,分析其内
部结构、引脚端功能与应用电路。
10 试按功能分析 S3C2410A 的端口 A I/O 口配置情况。
11 S3C2410A 与配置 I/O 口相关的寄存器有哪些?各自具有什么功能?
12 试分析 S3C2410A 端口控制寄存器 A ~ H 的功能。
13 S3C2410A 与外部中断有关的控制寄存器有哪些?各自具有什么功能?
14 试分析 S3C2410A 通用状态寄存器的功能。
15 简述 ARM 系统中的中断处理过程。
16 S3C2410A 与中断控制有关的寄存器有哪些?各自具有什么功能?
17 试按功能对 S3C2410A 的中断源进行分类。
18 简述 S3C2410A 中断控制器的特殊寄存器功能。
19 简述采用 DMA 方式进行数据传输的过程。
20 简述 S3C2410A 的 DMA 控制器功能。
21 S3C2410A 的 DMA 通道有几个控制寄存器?各自具有什么功能?
22 S3C2410A 的 DMA 初始化有几个控制寄存器?各自具有什么功能?
23 简述 DMA 控制寄存器的位功能。
24 简述 DMA 屏蔽触发寄存器的功能。