1、第9章 S3C44B0/S3C2410硬件结构与关键技术分析,基于同一种ARM内核结构,不同的公司给出了不同的外围结构。三星公司推出的S3C44B0和S3C2410两款芯片是当前较为流行的ARM处理器芯片。S3C44B0是基于ARM7TDMI架构的,S3C2410是基于ARM920T架构的。本章主要介绍S3C44B0和S3C2410的硬件资源和整体架构,对其存储控制器、NAND Flash控制原理、时钟电源管理、通用I/O接口和中断控制器作了详细介绍,并通过一定的实例来加深读者对关键技术的理解。,内容提要,91 处理器简介92 S3C44B0/S3C2410存储控制器93 S3C2410 NA
2、ND Flash控制器94 S3C44B0/S3C2410时钟电源管理95 S3C44B0/S3C2410通用 I/O端口96 S3C44B0/S3C2410中断机制10.1 S3C44B0/S3C2410 UART10.2 S3C44B0/S3C2410 I2C总线接口10.3 S3C44B0/S3C2410 LCD控制器,内容提要,91 处理器简介95 S3C44B0/S3C2410通用 I/O端口96 S3C44B0/S3C2410中断机制10.1 S3C44B0/S3C2410 UART92 S3C44B0/S3C2410存储控制器93 S3C2410 NAND Flash控制器A/D
3、转换器定时器,9.1 处理器简介,S3C44B0 和 S3C2410为手持设备和普通应用提供了低成本、低功耗、高性能微控制器的解决方案。为了降低整个系统的成本,S3C44B0 和S3C2410分别提供了很多内置功能部件,大大缩短了工程应用的开发周期。,9.1.2 S3C2410微控制器,与S3C44B0相比,基于ARM920T核架构的微控制器S3C2410具有更强大的功能,其主要特点如下:独立的16KB指令Cache和16KB数据Cache。系统存储控制器(片选逻辑,支持ROM、SRAM、Flash、FP/EDO/SDRAM)。LCD控制器(支持STN,TFT液晶显示屏,集成1个DMA控制器)
4、。NAND Flash控制器。,9.1.2 S3C2410微控制器,4个通道的DMA,支持存储器与IO之间的数据直接传输。3个带硬件握手的UART控制器。1个支持多主设备的I2C(Inter-Integrated Circuit)控制器。1个IIS(Inter-IC Sound)总线控制器。2个SPI(Serial Peripheral Interface)接口2个USB主机接口,1个USB设备接口。SD卡接口和MMC接口。4个具有PWM功能的16位定时/计数器和1个16位内部定时器,支持外部的时钟源。,9.1.2 S3C2410微控制器,看门狗定时器Watch Dog。117个通用可编程的I
5、/O口和24个外部中断源。具有8通道输入的10位ADC(Analog to Digital Converter)。具有日历功能的实时时钟RTC。功率控制模式:Nomal、Slow、Idle和Stop。带锁相环PLL(Phase Locked Loop)的片内时钟发生器。,9.1.2 S3C2410微控制器,控制接口部件完成预期任务的工作流程:设置工作方式(硬件初始化)启动读/写接口数据停止CPU与外部接口通过特殊功能寄存器完成,9.2.2 S3C2410存储控制与地址空间,地址空间分布:共8个Bank,最大容量1GB(128MB*8);Bank0Bank6为固定起始地址,Bank7起始地址可变
6、;Bank0Bank5为ROM或SRAM,大小为128MB;Bank6、7可以为SROM/DRAM/SDRAM,大小可选,但两组大小必须相同,95 S3C44B0/S3C2410通用 I/O端口,S3C44B0有71个多功能输入/输出引脚。有如下7个端口:两个9位输入/输出端口(端口E 和F)两个8位输入/输出端口(端口D 和G)一个16位输入/输出端口(端口C)一个10位输出端口(端口A)一个11位输入/输出端口(端口B),S3C2410有117个多功能输入/输出引脚。有如下8个端口:端口A(GPA):23位输出端口端口B(GPB):11位输入/输出端口端口C(GPC):16位输入/输出端口
7、端口D(GPD):16位输入/输出端口端口E(GPE):16位输入/输出端口端口F(GPF):8位输入/输出端口端口G(GPG):16位输入/输出端口端口H(GPH):11位输入/输出端口,9.5.1 端口控制描述,1端口配置(控制)寄存器在S3C44B0和S3C2410中,大多数引脚是复合式的。所以需要决定每个引脚所选择的功能。端口控制寄存器决定每个引脚的功能。在S3C44B0中,如果PG0-PG7用于在掉电模式下的唤醒信号,这些端口需要配置成中断模式。在S3C2410中,如果GPF0-GPF7和GPG0-GPG7用于断电模式下的唤醒信号,这些端口必须配置成中断模式。,9.5.1 端口控制描
8、述,2端口数据寄存器 如果这些端口被配置成输出端口,数据可以从相应的位被写入。如果端口被配置成输入端口,数据可以从相应的位读出。3端口上拉寄存器 端口上拉寄存器控制每个端口组的上拉电阻使能/禁止。当相应的位置0,引脚的上拉电阻被使能。为1时,上拉电阻被禁止。,9.5.1 端口控制描述,4外部中断控制寄存器S3C44B0 的8个外部中断与S3C2410的24个外部中断通过多种信号方法被请求。EXTINT寄存器可以设置外部中断触发的方式,如低电平触发、高电平触发、下降沿触发、上升沿触发和双沿触发。,9.5.2 端口控制寄存器,2.S3C2410端口寄存器端口A相关寄存器(P259),9.5.2 端
9、口控制寄存器,2.S3C2410端口寄存器,2.S3C2410端口寄存器端口B相关寄存器,9.5.2 端口控制寄存器,2.S3C2410端口寄存器,2.S3C2410端口寄存器端口B相关寄存器,9.5.2 端口控制寄存器,38:端口CH与端口B寄存器类似,详细信息见教材ARM嵌入式系统结构与编程第九章的9.5.2节的说明9.杂项控制寄存器MISCCR:时钟和USB相关设置10.DCLK控制寄存器:定义外部时钟源DCLKn信号,9.5.2 端口控制寄存器,11.外部中断控制寄存器:设置中断触发方式 To recognize the level interrupt,the valid logic
10、level on EXTINTn pin must be retained at least for 40ns because of the noise filter(ENTINT15:0).,9.5.2 端口控制寄存器,11.外部中断控制寄存器,9.5.2 端口控制寄存器,12.外部中断滤波寄存器:控制EINT23:16滤波长度,9.5.2 端口控制寄存器,13.外部中断屏蔽寄存器EINTMASK:是否允许外部中断EINT23:4,0允许、1屏蔽14.外部中断等待寄存器EINTPEND(EINT23:4):记录是否有未处理的外部中断请求,0无请求、1请求。可以通过对寄存器相应位写入1来清除特
11、定位。通用状态寄存器GSTATUS0GSTATUS4,9.5.3 通用I/O接口设计实例,LED与蜂鸣器接口电路S3C44B0的端口A的第0、1、2、3管脚分别与LED相连,端口E的第0管脚用来控制蜂鸣器。如图9-26所示,9.5.3 通用I/O接口设计实例,控制编程要求:根据LED的硬件电路图,编程实现LED的循环闪烁:LED1亮 延时,LED4灭-LED2亮 延时,LED1灭-LED3亮 延时,LED2灭-LED4亮 延时,LED3灭-蜂鸣器开 延时,蜂鸣器关,如此无限循环,实现LED霓虹灯式的循环闪烁。,9.5.3 通用I/O接口设计实例,端口配置:#define rPCONA(*(vo
12、latile unsigned*)0 x1d20000)#define rPDATA(*(volatile unsigned*)0 x1d20004)#define rPCONE(*(volatile unsigned*)0 x1d20028)#define rPDATE(*(volatile unsigned*)0 x1d2002c)rPCONA=rPCONA,9.5.3 通用I/O接口设计实例,延时函数:void Delay(int time)unsigned int i;for(i=0;itime;i+);LED1 控制函数:void LED1_Delay(char x)if(x=1)r
13、PDATA=rPDATA,9.5.3 通用I/O接口设计实例,主函数:void Main()while(1)LED1_Delay(1);LED4_Delay(0);LED2_Delay(1);LED1_Delay(0);Beep_Delay(1);Beep_Delay(0);,30,利用S3C2410X的GPF4、GPF5、GPF6、GPF7四个I/O管脚控制4个LED发光二极管,使其有规律的闪烁。应用开发思路:电路设计寄存器设置程序编写,*S3C2410X GPIO的应用,31,1 电路设计LED_1LED_4分别与GFP7GPF4相连通过GFP7GPF4引脚的高低电平来控制发光二极管的亮与
14、灭。当这几个引脚输出高电平的时候发光二极管熄灭,当这几个引脚输出低电平的时候发光二极管点亮。,*S3C2410X GPIO的应用,32,2 寄存器设置为了实现控制LED的目的,需要通过配置GPFCON寄存器将GPF4、GPF5、GPF6、GPF7设置为输出属性。如:配置GPFCON9:8两位为“01”,可实现将GPF4设置为输出属性。通过设置GFPDAT寄存器实现点亮与熄灭LED。如:配置GPFDAT4为“0”,可实现点亮LED4。配置GPFDAT4为“1”,可实现关闭LED4。对于本例来说,GPFUP可以不用设置。,*S3C2410X GPIO的应用,33,3 程序的编写1)相关寄存器定义#
15、define rGPFCON(*(volatile unsigned*)0 x56000050)/端口F的控制寄存器#define rGPFDAT(*(volatile unsigned*)0 x56000054)/端口F的数据寄存器#define rGPFUP(*(volatile unsigned*)0 x56000058)/端口F的上拉控制寄存器初始化:GPF4GPF7为输出,GPF0GPF3为外部中断,应如何设置相应的控制寄存器?,*S3C2410X GPIO的应用,34,3 程序的编写2)端口初始化void port_init(void)/=PORT F GROUP/端口:GPF7
16、GPF6 GPF5 GPF4 GPF3 GPF2 GPF1 GPF0/信号:LED_1 LED_2 LED_3 LED_4 PS2_INT CPLD_INT1 KEY_INT BUT_INT1/设置属性:Output Output Output Output EINT3 EINT2 EINT1 EINT0/二进制值:01 01,01 01,10 10,10 10 rGPFCON=0 x55aa;rGPFUP=0 xff;/GPF所有端口都不加上拉电阻,*S3C2410X GPIO的应用,35,3 程序的编写3)开启LEDvoid led_on(void)int i,nOut;nOut=0 xF
17、0;rGPFDAT=nOut,*S3C2410X GPIO的应用,4个灯以什么样的方式开启?,36,3 程序的编写3)开启LEDvoid led_on(void)int i,nOut;nOut=0 xF0;rGPFDAT=nOut,*S3C2410X GPIO的应用,37,3 程序的编写4)关闭LEDvoid led_off(void)int i,nOut;nOut=0;rGPFDAT=0;for(i=0;i100000;i+);rGPFDAT=nOut|0 x80;for(i=0;i100000;i+);rGPFDAT|=nOut|0 x40;for(i=0;i100000;i+);rGPF
18、DAT|=nOut|0 x20;for(i=0;i100000;i+);rGPFDAT|=nOut|0 x10;for(i=0;i100000;i+);,*S3C2410X GPIO的应用,4个灯以什么样的方式关闭?,38,3 程序的编写5)所有LED交替亮灭void led_on_off(void)int i;rGPFDAT=0;/所有LED全亮 for(i=0;i100000;i+);rGPFDAT=0 xF0;/所有LED全灭 for(i=0;i100000;i+);,*S3C2410X GPIO的应用,9.6 S3C44B0/S3C2410中断机制,中断是CPU在程序运行过程中,被内部
19、或外部的事件所打断,转去执行一段预先安排好的中断服务程序,中断服务程序执行完毕后,又返回原来的断点,继续执行原来的程序。对于微控制器来说,中断源可能有很多,这就需要一个中断源的管理者,这个中断管理者在微控制器里由“中断控制器”来充当。S3C44B0/S3C2410内部集成了中断控制器,能够管理多个中断源。,9.6.2 S3C2410中断控制器,S3C2410提供56个中断源,单独的信号线有32个。如表9-50所示。当中断源提出中断服务请求后,中断控制器经过仲裁之后再请求ARM920T核的FIQ或IRQ中断。仲裁过程依赖于硬件优先级逻辑,同时仲裁结果被写入到中断挂起寄存器中,用户可在中断服务程序
20、中读取该寄存器,从而识别出是哪一个中断源产生中断。,S3C2410中断优先级仲裁模块,9.6.2 S3C2410中断控制器,ARBITER0ARBITER5构成第一级仲裁逻辑,ARBITER6构成第二级仲裁逻辑。每个仲裁组用1位仲裁模式控制信号(ABR_MODE)和两位选择控制信号(ABR_SEL)确定中断优先级:(1)若ABR_SEL=00,则中断优先级为 REQ0、REQ1、REQ2、REQ3、REQ4、REQ5(2)若ABR_SEL=01,则中断优先级为REQ0、REQ2、REQ3、REQ4、REQ1、REQ5(3)若ABR_SEL=10,则中断优先级为 REQ0、REQ3、REQ4、R
21、EQ1、REQ2、REQ5(4)若ABR_SEL=11,则中断优先级为REQ0、REQ4、REQ1、REQ2、REQ3、REQ5,9.6.2 S3C2410中断控制器,仲裁模式控制信号(ABR_MODE)(1)当ABR_MODE设置为0时,ABR_SEL的值不会自动改变,仲裁组工作在固定工作模式下。(2)当ABR_MODE设置为1时,则ABR_SEL位值按循环方式自动改变,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,使用S3C44B0/S3C2410中断控制时,不仅要对I/O引脚和相应的功能部件进行设置,还要对中断控制器的相关寄存器进行初始化,相关的寄存器主要有中断控制
22、寄存器、中断源挂起寄存器、中断模式寄存器、中断屏蔽寄存器、中断优先级寄存器、中断挂起寄存器。2410中与外部中断(EINT)相关的寄存器还有:端口控制寄存器(GPFCON、GPGCON),外部中断控制寄存器(EXTINT0EXTINT2,控制中断触发方式和是否进行滤波),外部中断滤波寄存器(EINTFLT2、EINTFLT3),外部中断屏蔽(EINTMASK),外部中断等待寄存器(EINTPEND)。,S3C2410中断处理过程相关寄存器,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,7.S3C2410 源挂起寄存器SRCPND、SUBSRCPNDS3C2410源挂起寄存
23、器SRCPND由32位组成,每一个中断请求信号对应着其中的一位。中断源请求中断服务时,其所对应的位就被置1。SRCPND记录了哪些中断源发出了中断请求。子源挂起寄存器SUBSRCPND用于共用中断请求信号的中断控制。SRCPND、SUBSRCPND各位信息见教材第294页表9-58、表9-59。,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,*SUBSRCPND:子源挂起寄存器(0X4A000018),9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,*INTSUBMSK:中断子掩码寄存器(0X4A00001C),9.6.3 S3C44B0/S3C241
24、0 中断控制特殊功能寄存器,3.中断模式寄存器INTMODARM处理器的中断模式有两种:IRQ模式和FIQ模式。中断模式寄存器INTMOD如表9-53(P286)所示,每一个中断源对应着一位。当中断源的模式位设置为0时,中断会按IRQ模式来处理;当模式位设置为1时,对应的中断会按FIQ模式来处理。某一时刻只能有一个中断源在FIQ模式处理,即INTMOD寄存器只有一位可以设置为1。在FIQ模式下,INTPND寄存器和INTOFFSET寄存器不受任何影响。,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,4.中断屏蔽寄存器INTMSK在中断屏蔽寄存器INTMSK中,除了全局屏蔽
25、位外,每一个中断源对应着一位,确定对应的中断源是否被屏蔽。如教材P288表9-54所示。如果某位设置为1,则该位所对应的中断请求不会被处理;如果某位设置为0,则该位所对应的中断请求才会被处理。如果全局屏蔽位被设置为1,则所有的中断请求都不会被处理理。,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,8.S3C2410中断优先级寄存器PRIORITYS3C2410中断优先级寄存器PRIORITY只在IRQ模式下起作用,中断源的优先级由2位的ARB_SEL和1位的ARB_MODE的不同设定值来决定。,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,2.中断挂
26、起寄存器 INTPND中断挂起寄存器INTPND如表9-52所示,每一个中断源对应着一位。只有未被屏蔽且具有最高优先级、在源挂起寄存器中等待处理的中断请求,其对应的中断挂起位被置1(某时刻只有一位能够置为1)。S3C2410在中断服务程序中应该在清除SRCPND后对INTPND进行清除操作。清除时采用对相应位置1的方式进行。,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,6.S3C2410 中断偏移寄存器INTOFFSETS3C2410中断偏移寄存器INTOFFSET的值代表了中断源号,即在IRQ模式下,INTPND寄存器中某位置1,则INTOFFSET寄存器中的值是其对
27、应中断源的偏移量。该寄存器是只读的,可以通过清除SRCPND寄存器和INTPND寄存器的挂起位来自动清除。,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,56,S3C2410X中断处理程序实例1电路原理选择的外部中断EXTINT0和EXTINT11。中断的产生分别来自按钮SB1202和SB1203,当按钮按下时,EXTINT0(对应管脚GPF0)或EXTINT11(对应管脚GPG3)和地连接,输入低电平,从而向CPU发出中断请求。当CPU受理中断后,进入相应的中断服务程序,通过超级终端的主窗口显示当前进入
28、的中断号。电路原理图如图所示:,9.6.3 S3C44B0/S3C2410 中断控制特殊功能寄存器,9.5.2 端口控制寄存器,11.外部中断控制寄存器:设置中断触发方式 To recognize the level interrupt,the valid logic level on EXTINTn pin must be retained at least for 40ns because of the noise filter(ENTINT15:0).,9.5.2 端口控制寄存器,11.外部中断控制寄存器,9.5.2 端口控制寄存器,12.外部中断滤波寄存器:控制EINT23:16滤波长
29、度,9.5.2 端口控制寄存器,13.外部中断屏蔽寄存器EINTMASK:是否允许外部中断EINT23:4,0允许、1屏蔽14.外部中断等待寄存器EINTPEND(EINT23:4):记录是否有未处理的外部中断请求,0无请求、1请求。可以通过对寄存器相应位写入1来清除特定位。,62,S3C2410X中断处理程序实例2、寄存器设置(1)配置GPF0、GPG3管脚为中断属性。将GPFCON的1:0设置为“10”从而将GPF0配置为EINT0属性将GPGCON的7:6置为“10”从而将GPG3配置为EINT11属性(2)配置EINT0、EINT11为下降沿触发方式。将EXTINT0的2:0设置为“010”将EXTINT1的14:12设置为“010”(3)初始化EINTPEND、SRCPND、INTPND挂起寄存器中对应外部中断0和11的位。设置EINTPEND的11为0。设置SRCPND的0和5设置为0;设置INTPND的0和5设置为0;,63,S3C2410X中断处理程序实例2、寄存器设置(4)打开EINTMASK和INTMSK中对应外部中断0和11的屏蔽位。设置EINTMASK的11位为0;设置INTMSK的0和5为0;按上面的步骤配置完寄存器后,就可以响应中断了。当然还需要正确注册你的中断处理函数。,64,