Presentation is loading. Please wait.

Presentation is loading. Please wait.

嵌入式系统讲义 第4章 S3C2410X系统结构 周国运 2007.3.

Similar presentations


Presentation on theme: "嵌入式系统讲义 第4章 S3C2410X系统结构 周国运 2007.3."— Presentation transcript:

1 嵌入式系统讲义 第4章 S3C2410X系统结构 周国运 2007.3

2 习 题 本章作业:2、3、5、7、10、12 1、S3C2410X主要特性有哪些?
习 题 本章作业:2、3、5、7、10、12 1、S3C2410X主要特性有哪些? 2、S3C2410X的结构分为几个部分?每一部分主要由哪些部件构成? 3、S3C2410X的存储器由哪几部分构成,每一部分有什么特点?存储器主要有哪些控制寄存器? 4、S3C2410X的Flash有哪些特点? 5、S3C2410X的DMA有哪些特点?其工作过程是怎样的?每个通道配置有哪些寄存器? 6、S3C2410X的A/D转换器有哪些特点?有哪些相关的寄存器? 7、编写一程序,用查询的方式,对S3C2410X的A/D转换器的第0通道连续进行100次A/D转换,然后将其结果求平均值。注意:A/D转换器有独立的模拟信号输入引脚AIN0---AIN9。

3 8、S3C2410X的中断系统有哪些特点?相关的寄存器有哪些?
9、S3C2410X的中断控制器的工作过程是怎样的?对于IRQ,整个中断过程是怎样的(中断控制器处理,向CPU请求,转到中断入口,转去获得中断服务程序的首地址,执行中断服务程序)? 10、编写一程序,使用外部中断EINT0,用中断方式对端口C做数据输入。(注意对中断系统和相关引脚进行初始化) 提示:C语言指向特定地址的方法: (1)#define rGPCDAT (*(volatile unsigned *)0x ) (2)int *rGPCDAT=0x ; (3)int *rGPCDAT; rGPCDAT=0x ; 用第一种方法为好。 11、S3C2410X的定时器系统有哪些特点?由哪几部分构成?相关的寄存器有哪些?是如何工作的?

4 12、编写一程序,使用timer0产生并输出频率为10KHz、占空比为1/2的方波。设f pclk=50MHz。(注意对timer0和相关引脚初始化)
13、编写一程序,利用S3C2410X的PWM功能对一直流电机进行调速,要求使用timer1产生并输出频率为10KHz、占空比可变的方波进行控制,电机的转速变化如下图所示。设f pclk=50MHz。(注意对timer0和相关引脚初始化) v t *t t

5 第4章 S3C2410X系统结构 主要内容 4.1 S3C2410X概述 4.2 存储器配置 4.8 UART接口 4.3 DMA
4.2 存储器配置 4.3 DMA 4.4 ADC和触摸屏接口 4.5 中断控制器 4.6 I/O端口 4.7 PWM 主要内容 4.8 UART接口 4.9 RTC 4.10 IIC接口 4.11 SPI接口 4.12时钟和电源管理 4.13看门狗 4.14 其它接口

6 4.14 其它接口 1、 USB接口 2、 LCD控制器 3、 SD接口 4、 IIS接口

7 4.1 S3C2410X概述 主要内容 主要特性 系统结构 引脚信号

8 4.1 S3C2410X概述 S3C2410X是韩国三星公司推出的16/32位RISC微控制器,其CPU采用的是ARM920T内核,加上丰富的片内外设,为手持设备和其它应用,提供了低价格、低功耗、高性能微控制器的解决方案。 一、主要特性 具有16KB指令Cache、 16KB数据Cache和存储器管理单元MMU。 外部存储器控制器,可扩展8组,每组128MB,总容量达1GB;支持从Nand flash存储器启动。

9 55个中断源,可以设定1个为快速中断,有24个外部中断,并且触发方式可以设定。
4通道的DMA,并且有外部请求引脚。 3个通道的UART,带有16字节的TX/RX FIFO,支持IrDA1.0功能。 具有2通道的SPI、1个通道的IIC串行总线接口和1个通道的IIS音频总线接口。 有2个USB主机总线的端口,1个USB设备总线的端口。 有4个具有PWM功能的16位定时器和1个16位内部定时器。 8通道的10位A/D转换器,最高速率可达500kB/s;提供有触摸屏接口。 具有117个通用I/O口和24通道的外部中断源。

10 兼容MMC的SD卡接口。 具有电源管理功能,可以使系统以普通方式、慢速方式、空闲方式和掉电方式工作。 看门狗定时器。 具有日历功能的RTC。 有LCD控制器,支持4K色的STN和256K色的TFT,配置有DMA通道。 具有PLL功能的时钟发生器,时钟频率高达203MHz。 双电源系统:1.8/2.0V内核供电,3.3V存储器和I/O供电。

11 二、系统结构 主要由两大部分构成: ARM920T内核 片内外设。

12 1、ARM920T内核 由三部分:ARM9内核ARM9TDMI、32KB的Cache、MMU。

13 2、片内外设 分为高速外设和低速外设,分别用AHB总线和APB总线。

14 三、引脚信号 S3C微控制器是272-FBGA封装。 其信号可以分成 addr0---addr26、 Data0---data31、
GPA0---GPA22 GPB10、GPC15、 GPD15、GPE15、 GPF7、GPG15、 GPH10、EINT23、 nGCS0—nGCS7、 AIN7、IIC、SPI、 OM0---OM3 等,大部分都是复用的

15 4.2 S3C2410X的存储器 主要内容 存储器配置 Flash及控制器 存储器概述 控制寄存器 Flash控制器概述 控制器主要特性
控制器的寄存器 控制器的工作原理

16 4.2 存储器配置 S3C2410X的存储器配置 一、概 述 S3C2410X的存储器管理器提供访问外部存储器的所有控制信号:26位地址信号、32位数据信号、8个片选信号、以及读/写控制信号等。 S3C2410X的存储空间分成8组,最大容量是1GB,bank0---bank5为固定128MB,bank6和bank7的容量可编程改变,可以是2、4、8、16、32、64、128MB,并且bank7的开始地址与bank6的结束地址相连接,但是二者的容量必须相等。 bank0可以作为引导ROM,其数据线宽只能是16位和32位,复位时由OM0、OM1引脚确定;其它存储器的数据线宽可以是8位、16位和32位。 S3C2410X的存储器格式,可以编程设置为大端格式,也可以设置为小端格式。

17

18

19 注意:补充引脚信号

20 二、存储器的控制寄存器 内存控制器为访问外部存储空间提供存储器控制信号, S3C2410X存储器控制器共有13个寄存器。 第9次到 此此
地 址 功 能 操作 复位值 BWSCON 0x 总线宽度和等待控制 读/写 0x0 BANKCON0 0x BANK0控制 0x0700 BANKCON1 0x BANK1控制 BANKCON2 0x C BANK2控制 BANKCON3 0x BANK3控制 BANKCON4 0x BANK4控制 BANKCON5 0x BANK5控制 BANKCON6 0x C BANK6控制 0x18008 BANKCON7 0x BANK7控制 REFRESH 0x SDRAM刷新控制 0xAC0000 BANKSIZE 0x 可变的组大小设置 MRSRB6 0x C BANK6模式设置 xxx MRSRB7 0x BANK7模式设置

21 1、总线宽度和等待控制寄存器 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 ST7 WS7 DW7 ST6 WS6 DW6 ST5 WS5 DW5 ST4 WS4 DW4 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 ST3 WS3 DW3 ST2 WS2 DW2 ST1 WS1 DW1 X DW0 STn:控制存储器组n的UB/LB引脚输出信号。 1:使UB/LB与nBE[3:0]相连; 0:使UB/LB与nWBE[3:0]相连 WSn:使用/禁用存储器组n的WAIT状态 1:使能WAIT;0:禁止WAIT DWn:控制存储器组n的数据线宽 00:8位;01:16位;10:32位;11:保留

22 2、BANKn---存储器组控制寄存器(n=0--5)
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 Tacs Tcos Tacc Tcoh Tcah Tacp PMC Tacs:设置nGCSn有效前地址的建立时间 00:0个;01:1个;10:2个;11:4个时钟周期 Tcos:设置nOE有效前片选信号的建立时间 Tacc:访问周期 000:1个;001:2个;010:3个;011:4个时钟 100:6个:101:8个;110:10个;111:14个

23 Tcoh:nOE无效后片选信号的保持时间
00:0个;01:1个;10:2个;11:4个时钟 Tcah: nGCSn无效后地址信号的保持时间 Tacp:页模式的访问周期 00:2个;01:3个;10:4个;11:6个时钟 PMC:页模式的配置,每次读写的数据数 00:1个;01:4个;10:8个;11:16个 注:00为通常模式。 注:紫色为实验箱上的配置,其值为0x0700

24 3、BANK6/7---存储器组6/7控制寄存器 31 …… 17 16 15 保留 MT 14 13 12 11 10 9 8 7 6 5
Tacs Tcos Tacc Tcoh Tcah Tacp/ Trcd PMC/ SCAN MT:设置存储器类型 00:ROM或者SRAM,[3:0]为Tacp和PMC; 11:SDRAM, [3:0]为Trcd和SCAN; 、10:保留 Trcd:由行地址信号切换到列地址信号的延时时钟数 00:2个时钟;01:3个时钟;10:4个时钟 SCAN:列地址位数 00:8位; 01:9位; 10:10位

25 4、REFRESH---刷新控制寄存器 31 …… 24 23 22 21 20 19 18 17 16 保 留 Trp Tsrc 保留
REFEN TREFMD Trp Tsrc 保留 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 保 留 Refresh_count REFEN:刷新控制。 1:使能刷新;0:禁止刷新 TREFMD:刷新方式。 1:自刷新 0:自动刷新 Trp:设置SDRAM行刷新时间(时钟数) 00:2个时钟;01:3个;10:3个;11:4个时钟 Tsrc:设置SDRAM行操作时间(时钟数) 00:4个时钟;01:5个;10:6个;11:7个时钟 注: SDRAM的行周期= Trp + Tsrc。 Refresh_count:刷新计数值

26 刷新周期=(211- Refresh_count+1)/HCLK
计算公式: 刷新周期=(211- Refresh_count+1)/HCLK 例子:设刷新周期=15.6µs,HCLK=60MHz 则 刷新计数器值= ×15.6=1113 1113=0x459=0b

27 5、BANKSIZE---BANK6/7组大小控制寄存器
4 3 2 1 BURST_EN X SCKE_EN SCLK_EN BK76MAP 高24位未用。 BURST_EN:ARM突发操作控制 0:禁止突发操作;1:可突发操作 SCKE_EN:SCKE使能控制SDRAM省电模式 0:关闭省电模式;1:使能省电模式 SCLK_EN:SCLK省电控制,使其只在SDRAM访问周期内使能SCLK 0:SCLK一直有效;1:SCLK只在访问期间有效 BK76MAP:控制BANK6/7的大小及映射

28 BK76MAP:控制BANK6/7的大小及映射 100:2MB; 101:4MB; 110:8MB :16MB; 000:32MB; 001:64MB 010:128MB

29 6、MRSRB6/7---BANK6/7模式设置寄存器
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 WBL TM CL BT BL WBL:突发写的长度。0:固定长度;1:保留 TM:测试模式。 00:模式寄存器集;其它保留 CL:列地址反应时间 000:1个时钟;010:2个时钟; 011:3个时钟;其它保留 BT:猝发类型 0:连续; 1:保留 BL:猝发时间 000:1个时钟;其它保留

