




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统的原理及应用课程讲义目 录2.7 S3C2410 ARM微处理器简介22.7.1 内部结构32.7.2 S3C2410A 的启动72.7.3 存储器控制器72.7.4 Nand Flash控制器102.7.5 时钟和电源管理112.7.6 输入/输出口122.7.7 中断132.7.8 异步串行口UART17第4次课:S3C2410 ARM微处理器主要介绍4个方面的内容:(1) 内部结构(2) S3C2410A 的启动(3) 存储器控制器(4) Nand Flash控制器(5) 时钟和电源管理(6) 输入/输出口(7) 中断(8) 异步串行口UART2.7 S3C2410 ARM微处理器简介Samsung 公司推出的16/32位RISC处理器S3C2410A,为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。采用272 脚FBGA 封装,内含一个ARM920T 内核。为了降低整个系统的成本,S3C2410A提供了以下丰富的片内外围: 1个LCD控制器(支持STN和TFT带有触摸屏的液晶显示器); SDRAM控制器; 3个通道的UART; 4个通道的DMA; 4个具有PWM功能的计时器和1个内部时钟; 8通道的10位ADC; 触摸屏接口; I2C总线接口; 1个USB主机接口,1个USB设备接口; 2个SPI接口; SD接口和MMC卡接口; 117位通用I/O口和24位外部中断源;S3C2410A采用了ARM920T内核,0.18um工艺的CMOS标准宏单元和存储器单元。它的低功耗、精简和出色的全静态设计特别适用于对成本和功耗敏感的应用。同样它还采用了一种叫做Advanced Microcontroller Bus Architecture(AMBA)新型总线结构。S3C2410A的显著特性是它的CPU核心,是一个由Advanced RISC Machines(ARM)有限公司设计的16/32位ARM920T RISC处理器。ARM920T实现了MMU,AMBA BUS和Harvard高速缓冲体系结构。这一结构具有独立的16KB指令Cache和16KB数据Cache,每个都是由8字长的行(line)构成。通过提供一系列完整的系统外围设备,S3C2410A大大减少了整个系统的成本,消除了为系统配置额外器件的需要。关于S3C2410X和S3C2410A的区别如下:(1) A/D 9位升到10位;(2) MMC 的接口频率从10M 升到 20M。其他功能一样!管脚兼容,封装一样。S3C2410A可以替代S3C2410X。S3C2410X01已经停产。2.7.1 内部结构S3C2410X的内部结构框图如图2.7所示。图2.7 S3C2410X的内部结构Clock Cont.Interrupt Cont.JTAGPower ManagementARM920T Core200MHzLCD DMALCD Cont.4 Channel DMAControllerBus Cont.Arbiter/DecoderUSB HostCONT.NandFlash Cont.Memory Cont.AHBBridgeUARTSUSB DevicesSDI/MMCWatchdog TimerBUS Cont.SPII2CI2SGPIORTCADCUTRPNMLKJHGFEDCBA1 2 3 456 7 8 9 10 11 12 13 14 15 16 17 BOTTOM VIEW图2.8 S3C2410A 引脚定义图(272FBGA 封装)表2.1 272-Pin FBGA封装的引脚分配引脚顺序引脚号引脚定义引脚号引脚定义引脚号引脚定义A1DATA19B14ADDR0/GPA0D10ADDR19/GPA4A2DATA18B15nSRASD11VDDiA3DATA16B16nBE1:nWBE1:DQM1D12ADDR10A4DATA15B17VSSiD13ADDR5A5DATA11C1DATA24D14ADDR1A6VDDMOPC2DATA23D15VSSMOPA7DATA6C3DATA21D16SCKEA8DATA1C4VDDiD17nGCS0A9ADDR21/GPA6C5DATA12E1DATA31A10ADDR16/GPA1C6DATA7E2DATA29A11ADDR13C7DATA4E3DATA28A12VSSMOPC8VDDiE4DATA30A13ADDR6C9ADDR25/GPA10E5VDDMOPA14ADDR2C10VSSMOPE6VSSMOPA15VDDMOPC11ADDR14E7DATA3A16nBE3:nWBE3:DQM3C12ADDR7E8ADDR26/GPA11A17nBE0:nWBE0:DQM0C13ADDR3E9ADDR23/GPA8B1DATA22C14nSCASE10ADDR18/GPA3B2DATA20C15nBE2:nWBE2:DQM2E11VDDMOPB3DATA17C16nOEE12ADDR11B4VDDMOPC17VDDiE13nWEB5DATA13D1DATA27E14nGCS3/GPA14B6DATA9D2DATA25E15nGCS1/GPA12B7DATA5D3VSSMOPE16nGCS2/GPA13B8DATA0D4DATA26E17nGCS4/GPA15B9ADDR24/GPA9D5DATA14F1TOUT1/GPB1B10ADDR17/GPA2D6DATA10F2TOUT0/GPB0B11ADDR12D7DATA2F3VSSMOPB12ADDR8D8VDDMOPF4TOUT2/GPB2B13ADDR4D9ADDR22/GPA7F5VSSOPF6VSSiH4nXDREQ1/GPB8K13TXD2/nRTS1/GPH6F7DATA8H5nTRSTK14RXD1/GPH5F8VSSMOPH6TCKK15TXD0/GPH2F9VSSiH12CLE/GPA17K16TXD1/GPH4F10ADDR20/GPA5H13VSSOPK17RXD0/GPH3F11VSSiH14VDDMOPL1VD0/GPC8Table 2.1 272-Pin FBGA封装的引脚分配引脚顺序(Continued) 引脚号引脚定义引脚号引脚定义引脚号引脚定义F12VSSMOPH15VSSiL2VD1/GPC9F13SCLK0H16XTOpllL3LCDVF2/GPC7F14SCLK1H17XTIpllL4VD2/GPC10F15nGCS5/GPA16J1TDIL5VDDiarmF16nGCS6:nSCS0J2VCLK:LCD_HCLK/GPC1L6LCDVF1/GPC6F17nGCS7:nSCS1J3TMSL7IICSCL/GPE14G1nXBACK/GPB5J4LEND:STH/GPC0L9EINT11/nSS1/GPG3G2nXDACK1/GPB7J5TDOL11VDDi_UPLLG3TOUT3/GPB3J6VLINE:HSYNC:CPV/GPC2L12nRTS0/GPH1G4TCLK0/GPB4J7VSSiarmL13UPLLCAPG5nXBREQ/GPB6J11EXTCLKL14nCTS0/GPH0G6VDDaliveJ12nRESETL15EINT6/GPF6G7VDDiarmJ13VDDiL16UEXTCLK/GPH8G9VSSMOPJ14VDDaliveL17EINT7/GPF7G11ADDR15J15PWRENM1VSSiarmG12ADDR9J16nRSTOUT/GPA21M2VD5/GPC13G13nWAITJ17nBATT_FLTM3VD3/GPC11G14ALE/GPA18K1VDDOPM4VD4/GPC12G15nFWE/GPA19K2VM:VDEN:TP/GPC4M5VSSiarmG16nFRE/GPA20K3VDDiarmM6VDDOPG17nFCE/GPA22K4VFRAME:VSYNC:STV/GPC3M7VDDiarmH1VSSiarmK5VSSOPM8IICSDA/GPE15H2nXDACK0/GPB9K6LCDVF0/GPC5M9VSSiarmH3nXDREQ0/GPB10K12RXD2/nCTS1/GPH7M10DP1/PDP0M11EINT23/nYPON/GPG15P8SPICLK0/GPE13T5I2SLRCK/GPE0M12RTCVDDP9EINT12/LCD_PWREN/GPG4T6SDCLK/GPE5M13VSSi_MPLLP10EINT18/GPG10T7SPIMISO0/GPE11M14EINT5/GPF5P11EINT20/XMON/GPG12T8EINT10/nSS0/GPG2M15EINT4/GPF4P12VSSOPT9VSSOPM16EINT2/GPF2P13DP0T10EINT17/GPG9M17EINT3/GPF3P14VDDi_MPLLT11EINT22/YMON/GPG14N1VD6/GPC14P15VDDA_ADCT12DN0N2VD8/GPD0P16XTIrtcT13OM3N3VD7/GPC15P17MPLLCAPT14VSSA_ADCN4VD9/GPD1R1VDDiarmT15AIN1Table 2.1 272-Pin FBGA封装的引脚分配引脚顺序(Continued)引脚号引脚定义引脚号引脚定义引脚号引脚定义N5VDDiarmR2VD14/GPD6T16AIN3N6CDCLK/GPE2R3VD17/GPD9T17AIN5N7SDDAT1/GPE8R4VD18/GPD10U1VD15/GPD7N8VSSiarmR5VSSOPU2VD19/GPD11N9VDDOPR6SDDAT0/GPE7U3VD21/GPD13N10VDDiarmR7SDDAT3/GPE10U4VSSiarmN11DN1/PDN0R8EINT8/GPG0U5I2SSDI/nSS0/GPE3N12VrefR9EINT14/SPIMOSI1/GPG6U6I2SSDO/I2SSDI/GPE4N13AIN7R10EINT15/SPICLK1/GPG7U7SPIMOSI0/GPE12N14EINT0/GPF0R11EINT19/TCLK1/GPG11U8EINT9/GPG1N15VSSi_UPLLR12CLKOUT0/GPH9U9EINT13/SPIMISO1/GPG5N16VDDOPR13R/nBU10EINT16/GPG8N17EINT1/GPF1R14OM0U11EINT21/nXPON/GPG13P1VD10/GPD2R15AIN4U12CLKOUT1/GPH10P2VD12/GPD4R16AIN6U13NCONP3VD11/GPD3R17XTOrtcU14OM2P4VD23/nSS0/GPD15T1VD13/GPD5U15OM1P5I2SSCLK/GPE1T2VD16/GPD8U16AIN0P6SDCMD/GPE6T3VD20/GPD12U17AIN2P7SDDAT2/GPE9T4VD22/nSS1/GPD142.7.2 S3C2410A 的启动S3C2410A支持从NAND Flash启动,NAND Flash具有容量大,比NOR Flash价格低等特点。系统采用NAND Flash与SDRAM组合,可以获得非常高的性价比。S3C4120X具有三种启动方式,可通过OM 1:0管脚(OM0为管脚UR14, OM1为管脚U15)进行选择。OM 1:0 = 00从Nand Flash 启动;OM 1:0 = 01从16位宽的ROM启动;OM 1:0 = 10从32位宽的ROM启动;OM 1:0 = 11TEST模式。2.7.3 存储器控制器先介绍一下存储器类型。 Flash ROM FLASH ROM属于真正的单电压芯片,在使用上很类似EPROM,因此,有些书籍上便把FLASH ROM作为EPROM的一种。事实上,二者还是有差别的。FLASH ROM在擦除时,也要执行专用的刷新程序,但是在删除资料时,并非以Byte为基本单位,而是以Sector(又称Block)为最小单位,Sector的大小随厂商的不同而有所不同;只有在写入时,才以Byte为最小单位写入;FLASH ROM芯片的读和写操作都是在单电压下进行,不需跳线,只利用专用程序即可方便地修改其内容。DRAM,动态随机存取存储器,需要不断的刷新(ms级),才能保存数据。而且是行列地址复用的,许多都有页模式。 SRAM,静态的随机存取存储器,加电情况下,不需要刷新,数据不会丢失,而且,一般不是行列地址复用的。需要更大的硅片面积,成本较高。它的存取时间比DRAM要短得多,经常用于Cache。 SDRAM,同步的DRAM,即数据的读写需要时钟来同步。因而能够工作在较高的时钟频率下。数据从存储元(memory cell) 被流水化地取出,最后突发式(burst)输出到总线。DRAM和SDRAM由于实现工艺问题,容量较SRAM大。但是读写速度不如SRAM。存储器控制是通过相关的寄存器来实施的。寄存器分为控制寄存器和状态寄存器。可以给控制寄存器赋值以得到所需要的状态,而状态寄存器会根据情况自行产生变化。不要试图控制状态寄存器。存储器控制器是由若干寄存器组成。了解这些寄存器,就可以阅读或编写Bootloader程序了。(1) 总线宽度和等待控制寄存器寄存器地址读/写功能复位后的值BWSCON 0x48000000R/W总线宽度和等待控制0x000000bank0 的数据总线(nGCS0)必须首先设置成16 位或32 位的。因为bank0 通常作为引导ROM 区(映射到地址0x0000-0000),在复位时,系统将检测OM1:0上的逻辑电平,并依据这个电平来决定bank0 区存储器的总线宽度。BWSCON寄存器描述了bank1bank7数据总线宽度和等待控制。总线宽度可以是8位、16位和32位。每个bank_n(n=17)用该寄存器的4位来描述,分别是UB/LB(即高8位和低8位,有些存储器给出2个引脚可以进行选择)、是否需要总线访问等待周期、数据总线宽度的是多少(占用了2位)。如果对每个bank使能WAIT功能,当对某个bank区进行访问时,nOE的低电平有效时间就会在nWAIT引脚的控制下延长。从tacc-1时刻开始检测nWAIT的状态。在采样到nWAIT为高电平后的下一个时钟,nOE将恢复高电平。nWAIT对nWE信号的作用与对nOE信号相同。(2) 组控制寄存器(nGCS0 nGCS7)寄存器地址读/写功能复位后的值BANKCON00x48000004R/WBANK0 控制0x0700BANKCON10x48000008R/WBANK1 控制0x0700BANKCON20x4800000cR/WBANK2 控制0x0700BANKCON30x48000010R/WBANK3 控制0x0700BANKCON40x48000014R/WBANK4 控制0x0700BANKCON50x48000018R/WBANK5 控制0x0700BANKCON60x4800001cR/WBANK6 控制0x18008BANKCON70x48000020R/WBANK7 控制0x18008组控制寄存器BANKCON05均用15位来描述地址信号建立时间Tacs、片选建立时间Tcos、访问周期Tacc、片选保持时间Tcoh、地址信号保持时间Tcah、页访问周期Tacp和页访问模式PMC等。组控制寄存器BANKCON67除了用15位描述上述内容外,还增加了2位来描述存储器类型MT。当MT=11时,表示存储器类型为SDRAM时,位3:2 表示RAS(行地址使能)到CAS(列地址使能)的延迟时间Trcd。位1:0 表示列地址位数(可以是8、9、10位)。如此一来,总共8 个存储器bank中,6 个是ROM,SRAM 等类型存储器bank(05),剩下的2 个可以作为ROM,SRAM,SDRAM 等存储器bank(67)。7个存储器bank (06)的起始地址是固定的。最后一个bank(7)的起始地址是可调整的。最后两个bank(67) 的大小是可编程的。OM1:0=00OM1:0=01,100xffff_ffff未使用0x6000_0000用N/F启动Boot internal / SRAM(4KB)未使用0x4800_0000SFR区SFR区未使用0x4000_0fffBootSRAM0x4000_0000(4KBytes)SROM/SDRAM0x3800_0000(nGCS7)2/4/8/16/32/64/128MBSROM/SDRAM(nGCS7)SROM/SDRAM0x3000_0000(nGCS6)2/4/8/16/32/64/128MBSROM/SDRAM(nGCS6)SROM0x2800_0000 (nGCS5)128MBSROM (nGCS5)SROM0x2000_0000 (nGCS4)128MBSROM1GB可访问空间 (nGCS4)SROM0x1800_0000 (nGCS3)128MBSROM (nGCS3)SROM0x1000_0000 (nGCS2)128MBSROM (nGCS2)SROM0x0800_0000 (nGCS1)128MBSROM (nGCS1)SROM不用N/F启动0x0000_0000 (nGCS0)128MB (3) REFRESH控制寄存器寄存器地址读/写功能复位后的值REFRESH0x48000024R/WDRAM/SDRAM 刷新控制0xAC0000用来支持SDRAM 的自刷新和掉电模式。(4) BANKSIZE控制寄存器寄存器地址读/写功能复位后的值BANKSIZE0x48000028R/W可改变存储器大小0BANKSIZE的第7位BURST_EN,突发传输模式使能。这种方式传输效率较高。BANKSIZE的第5位SCKE_EN,同步时钟使能。BANKSIZE的第4位SCLK_EN有如下功能:0 = SCLK总是激活;1 = SCLK只有在访问期间(推荐的)激活。SCLK=1时,只有在SDRAM访问周期期间,SCLK才使能,这样做是可以减少功耗。当SDRAM不被访问时,SCLK变成低电平。BANKSIZE的2:0,bank6/7的存贮空间分配。(5) SDRAM模式控制寄存器寄存器地址读/写功能复位后的值MRSRB60x4800002CR/WBANK6 的模式设置寄存器xxxMRSRB70x48000030R/WBANK7 的模式设置寄存器xxx主要对突发(burst)传输模式下的写进行设置:如。burst写的长度、类型和时间等。2.7.4 Nand Flash控制器当前,NOR flash存储器的价格比较昂贵,而SDRAM和NAND flash存储器的价格相对来说比较合适,这样就激发了一些用户产生希望从NAND flash启动和引导系统,而在SDRAM上执行主程序代码的想法。S3C2410A恰好满足这一要求,它可以实现从NAND flash上执行引导程序。为了支持NAND flash的系统引导,S3C2410A具备了一个内部SRAM缓冲器,叫做“Steppingstone”。当系统启动时,NAND flash存储器的前面4KByte字节将被自动载入到Steppingstone中,然后系统自动执行这些载入的引导代码。一般情况下,这4K的引导代码需要将NAND flash中程序内容拷贝到SDRAM中,在引导代码执行完毕后跳转到SDRAM执行。使用S3C2410A内部硬件ECC功能可以对NAND flash的数据进行有效性的检测。 引导过程(1) 复位。(2) 如果自动导入模式使能,NAND flash存储器的前面4K字节被自动拷贝到Steppingstone 内部缓冲器中。(3) Steppingstone被映射到nGCS0。(4) CPU在Steppingstone的4-KB内部缓冲器中开始执行引导代码。注意:在自动导入模式下,不进行ECC检测。因此,NAND flash的前4KB应确保不能有位错误(一般Nandflash厂家都确保)。工作过程如图2.9所示。图2.9 Nand Flash 工作方式Nand Flash模式自动启动模式用户程序操作CPU操作(boot代码)Nand Flash存储器Nand Flash控制器特殊功能寄存器steppingstone(4KB Buffer) NAND FLASH 模式配置(1) 通过NFCONF寄存器配置NAND flash;(2) 写NAND flash命令到NFCMD寄存器;(3) 写NAND flash地址到NFADDR寄存器;(4) 在读写数据时,通过NFSTAT寄存器来获得NAND flash的状态信息。应该在读操作前或写入之后检查R/nB信号(准备好/忙信号)。寄存器地址读/写功能复位后的值NFCONF0x4E000000R/WNAND flash配置-NFCMD0x4E000004R/WNAND flash 命令设置寄存器-NFADDR0x4E000008R/WNAND flash 地址设置寄存器-NFDATA0x4E00000CR/WNAND flash 数据寄存器-NFSTAT0x4E000010RNAND flash 操作状态-NFECC0x4E000014RNAND flash ECC寄存器-需要说明的是:NAND Flash与Nor Flash是有很大不同的。从接口来看:NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。NAND读和写操作采用512字节的块,这有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。所有flash器件都受位交换现象的困扰。位真的改变了,就必须采用错误检测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,在使用NAND闪存的时候,应使用EDC/ECC算法。用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。2.7.5 时钟和电源管理时钟和电源由3部分组成:时钟控制、USB控制和电源控制。(1) 时钟控制S3C2410A能够产生3种时钟信号,分别是FCLK、HCLK、PCLK。FCLK应用于CPU的时钟,HCLK用于AHB bus各种外围设备,PCLK 用于APB bus各种接口设备。其中FCLK 应用的就是MPLL的频率,不用设置。HCLK和PCLK 可以设置为FCLK或FCLK/2 ,即通过设置相应得寄存器CLKDIVN中的对应位HDIVN和PDIVN(即CLKDIVN的第1位和第0位)即可。CLKDIVN控制寄存器寄存器地址读/写功能复位后的值CLKDIVN0x4C000014R/W时钟分频控制寄存器 0x00000000S3C2410A有2个锁相环,一个是MPLL(用于FCLK、HCLK、PCLK);另一个是UPLL(用于USB)。时钟控制逻辑可以在无PLL时使时钟变慢,且可以通过软件将时钟连接或不连接到每一个外设的时钟上,这将减少电源的功耗。(2) USB控制主要对USB的时钟参数进行配置。(3) 电源控制S3C2410A通过4种电源管理模式有效地控制了功耗。这4种模式分别是NORMAL模式、SLOW模式、IDLE模式和POWER-OFF模式。NORMAL 模式:电源管理模块为CPU及所有的外设提供时钟。在这种模式下,如果所有外设都工作的话,电源的功耗将是最大的。用户可以通过软件控制外设的运行。如:假如不需要一个定时器,则可以断开时钟的连接以减少功耗。SLOW模式: 非锁相环模式。与正常模式不同,SLOW模式直接把一个外部的时钟作为S3C2410的FCLK而没有锁相环。在这种模式下,电源功耗仅取决于外部时钟的频率。因PLL的功耗应除外。IDLE 模式(空闲模式): 电源管理模块为所有的外设提供时钟而仅把时钟FCLK与CPU核断开。该模式能够减少因CPU核所带来的电源功耗。任何对CPU的中断请求将唤醒空闲模式。Power_OFF 模式: 电源管理模块断开内部电源。在这种模式下,除了唤醒逻辑外,CPU和内部逻辑将不会产生电源功耗。激活Power_OFF 模式需要2个独立的电源。一个电源为唤醒逻辑供电。另一个为内部逻辑(包括CPU)供电。且这两个电源均可被控制为断或开。在Power_OFF 模式下,第二个电源(为CPU和内部逻辑供电)将被关断。声明EINT15:0或RTC报警中断请求可唤醒Power_OFF 模式。另外:需要指出的是,S3C2410A提供了一个片内的实时时钟,可提供标准的日期和时间,并提供报警中断和滴答中断。2.7.6 输入/输出口S3C2410A 有117多功能I/O口,它们分别是: Port A (GPA): 23-输出口 Port B (GPB): 11-输入/输出口 Port C (GPC): 16-输入/输出口 Port D (GPD): 16-输入/输出口 Port E (GPE): 16-输入/输出口 Port F (GPF): 8-输入/输出口 Port G (GPG): 16-输入/输出口 Port H (GPH): 11-输入/输出口每个口通过三个寄存器进行配置及读写数据。分别是:GPxCON、GPxDAT、GPyUP其中x为AH,y为BH。(1) 输入/输出口配置寄存器(GPACON-GPHCON)在S3C2410A中大多数输入/输出口引脚是复用的,因此需要用输入/输出口控制寄存器来确定每个引脚的功能。如果GPF0 GPF7 和 GPG0 GPG7为Power-OFF模式下的唤醒信号,那么这这些管脚必须被配置成中断模式。(2) 输入/输出口数据寄存器(GPADAT-GPHDAT)如果管脚被置成输出方式则可以向相应的位写数据;如果管脚被置成输入方式则可以从相应的位读数据。(3) 输入/输出口上拉电阻使能寄存器(GPBUP-GPHUP)该寄存器能够使能或禁止每个端口组是否需要上拉电阻。0表示使能,1表示禁止。如果该端口上拉电阻使能,则上拉电阻始终有效,无论是否设置了管脚的功能。2.7.7 中断S3C2410A的中断控制器能够接收来自56个中断源的请求。这些中断源由内部的外设提供(如DMA控制器、UART等)。中断的工作过程如图2.10所示。图2.10 硬件中断的工作过程中断请求数据总线中断应答中断请求地址总线外设控制器中断控制逻辑芯片处理器地址解码逻辑中断异常处理模块总共由以下8个寄存器构成: SRCPND (中断源悬挂寄存器) INTMOD (中断模式寄存器) INTMSK (中断屏蔽寄存器) PRIORITY (中断优先级寄存器) INTPND (中断悬挂寄存器) INTOFFSET (中断偏移寄存器) SUBSRCPND (子中断源悬挂寄存器) INTSUBMSK (子中断屏蔽寄存器)(1) SRCPND/ SUBSRCPND寄存器地址读/写功能复位后的值SRCPND0X4A000000R/W表示中断请求状态。0 表示没有请求中断;1表示已经请求中断。0x00000000SUBSRCPND0X4A000018R/W表示中断请求状态。0 表示没有请求中断;1表示已经请求中断。0x00000000这两个寄存器在功能上是相同的,它们是中断源引脚寄存器,在一个中断异常处理流程中,中断信号传进中断异常处理模块后首先遇到的就是SRCPND/ SUBSRCPND,这两个寄存器的作用是用于标示出哪个中断请求被触发。SRCPND的有效位为32,SUBSRCPND 的有效位为11,它们中的每一位分别代表一个中断源。SRCPND为主中断源引脚寄存器,SUBSRCPND为副中断源引脚寄存器。每个位的初始值皆为0。假设现在系统触发了TIMER0中断,则SRCPND的第10bit将被置1,代表TIMER0中断被触发,该中断请求即将被处理(若该中断没有被屏蔽的话)。SUBSRCPND情况与SRCPND相同,这里就不多讲了。(2) INTMOD寄存器地址读/写功能复位后的值INTMOD0X4A000004R/W0为IRQ模式,1为FRQ模式0x00000000该寄存器有效位为32位,每一位与SRCPND中各位相对应,它的作用是指定该位相应的中断源处理模式(IRQ还是FIQ)。若某位为0,则该位相对应的中断按IRQ模式处理,为1则以FIQ模式进行处理,该寄存器初始化值为0x00000000,即所有中断皆以IRQ模式进行处理。(3) INTMSK/ INTSUBMSK 寄存器地址读/写功能复位后的值INTMSK0X4A000008R/W确定相应的中断源是否被屏蔽。1是,0否。0xFFFFFFFFINTSUBMSK0X4A00001CINTSUBMSK确定相应的中断源是否被屏蔽。1是,0否。0x7FFINTMSK为主中断屏蔽寄存器,INTSUBMSK为副中断屏蔽寄存器。INTMSK有效位为32,INTSUBMSK有效位为11,这两个寄存器各个位与SRCPND和SUBSRCPND分别对应。它们的作用是决定该位相应的中断请求是否被处理。若某位被设置为1,则该位相对应的中断产生后将被忽略(CPU不处理该中断请求),设置为0则对其进行处理。这两个寄存器初始化后的值是0xFFFFFFFF和0x7FF,既默认情况下所有的中断都是被屏蔽的。(4) PRIORITY寄存器地址读/写功能复位后的值PRIORITY0x4A00000CR/WIRQ 优先级控制寄存器0x7F先弄清楚一点,现在要讨论的是一个中断优先级的判断问题。为什么会有中断有先级的问题呢?我们知道CPU某个时刻只能对一个中断源进行中断处理,如果现在有3个中断同时发生了,那CPU要按什么顺序处理这个3个中断呢?这正是引入优先级判断的原因所在。通过优先级判断,CPU可以按某种顺序逐个处理中断请求。S3C2410的优先级判断分为两级。SRCPND寄存器对应的32个中断源总共被分为6个组,每个组由一个ARBITER(05)寄存器对其进行管理。中断必须先由所属组的ARBITER(05)进行第一次优先级判断(第一级判断)后再发往ARBITER6进行最终的判断(第二级判断)。ARBITER(05)这六个组的优先级已经固定,我们无法改变,也就是说由ARBITER0控制的该组中断优先级最高(该组产生的中断进行第一级判断后永远会以REQ0向ARBITER6传递过去)其次是ARBITER1, ARBITER2, ARBITER4, ARBITER4, ARBITER5。我们能够控制的是某个组里面各个中断的优先级顺序。怎么控制?通过PRIORITY寄存器进行控制。PRIORITY寄存器内部各个位被分为两种类型,一种是ARB_MODE,另一种为ARB_SEL。 ARB_MODE类型有5组对应ARBITER(26),ARB_SEL类型有7组对应ARBITER(06)。现在以ARBITER2为例,讲解中断组与PRIORITY寄存器中ARB_SEL, ARB_MODE之间的相互关系。首先我们看到ARBITER2寄存器管理的该组中断里包括了6个中断,分别是INT_TIMER0,INT_TIMER1,INT_TIMER2,INT_TIMER3,INT_TIMER4,INT_UART2,她们的默认中断请求号分别为REQ0,REQ1,REQ2,REQ3,REQ4,REQ5。我们先看PRIORITY寄存器中的ARB_SEL2,该参数由两个位组成,初始值为00。从该表可以看出00定义了一个顺序 0-1-2-3-4-5 ,这个顺序就是这组中断组的优先级排列,这个顺序指明了以中断请求号为0(REQ0)的INT_TIMER0具有最高的中断优先级,其次是INT_TIMER1,INT_TIMER2。假设现在ARB_SEL2的值被我们设置为01。则一个新的优先级次序将被使用,01对应的优先级次序为0-2-3-4-1-5,从中可以看出优先级最高和最低的中断请求和之前没有变化,但本来处于第2优先级的INT_TIMER1中断现在变成了第5优先级。从ARB_SEL2被设置为00,01,10,11各个值所出现的情况我们可以看出,除最高和最低的优先级不变以外,其他各个中断的优先级其实是在做一个旋转排列(rotate)。为了达到对各个中断平等对待这一目标,我们可以让优先级次序在每个中断请求被处理完之后自动进行一次旋转,如何自动让它旋转呢?我们可以通过ARB_MODE2达到这个目的,该参数只有1个 bit,置1代表开启对应中断组的优先级次序旋转,0则为关闭。事实上当该位置为1之后,每处里完某个组的一个中断后,该组的ARB_SEL便递增在1(达到11后恢复为00)。现在我们来看ARB_MODE2=1,ARB_SEL2=00:当前ARBITER2的优先级顺序为0-1-2-3-4-5,假设现在该组的1号中断请求INT_TIMER1和2号中断请求INT_TIMER2被同时触发,CPU根据优先级判断后决定先把INT_TIMER1中断向ARBITER6进行发送(在ARBITER6做第最终优先级判断),接着再向ARBITER6发送INT_TIMER2中断。请注意,在INT_TIMER1被处理完毕后,该组中段的优先级次序被自动做了一次旋转,旋转后ARBITER2的优先级顺序变为0-2-3-4-1-5。假设之后某个时刻该组的INT_TIMER1和INT_TIMER2又被同时触发,则此时CPU优先处理的会是INT_TIMER2。若我们另ARB_MODE2=0,则改组的中断优先级次序在任何情况下都不做任何改变,除非我们人为地重新设置了ARB_SEL2的值。(5) INTPND 寄存器地址读/写功能复位后的值INTPND0X4A000010R/W表示中断请求状态。0 表示没有请求中断;1表示已经请求中断。0x00000000INTPND寄存器与SRCPND长得一模一样,但他们在中断异常处理中却扮演着不同的角色,如果说SRCPND是中断信号进入中断处理模块后所经过的第一个场所的话,那么INTPND 则是中断信号在中断处理模块里经历的最后一个寄存器。它的每个位对应一个中断请求,若该位被置1,则表示相应的中断请求被触发,描述到这里你可能会发现它不仅和SRCPND长得一模一样,就连功能都一样,其实不然,他们在功能上有着重大的区别。SRCPND是中断源引脚寄存器,某个位被置1表示相应的中断被触发,但我们知道在同一时刻内系统可以触发若干个中断,只要中断被触发了,SRCPND的相应位便被置1,也就是说SRCPND 在同一时刻可以有若干位同时被置1,然而INTPND则不同,他在某一时刻只能有1个位被置1,INTPND 某个位被置1(该位对应的中断在所有已触发的中断里具有最高优先级且该中断没有被屏蔽),则表示CPU即将或已经在对该位相应的中断进行处理。于是我们可以有一个总结:SRCPND说明了有什么中断被触发了,INTPND说明了CPU即将或已经在对某一个中断进行处理。特别注意:每当某一个中断被处理完之后,我们必须手动地把SRCPND,SUBSRCPND, INTPND三个寄存器中与该中断相应的位由1设置为0,刚才我说INTPND的操作很特别,它的特别之处就在于对当我们要把该寄存器中某个值为1的位设置为0时,我们不是往该位置0,而是往该位置1。假设SRCPND=0x00000003,INTPND=0x00000001,该值说明当前0号中断和1号中断被触发,但当前正在被处理的是0号中断,处理完毕后我们应该这样设置INTPND和SRCPND:SRCPND = 0x00000002 /位0被置为0INTPND = 0x00000001 /位0被置为0(方法是往该位写入1)(6) INTOFFSET寄存器地址读/写功能复位后的值INTOFFSET0X4A000014R表明哪个中断正在被处理(也即正在INTPND中)0x00000000该寄存器的功能则很简单,它的作用只是用于表明哪个中断正在被处理。若当前INT_TIMER0被触发了,则该寄存器的值为10,以此类推。下面用INT_TIMER0, INT_TIMER2和INT_UART0三个中断完整地介绍一次中断异常处理。首先我们得做几个假设:假设1:这三个中断的屏蔽被取消。假设2:PRIORITY寄存器中ARB_MODE2,ARB_MODE5皆为0,既不进行优先级的自动旋转排序,任何时候ARBITER2,ARBITER5控制的中断组优先级次序分别为0-1-2-3-4-5和1-2-3-4。假设3:这三个中断皆为IRQ类型。假设4:这三个中断同时被触发。INT_TIMER0, INT_TIMER2和INT_UART0三个中断被同时触发,此时三个中断信号流向SRCPND寄存器,使该寄存器中的第10位,12位,28位被置为1,中断信号继续向前流经INTMASK 寄存器,这三个中断都没有被屏蔽,于是信号进一步流经INTMO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年洗碗厂竞争协议合同样本
- 2025年试用期间劳动合同样本
- 2025家电购货合同范文
- 2025餐饮行业采购销售合同模板
- 学生活动式教学法:现代诗歌欣赏与创作
- 2025关于投资理财的合同
- 2025年高温中暑相关试题及答案
- 房屋装饰艺术合同
- 解聘协议的义务履行
- 2025年甘肃省平凉市公务员省考公共基础知识模拟题(附答案)
- 新疆遴选公务员笔试题及答案
- (高清版)DG∕TJ 08-2165-2015 建设项目交通影响评价技术标准
- 过氧化氢低温等离子灭菌器规范
- 国企出纳笔试试题及答案
- 第32届全国中学生物理竞赛复赛答案
- 工地现浇楼板合同协议
- 《讲解员培训》课件
- 2022标准化数据中心机房建设项目设计方案
- 脚的重要性专题课件
- 建筑工程八大员岗位职责
- 消防工程全套报验资料
评论
0/150
提交评论