中国矿业大学嵌入式课件7讲课稿.ppt
中国矿业大学嵌入式课件中国矿业大学嵌入式课件7 73.1 S3C2410A简介简介n3.1.1 S3C2410A内部结构nS3C2410是Samsung公司推出的16/32位RISC处理器,主要面向高性价比、低功耗的手持设备应用。S3C2410有S3C2410X和S3C2410A两个型号,A型是X型的改进型,具有更好的性能和更低的功耗。n为了降低系统的成本,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,先进的微控制器总线体系结构)新型总线结构。nARM920T采用了MMU,AMBA总线和Harvard高速缓存体系结构,该结构具有独立的16KB指令Cache和16KB数据Cache,每个Cache都是由8字长的行组成的。nS3C2410A提供一组完整的系统外围设备接口,从而大大减少了整个系统的成本,省去了为系统配置额外器件的开销。S3C2410A集成的片上功能包括:内核电压1.8V/2.0V,存储器电压3.3V,外部I/O电压3.3V;具有16KB的I-Cache和16KB的D-Cache以及MMU;外部存储器控制器(SDRAM控制和片选逻辑);LCD控制器(最大支持4K彩色STN和256K彩色TFT)提供1通道LCD专用DMA;4通道DMA并有外部请求引脚端;3通道UART(IrDAl.0,16字节Tx FIFO和16字节Rx FIFO)/2通道SPI;1通道多主设I2C总线和1通道I2S总线控制器;版本1.0SD主接口和2.11兼容版MMC卡协议;2个USB主设接口/1个USB从设接口(版本1.1);4通道PWM定时器和1通道内部定时器;看门狗定时器;117位通用I/O口和24通道外部中断源;电源控制模式有正常、慢速、空闲和电源关断4种模式;8通道10位ADC和触摸屏接口;具有日历功能的RTC;使用PLL的片上时钟发生器。S3C2410A的内部结构方框图如图3.1.1所示。图3.1.1 S3C2410A内部结构方框图3.2 S3C2410A存储器控制器存储器控制器n3.2.1 S3C2410A的存储器控制器特性nS3C2410A的存储器控制器提供访问外部存储器所需要的存储器控制信号,具有以下特性:支持小大端(通过软件选择)。地址空间:每个bank有128 MB(总共有8个bank,共1 GB)。除bank0只能是16/32位宽之外,其他bank都具有可编程的访问位宽(8/16/32位)。总共有8个存储器bank(bank0bank7):一其中6个用于ROM,SRAM等;一剩下2个用于ROM,SRAM,SDRAM等。7个固定的存储器bank(bank0bank6)起始地址。最后一个bank(bank7)的起始地址是可调整的。最后两个bank(bank6和bank7)的大小是可编程的。所有存储器bank的访问周期都是可编程的。总线访问周期可以通过插入外部等待来扩展。支持SDRAM的自刷新和掉电模式。n3.2.1 S3C2410A的存储器映射nS3C2410A复位后,存储器的映射情况如图3.2.1所示,bank6和bank7对应不同大小存储器时的地址范围参见表3.2.1。不使用NAND Flash作为启动ROM 使用NAND Flash作为启动ROM注意:SROM表示是ROM或SRAM类型的存储器;SFR指特殊功能寄存器。图3.2.1 S3C2410A复位后的存储器映射表3.2.1 bank 6和bank 7地址注:bank 6和bank 7必须具有相同的存储器大小。3.4 S3C2410A的I/O口n3.4.1 S3C2410A的IO口配置nS3C2410A共有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口。n为了满足不同系统设计的需要,每个I/O口可以很容易地通过软件对进行配置。每个引脚的功能必须在启动主程序之前进行定义。如果一个引脚没有使用复用功能,那么它可以配置为I/O口。注意:端口 A除了作为功能口外,只能够作为输出口使用。nS3C2410A的I/O口配置情况如表3.4.13.4.7所列。表3.4.1 S3C2410A的端口A I/O口配置情况端口A可选择的引脚端功能GPA22输出nFCEGPA21输出nRSTOUTGPA20输出nFREGPA19输出nFWEGPA18输出ALEGPA17输出CLEGPA16GPA12输出nGCS5nGCS1GPA11GPA1输出ADDR26ADDR16GPA0输出ADDR0端口B可选择的引脚端功能GPB10输入/输出nXDREQ0GPB9输入/输出nXDACK0GPB8输入/输出nXDREQ1GPB7输入/输出nXDACK1GPB6输入/输出nXBREQGPB5输入/输出nXBACKGPB4输入/输出TCLK0GPB3GPB0输入/输出TOUT3 TOUT0表3.4.2 S3C2410A的端口B I/O口配置情况端口C可选择的引脚端功能GPC15GPC8输入/输出VD7 VD0GPC7GPC5输入/输出LCDVF2LCDVF0GPC4输入/输出VMGPC3输入/输出VFRAMEGPC2输入/输出VLINEGPC1输入/输出VCLKGPC0输入/输出LEND表3.4.3 S3C2410A的端口C I/O口配置情况端口D可选择的引脚端功能GPD15输入/输出VD23nSS0GPD14输入/输出VD22nSS1GPD13GPD0输入/输出VD21VD8表3.4.4 S3C2410A的端口D I/O口配置情况端口E可选择的引脚端功能GPE15输入/输出IICSDAGPE14输入/输出IICSCLGPE13输入/输出SPICLK0GPE12输入/输出SPIMOSI0GPE11输入/输出SPIMISO0GPE10GPE7输入/输出SDDAT3SDDAT0GPE6输入/输出SDCMDGPE5输入/输出SDCLK表3.4.5 S3C2410A的端口E、F I/O口配置情况GPE4输入/输出I2SSDOI2SSDIGPE3输入/输出I2SSDInSS0GPE2输入/输出CDCLKGPE1输入/输出I2SSCLKGPE0输入/输出I2SLRCK端口FGPF7 GPF0输入/输出EINT7 EINT0端口端口G可可选择选择的引脚端功能的引脚端功能GPG15输入/输出EINT23nYPONGPG14输入/输出EINT22YMONGPG13输入/输出EINT21nXPONGPG12输入/输出EINT20XMONGPG11输入/输出EINT19TCLK1GPG10GPG8输入/输出EINT18EINT16GPG7输入/输出EINT15SPICLK1表3.4.6 S3C2410A的端口G I/O口配置情况GPG6输入/输出EINT14SPIMOSI1GPG5输入/输出EINT13SPIMISO1GPG4输入/输出EINT12LCD_PWRENGPG3输入/输出EINT11nSS1GPG2输入/输出EINT10nSS0GPG1输入/输出EINT9GPG0输入/输出EINT8端口 H可选择的引脚端功能GPH10输入/输出CLKOUT1GPH9输入/输出CLKOUT0GPH8输入/输出UEXTCLKGPH7输入/输出RXD2nCTS1GPH6输入/输出TXD2nRTS1GPH5输入/输出RXD1GPH4输入/输出TXD1GPH3输入/输出RXD0GPH2输入/输出TXD0GPH1输入/输出nRTS0GPH0输入/输出nCTS0表3.4.7 S3C2410A的端口H I/O口配置情况n3.4.2 S3C2410A的IO口寄存器n在S3C2410A中,大多数的引脚端都是复用的,所以对于每一个引脚端都需要定义其功能。为了使用I/O口,首先需要定义引脚的功能。每个引脚端的功能通过端口控制寄存器(PnCON)来定义(配置)。与配置I/O口相关的寄存器包括:端口控制寄存器(GPACONGPHCON)、端口数据寄存器(GPADATGPHDAT)、端口上拉寄存器(GPBUPGPHUP)、杂项控制寄存器以及外部中断控制寄存器(EXTINTN)等。在掉电模式,如果GPF0GPF7和GPG0GPG7用作为唤醒信号,那么这些端口必须配置为中断模式。n如果端口配置为输出口,数据可以写入到端口数据寄存器(PnDAT)的相应位中;如果将端口配置为输入口,则可以从端口数据寄存器(PnDAT)的相应位中读出数据。n端口上拉寄存器用于控制每组端口的上拉电阻为使能/不使能。如果相应位设置为0,则表示该引脚的上拉电阻使能;为1,则表示该引脚的上拉电阻不使能。如果使能了端口上拉寄存器,则不论引脚配置为哪种功能(输入、输出、DATAn、EINTn等),上拉电阻都会起作用。n杂项控制寄存器用于控制数据端口的上拉电阻、高阻状态、USB Pad和CLKOUT的选择。n24个外部中断通过不同的信号方式被请求。EXTINTn寄存器用于配置这些信号对于外部中断请求采用的是低电平触发、高电平触发、下降沿触发、上升沿触发还是双边沿触发。有8个外部中断有数字滤波器。仅16 EINT引脚端(EINT15:0)用来作为唤醒源。n所有GPIO寄存器的值在掉电模式下都会被保存。外部中断屏蔽寄存器EINTMASK不能阻止从掉电模式唤醒,但是如果EINTMASK正在屏蔽的是EINT15:4中的某位,则可以实现唤醒,不过寄存器SRCPND的位EINT4 和EINT8 23在刚刚唤醒后不能设置为1。n相关寄存器的设置分别描述如下:寄存器地址读/写描述复位值GPACON 0 x56000000 R/W 配置端口A引脚端,使用位22:0。设置为0:输出引脚端;设置为1:第2功能0 x7FFFFF GPADAT0 x56000004 R/W 端口A数据寄存器,使用位22:0 未定义 保留0 x56000008 保留未定义保留0 x5600000C 保留未定义1端口端口A控制寄存器(参见表控制寄存器(参见表3.4.8)表3.4.8 端口A控制寄存器寄存器 地址 读/写描述复位值 GPBCON 0 x56000010 R/W 配置端口B引脚端,使用位21:0,分别对端口B的11个引脚端进行配置。00:输入;01:输出;10:第2功能;11:保留0 x0 GPBDAT 0 x56000014 R/W 端口B数据寄存器,使用位10:0 未定义GPBUP 0 x56000018 R/W 端口B上拉电阻不使能寄存器,使用位10:0。0:使能;1:不使能0 x0 保留0 x5600001C 保留未定义2端口端口B控制寄存器(参见表控制寄存器(参见表3.4.9)表.3.4.9 端口B控制寄存器寄存器地址 读/写 描述 复位值GPCCON 0 x56000020 R/W 配置端口C引脚端,使用位31:0,分别对端口B的16个引脚端进行配置。00:输入;01:输出;10:第2功能;11:保留0 x0 GPCDAT 0 x56000024 R/W 端口C数据寄存器,使用位15:0 未定义GPCUP 0 x56000028 R/W 端口C上拉电阻不使能寄存器,使用位15:0。0:使能;1:不使能0 x0 保留0 x5600002C 保留未定义3端口端口C控制寄存器(参见表控制寄存器(参见表3.4.10)表3.4.10 端口 C控制寄存器寄存器地址 读/写 描述 复位值GPDCON 0 x56000030 R/W 配置端口D引脚端,使用位31:0,分别对端口B的16个引脚端进行配置。00:输入;01:输出;10:第2功能;11:保留/第3功能0 x0 GPDDAT 0 x56000034 R/W 端口D数据寄存器,使用位15:0 未定义GPDUP 0 x56000038 R/W 端口D上拉电阻不使能寄存器,使用位15:0。0:使能;1:不使能0 xF000 保留 0 x5600003C 保留未定义 4端口端口D控制寄存器(参见表控制寄存器(参见表3.4.11)表3.4.11 端口D控制寄存器 寄存器地址 读/写 描述 复位值GPECON 0 x56000040 R/W 配置端口E引脚端,使用位31:0,分别对端口B的16个引脚端进行配置。00:输入;01:输出;10:第2功能;11:保留/第3功能0 x0 GPEDAT 0 x56000044 R/W 端口E数据寄存器,使用位15:0 未定义 GPEUP 0 x56000048 R/W 端口E上拉电阻不使能寄存器,使用位15:0。0:使能;1:不使能0 x0 保留0 x5600004C 保留未定义5端口端口E控制寄存器(参见表控制寄存器(参见表3.4.12)表3.4.12 端口 E控制寄存器寄存器地址 读/写 描述 复位值GPFCON 0 x56000050 R/W 配置端口F引脚端,使用位15:0,分别对端口B的8个引脚端进行配置。00:输入;01:输出;10:第2功能;11:保留0 x0 GPFDAT 0 x56000054 R/W 端口F数据寄存器,使用位7:0 未定义 GPFUP 0 x56000058 R/W 端口F上拉电阻不使能寄存器,使用位7:0。0:使能;1:不使能0 x0 保留0 x5600005C 保留未定义6端口端口F控制寄存器(参见表控制寄存器(参见表3.4.13)表3.4.13 端口F控制寄存器寄存器地址 读/写 描述 复位值GPGCON 0 x56000060 R/W 配置端口G引脚端,使用位31:0,分别对端口B的16个引脚端进行配置。00:输入;01:输出;10:第2功能;11:保留/第3功能0 x0 GPGDAT 0 x56000064 R/W 端口G数据寄存器,使用位15:0 未定义 GPGUP 0 x56000068 R/W 端口G上拉电阻不使能寄存器,使用位15:0。0:使能;1:不使能0 xF800保留 0 x5600006C 保留未定义7端口端口G控制寄存器(参见表控制寄存器(参见表3.4.14)表3.4.14 端口G控制寄存器寄存器地址 读/写 描述 复位值GPHCON 0 x56000070 R/W 配置端口H引脚端,使用位21:0,分别对端口B的11个引脚端进行配置。00:输入;01:输出;10:第2功能;11:保留/第3功能0 x0 GPHDAT 0 x56000074 R/W 端口H数据寄存器,使用位10:0 未定义 GPHUP 0 x56000078 R/W 端口H上拉电阻不使能寄存器,使用位10:0。0:使能;1:不使能0 x0 保留 0 x5600007C 保留未定义8端口端口H控制寄存器(参见表控制寄存器(参见表3.4.15)表3.4.15 端口H控制寄存器寄存器地址 读/写 描述 复位值MISCCR 0 x56000080 R/W 上拉电阻、高阻状态、USB Pad和CLKOUT的选择控制 0 x103309杂项控制寄存器(参见表杂项控制寄存器(参见表3.4.16)表3.4.16 杂项控制寄存器寄存器地址 读/写 描述 复位值DCLKCON 0 x56000084 R/W DCLK0/1 控制,位27:16控制DCLK1,位11:0控制DCLK9 0 x0 10DCLK控制寄存器(参见表控制寄存器(参见表3.4.17)表3.4.17 DCLK控制寄存器寄存器地址读/写描述复位值EXTINT00 x56000088R/W外部中断控制寄存器0,使用位30:0,分别对EINT7EINT0触发信号进行配置。000:低电平触发;001:高电平触发;01x:下降沿下降;10 x:上升沿触发;11x:双边沿触发0 x0EXTINT10 x5600008CR/W外部中断控制寄存器1,使用位30:0,分别对EINT15EINT8触发信号进行配置。000:低电平触发;001:高电平触发;01x:下降沿下降;10 x:上升沿触发;11x:双边沿触发0 x011.外部中断控制寄存器(参见表外部中断控制寄存器(参见表3.4.18)表3.4.18 外部中断控制寄存器EXTINT20 x56000090R/W外部中断控制寄存器2,使用位30:0,分别对EINT23EINT16触发信号进行配置。000:低电平触发;001:高电平触发;01x:下降沿下降;10 x:上升沿触发;11x:双边沿触发。位31为EINT23滤波器使能控制,1:使能;0:不使能0 x0寄存器地址 读/写 描述 复位值EINTFLT0 0 x56000094 R/W 保留EINTFLT1 0 x56000098 R/W 保留EINTFLT2 0 x5600009C R/W 外部中断控制寄存器 2,控制EINT19EINT16的滤波器时钟和带宽0 x0 EINTFLT3 0 x4C6000A0 R/W 外部中断控制寄存器 3,控制EINT23EINT20的滤波器时钟和带宽0 x0 12外部中断滤波寄存器(参见表外部中断滤波寄存器(参见表3.4.19)表3.4.19 外部中断滤波寄存器寄存器地址 读/写 描述 复位值EINTMASK 0 x560000A4 R/W 外部中断屏蔽寄存器,使用位23:4 控制EINT23EINT4中断屏蔽。0:使能中断;1:屏蔽中断0 x00FFFFF0 寄存器地址 读/写 描述 复位值EINTPEND 0 x560000A8 R/W 外部中断挂起寄存器,使用位23:4 控制EINT23EINT4中断请求。0:不被请求;1:被请求 0 x0 14.外部中断挂起寄存器(参见表外部中断挂起寄存器(参见表3.4.21)表3.4.21 外部中断挂起寄存器13.外部中断屏蔽寄存器(参见表外部中断屏蔽寄存器(参见表3.4.20)表3.4.20 外部中断屏蔽寄存器寄存器地址 读/写 描述 复位值GSTATUS0 0 x560000AC R 外部引脚端状态Undefined GSTATUS1 0 x560000B0 R 芯片ID 0 x32410000 GSTATUS2 0 x560000B4 R/W 复位状态 0 x1 GSTATUS3 0 x560000B8 R/W Infrom 寄存器,可以利用nRESET和看门狗定时器清零0 x0 GSTATUS4 0 x560000BC R/W Infrom寄存器,可以利用nRESET和看门狗定时器清零0 x0 15.通用状态寄存器(参见表通用状态寄存器(参见表3.4.22)表3.4.22 通用状态寄存器3.5 S3C2410A的中断控制的中断控制n3.5.1 ARM系统的中断处理n在ARM系统中,支持复位、未定义指令、软中断、预取中止、数据中止、IRQ和FIQ 7种异常,每种异常对应于不同的处理器模式,有对应的异常向量(固定的存储器地址)。n在ARM系统中,一旦有中断发生,正在执行的程序都会停下来,通常都会执行如下的中断步骤:(1)保存现场。保存当前的PC值到R14,保存当前的程序运行状态到SPSR。(2)模式切换。根据发生的中断类型,进入IRQ模式或FIQ模式。(3)获取中断服务子程序地址。PC指针跳到异常向量表所保存的IRQ或FIQ地址处,IRQ或FIQ的异常向量地址处一般保存的是中断服务子程序的地址,PC指针跳入到中断服务子程序,进行中断处理。n(4)多个中断请求处理。在ARM系统中,可以存在多个中断请求源,比如串口中断、AD中断、外部中断、定时器中断及DMA中断等,所以可能出现多个中断源同时请求中断的情况。为了更好地n区分各个中断源,通常为这些中断定义不同的优先级别,并为每一个中断设置一个中断标志位。当发生中断时,通过判断中断优先级以及访问中断标志位的状态来识别哪一个中断发生了,进而调用相应的函数进行中断处理。n(5)中断返回,恢复现场。当完成中断服务子程序后,将SPSR中保存的程序运行状态恢复到CPSR中,R14中保存的被中断程序的地址恢复到PC中,继续执行被中断的程序。n3.5.2 S3C2410A的中断控制器nS3C2410A采用ARM920T CPU内核,ARM920T CPU的中断包含有IRQ和FIQ。IRQ是普通中断,FIQ是快速中断,FIQ的优先级高于IRQ。FIQ中断通常在进行大批量的复制、数据传输等工作时使用。nS3C2410A通过对程序状态寄存器(PSR)中的F位和I位进行设置控制CPU的中断响应。如果设置PSR的F位为1,则CPU不会响应来自中断控制器的FIQ中断;如果设置PSR的I位为1,则CPU不会响应来自中断控制器的IRQ中断。如果设置PSR的F位或I位设置为0,同时将中断屏蔽寄存器(INTMSK)中的相对应位设置为0,CPU响应来自中断控制器的IRQ或FIQ中断请求。n中断屏蔽寄存器用于指示中断是否禁止。如果设置中断屏蔽寄存器中的相对应屏蔽位为1,表示相对应的中断禁止;如果设置为0,表示中断发生时将正常执行中断服务。如果发生中断时相对应的屏蔽位正好为1,则中断挂起寄存器中的相对中断源挂起位将置1。nS3C2410A有SRCPND(中断源挂起寄存器)和INTPND(中断挂起寄存器)两个中断挂起寄存器。SRCPND和INTPND两个挂起寄存器用于指示某个中断请求是否处于挂起状态。当多个中断源请求中断服务时,SRCPND寄存器中的相应位设置为1,仲裁过程结束后INTPND寄存器中只有1位被自动设置为1。nS3C2410A中的中断控制器能够接收来自56个中断源的请求,这些中断源来自DMA控制器、UART、I2C及外部中断引脚等。从表3.5.1可以看出,S3C2410A共有32个中断请求信号。S3C2410A采用了中断共享技术,INT_UARTO、INT_UART1、INT_UART2、EINT8_23和EINT4_7为多个中断源共享使用的中断请求信号。中断请求的优先级逻辑是由7个仲裁器组成的,其中包括6个一级仲裁器和1个二级仲裁器,如图3.5.1所示。每个仲裁器是否使能由寄存器PRIORITY6:0决定。每个仲裁器可以处理46个中断源,从中选出优先级最高的。优先级顺序由寄存器PRIORITY20:7的相应位决定。表3.5.1 S3C2410A 的中断源中断源描述仲裁器分组INT_ADCADCEOC和触摸中断(INT_ADC/INT_TC)ARB5INT_RTCRTC报警中断ARB5INT_SPI1SPI1中断ARB5INT_UART0UART0中断(故障、接收和发送)ARB5INT_IICI2 C中断ARB4VINT_USBHUSB主设备中断ARB4INT_USBUSB从设备中断ARB4保留保留ARB4INT_UART1UART1中断(故障、接收和发送)ARB4INT_SPI0SPI0中断ARB4INT_SDISDI中断ARB3INT_DMA3DMA通道3中断ARB3INT_DMA2DMA通道2中断ARB3INT_DMA1DMA通道1中断ARB3INT_DMA0DMA通道0中断ARB3INT_LCDLCD中断ARB3INT_UART2UART2中断(故障、接收和发送)ARB2INT_TIMER4定时器4中断ARB2INT_TIMERS定时器3中断ARB2INT_TIMER2定时器2中断ARB2INT_TIMER1定时器1中断ARB2INT_TIMER0定时器0中断ARB2INT_WDT看门狗定时器中断ARB1INT_TICKRTC时钟滴答中断ARB1nBATT_FLT电源故障中断ARB1保留保留ARB1EINT8_23外部中断823ARB1EINT4_7外部中断47ARB1EINT3外部中断3ARB0EINT2外部中断2ARB0EINTI外部中断1ARB0EINT0外部中断0ARB0图3.5.1 优先级生成模块寄存器地址R/W描述复位值SRCPND0X4A000000 R/W 中断源挂起寄存器,为0时,无中断请求;当有中断产生,相应位置1。所有来自中断源的中断请求首先被登记到中断源挂起寄存器中0 x00000000INTMOD0X4A000004 R/W 中断模式寄存器:0=IRQ模式,1=FIQ模式。多个IRQ中断的仲裁过程在优先级寄存器进行。0 x00000000INTMSK0X4A000008 R/W 中断屏蔽寄存器:0=允许中断,1=屏蔽中断。中断屏蔽寄存器的主要功能是屏蔽相应中断的请求,即使中断挂起寄存器的相应位已经置1,也就是说已经有相应的中断请求发生了;但是如果此时中断屏蔽寄存器的相应位置1,则中断控制器将屏蔽该中断请求CPU不会响应该中断0 xFFFFFFFFS3C2410A中断控制器的特殊寄存器如表3.5.2所示,中断控制需要正确 的设置这些寄存器,寄存器中每一位的含义请参阅S3C2410A数据手册。表3.5.2中断控制器的特殊寄存器PRIORITY0 x4A00000C R/W IRQ中断优先级控制寄存器0 x7FINTPND0X4A000010 R/W 中断状态指示寄存器:0=该中断没有请求,1=该中断源发出中断请求0 x00000000INTOFFSET0X4A000014 R中断偏移寄存器,指示IRQ中断源 0 x00000000SUBSRCPND0X4A000018 R/W 子中断源状态寄存器,指示中断请求的状态。0=该中断没有请求,1=该中断源发出中断请求0 x00000000INTSUBMSK0X4A00001C R/W 定义哪几个中断源屏蔽。0=中断服务允许,1=中断服务屏蔽0 x7FFn3.5.3 S3C2410A的中断编程实例n本小节介绍一个通过定时器1控制一个led灯每1秒钟改变一次状态,需要完成的主要工作如下。n(1)对定时器1初始化,并设定定时器的中断时间为1,具体代码参见Timed init()函数。void Timerl_init(void)rGPBCON=rGPBCON&0 xfffffffc&0 x00000001;rGPBDAT=rGPBDAT|0 x001;rTCFG0=255;rTCFG1=04;rTCNTB1=48828;/在pclk=50MHz下,1s的记数值rTCNTB1=50000000/4/256=48828;rTCMPB1 0 x00;rTCON (1+11)|(19)|(08);/禁用定时器1,手动加载rTCON (1+11)|(09)|(18);/启动定时器1,自动装载n(2)为了使CPU响应中断,在中断服务子程序执行之前,必须打开ARM920T的CPSR中的I位,以及相应的中断屏蔽寄存器中的位。打开相应的中断屏蔽寄存器中的位,是在TimerlINT Init()函数中实现的,具体代码如下。void TimerlINT_Init(void)/定时器接口使能if(rINTPNDBIT_TIMERI)rSRCPND|=BIT_TIMER1;pISR_TMER1=(int)Timerl_ISR;/写入定时器1中断服务子程序的入口地址rINTMSK(BIT_TIMERI);/开中断;n(3)等待定时器中断,通过一个死循环,如“while(1);”实现等待过程。n(4)根据设置的定时时间,产生定时器中断。中断发生后,首先进行现场保护,然后转人中断的入口代码处执行。该部分代码通常使用汇编语言编写。在执行中断服务程序之前,要确保HandleIRQ地址处保存中断分发程序IsrIRQ的入口地址,代码如下。ldr r0,HandleIRQldr r1,IsrIRQstr r1,r0接下来将执行IsrIRQ中断分发程序,具体代码如下。IsrIRQsub sp,sp,#4;/为保存PC预留堆栈空间stmfd sp!,r8r9ldr r9,INTOFFSETldr r9,r9;/加载INTOFFSET寄存器值到r9ldr r8,HandleEINT0;/加载中断向量表的基地址到r8add r8,r8,r9,lsl#2;/获得中断向量ldr r8,r8;/加载中断服务程序的入口地址到r8str r8,sp,#8;/保存sp,将其作为新的pc值ldmfd sp!,(r8-r9,pc;/跳转到新的pc处执行,即跳转到中断服务子程序执行n(5)执行中断服务子程序,该子程序实现led灯每一秒钟改变一次状态。看到LEDl灯闪烁一次,则说明定时器发生了一次中断。具体实现见函数Timerl_ISR()。int f;void _ _irq Timer1_ISR(void)If(f=0)rGPBDAT=rGPBDAT|0 x001;f=1;If(f=1)rGPBDAT=rGPBDAT&0 x0;f=0;rSRCPND|=BIT_TIMER1;rINTPND|=BIT_TIMER1;n(6)从中断返回,恢复现场,跳转到被中断的主程序继续执行,等待下一次中断的到来。3.6 S3C2410A的的DMA控制控制器器n3.6.1 DMA工作原理nDMA(Direct Memory Acess,直接存储器存取)方式是指存储器与外设在DMA控制器的控制下,直接传送数据而不通过CPU,传输速率主要取决于存储器存取速度。在DMA传输过程中,DMA控制器负责管理整个操作,并且无须CPU介入,从而大大提高了CPU的工作效率。DMA方式为高速I/O设备和存储器之间的批量数据交换提供了直接的传输通道。由于I/O设备直接同内存发生成块的数据交换,可以提高I/O效率。现在大部分计算机系统均采用DMA技术。许多输入输出设备的控制器都支持DMA方式。n在进行DMA数据传送之前,DMA控制器会向CPU申请总线控制权,CPU如果允许,则将控制权交出。因此,在数据交换时,总线控制权由DMA控制器掌握,在传输结束后,DMA控制器将总线控制权交还给CPU。采用DMA方式进行数据传输的具体过程如下。n(1)外设向DMA控制器发出DMA请求。n(2)DMA控制器向CPU发出总线请求信号。n(3)CPU执行完现行的总线周期后,向DMA控制器发出响应请求的回答信号。n(4)CPU将控制总线、地址总线及数据总线让出,由DMA控制器进行控制。n(5)DMA控制器向外部设备发出DMA请求回答信号。n(6)进行DMA传送。n(7)数据传送完毕,DMA控制器通过中断请求线发出中断信号。CPU在接收到中断信号后,转人中断处理程序进行后续处理。n(8)中断处理结束后,CPU返回到被中断的程序继续执行。CPU重新获得总线控制权。n3.6.2 S3C2410A的DMA控制器n在系统总线和外围总线之间,S3C2410A有4个DMA控制器。每个DMA控制器可以处理以下4种情况:n(1)源和目的都在系统总线上;n(2)源在系统总线上,目的在外围总线上;n(3)源在外围总线上,目的在系统总线上;n(4)源和目的都在外围总线上。n如果DCON寄存器选择采用硬件(H/W)DMA请求模式,DMA控制器可以从对应通道的DMA请求源中选择一个。如果DCON寄存器选择采用软件(S/W)DMA请求模式,那么这些DMA请求源将没有任何意义。DMA请求源如表3.6.1所示。通道请求源0请求源1请求源2请求源3请求源4通道0nXDREQ0UART0SDI定时器USB设备EP1通道1nXDREQ1UARTII2 SSDISPI0USB设备EP2通道2I2SSDOI2SSDISDI定时器USB设备EP3通道3UART2SDISPI1定时器USB设备EP4表3.6.1 DMA请求源nDMA的操作过程可以用一个3种状态的FSM(Finite State Machine,有限状态机)来描述,具体步骤如下:n(1)状态1n状态1为初始状态,DMA等待一个DMA请求。如果出现DMA请求,进入状态2。在这种状态下,DMA ACK和INT REQ为0。n(2)状态2n在状态2,DMA ACK变为1,并且从DCON19:0寄存器向计数器(CURR TC)加载计数值。注意,此时DMA ACK一直是1,直到被清零。n(3)状态3n在状态3,子FSM使DMA的微操作被初始化。子FSM从源地址读取数据,并将其写入目标地址。在这个操作过程中,需要考虑数据大小(尺寸)和传输大小(尺寸)。这一操作重复执行,直到在整体服务模式下的计数器(CURR_TC)变为0;这一操作在单个服务模式下则只执行一次。子FSM每完成一次微操作,主FSM将CURR_TC进行一次向下计数。另外,当CURR_TC变为0时,主FSM将INT REQ信号置1,并将DCON寄存器的中断设置位29置1。除此以外,如果发生以下情况,则对DMA ACK清零。n在单个服务模式下,主FSM的3种状态执行完后就停止,并等待下一个DMA请求。如果又产生了新的DMA请求,则所有3个状态都将被重复。因此,对于每一个微传送操作,DMA ACK先后置1和清零。相反,在整体服务模式下,主FSM一直在状态3等待直到CURR TC变为0,因此DMA ACK在整个传送过程中都置1,当TC为时则清零。nS3C2410A每个DMA通道有9个控制寄存器,4个通道共有36个寄存器。每个DMA通道的9个控制寄存器中有6个用于控制DMA传输,另外3个用于监控DMA控制器的状态。要进行DMA操作,首先需要对这些寄存器进行正确配置。相关寄存器介绍如下:n(1)DMA初始化源寄存器(DISRC)n如表3.6.2所示,DMA初始化源寄存器(DISRC)用于存放要传输的源数据的起始地址。寄存器地址读写描述复位值DISRCO0 x4B00 0000读写DMA0初始化源寄存器0 x0000 0000DISRCI0 x4B00 0040DMAl初始化源寄存器DISRC20 x4B00 0080DMA2初始化源寄存器DISRC30 x4B00 00C0DMA3初始化源寄存器表3.6.2 DMA初始化源寄存器寄存器地址读写描述复位值DISRCC00 x4B00 0004读写DMA0DMA3初始化源控制寄存器。位1:位10,源数据在AHB总线上;位11,源数据在APB总线上。位0:位00,传送数据后,源地址增加;位01,地址固定不变0 x0000 0000DISRCC10 x4B00 0044DISRCC20 x4B00 0084DISRCC30 x4B00 00C4表3.6.3 DMA初始化源控制寄存器(2)DMA初始化源控制寄存器(DISRCC)如表3.6.3所示,DMA初始化源控制寄存器(DISRCC)用于控制源数据在AHB总线还是APB总线上并控制地址增长方式 寄存器地址读写描述复位值DIDST00 x4B00 0008读写DMAO初始化目标地址寄存器0 x0000 0000DIDST10 x4B00 0048DMA1初始化目标地址寄存器DIDST20 x4B00 0088DMA2初始化目标地址寄存器DIDST30 x4B00 00C8DMA3初始化目标地址寄存器3)DMA初始化目标地址寄存器(DIDST),如表3.6.4所示,DMA初始化目标地址寄存器(DIDST)用于存放传输目标的起始地址。表3.6.4 DMA初始目标地址寄存器寄存器地址读写描述复位值DIDSTC00 x4B00 000C读写DMAn初始化目标控制寄存器。位1:位10,目标在AHB总线上;位11,目标在APB总线上。位0:位00,传送数