30 4.2.2 Nand Flash及其控制器 主要内容 1、Nand Flash控制器概述 2、控制器主要特性 3、控制器的寄存器
4、控制器的工作原理

31 4.2.2 Nand Flash及其控制器 一、Nand Flash控制器概述
Nor flash存储器:读速度高,而擦、写速度低,容量小,价格高。 Nand flash存储器:读速度不如Nor flash,而擦、写速度高,容量大,价格低。有取代磁盘的趋势。 因此,现在不少用户从Nand flash启动和引导系统,而在SDRAM上执 行主程序代码。 一、Nand Flash控制器概述 S3C2410X微控制器从Nand flash的引导功能:其内部有一个叫做“起步石(Steppingstone)”的 SRAM缓冲器,系统 启动时,Nand flash存储器的前面4KByte字节将被自动载入到起步石中,然后系统自动执行这些载入的引导代码。引导代 码执行完毕后,自动跳转到SDRAM执行。 Nand flash操作的校验功能:使用S3C2410X内部硬件ECC功能可以对Nand flash的数据进行有效性的检测。

32 二、 Nand Flash控制器主要特性 Nand Flash模式:支持读/擦/编程Nand flash存储器。
自动导入模式:复位后,引导代码被送入Steppingstone,传送后,引导代码在 Steppingstone中执行。 具有硬件ECC(纠错码)功能:硬件产生纠错代码。 内部4KB的SRAM缓冲器Steppingstone,在Nand flash引导后可以作为其他用途使用。

33 Nand Flash控制器功能框图 主要由6部分组成 引脚信号: CLE:命令锁存 R/nB :就绪/忙

34 三、Nand Flash 控制器的寄存器 寄存器 地 址 功 能 操作 复位值 NFCON 0x4E000000 Nand Flash配置
地 址 功 能 操作 复位值 NFCON 0x4E000000 Nand Flash配置 读/写 - NFCMD 0x4E000004 Nand Flash命令 NFADDR 0x4E000008 Nand Flash地址 NFDATA 0x4E00000C Nand Flash数据 NFSTAT 0x4E000010 Nand Flash状态 NFECC 0x4E000014 Nand Flash纠错

35 1、NFCON---Flash配置寄存器 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 NFEN X IECC NFCE TACLE TWRPH0 PWRPH1 - NFEN:NF控制器使能控制 0:禁止使用; 1:允许使用 IECC:初始化ECC编码/解码器控制位 0:不初始化ECC; 1:初始化ECC NFCE:NF片选信号nFCE控制位持续时间设置 0: nFCE为低有效; 0: nFCE为高无效 TACLE:CLE/ALE持续时间设置值(0---7) 持续时间= HCLK * (TACLS + 1) CLE/ALE :命令/地址锁存允许

36 2、NFCMD---Flash命令寄存器 TWRPH0:写信号持续时间设置值(0~7) 持续时间= HCLK * (TWRPH0+1)
TWRPH1:写信号无效后CLE/ALE保持时间设置值(0~7) 持续时间= HCLK * (TWRPH1+1) 2、NFCMD---Flash命令寄存器 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 保 留 命令字

37 3、NFADDR---Flash地址寄存器 4、NFDATA---Flash数据寄存器
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 保 留 地址值 高24位未用,低8位为Flash存储器地址值 4、NFDATA---Flash数据寄存器 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 保 留 输入/输出数据 高24位未用,低8位为读入或者写出的数据

38 5、NFSTAT---Flash状态寄存器 6、NFECC---Flash错误校正码寄存器
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 保 留 RnB RnB:Nand Flash存储器状态位 0:存储器忙; 1:存储器准备好 6、NFECC---Flash错误校正码寄存器 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 保 留 错误校正码#2 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 错误校正码#1 错误校正码#0

39 四、Nand Flash 控制器的工作原理 1、自动导入启动代码步骤 完成复位。
如果自动导入模式使能,Nand flash存储器的前面4K字节被自动拷贝到Steppingstone 内部缓冲器中。 Steppingstone被映射到nGCS0对应的BANK0存储空间。 CPU在Steppingstone的4-KB内部缓冲器中开始执行引导代码。 注意: 在自动导入模式下,不进行ECC检测。因此,Nand flash的前4KB应确保不能有位错误(一 般Nandflash厂家都确保)。

40 2、Nand FLASH模式配置 通过NFCONF寄存器配置Nand flash; 写Nand flash命令到NFCMD寄存器;
写Nand flash地址到NFADDR寄存器; 在读写数据时,通过NFSTAT寄存器来获得Nand flash的状态信息。应该在读操作前或写入 之后检查R/nB信号(准备好/忙信号)。 在读写操作后要查询校验错误代码,对错误进行纠正。

41 OM[1:0] = 00b:使能Nand flash控制器自动导入模式;
OM[3:0]为芯片引脚,设置引导模式、存储器bank0的数据宽度、时钟模式等。 OM[1:0] = 01b、10b: bank0数据宽度为16位、32位 OM[1:0]=11b:测试模式 Nand flash的存储页面大小应该为512字节。 NCON :Nand flash 寻址步骤数选择 0:3步寻址; 1:4步寻址

42 S3C2410A在写/读操作时,每512字节数据自动产生3字节的ECC奇偶代码(24位)。
4、Nand Flash操作的校验问题 S3C2410A在写/读操作时,每512字节数据自动产生3字节的ECC奇偶代码(24位)。 24位 ECC 奇偶代码=18位行奇偶 + 6位列奇偶 ECC产生模块执行以下步骤: 当MCU写数据到Nand时,ECC产生模块生成ECC代码。 当MCU从Nand读数据时,ECC产生模块生成ECC代码同时用户程序将它与先前写入时产 生的ECC代码比较。

43 4.3 DMA控制器 主要内容 1、概述 2、工作原理 3、寄存器

44 一、概 述 S3C2410X有4 个通道的DMA 控制器,其位于在系统总线和外设总线之间。
一、概 述 S3C2410X有4 个通道的DMA 控制器,其位于在系统总线和外设总线之间。 每个DMA 通道都能没有约束的实现系统总线或者外设总线之间的数据传输,即每个通道都能处理下面四种情况: (1) 源器件和目的器件都在系统总线 (2) 源器件在系统总线,目的器件在外设总线 (3) 源器件在外设总线,目的器件在系统总线 (4) 源器件和目的器件都在外设总线 DMA的主要优点是:可以不通过CPU的中断来实现数据的传输,DMA的运行可以通过软件或者通过外围设备的中断和请求来初始化。

45 二、DMA工作原理 1、DMA的服务对象 每个DMA通道都有4个DMA请求源,通过设置,可以从中挑选一个服务。每个通道的DMA 请求源如表4-1所示。 表4-1 各通道的DMA 请求源 通道 源 请求源0 请求源1 请求源2 请求源3 请求源4 通道0 nXDREQ0 UART0 SDI Timer USB设备EP1 通道1 nXDREQ1 UART1 IIS/SDI SPI0 USB设备EP2 通道2 IISSDO IISSDI USB设备EP3 通道3 UART2 SPI1 USB设备EP4

46 2、DMA的工作过程 一般DMA的工作过程如下面所示 (1) 外设向DMAC 发出请求 (2)DMAC通过HOLD 向CPU 发出总线请求;
5 (1) 外设向DMAC 发出请求 (2)DMAC通过HOLD 向CPU 发出总线请求; (3)CPU响应释放三总线,并且发应答HLDA (4)DMAC向外设发DMA应答 2 3 4 1 (5)DMAC发出地址、控制信号,为外设传送数据; (6)传送完规定的数据后,DMAC撤销HOLD信号,CPU也撤销HLDA信号,并且恢复对三总线的控制。

47 S3C2410X的DMA工作过程可以分为三个状态:
状态1:等待状态。DMA 等待一个DMA请求。如果有请求到来,将转到状态2。在这个状态下,DMA ACK和INT REQ为0。 状态2:准备状态。DMA ACK变为1,计数器(CURR_TC)装入DCON[19:0]寄存器。 注意:DMA ACK保持为1直至它被清除。 状态3:传输状态。DMA控制器从源地址读入数据并将它写到目的地址,每传输一次,CURR_TC数器(在DSTAT中)减1,并且可能做以下操作: 重复传输:在全服务模式下,将重复传输,直到计数器CURR_TC变为0;在单服务模式下,仅传输一次。

48 说明:DMA传输分为一个单元传输和4个单元突发式传输。
设置中断请求信号:当CURR_TC变为0时,DMAC发出INT REQ信号,而且DCON[29]即中断设定位被设为1。 清除DMA ACK信号:对单服务模式,或者全服务模式 CURR_TC变为0。 注意:在单服务模式下,DMAC的3个状态被执行一遍,然后停止,等待下一个DMA REQ的到来。如果DMA REQ到来,则这些状态被重复操作,直到CURR_TC减为0 。 说明:DMA传输分为一个单元传输和4个单元突发式传输。

49 DMAC有3种类型的外部DMA请求/响应规则: (1)single service demand,单服务请求(对应于需求模式)
(2)single service handshake,单服务握手(握手模式) (3)whole service handshake,全服务握手(全服务模式) 每种类型都定义了像DMA请求和DMA响应这些信号怎样与这些规则相联系。 demand 与 handshake模式的比较: 在一次传输结束时,DMA检查xnxDREQ(DMA请求)信号的状态: 在demand模式下:如果DMA请求(xnxDREQ)信号仍然有效,则传输马上再次开始。否则等待。 在handshake模式下:如果DMA请求信号无效,DMA在两个时钟周期后将DMA响应(xnxDACK)信号变得无效。否则,DMA等待直到DMA请求信号变得无效。每请求一次传输一次。

50 4、DMA时序要求 基本时序要求: DMA请求信号和响应信号的Setup时间与delay时间在所有的模式下是相同的。
如果DMA请求信号的setup时间满足要求,则在两个周期内实现同步,然后DMA响应信号变得有效。 在DMA响应信号有效后,DMA向CPU请求总线。如果它得到总线就执行操作。DMA操作完成后,DMA响应信号变得无效。

51 三、DMA控制器的相关寄存器 每个DMA 通道有9 个控制寄存器(4 个通道共计36 个寄存器),6 个用来控制DMA 传输,其它3 个监视DMA 控制器的状态。 Register Address R/W Description Reset Value DISRCn 0x4B0000x0 初始源基地址寄存器 0x DISRCCn 0x4B0000x4 初始源控制寄存器 DIDSTn 0x4B0000x8 初始目的基地址寄存器 DIDSTCn 0x4B0000xC 初始目的控制寄存器 DCONn 0x4B0000y0 DMA控制寄存器 DSTATn 0x4B0000y4 R 状态/计数寄存器 DCSRCn 0x4B0000y8 当前源地址寄存器 DCDSTn 0x4B0000yC 当前目的地址寄存器 SKTRIGn 0x4B0000z0 DMA掩码/触发寄存器 0b000

52 (在CURR_SRC为0、并且DMA ACK为1时装载入CURR_SRC)
1、DISRCn---DMA源基地址寄存器 原名: DMA初始源寄存器 第10次到此 寄存器 地 址 R/W 意 义 初 值 DISRC0 0x4B000000 DMA0源基地址寄存器 0x DISRC1 0x4B000040 DMA1源基地址寄存器 DISRC2 0x4B000080 DMA2源基地址寄存器 DISRC3 0x4B0000C0 DMA3源基地址寄存器 31 …… S_ADDR---源数据基地址 (在CURR_SRC为0、并且DMA ACK为1时装载入CURR_SRC)

53 2、DISRCCn---DMA源控制寄存器
地 址 R/W 意 义 初 值 DISRCC0 0x4B000004 DMA0初始源控制寄存器 0x DISRCC1 0x4B000044 DMA1初始源控制寄存器 DISRCC2 0x4B000084 DMA2初始源控制寄存器 DISRCC3 0x4B0000C4 DMA3初始源控制寄存器 …… 1 保留(为0) LOC---源总线选择 INC---源地址变化设置 LOC---源所在总线选择 0:AHB; 1:APB INC---源地址变化设置 0:源地址增加; 1:源地址不变

54 D_ADDR---目标基地址,会被载入CURR_DST (当CURR_DST的值为0、并且 DMA ACK 的值为1时)
3、DIDSTn---DMA目的基地址寄存器 原名: DMA初始目的寄存器 寄存器 地 址 R/W 意 义 初 值 DIDST0 0x4B000008 DMA0目的基地址寄存器 0x DIDST1 0x4B000048 DMA1目的基地址寄存器 DIDST2 0x4B000088 DMA2目的基地址寄存器 DIDST3 0x4B0000C8 DMA3目的基地址寄存器 31 …… D_ADDR---目标基地址,会被载入CURR_DST (当CURR_DST的值为0、并且 DMA ACK 的值为1时)

55 4、DIDSTCn---DMA初始目的控制寄存器
地 址 R/W 意 义 初 值 DIDSTC0 0x4B00000C DMA0初始目的控制寄存器 0x DIDSTC1 0x4B00004C DMA1初始目的控制寄存器 DIDSTC2 0x4B00008C DMA2初始目的控制寄存器 DIDSTC3 0x4B0000CC DMA3初始目的控制寄存器 …… 1 保留(为0) LOC---目的总线选择 INC---目的地址变化设置 LOC---目的地址所在总线选择 0:AHB; 1:APB INC---目的地址地址变化设置 0:目的地址增加; 1:目的地址不变

56 5、DCONn---DMA控制寄存器 寄存器 地 址 R/W 意 义 初 值 DCON0 0x4B000010 DMA 0 控制寄存器
地 址 R/W 意 义 初 值 DCON0 0x4B000010 DMA 0 控制寄存器 0x DCON1 0x4B000050 DMA 1 控制寄存器 DCON2 0x4B000090 DMA 2 控制寄存器 DCON3 0x4B0000D0 DMA 3 控制寄存器 31 30 29 28 27 26 25 24 23 22 21 20 DMD _HS SYNC INT TSZ SERV MODE HWSRCSEL SWHW _SEL RE LOAD DSZ 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 TC---传输次数初值

57 DMD_HS---DMA与外设握手模式选择 0:需求模式。为单服务,但只要DREQ信号有效便传输
31 30 29 28 27 26 25 24 23 22 21 20 DMD _HS SYNC INT TSZ SERV MODE HWSRCSEL SWHW _SEL RE LOAD DSZ DMD_HS---DMA与外设握手模式选择 0:需求模式。为单服务,但只要DREQ信号有效便传输 1:握手模式。为单服务,要等待DREQ信号变为无效, DREQ再有效时才传输。 SYNC---DREQ 和DACK信号与系统总线时钟同步选择 0:DREQ和DACK与PCLK(APB clock)同步。慢速外设 1:DREQ和DACK与HCLK(AHB clock)同步。高速外设 INT---CURR_TC的中断请求控制 0:禁止CURR_TC产生中断请求 1:当所有的传输结束时,CURR_TC产生中断请求 TSZ---传输长度类型选择 0:执行单数据传输 1:执行四数据长的突发传输

58 HWSRCSEL ---各DMA通道请求源设置
31 30 29 28 27 26 25 24 23 22 21 20 DMD _HS SYNC INT TSZ SERV MODE HWSRCSEL SWHW _SEL RE LOAD DSZ SERVMODE---传输模式选择 0:单服务传输模式,每传输一次都要查询DREQ 1:全服务传输模式,不查询DREQ,但传输一次也要释 放总线。 HWSRCSEL ---各DMA通道请求源设置 HWSRCSEL 000 001 010 011 100 通道0 nXDREQ0 UART0 SDI Timer USB设备EP1 通道1 nXDREQ1 UART1 IISSDI SPI0 USB设备EP2 通道2 IISSDO USB设备EP3 通道3 UART2 SPI1 USB设备EP4

59 SWHW_SEL--- DMA源选择方式(软件或硬件)设置
31 30 29 28 27 26 25 24 23 22 21 20 DMD _HS SYNC INT TSZ SERV MODE HWSRCSEL SWHW _SEL RE LOAD DSZ SWHW_SEL--- DMA源选择方式(软件或硬件)设置 0:以软件software方式产生DMA请求,需要用DMASKTRIG控制寄存器中的SW_TRIG位设置触发。 1:由位[26:24]提供的DMA源触发DMA操作 RELOAD---再装载选择 0:自动再装载,当传输次数减为0时自动装载DMA初值 1:不自动再装载,传输结束关闭DMA通道。 DSZ---传输数据类型设置 00:字节; 01:半字; 10:字; 11:保留

60 6、DSTATn---DMA状态/计数寄存器 原名:DMA状态寄存器
地 址 R/W 意 义 初 值 DSTAT0 0x4B000014 R DMA0状态/计数寄存器 0x DSTAT1 0x4B000054 DMA1状态/计数寄存器 DSTAT2 0x4B000094 DMA2状态/计数寄存器 DSTAT3 0x4B0000D4 DMA3状态/计数寄存器 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 STAT CURRTC---当前传输次数计数值 STAT---DMA状态 00:就绪态,可进行传输; 01:DMA正在传输; 1X:保留 CURRTC---当前传输计数值 每传输一次其值减1。其初值在DCONn中低20位。

61 7、DCSRCn---DMA当前源地址寄存器
地 址 R/W 意 义 初 值 DCSRC0 0x4B000018 R DMA0当前源地址寄存器 0x DCSRC1 0x4B000058 DMA1当前源地址寄存器 DCSRC2 0x4B000098 DMA2当前源地址寄存器 DCSRC3 0x4B0000D8 DMA3当前源地址寄存器 31 …… CURR_SRC---当前数据源地址 CURR_SRC---当前数据源地址 注意:(1)DMA每传输一次,其地址可能增加(1、2、4)、可能不变;(2)在CURR_SRC为0、且DMA ACK为1时,将S_ADDR源基地址的值装入。

62 8、DCDSTn---DMA当前目的地址寄存器
地 址 R/W 意 义 初 值 DCDST0 0x4B00001C R DMA0当前目的地址寄存器 0x DCDST1 0x4B00005C DMA1当前目的地址寄存器 DCDST2 0x4B00009C DMA2当前目的地址寄存器 DCDST3 0x4B0000DC DMA3当前目的地址寄存器 31 …… CURR_DST---当前数据目的地址 CURR_DST---当前数据目的地址 注意:(1)DMA每传输一次,其地址可能增加(1、2、4) ; (2)在CURR_DST为0、且DMA ACK为1时,将D_ADDR的值装入。

63 9、DMASKTRIGn---DMA掩码(Mask)触发寄存器
地 址 R/W 意 义 初 值 DMASKTRIG0 0x4B000020 DMA0掩码触发寄存器 0x DMASKTRIG1 0x4B000060 DMA1掩码触发寄存器 DMASKTRIG2 0x4B0000A0 DMA2掩码触发寄存器 DMASKTRIG3 0x4B0000E0 DMA3掩码触发寄存器 …… 2 1 保留(为0) STOP ON/OFF SW_TRIG

64 STOP---DMA运行停止位 1:DMA将当前数据传输完立即停止,并且CURR_TC变为0。 注意:如果ON/OFF设置为OFF,则DMA也停止传输。 ON/OFF---DMA通道屏蔽位 0:关闭通道; 1:开放通道 如果DCONn[22]设为非自动重装,DMA则传输完成后STOP位置1、并且关闭通道。 注意:在DMA运行期间,不要改变其值,并且也不要使用该位停止DMA传输,正确的方法应该使用STOP位。 SW_TRIG: DMA软件触发位 设为1时,实现软件触发DMA请求。 注意:只有当DCONn[23]设为软件触发DMA请求时,其软件触发才有效。

65 对DMA应用注意: 在DMA运行中改变DISRCn、DIDSTn寄存器以及改变DCONn中TC的值,对DMA当前的整个传输没有影响。而其它寄存器或位值的改变,将立即影响传输。

66 4.4 A/D转换与触摸屏 主要内容 1、概述 2、结构与工作原理 3、寄存器 4、应用举例

67 一、S3C2410X的A/D 转换器概述 S3C2410X中集成了一个8通道10 位A/D 转换器,A/D 转换器自身具有采样保持功能。并且S3C2410X的A/D 转换器支持触摸屏接口。 A/D转换器的主要特性: 分辨率:10位; 精度:±1LSB 线性度误差: ± LSB; 最大转换速率:500KSPS; 输入电压范围:0~3.3v; 系统具有采样保持功能; 常规转换和低能源消耗功能; 独立/自动的X/Y 坐标转换模式。

68 二、A/D转换器结构与工作原理 下图为S3C2410 A/D 转换器和触摸屏接口的功能块图。 1、结构 主要由6部分构成: 信号输入通道
8转1切换开关 A/D转换器 控制逻辑 中断信号发生器 触摸屏接口

69 2、引脚信号(需要补充) 0:正常工作模式;

70 3、工作原理 (1)A/D 转换时间计算和分辨率 当PCLK 频率为50MHz,预分频值是49,10 位数字量的转换时间如下: A/D 转换频率=50MHz /(49+1)=1MHz 转换时间=1/(1MHz/5 个周期)=1/200KHz=5us A/D 转换器最大可以工作在2.5MHz 时钟下,所以转换速率可以达到500KSPS。 (2)触摸屏的结构及工作原理 原理:对于电阻式触摸屏,由3层透明薄膜构成,有一层是电阻层,还有一层是导电层,它们中间有一隔离层,当某一点被按压时,在按压点电阻层与导电层接触,如果在电阻层的一边接电源,另一边接地,便可测量出按压点的电压,从而可算出其坐标。 实现方法:

71 测量X坐标:从XP输出电压给X+端,从XM输出地电位给X-端;从YP脚输入按压点电压。 控制信号: nYPON=1; nYMON=0
nXPON=0; nXMON=1 测Y 测X

72 测量Y坐标:从YP输出电压给Y+端,从YM输出地电位给Y-端;从XP脚输入按压点电压。 控制信号: nYPON=0; nYMON=1
nXPON=1; nXMON=0 测Y 测X

73 3、S3C24120X A/D转换器的工作模式 有5种:普通转换模式、分离的X/Y坐标转换模式、连续的X/Y坐标转换模式、等待中断模式、静态模式。第2---4种是用于触摸屏。 (1)普通转换模式 用于一般A/D转换,不是用于触摸屏。转换结束后,其数据在ADCDAT0中的XPDATA域。 (2)分离的X/Y坐标转换模式 分两步进行X/Y坐标转换,其转换结果分别存于ADCDAT0中的XPDATA域中和ADCDAT1中的YPDATA域中,并且均会产生INT_ADC中断请求。 (3)自动(连续)的X/Y坐标转换模式 X坐标转换结束启动Y坐标转换,其转换结果分别存于ADCDAT0中的XPDATA域中和ADCDAT1中的YPDATA域中,然后产生INT_ADC中断请求。

74 (4)等待中断转换模式 在该模式下,转换器等待使用者按压触摸屏,一旦触摸屏被按压,则产生INT_TC触摸屏中断请求。 中断后,在中断处理程序中再将转换器设置为分离的X/Y坐标转换模式、或者连续的X/Y坐标转换模式进行处理。 触摸屏接口信号: XP=上拉 XM=高阻 YP=AIN[5] YM=接地 (5)静态模式 当ADCCON中的STDBM设为1时,转换器进入静态模式,停止A/D转换。其数据域的数据保持不变。

75 三、ADC和触摸屏专用寄存器 有5个专用寄存器 Register Address R/W Description Reset Value
ADCCON 0x ADC控制寄存器 0x3FC4 ADCTSC 0x 触摸屏控制寄存器 0x058 ADCDLY 0x ADC起始延迟寄存器 0x00FF ADCDAT0 0x C R ADC转换数据0寄存器 - ADCDAT1 0x ADC转换数据1寄存器

76 1、ADCCON---ADC控制寄存器 0:停止预分频器; 1:使能预分频器 15 14 13 …… 6 5 4 3 2 1
…… ECFLG PRSCEN PRSCVL 5 4 3 2 1 SEL_MUX STDBM READ_START ENABLE_START ECFLG---转换结束标志(只读) 0:转换操作中; 1:转换结束 PRSCEN---转换器预分频器使能 0:停止预分频器; 1:使能预分频器 PRSCVL---转换器预分频器数值 数值N范围: 注意:(1)实际除数值为N+1 (2)对N数值的要求:转换速率应该<PCLK/5

77 0:正常工作模式; 1:备用模式,不做A/D转换
5 4 3 2 1 SEL_MUX STDBM READ_START ENABLE_START SEL_MUX ---模拟输入通道选择 000:AIN0; 001:AIN1 010:AIN2 011:AIN3 …… 111:AIN7 STDBM---备用模式设置 0:正常工作模式; 1:备用模式,不做A/D转换 READ_START---通过读取启动转换 0:停止通过读取启动转换;1:使能通过读取启动转换 ENABLE_START---通过设置该位启动转换 0:无效; 1:启动A/D转换(启动后被清0) 注意:如果READ_START为1,则该位无效

78 2、ADCTSC---ADC触摸屏控制寄存器
8 7 6 5 4 3 2 1 保留0 YM_SEN YP_SEN XM_SEN XP_SEN PULL_UP AUTO_PST XY_PST YM_SEN---选择YMON的输出值 0:输出0(YM=高阻); 1: 输出1(YM=GND) YP_SEN---选择nYPON的输出值 0:输出0(YP=外部电压); 1:输出1(YP连接AIN[5]) XM_SEN---选择XMON的输出值 0:输出0( XM=高阻); 1: 输出1(XM=GND) XP_SEN---选择nXP的输出值 0:输出0(XP=外部电压); 1:输出1(XP连接AIN[7])

79 0:普通A/D转换; 1:连续X/Y轴转换模式 00:无操作模式; 01:对X坐标测量;
8 7 6 5 4 3 2 1 保留0 YM_SEN YP_SEN XM_SEN XP_SEN PULL_UP AUTO_PST XY_PST PULL---上拉切换使能 0:XP上拉使能; 1: XP上拉禁止 AUTO_PST---自动连续转换X轴和Y轴坐标模式选择 0:普通A/D转换; 1:连续X/Y轴转换模式 XY_PST---手动测量X轴和Y轴坐标模式选择 00:无操作模式; 01:对X坐标测量; 10:对X坐标测量; 11:等待中断模式

80 3、ADCDLY---ADC起始延迟寄存器
31 …… 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 保留为0 起始延迟数值---分两种情况 第一情况: 对普通转换模式、分离的X/Y轴坐标转换模式、连续的X/Y轴坐标转换模式,为转换延时数值。 第二种情况: 对中断转换模式,为按压触摸屏后到产生中断请求的延迟时间数值,其时间单位为ms。

81 4、ADCDAT0---ADC转换数据0寄存器
第11次到此 15 14 13 12 11 10 …… UPDOWN AUTO_PST XY_PST 保留(0) XPDATA或普通ADC值 UPDOWN---等待中断模式的按压状态 0:触笔点击; 1:触笔提起 AUTO_PST---自动X/Y轴转换模式指示 0:普通转换模式; 1:X/Y轴坐标连续转换 XY_PST---手动X/Y轴转换模式指示 00:无操作; 01:为X轴坐标转换 10:为Y轴坐标转换 11:为等待中断转换 XPDATA[9:0]:为X轴坐标转换数值、或普通ADC转换数值 具体意义由其它位指示。其值为:0---0x3FF

82 5、ADCDAT1---ADC转换数据1寄存器
15 14 13 12 11 10 …… UPDOWN AUTO_PST XY_PST 保留(0) YPDATA UPDOWN---等待中断模式的按压状态 0:触笔点击; 1:触笔提起 AUTO_PST---自动X/Y轴转换模式指示 0:普通转换模式; 1:X/Y轴坐标连续转换 XY_PST---手动X/Y轴转换模式指示 00:无操作; 01:为X轴坐标转换 11:为Y轴坐标转换 11:为等待中断转换 YPDATA[9:0]:为10位Y轴坐标转换结果 其值为:0---0x3FF

83 例题:编写程序,对3通道的模拟量连续做10次转换,用查询方式读取转换结果,其数据存于0x400000开始的区域。
AREA ADC,CODE,READONLY ENTRY START

84 #define rADCCON (*(volatile unsigned *)0x58000000)
#define rADCDAT0 (*(volatile unsigned *)0x c) #define pref 49 #define ch void adc(void) { int adc_data[10], i; rADCCON=(1<<14)|(pref<<6)|(ch<<3)|1 //允许预分频 for(i=0;i<10;i++) { while(rADCCON&0x8000==0); //查询转换结束否 adc_data[i]=rADCDAT0&0x3ff; //读取转换结果 rADCCON|=1; //再次启动转换 }

85 4.5 中断 主要内容 概述 结构与工作原理 寄存器 应用举例

86 一、概 述 S3C2410X中断控制器有56个中断源,对外提供24个外中断输入引脚,内部所有设备都有中断请求信号,例如DMA控制器、UART、IIC等等。 S3C2410X的ARM920T内核有两个中断,IRQ中断和快速中断FIQ。 中断仲裁:当中断控制器接收到多个中断请求时,其内的优先级仲裁器裁决后向CPU发出优先级最高的中断请求信号或快速中断请求信号。

87 二、S3C2410X中断系统结构 1、中断系统结构 主要由中断源和控制寄存器两大部分构成,其寄存器主要有4种:模式、屏蔽、优先级、挂起(标志)寄存器等。 中断源 (有子寄存器) 子中断源 挂起寄存器 (无子寄存器) 屏蔽寄存器 中断屏蔽 中断模式 优先级仲裁 FIQ IRQ 中断源挂起

88 2、中断优先级仲裁器及工作原理 中断系统有6个分仲裁器和1个总仲裁器,每一个仲裁器可以处理6路中断。

89 三、中断控制器专用寄存器 有8个专用寄存器 Register Address R/W Description Reset Value
SRCPND 0x4A000000 中断标志寄存器 0x INTMOD 0x4A000004 中断模式寄存器 INTMSK 0x4A000008 中断屏蔽寄存器 0xFFFFFFFF PRIORITY 0x4A00000C 中断优先级寄存器 0x7F INTPND 0x4A000010 中断服务寄存器 INTOFFSET 0x4A000014 R 中断偏移寄存器 SUBSRCPND 0x4A000018 子源挂起寄存器 INTSUBMSK 0x4A00001C 中断子源屏蔽寄存器 0x7FF 主要使用前5个寄存器

90 1、SRCPND---中断源挂起(标志)寄存器
位号 中断源 31 INT_ADC 23 INT_UART1 15 INT_UART2 7 nBATT_FLT 30 INT_RTC 22 INT_SPI0 14 INT_TIM4 6 保留 29 INT_SPI1 21 INT_SDI 13 INT_TIM3 5 EINT8_23 28 INT_UART0 20 INT_DMA3 12 INT_TIM2 4 EINT4_7 27 INT_IIC 19 INT_DMA2 11 INT_TIM1 3 EINT3 26 INT_USBH 18 INT_DMA1 10 INT_TIM0 2 EINT2 25 INT_USBD 17 INT_DMA0 9 INT_WDT 1 EINT1 24 16 INT_LCD 8 INT_TICK EINT0 该寄存器也就是中断标志寄存器 各位: 1:对应中断源有中断请求 0:对应中断源无中断请求 注意:必须在中断处理程序中对其标志位清0。其方法为写1.

91 2、INTMOD---中断模式寄存器 位号 中断源 该寄存器是设置各中断源是FIQ中断还是IRQ中断
31 INT_ADC 23 INT_UART1 15 INT_UART2 7 nBATT_FLT 30 INT_RTC 22 INT_SPI0 14 INT_TIM4 6 保留 29 INT_SPI1 21 INT_SDI 13 INT_TIM3 5 EINT8_23 28 INT_UART0 20 INT_DMA3 12 INT_TIM2 4 EINT4_7 27 INT_IIC 19 INT_DMA2 11 INT_TIM1 3 EINT3 26 INT_USBH 18 INT_DMA1 10 INT_TIM0 2 EINT2 25 INT_USBD 17 INT_DMA0 9 INT_WDT 1 EINT1 24 16 INT_LCD 8 INT_TICK EINT0 该寄存器是设置各中断源是FIQ中断还是IRQ中断 各位: 1:对应中断源设为FIQ中断模式 0:对应中断源设为IRQ中断模式

92 3、INTMSK---中断屏蔽寄存器 位号 中断源 各位: 1:屏蔽对应中断源 0:开放对应中断源 31 23 15 7 30 22 14
INT_ADC 23 INT_UART1 15 INT_UART2 7 nBATT_FLT 30 INT_RTC 22 INT_SPI0 14 INT_TIM4 6 保留 29 INT_SPI1 21 INT_SDI 13 INT_TIM3 5 EINT8_23 28 INT_UART0 20 INT_DMA3 12 INT_TIM2 4 EINT4_7 27 INT_IIC 19 INT_DMA2 11 INT_TIM1 3 EINT3 26 INT_USBH 18 INT_DMA1 10 INT_TIM0 2 EINT2 25 INT_USBD 17 INT_DMA0 9 INT_WDT 1 EINT1 24 16 INT_LCD 8 INT_TICK EINT0 各位: 1:屏蔽对应中断源 0:开放对应中断源

93 4、PRIORITY---中断优先级寄存器
位号 含 义 31:21 保 留 12:11 ARB_SEL2 4 ARB_MODE4 20:19 ARB_SEL6 10:9 ARB_SEL1 3 ARB_MODE3 18:17 ARB_SEL5 8:7 ARB_SEL0 2 ARB_MODE2 16:15 ARB_SEL4 6 ARB_MODE6 1 ARB_MODE1 14:13 ARB_SEL3 5 ARB_MODE5 ARB_MODE0 ARB_SELn---n组优先级顺序控制位 00:REQ0, 1, 2, 3, 4, :REQ0, 2, 3, 4, 1, 5 10:REQ0, 3, 4, 1, 2, :REQ0, 4, 1, 2, 3, 5 ARB_MODEn---n组优先级循环控制位 0:优先顺序固定不变 1:优先顺序循环,每响应一次中断,其顺序循环改变一次,但REQ0、REQ5位置不变。

94 5、INTPND---中断服务(挂起)寄存器
位号 中断源 31 INT_ADC 23 INT_UART1 15 INT_UART2 7 nBATT_FLT 30 INT_RTC 22 INT_SPI0 14 INT_TIM4 6 保留 29 INT_SPI1 21 INT_SDI 13 INT_TIM3 5 EINT8_23 28 INT_UART0 20 INT_DMA3 12 INT_TIM2 4 EINT4_7 27 INT_IIC 19 INT_DMA2 11 INT_TIM1 3 EINT3 26 INT_USBH 18 INT_DMA1 10 INT_TIM0 2 EINT2 25 INT_USBD 17 INT_DMA0 9 INT_WDT 1 EINT1 24 16 INT_LCD 8 INT_TICK EINT0 各位: 1:对应的中断源被响应,且正在执行中断服务 0:对应中断源未被响应 注意:必须在中断处理程序中对其服务标志位清0。方法为对某位写1便清除为0。 即在清除SRCPND中相应位后,要清除该寄存器相应位。

95 6、INTOFFSET---中断偏移寄存器
中断源 偏移 INT_ADC 31 INT_UART1 23 INT_UART2 15 nBATT_FLT 7 INT_RTC 30 INT_SPI0 22 INT_TIM4 14 保留 6 INT_SPI1 29 INT_SDI 21 INT_TIM3 13 EINT8_23 5 INT_UART0 28 INT_DMA3 20 INT_TIM2 12 EINT4_7 4 INT_IIC 27 INT_DMA2 19 INT_TIM1 11 EINT3 3 INT_USBH 26 INT_DMA1 18 INT_TIM0 10 EINT2 2 INT_USBD 25 INT_DMA0 17 INT_WDT 9 EINT1 1 24 INT_LCD 16 INT_TICK 8 EINT0 该寄存器的偏移值指示在INTPND中显示的中断源 各位: 1:对应的中断源,在INTPND中被置位 说明:当在中断服务程序中对SRCPND、INTPND中的标志位清0时,该寄存器的对应位自动清0。

96 7、SUBSRCPND---子中断源请求标志寄存器
位号 中断源 31:11 保 留 7 INT_TXD2 3 INT_RXD1 10 INT_ADC 6 INT_RXD2 2 INT_ERR0 9 INT_TC 5 INT_ERR1 1 INT_TXD0 8 INT_ERR2 4 INT_TXD1 INT_RXD0 对有多个中断源的外设,显示其具体的中断请求 各位: 1:对应的子中断源有请求 0:对应的子中断源无请求 注意:在中断服务程序中,需要对其置1的标志位清0。

97 8、INTSUBMSK---子中断源屏蔽寄存器
位号 中断源 31:11 保 留 7 INT_TXD2 3 INT_RXD1 10 INT_ADC 6 INT_RXD2 2 INT_ERR0 9 INT_TC 5 INT_ERR1 1 INT_TXD0 8 INT_ERR2 4 INT_TXD1 INT_RXD0 对有多个中断源的外设,对具体的中断源进行屏蔽 各位: 1:屏蔽对应的子中断源 0:开放对应的子中断源

98 本段意义:利用后面定义的宏来展开上面各行,使其进入它们所对应的中断服务子程序。
中断举例 第12次到此 在2410init.s文件中与的中断初始化部分 程序开始及中断入口 b ResetHandler b HandlerUndef ;handler for Undefined mode b HandlerSWI ;handler for SWI interrupt b HandlerPabort ;handler for PAbort b HandlerDabort ;handler for DAbort b . ;reserved b HandlerIRQ ;handler for IRQ interrupt b HandlerFIQ ;handler for FIQ interrupt 本段意义:利用后面定义的宏来展开上面各行,使其进入它们所对应的中断服务子程序。

99 LTORG ;声明一个数据缓冲池的开始 HandlerFIQ HANDLER HandleFIQ HandlerIRQ HANDLER HandleIRQ HandlerUndef HANDLER HandleUndef HandlerSWI HANDLER HandleSWI HandlerDabort HANDLER HandleDabort HandlerPabort HANDLER HandlePabort 本段意义:利用后面定义的宏来展开上面各行,使其进入它们所对应的中断服务子程序

100 MACRO ;本宏意义:转到相应中断服务子程序去执行 $HandlerLabel HANDLER $HandleLabel
;如Label=IRQ , ( HandlerIRQ ) $HandlerLabel sub sp,sp,#4 stmfd sp!,{r0} ldr r0,=$HandleLabel ldr r0,[r0] str r0,[sp,#4] ldmfd sp!,{r0,pc} MEND

101 IRQ中断服务程序 IsrIRQ sub sp,sp,# ;reserved for PC stmfd sp!,{r8-r9} ldr r9,=INTOFFSET ;中断偏移寄存器 ldr r9,[r9] ldr r8,=HandleEINT0 ;中断向量表首地址 add r8,r8,r9,lsl #2 ldr r8,[r8] str r8,[sp,#8] ldmfd sp!,{r8-r9,pc} 本段意义:根据中断服务号,转去执行相应的中断处理程序段。

102 ;中断向量表IntVectorTable
HandleEINT0 # 4 HandleEINT1 # 4 HandleEINT2 # 4 HandleEINT3 # 4 HandleEINT4_7 # 4 HandleEINT8_23 # 4 HandleRSV6 # 4 HandleBATFLT # 4 HandleTICK # 4 HandleWDT # 4 HandleTIMER0 # 4 HandleTIMER1 # 4 ……

103 4.6 输入/输出端口 主要内容 概述 寄存器 应用举例

104 一、概述 S3C2410X有117个输入/输出端口。这些端口是: A口(GPA):23个输出口 B口(GPB):11个输入/输出口
C口(GPC):16个输入/输出口 D口(GPD):16个输入/输出口 E口(GPE):16个输入/输出口 F口(GPF):8个输入/输出口 G口(GPG):16个输入/输出口 H口(GPH):11个输入/输出口 这些端口都具有多功能,通过引脚配置寄存器,可以将其设置为所需要的功能,如:I/O功能、中断功能等等。

105 每一个端口都有4个寄存器,它们是:引脚配置寄存器、数据寄存器、引脚上拉寄存器等。
二、端口寄存器及引脚配置 每一个端口都有4个寄存器,它们是:引脚配置寄存器、数据寄存器、引脚上拉寄存器等。 Register Address R/W Description Reset Value GPXCON 0x560000x0 端口X配置寄存器 X GPXDAT 0x560000x4 端口X数据寄存器 GPXUP 0x560000x8 端口X上拉寄存器 RESERVED 0x560000xC 端口X保留寄存器 -

106 1、端口A寄存器及引脚配置 Register Address R/W Description Reset Value
GPACON 0x 端口A引脚配置寄存器 0x7FFFFF GPADAT 0x 端口A数据寄存器 - RESERVED 0x 端口A保留寄存器 0x C GPADAT寄存器为准备输出的数据 其值为23位[22:0] 注意: (1)当A口引脚配置为非输出功能时,其输出无意义; (2)从引脚输入没有意义。

107 1、端口A寄存器及引脚配置 位号 位 名 位值:0 1 22 输出 10 21 9 20 8 19 7 18 6 17 5 16 4 15
位 名 位值: 22 GPA22 输出 nFCE 10 GPA10 ADDR25 21 GPA21 nRSTOUT 9 GPA9 ADDR24 20 GPA20 nFRE 8 GPA8 ADDR23 19 GPA19 nFWE 7 GPA7 ADDR22 18 GPA18 ALE 6 GPA6 ADDR21 17 GPA17 CLE 5 GPA5 ADDR20 16 GPA16 nGCS5 4 GPA4 ADDR19 15 GPA15 nGCS4 3 GPA3 ADDR18 14 GPA14 nGCS3 2 GPA2 ADDR17 13 GPA13 nGCS2 1 GPA1 ADDR16 12 GPA12 nGCS1 GPA0 ADDR0 11 GPA11 ADDR26 FCE: Flash片选

108 2、端口B寄存器及引脚配置 Register Address R/W Description Reset Value
GPBCON 0x 端口B引脚配置寄存器 0x0 GPBDAT 0x 端口B数据寄存器 - GPBUP 0x 端口B上拉寄存器 RESERVED 0x C 端口B保留寄存器 GPBDAT---为准备输出或输入的数据 其值为11位[10:0] GPBUP---端口B上拉寄存器,位[10:0]有意义。 0:对应引脚设置为上拉 1:无上拉功能 注意: 当B口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。

109 端口B引脚配置寄存器 位号 位 名 位值:00 01 10 11 21,20 输入 输出 nXDREQ0 19,18 nXDACK0
位 名 位值: 21,20 GPB10 输入 输出 nXDREQ0 Reserved 19,18 GPB9 nXDACK0 17,16 GPB8 nXDREQ1 15,14 GPB7 nXDACK1 13,12 GPB6 nXBACK 11,10 GPB5 nXBREQ 9,8 GPB4 TCLK0 7,6 GPB3 TOUT3 5,4 GPB2 TOUT2 3,2 GPB1 TOUT1 1,0 GPB0 TOUT0

110 3、端口C寄存器及引脚配置 Register Address R/W Description Reset Value
GPCCON 0x 端口C引脚配置寄存器 0x0 GPCDAT 0x 端口C数据寄存器 - GPCUP 0x 端口C上拉寄存器 RESERVED 0x C 端口C保留寄存器 GPCDAT---为准备输出或输入的数据 其值为16位[15:0] GPCUP---端口C上拉寄存器,位[15:0]有意义。 0:对应引脚设置为上拉 1:无上拉功能 注意: 当C口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。

111 端口C引脚配置寄存器 位号 位 名 位 值 位名 00 01 10 11 31,30 GPC15 输入 输出 VD7 保留 15,14
位 值 位名 00 01 10 11 31,30 GPC15 输入 输出 VD7 保留 15,14 GPC7 LCDVF2 29,28 GPC14 VD6 13,12 GPC6 LCDVF1 27,26 GPC13 VD5 11,10 GPC5 LCDVF0 25,24 GPC12 VD4 9,8 GPC4 VM 23,22 GPC11 VD3 7,6 GPC3 VFRAME 21,20 GPC10 VD2 5,4 GPC2 VLINE 19,18 GPC9 VD1 3,2 GPC1 VCLK 17,16 GPC8 VD0 1,0 GPC0 VEND

112 4、端口D寄存器及引脚配置 Register Address R/W Description Reset Value
GPDCON 0x 端口D引脚配置寄存器 0x0 GPDDAT 0x 端口D数据寄存器 - GPDUP 0x 端口D上拉寄存器 0xF000 RESERVED 0x C 端口D保留寄存器 GPDDAT---为准备输出或输入的数据 其值为16位[15:0] GPDUP---端口D上拉寄存器,位[15:0]有意义。 0:对应引脚设置为上拉 1:无上拉功能 初始化时,[15:12]无上拉功能,而[11:0]有上拉 注意: 当D口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。

113 端口D引脚配置寄存器 位号 位 名 位 值 位名 00 01 10 11 31,30 GPD15 输入 输出 VD23 nSS0 15,14
位 值 位名 00 01 10 11 31,30 GPD15 输入 输出 VD23 nSS0 15,14 GPD7 VD15 保留 29,28 GPD14 VD22 nSS1 13,12 GPD6 VD14 27,26 GPD13 VD21 11,10 GPD5 VD13 25,24 GPD12 VD20 9,8 GPD4 VD12 23,22 GPD11 VD19 7,6 GPD3 VD11 21,20 GPD10 VD18 5,4 GPD2 VD10 19,18 GPD9 VD17 3,2 GPD1 VD9 17,16 GPD8 VD16 1,0 GPD0 VD8

114 5、端口E寄存器及引脚配置 Register Address R/W Description Reset Value
GPECON 0x 端口E引脚配置寄存器 0x0 GPEDAT 0x 端口E数据寄存器 - GPEUP 0x 端口E上拉寄存器 RESERVED 0x C 端口E保留寄存器 GPEDAT---为准备输出或输入的数据 其值为16位[15:0] GPEUP---端口E上拉寄存器,位[15:0]有意义。 0:对应引脚设置为上拉 1:无上拉功能 初始化时,各个引脚都有上拉功能。 注意: 当E口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。

115 端口E引脚配置寄存器 位号 位 名 位 值 位名 00 01 10 11 31,30 GPE15 输入 输出 IICSDA 保留 15,14
位 值 位名 00 01 10 11 31,30 GPE15 输入 输出 IICSDA 保留 15,14 GPE7 SDDAT0 29,28 GPE14 IICSCL 13,12 GPE6 SDCMD 27,26 GPE13 SPICLK0 11,10 GPE5 SDCLK 25,24 GPE12 SPISI0 9,8 GPE4 IISSDO 23,22 GPE11 SPISO0 7,6 GPE3 IISSDI 21,20 GPE10 SDDAT3 5,4 GPE2 CDCLK 19,18 GPE9 SDDAT2 3,2 GPE1 IISSCLK 17,16 GPE8 SDDAT1 1,0 GPE0 IISLRCK

116 6、端口F寄存器及引脚配置 Register Address R/W Description Reset Value
GPFCON 0x 端口F引脚配置寄存器 0x0 GPFDAT 0x 端口F数据寄存器 - GPFUP 0x 端口F上拉寄存器 RESERVED 0x C 端口F保留寄存器 GPFDAT---为准备输出或输入的数据 其值为8位[7:0] GPFUP---端口F上拉寄存器,位[7:0]有意义。 0:对应引脚设置为上拉 1:无上拉功能 初始化时,各个引脚都有上拉功能。 注意: 当F口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。

117 端口F引脚配置寄存器 位号 位 名 位 值 00 01 10 11 15,14 GPF7 输入 输出 EINT7 保留 13,12 GPF6
位 值 00 01 10 11 15,14 GPF7 输入 输出 EINT7 保留 13,12 GPF6 EINT6 11,10 GPF5 EINT5 9,8 GPF4 EINT4 7,6 GPF3 EINT3 5,4 GPF2 EINT2 3,2 GPF1 EINT1 1,0 GPF0 EINT0

118 7、端口G寄存器及引脚配置 Register Address R/W Description Reset Value
GPGCON 0x 端口G引脚配置寄存器 0x0 GPGDAT 0x 端口G数据寄存器 - GPGUP 0x 端口G上拉寄存器 0xF800 RESERVED 0x C 端口G保留寄存器 GPGDAT---为准备输出或输入的数据 其值为16位[15:0] GPGUP---端口G上拉寄存器,位[15:0]有意义。 0:对应引脚设置为上拉 1:无上拉功能 初始化时,[15:11]引脚无上拉功能,其它引脚有。 注意: 当G口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。

119 端口G引脚配置寄存器 LCD-PEN:POWER_ENABLE nSS0:SPI0_SELECT 位号 位 名 位 值 位名 00 01
位 值 位名 00 01 10 11 31,30 GPG15 输入 输出 EINT23 nYPON 15,14 GPG7 EINT15 SPICLK1 29,28 GPG14 EINT22 YMON 13,12 GPG6 EINT14 SPISI1 27,26 GPG13 EINT21 nXPON 11,10 GPG5 EINT13 SPISO1 25,24 GPG12 EINT20 XMON 9,8 GPG4 EINT12 LCD-PEN 23,22 GPG11 EINT19 TCLK1 7,6 GPG3 EINT11 nSS1 21,20 GPG10 EINT18 保留 5,4 GPG2 EINT10 nSS0 19,18 GPG9 EINT17 3,2 GPG1 EINT9 17,16 GPG8 EINT16 1,0 GPG0 EINT8 LCD-PEN:POWER_ENABLE nSS0:SPI0_SELECT

120 8、端口H寄存器及引脚配置 Register Address R/W Description Reset Value
GPHCON 0x 端口H引脚配置寄存器 0x0 GPHDAT 0x 端口H数据寄存器 - GPHUP 0x 端口H上拉寄存器 RESERVED 0x C 端口H保留寄存器 GPHDAT---为准备输出或输入的数据 其值为11位[10:0] GPHUP---端口H上拉寄存器,位[10:0]有意义。 0:对应引脚设置为上拉 1:无上拉功能 注意: 当H口引脚配置为非输入/输出功能时,其寄存器中的值没有意义。

121 端口H引脚配置寄存器 位号 位 名 位值:00 01 10 11 UCLK为USB的 21,20 GPH10 输入 输出 CLKOUT1
位 名 位值: 21,20 GPH10 输入 输出 CLKOUT1 Reserved 19,18 GPH9 CLKOUT0 17,16 GPH8 UCLK 15,14 GPH7 RXD2 nCTS1 13,12 GPH6 TXD2 nRTS1 11,10 GPH5 RXD1 9,8 GPH4 TXD1 7,6 GPH3 RXD0 5,4 GPH2 TXD0 3,2 GPH1 nRTS0 1,0 GPH0 nCTS0 UCLK为USB的

122 9、端口其它控制寄存器 Register Address R/W Description Reset Value MISCCR
0x 混合控制寄存器 0x10330 DCLKCON 0x D时钟控制寄存器 0x0

123 (1)MISCCR---混合控制寄存器 31 …… 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4
保留(为0) nEN_SCKE nEN_SCLK1 nEN_SCLK0 nRSTCON 15 14 13 12 11 10 9 8 7 保留 USBSUSPND1 USBSUSPND0 CLKSEL1 6 5 4 3 2 1 CLKSEL0 USBPAD MEM_HZ_CON SPUCR_L SPUCR_H nEN_SCKE---SCLK使能位。在电源关闭模式下对SDRAM做保护 0: 正常状态 1:低电平 nEN_SCLKx---SCLKx使能位。在电源关闭模式下对SDRAM做保护 0:SCLKx= SCLK 1:低电平 nRSTCON---对nRSTOUT软件复位控制位 0:使nRSTOUT为低,0;1:使nRSTOUT为高,1

124 CLKSEL1 --- CLKOUT1引脚输出信号源选择 000:MPLL CLK 001:UPLL CLK
15 14 13 12 11 10 9 8 7 保留 USBSUSPND1 USBSUSPND0 CLKSEL1 USBSUSPND1---USB端口1模式 0:正常 1:浮空 USBSUSPND0---USB端口0模式 CLKSEL1 --- CLKOUT1引脚输出信号源选择 000:MPLL CLK 001:UPLL CLK 010:FCLK 011:HCLK 100:PCLK 101:DCLK1 11x:保留 CLKSEL0 --- CLKOUT0引脚输出信号源选择 010:FCLK 011:HCLK 100:PCLK 101:DCLK0 11x:保留

125 MEM_HZ_CON---MEM高阻控制位 0:Hi-Z 1:前一状态 SPUCR_L---数据口低16位[15:0]上拉控制位
4 3 2 1 CLKSEL0 USBPAD MEM_HZ_CON SPUCR_L SPUCR_H USBPAD---与USB连接选择 0:与USB设备连接 1:与USB主机连接 MEM_HZ_CON---MEM高阻控制位 0:Hi-Z 1:前一状态 SPUCR_L---数据口低16位[15:0]上拉控制位 0:上拉 1:无上拉 SPUCR_H---数据口高16位[31:16]上拉控制位

126 (2)DCLKCON---D时钟控制寄存器
31 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 DCLK1CMP DCLK1DIV DCLK1SEL DCLK1EN 15 12 11 10 9 8 7 6 5 4 3 2 1 保留 DCLK0CMP DCLK0DIV DCLK0SelCK DCLK0EN DCLK1(0)CMP---DCLK1(0)低电平时间所占的比例数。 设该位值为m,m< DCLK1(0)DIV。 则低、高电平持续时间的源周期数分别为: m+1、DCLK1(0)DIV-m DCLK1(0)DIV---DCLK1(0)分频值 DCLK1(0) frequency = source clock / ( DCLK1(0)DIV + 1 )

127 (2)DCLKCON---D时钟控制寄存器(续)
31 28 27 26 25 24 23 22 21 20 19 18 17 16 保留 DCLK1CMP DCLK1DIV DCLK1SEL DCLK1EN 15 12 11 10 9 8 7 6 5 4 3 2 1 保留 DCLK0CMP DCLK0DIV DCLK0SelCK DCLK0EN DCLK1(0)SelCK---DCLK1(0) source clock 选择 0 : 源时钟选择PCLK 1:源时钟选择UCLK ( USB ) DCLK1(0)EN---DCLK1(0) Enable 0:禁止 1:允许

128 10、外中断控制寄存器 Register Address R/W Description Reset Value
EXTINT0 0x 外中断触发方式寄存器0 0x0 EXTINT1 0x C 外中断触发方式寄存器1 EXTINT2 0x 外中断控制寄存器2 主要设置各个外中断源的触发方式、滤波

129 (1)EXTINT0---外中断触发方式控制寄存器0
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 X EINT7 EINT6 EINT5 EINT4 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 X EINT3 EINT2 EINT1 EINT0 EINT0~7---中断请求信号触发方式选择 000:低电平触发 001:高电平触发 01x:下降沿触发 10x:上升沿触发 11x:双边沿触发 第3、7、11、15、19、23、27、31位---保留

130 (2)EXTINT1---外中断触发方式控制寄存器1
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 X EINT15 EINT14 EINT13 EINT12 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 X EINT11 EINT10 EINT9 EINT8 EINT8~15---中断请求信号触发方式选择 000:低电平触发 001:高电平触发 01x:下降沿触发 10x:上升沿触发 11x:双边沿触发 第3、7、11、15、19、23、27、31位---保留

131 (3)EXTINT2---外中断控制寄存器2 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 F23 EINT23 F22 EINT22 F21 EINT21 F20 EINT20 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 F19 EINT19 F18 EINT18 F17 EINT17 F16 EINT16 EINT16~23---外中断请求信号触发方式选择 000:低电平触发 001:高电平触发 01x:下降沿触发 10x:上升沿触发 11x:双边沿触发 第3、7、11、15、19、23、27、31位---为FILTEN 各引脚滤波控制位 0:禁止滤波 1:使能滤波

132 11、外中断滤波控制寄存器 Register Address R/W Description Reset Value
EINTFLT0 0x 保留 - EINTFLT1 0x EINTFLT2 0x C 外中断滤波控制寄存器2 0x0 EINTFLT3 0x560000A0 外中断滤波控制寄存器3 主要设置各个外中断源的滤波器设置

133 (1)EINTFLT2---外中断滤波控制寄存器2
31 30 …… 24 23 22 16 FLTCLK19 EINTFLT19 FLTCLK18 EINTFLT18 15 14 …… 8 7 6 FLTCLK17 EINTFLT17 FLTCLK16 EINTFLT16 FLTCLK16~19---外中断16~19滤波器时钟选择 0:PCLK 1:外部/振荡时钟(由OM引脚选择) EINTFLT16~19---外中断16~19滤波器宽度(频带宽度)

134 (2)EINTFLT3---外中断滤波控制寄存器3
31 30 …… 24 23 22 16 FLTCLK23 EINTFLT23 FLTCLK22 EINTFLT22 15 14 …… 8 7 6 FLTCLK21 EINTFLT21 FLTCLK20 EINTFLT20 FLTCLK20~23---外中断20~23滤波器时钟选择 0:PCLK 1:外部/振荡时钟(由OM引脚选择) EINTFLT20~23---外中断20~23滤波器宽度(频带宽度)

135 12、外中断屏蔽、标志寄存器 Register Address R/W Description Reset Value EINTMAK
0x560000A4 外中断屏蔽寄存器 0x00FFFFF0 EINTPEND 0x560000A8 外中断标志寄存器 0x0

136 外中断屏蔽寄存器 位号 含 义 23 EINT23 15 EINT15 7 EINT7 22 EINT22 14 EINT14 6
21 EINT21 13 EINT13 5 EINT5 20 EINT20 12 EINT12 4 EINT4 19 EINT19 11 EINT11 3 保留 18 EINT18 10 EINT10 2 17 EINT17 9 EINT9 1 16 EINT16 8 EINT8 各位: 0:允许中断 1:禁止中断 注意: EINT0--- EINT3不能在此被屏蔽,在SRCPND中屏蔽。

137 外中断标志寄存器 位号 含 义 23 EINT23 15 EINT15 7 EINT7 22 EINT22 14 EINT14 6
21 EINT21 13 EINT13 5 EINT5 20 EINT20 12 EINT12 4 EINT4 19 EINT19 11 EINT11 3 保留 18 EINT18 10 EINT10 2 17 EINT17 9 EINT9 1 16 EINT16 8 EINT8 各位: 0:无中断请求 1:有中断请求 注意:对某位写1,则清除相应标志,即清为0.

138 13、外中断状态寄存器 Register Address R/W Description Reset Value GSTATUS3、4:
0x560000AC R 外部引脚状态寄存器 不确定 GSTATUS1 0x560000B0 芯片ID(标识)寄存器 0x GSTATUS2 0x560000B4 复位状态寄存器 0x1 GSTATUS3 0x560000B8 信息保存寄存器 0x0 GSTATUS4 0x560000C0 GSTATUS3、4: 复位时被清0,其它情况下其数据不变。 用户可以用于保存数据。

139 (1)GSTATUS0---外部引脚状态寄存器
31 …… 4 3 2 1 保 留 nWEIT nCON RnB nBATT_FLT nWEIT---引脚nWEIT状态 nCON---引脚nCON状态 RnB---引脚R/nB状态 nBATT_FLT---引脚nBATT_FLT状态 注意:各位的数值0、1,随着对应引脚变化。

140 (2)GSTATUS2---复位状态寄存器 31 …… 3 2 1 保 留 WDTRST OFFRST PWRST
保 留 WDTRST OFFRST PWRST WDTRST---上电复位控制状态 1:出现了上电复位 对该位写,则将该位清0 OFFRST---掉电模式复位状态。 1:系统出现了从掉电模式唤醒复位 PWRST---看门狗复位状态 1:系统出现了看门狗定时器复位 第13次到此

141 外中断举例 static void __irq Eint0Int(void) { ClearPending(BIT_EINT0);
Uart_Printf("EINT0 interrupt is occurred.\n"); } static void __irq Eint1Int(void) ClearPending(BIT_EINT1); Uart_Printf("EINT1 interrupt is occurred.\n");

142 void Test_Eint(void) { int i; int extintMode; //选择外中断触发方式变量 Uart_Printf("[External Interrupt Test]\n"); Uart_Printf("1.L-LEVEL 2.H-LEVEL 3.F-EDGE 4.R-EDGE 5.B-EDGE\n"); Uart_Printf("Select the external interrupt type.\n"); extintMode=Uart_Getch(); //extintMode='3'; rGPFCON = (rGPFCON & 0xfffa)|(1<<3)|(1<<1); // 设置引脚配置,F0、F1配置为EINT0/1

143 switch(extintMode) { case '1': rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x0<<4 | 0x0<<0; //EINT0/1=low level triggered break; case '2': rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x1<<4 | 0x1<<0; //EINT0/1=high level triggered case '3': rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x2<<4 | 0x2<<0; //EINT0/1=falling edge triggered

144 case '4': rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x4<<4 | 0x4<<0; //EINT0/1=rising edge triggered break; case '5': rEXTINT0 = (rEXTINT0 & ~((7<<4) | (0x7<<0))) | 0x6<<4 | 0x6<<0; //EINT0/1=both edge triggered default: break; }

145 Uart_Printf(“Press the EINT0/1 buttons or Press any key to exit. \n”);
pISR_EINT0=(U32)Eint0Int; //将中断处理程序的开始 pISR_EINT1=(U32)Eint1Int;; //地址送到中断向量表 rEINTPEND = 0xffffff; //清除EINTPND需要向其中写入数 据。因此这句代码的含义是清除EINTPND。 rSRCPND = BIT_EINT0|BIT_EINT1; //to clear the previous pending states rINTPND = BIT_EINT0|BIT_EINT1; rINTMSK=~(BIT_EINT0|BIT_EINT1); Uart_Getch(); rEINTMASK=0xffffff; rINTMSK=BIT_ALLMSK; } ( void Test_Eint(void)函数结束) 注释:#define BIT_ALLMSK (0xffffffff)

146 4.7 定时器 主要内容 概述 结构 寄存器 应用举例

147 一、概 述 1、S3C2410X定时器的主要特性 5个16位定时器; 2个8位预分频器和2个4位分频器; 可编程PWM输出占空比; 具有初值自动重装连续输出模式和单脉冲输出模式; 具有死区生成器。 S3C2410有5个16位的定时器,定时器0-3具有PWM(脉宽调制)功能。定时器4是一个内部定时器,没有输出引脚,供内部使用。定时器0有死区产生器,通常用于大电流设备控制。 有2个8位预分频器和2个4位分频器。定时器0 和定时器1 分享同一个8 位的预分频器和分频器,定时器2、3、4 分享另一个预分频器和分频器,分频器有1/2、1/4、1/8、1/16这4种分频值。定时器从分频器接收自己的时钟信号,时钟分频器从相应的预分频器接收时钟信号。

148 2、 PWM(脉宽调制)概念 PWM(脉宽调制):就是只对一方波序列信号的占空比按照要求进行调制,而不改变方波信号的其它参数,即不改变幅度和周期,因此脉宽调制信号的产生和传输,都是数字式的。 用脉宽调制技术可以实现模拟信号:如果调制信号的频率远远大于信号接受者的分辨率,则接收者获得的是信号的平均效果,不能感知数字信号的0和1,其信号大小的平均值与信号的占空比有关,信号的占空比越大,平均信号越强,其平均值与占空比成正比。只要带宽足够(频率足够高或周期足够短),任何模拟信号都可以使用PWM 来实现。 PWM技术的应用:借助于微处理器,使用脉宽调制方法实现模拟信号是一种非常有效的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。

149 二、结构与工作原理 1、定时器结构 (1)时钟控制:系统为每个定时器设置有: 预分频器、分频器。 (2)定时器组成(5部分):
减法计数器、初值寄存器、比较寄存器、观察寄存器、控制逻辑等部分构成。

150 定时器结构图 预分频器 8位 分频器 1/2 1/4 1/8 1/16 TCLK0/1 计数器 观 察 寄 存 器 比较寄存器 PCLK 五
TOUT 中断

151 2、工作原理 (1)定时器工作过程 装入初值、启动计数,计数结束产生中断请求,并且可以重装初值连续计数。如下图所示。

152 TOUT的输出可以设置为反相输出,如下图所示。
(2)PWM输出 寄存器TCMPB的作用:当计数器TCNT中的值减到与TCMPB的值相同时,TOUT的输出值取反。改变TCMPB的值,便改变了输出方波的占空比。 TOUT的输出可以设置为反相输出,如下图所示。 正向输出 反相输出 周期开始

153 S3C2410的timer0具有死区发生器功能,可用于控制大功率设备。
(3)死区产生器 死区的概念:是一小段时间间隔,在这个时间间隔内,禁止两个开关同时处于开启状态。死区是在功率设备控制中常采用的一种技术,防止两个开关同时打开起反作用。 S3C2410的timer0具有死区发生器功能,可用于控制大功率设备。 死区发生器开启前后输出波形对比

154 (4)DMA请求模式 S3C2410中定时器的DMA功能:系统中的5个定时器都有DMA请求功能,但是在同一时刻只能设置一个使用DMA功能,通过设置其DMA模式位来实现。 DMA请求过程:定时器可以在任意时间产生DMA请求,并且保持DMA请求信号(nDMA_REQ)为低直到定时器收到ACK信号。当定时器收到ACK信号时,它使请求信号变得无效。 DMA请求与中断的关系:如果一个定时器被配置为DMA模式,该定时器不会产生中断请求了。其他的定时器会正常的产生中断。

155 1)定时器输入时钟频率f Tclk (即计数时钟频率) : f Tclk=[f pclk∕(Prescaler+1)] ×分频值
3、计数时钟和输出计算 1)定时器输入时钟频率f Tclk (即计数时钟频率) : f Tclk=[f pclk∕(Prescaler+1)] ×分频值 式中:Prescaler,预分频值, ;分频值为1/2、1/4、1/8、1/16。 2)PWM输出时钟频率 : PWM输出时钟频率= f Tclk ∕ TCNTBn 3)PWM输出信号占空比(即高电平持续时间所占信号周期的比例): PWM输出信号占空比 = TCMPBn∕ TCNTBn

156 设PCLK的频率为50MHz,经过预分频和分频器后,送给定时器的可能计数时钟频率由表4-7-1给出。
定时器最大、最小输出周期 设PCLK的频率为50MHz,经过预分频和分频器后,送给定时器的可能计数时钟频率由表4-7-1给出。 表 定时器最大、最小输出周期 分频值 最小输出周期 (预分频器=0、 TCNTBn=1) 最大输出周期 (预分频器=255、 TCNTBn=65535) TCNTBn=255) 1/2 25.00MHz(0.04µs) 0.6710s 381Hz 97656 1/4 12.50MHz(0.08µs) 1.3421s 191Hz 48828 1/8 6.250MHz(0.16µs) 2.6843s 95Hz 24414 1/16 3.125MHz(0.32µs) 5.3686s 48Hz 12207

157 三、定时器专用寄存器 共有6种、17个寄存器 Register Address R/W Description Reset Value
TCFG0 0x 配置寄存器 0 0x TCFG1 0x 配置寄存器 1 TCON 0x 控制寄存器 TCNTBn 0x510000xx 计数初值寄存器(5个) 0x0000 TCMPBn 比较寄存器(4个) TCNTOn R 观察寄存器(5个) TCNTBn---Timern计数初值寄存器(计数缓冲寄存器)。16位 TCMPBn---Timern比较寄存器(比较缓冲寄存器)。16位 TCNTOn---Timern计数读出寄存器。16位

158 1、TCFG0---预分频器配置寄存器 31 …… 24 23 16 15 8 7 保留(为0) Dead zone length
保留(为0) Dead zone length Prescaler1 Prescaler0 Dead zone length---死区宽度设置位 其值N为: 0~255,以timer0的定时时间为单位 死区宽度为:(N+1)×timer0的定时时间 Prescaler1---timer2、3、4的预分频值 其值N为: 0~255 输出频率为:PCLK ÷(N+1) Prescaler0--- timer0、1的预分频值

159 2、TCFG1---DMA模式与分频选择寄存器
23 … 20 19…16 15…12 11…8 7 … 4 3 … 0 保留(为0) DMA mode MUX4 MUX3 MUX2 MUX1 MUX0 DMA mode---DMA通道选择设置位 0000:不使用DMA方式,所有通道都用中断方式 0001:选择timer :选择timer1 0011:选择timer :选择timer3 0101:选择timer4 011X:保留 MUX4~ MUX0---timer4~timer0分频值选择 0000:1/ :1/ :1/ :1/16 01XX:选择外部TCLK0、1(对timer0、1是选TCLK0,对timer4、3、2是选TCLK1)

160 3、TCON---定时器控制寄存器 31…23 22 21 20 19 18 17 16 15 14 13 保留 TL4 TUP4 TR4
TO3 TUP3 TR3 TL2 TO2 TUP2 12 11 10 9 8 7…5 4 3 2 1 TR2 TL1 TO1 TUP1 TR1 保留 DZE TL0 TO0 TUP0 TR0 TL4~TL0---计数初值自动重装控制位 0:单次计数 1:计数器值减到0时,自动重新装入初值连续计数。 TUP4~TUP0---计数初值手动装载控制位。 0:不操作 1:立即将TCNTBn中的计数初值装载到计数寄存器TCNTn中。 说明:如果没有执行手动装载初值,则计数器启动时无初值。

161 3、TCON---定时器控制寄存器(续) 31…23 22 21 20 19 18 17 16 15 14 13 保留 TL4 TUP4
TR4 TL3 TO3 TUP3 TR3 TL2 TO2 TUP2 12 11 10 9 8 7…5 4 3 2 1 TR2 TL1 TO1 TUP1 TR1 保留 DZE TL0 TO0 TUP0 TR0 TR4~TR0---TIMER4~TIMER0运行控制位 0:停止 1:启动对应的TIMER TO3~TO0--- TIMER4~TIMER0输出控制位 0:正相输出 1:反相输出 DZE---TIMER0死区操作控制位 0:禁止死区操作 1:使能死区操作

162 四、定时器的使用 1、定时器初始化方法 (1)写TCFG0,设置计数时钟的预分频值和Timer0死区宽度;
(2)写TCFG1,选择各个定时器的分频值和DMA、中断服务; (3)对TCNTBn和TCMPBn分别写入计数初值和比较初值; (4)写TCON,设置计数初值自动重装、手动装载初值、设置反相输出; (5)再写TCON,清除手动装载初值位、设置正相输出、启动计数。 2、定时器停止运行方法 写TCON,禁止计数初值自动重装。(一般不使用运行控制位停止运行)

163 3、定时器操作例子 (1)按照前面初始化定时器;设置TCNTBn=160(50+110),TCMPBn=110;手动装入初值后,又重设TCNTBn=80, TCMPBn=40; (2)启动定时器,按第一个初值计数; (3)与第一个比较值相同,输出取反; (4)第一次计数结束,自动重装初值80、40; (5)在第一次中断处理程序又重设TCMPBn=60; (8)在第二次中断处理程序禁止自动重装初值,准备结束计数; (10)第三次计数结束,不再计数。 TOUTn

164 定时器应用举例 int variable0,variable1,variable2,variable3,variable4;
void __irq Timer0Done(void) { rSRCPND = BIT_TIMER0; //Clear pending bit rINTPND = BIT_TIMER0; //Clear serve bit variable0++; } void __irq Timer1Done(void) { rSRCPND = BIT_TIMER1; //Clear pending bit rINTPND = BIT_TIMER1; variable1++; rINTPND; //Prevent an double interrupt pending

165 void Test_TimerInt(void)
{ variable0 = 0;variable1 = 0;variable2 = 0; variable3 = 0;variable4 = 0; rINTMSK = ~(BIT_TIMER4 | BIT_TIMER3 | BIT_TIMER2 | BIT_TIMER1 | BIT_TIMER0); //将各个中断向量写入中断向量表中 pISR_TIMER0 = (int)Timer0Done; pISR_TIMER1 = (int)Timer1Done; pISR_TIMER2 = (int)Timer2Done; pISR_TIMER3 = (int)Timer3Done; pISR_TIMER4 = (int)Timer4Done; Uart_Printf("\n[ Timer 0,1,2,3,4 Interrupt Test ]\n\n");

166 rTCFG0 = rTCFG0 & ~(0xffffff) | 0x000f0f; //Dead zone=0,
//Prescaler1=15(0x0f),Prescaler0=15(0x0f) rTCFG1 =rTCFG1 & ~(0xffffff) | 0x001233; //All interrupt, //Mux4=1/2,Mux3=1/4,Mux2=1/8,Mux1=1/16,Mux0=1/16 //Timer input clock frequency = PCLK/(prescaler value+1)/(divider value) rTCNTB0 = 0xffff; // (1/(50MHz/16/16)) * 0xffff (65535) = 0.334s rTCNTB1 = 0xffff; // (1/(50MHz/16/16)) * 0xffff (65535) = 0.334s rTCNTB2 = 0xffff; // (1/(50MHz/16/8 )) * 0xffff (65535) = 0.163s rTCNTB3 = 0xffff; // (1/(50MHz/16/4 )) * 0xffff (65535) = 0.078s rTCNTB4 = 0xffff; // (1/(50MHz/16/2 )) * 0xffff (65535) = 0.039s rTCON = rTCON & ~(0xffffff) | 0x6aaa0a; //Auto reload, Inverter off, Manual update, Dead zone disable, Stop rTCON = rTCON & ~(0xffffff) | 0x599901; //Auto reload (T0=One-shot),Inverter off,No operation,Dead zone disable,Start while(variable0 == 0);

167 Delay(1); //To compensate timer error(<1 tick period)
if(variable4==8 && variable3==4 && variable2==2 && variable1==1 && variable0==1) Uart_Printf("Timer 0,1,2,3,4 Interrupt Test --> OK\n"); else Uart_Printf("Timer 0,1,2,3,4 Interrupt Test --> Fail \n");

168 rTCON = 0x0; //One-shot, Inverter off, No operation, Dead
Uart_Printf("Press any key to exit Timer interrupt test\n"); while(!Uart_GetKey()); rTCON = 0x0; //One-shot, Inverter off, No operation, Dead zone disable, Stop Uart_Printf("Timers interrupt number is as below:\n"); Uart_Printf("Timer0 - %d ,Timer1 - %d ,Timer2 - %d , Timer3 - %d ,Timer4 - %d \n", variable0,variable1, variable2,variable3,variable4); rINTMSK |= (BIT_TIMER4 | BIT_TIMER3 | BIT_TIMER2 | BIT_TIMER1 | BIT_TIMER0); }

169 #define BIT_TIMER0 (0x1<<10)

170 4.8 UART通用异步串行接口 主要内容 概述 结构 寄存器 应用举例

171 一、概 述 S3C2410 的UART(通用异步串行口)有三个独立的异步串行I/O 端口:UART0、UART1、UART2,每个串口都可以在中断和DMA 两种模式下进行收发。UART支持的最高波特率达230.4kbps。 每个UART 包含:波特率发生器、接收器、发送器和控制单元。波特率发生器以PCLK或UCLK为时钟源。发送器和接收器各包含1个16 字节的FIFO 寄存器和移位寄存器。 S3C2410 的3个UART都有遵从1.0规范的红外传输功能, UART0、UART1有完整的握手信号,可以连接MODEM。 当发送数据的时候,数据先写到FIFO 然后拷贝到发送移位寄存器,然后从数据输出端口(TxDn)依次被移位输出。被接收的数据也同样从接收端口(RxDn)移位输入到移位寄存器,然后拷贝到FIFO 中。

172 二、串行口结构和工作原理 1、串行口结构 主要有4部分构成:接收器、发送器、波特率发生器、控制逻辑等。

173 2、工作原理 (1)串行口的操作 数据帧格式:可编程,包含1个开始位、5 到8 个数据位、1个可选的奇偶校验位、1个或2个停止位,通过线路控制器(ULCONn)来设置。 发送中止信号:迫使串口输出逻辑0 ,这种状态保持一个传输帧的时间长度。通常在一帧传输数据完整地传输完之后,再通过这个全0 状态将中止信号发送给对方。中止信号发送之后,传送数据连续放到FIFO 中(在不使用FIFO 模式下,将被放到输出保持寄存器)。 接收器具有错误检测功能:可以检测出溢出错误,奇偶校验错误,帧错误和中止状况,每种情况下都会将一个错误标志在接收状态寄存器置位。

174 UBRDIVn=(int)(CLK/(bps*16))- 1
(2)串行口的波特率发生器 每个UART 的波特率发生器为传输提供了串行移位时钟。波特率产生器的时钟源可以从S3C2410 的内部系统时钟PCLK或UCLK 中来选择。波特率数值决定于波特率除数寄存器(UBRDIVn)的值,波特率数与UBRDIVn 的关系为: UBRDIVn=(int)(CLK/(bps*16))- 1 其中CLK为所选择的时钟频率,bps为波特率。 例如,如果波特率为115200bps 且PCLK 或UCLK 为40MHz,则UBRDIVn 为: UBRDIVn =(int)( )(115200*16))-1 = (int)(21.7)-1 = 21-1 = 20

175 t_true = (UBRDIVn + 1)×16×10 / PCLK
(3)串行口波特率误差极限 在应用中,实际波特率往往与理想波特率有差别,其误差不能超过一定的范围,其极限为:UART传输10bit数据的时间误差应该小于1.87%(3/160)。 t_true = (UBRDIVn + 1)×16×10 / PCLK 实际的传输10bit所需时间 t_ideal = 10 / baud-rate 理想情况下传输10位需要的时间 UART error=( ( t_true – t_ideal ) / t_ideal )×100%

176 (4)串行口的自动流控制功能 UART0和UART1不仅有完整的握手信号,而且有自动流控制功能,在寄存器UMCONn中设置实现。自动流控制是利用信号nRTS、nCTS来实现的。在接收数据时,只要接收FIFO中有两个空字节就会使nRTS有效,使对方发送数据;在发送数据时,只要nCTS有效,就会发送数据。其实现过程如下图所示。 nRTS:请求对方发送 nCTS:清除请求发送 注意:这种自动流控制应用于对方也是UART设备,不能应用于MODEM设备。


Download ppt "嵌入式系统讲义 第4章 S3C2410X系统结构 周国运 2007.3."

Similar presentations


Ads by Google