第4章基于S3C2440的硬件结构与接口编程_第1页
第4章基于S3C2440的硬件结构与接口编程_第2页
第4章基于S3C2440的硬件结构与接口编程_第3页
第4章基于S3C2440的硬件结构与接口编程_第4页
第4章基于S3C2440的硬件结构与接口编程_第5页
已阅读5页,还剩308页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章

基于S3C2440的硬件结构与接口编程本章主要内容嵌入式系统的硬件包括处理器、存储器、外围接口以及连接各种设备的总线系统。存储器分为数据存储器和程序存储器。操作系统和应用程序固化在Flash中。外围接口一般有显示(如点阵式LCD)、键盘(或触摸屏)、Ethernet(以太网接口)、USB接口、音频接口、VGA视频接口、IIC接口、SPI接口、SD卡接口、现场总线接口、A/D接口、D/A接口、I/O接口(如RS-232C)、IrDA(红外接口)等。本章只介绍S3C2440的常用接口。另外还要说明的是,本章给出的实例并不是完整的实例,一个完整的实例还需要比较多的其他代码,包括硬件初始化,甚至MMU初始化,这会使读者不能集中精力研究接口部分的编程。读者需要在开发板上测试时,可以自己查找相关资料,比如mini2440开发板的光盘上就有裸机程序的完整代码。本章主要内容4.1S3C2440简介4.2S3C2440A的存储器接口4.3时钟和电源管理4.4DMA4.5I/O端口4.6定时器4.7ARM中断4.8LCD4.9A/D转换器和触摸屏4.10异步串口通信4.11SPI、IIC、IIS、SD卡总线接口4.12USBHost/Device控制器

思考与习题4.1S3C2440简介

S3C2440是三星公司的16/32位精简指令集(RISC)微处理器,为面向手持设备和普通应用提供了低功耗和高性能的小型芯片微控制器的解决方案。S3C2440基于ARM920T核心,采用0.13μm的CMOS标准宏单元和存储器单元,具有低功耗、简单、精致、且全静态设计等特点,特别适合于对成本和功率敏感型的应用。此外,S2C2440采用了新的总线架构如先进微控制总线构架(AMBA)。ARM920T实现了MMU,AMBA总线和哈佛结构高速缓冲体系结构,这一结构具有独立的16KB指令高速缓存和16KB数据高速缓存,每个都是由具有8字长的行(line)组成。回本章目录4.1S3C2440简介4.1.1S3C2440A片上主要功能4.1.2S3C2440A特点回本章目录4.1S3C2440简介4.1.1S3C2440A片上主要功能1.2V内核供电,1.8V/2.5V/3.3V存储器供电,3.3V外部I/O供电,具备16KB的指令缓存和16KB的数据缓存和MMU的微处理器;外部存储控制器(SDRAM控制和片选逻辑);LCD控制器(最大支持4K色STN和256K色TFT)提供1通道LCD专用DMA;4通道DMA并有外部请求引脚;3通道UART(IrDA1.0,64B发送FIFO和64B接收FIFO);2通道SPI;1通道IIC总线接口(支持多主机);1通道IIS总线音频编码器接口;AC’97编解码器接口;回本节目录4.1S3C2440简介4.1.1S3C2440A片上主要功能(续)兼容SD主接口协议1.0版和MMC卡协议2.11兼容版;2通道USB主机/1通道USB设备(1.1版);4通道PWM定时器和1通道内部定时器/看门狗定时器;8通道10位ADC和触摸屏接口;具有日历功能的RTC;摄像头接口(最大支持4096×4096像素输入;2048×2048像素输入支持缩放);130个通用I/O口和24通道外部中断源;具有普通、慢速、空闲和掉电模式;具有PLL片上时钟发生器。4.1S3C2440简介4.1.1S3C2440A片上主要功能(续)S3C2440A结构如图4.1S3C2440简介4.1.2S3C2440A特点1)体系结构手持设备的完整系统和普通嵌入式应用;16/32位RISC体系架构和ARM920TCPU核心的强大的指令集;增强型ARM架构MMU以支持WinCE、EPOC32和Linux操作系统;指令高速缓存,数据高速缓存,写缓冲和物理地址TAGRAM以减少执行主存储器带宽和延迟性能的影响;ARM920TCPU核支持ARM调试架构;内部先进微控制器总线架构(AMBA)(AMBA2.0,AHB/APB)。回本节目录4.1S3C2440简介4.1.2S3C2440A特点(续)2)系统管理支持大/小端;地址空间:每Bank有128MB(总共1GB);支持可编程的每Bank8/16/32位数据总线宽度;BANK0到BANK6固定Bank的起始地址;BANK7具有可编程Bank起始地址和大小;8个存储器Bank:6个存储器Bank为ROM、SRAM,其他两个存储器Bank为ROM/SRAM/SDRAM;所有存储器具备完整可编程访问周期;支持外部等待信号来扩展总线周期;支持SDRAM掉电时自刷新模式;支持从各种类型ROM启动(NOR/NANDFlash,EEPROM或其他)。4.1S3C2440简介4.1.2S3C2440A特点(续)3)NANDFlash启动引导(Bootloader)支持从NANDFlash启动;4KB的启动内部缓冲区;支持启动后NANDFlash作为存储器;支持先进NANDFlash。4)高速缓存存储器64路指令缓存(16KB)和数据缓存(16KB)的组相联高速缓存;每行8字长度,其中含一个有效位和两个dirty位;伪随机或循环robin置换算法;执行直写或回写高速缓存刷新主存储器;写缓冲区可以保存16字的数据和4个地址。4.1S3C2440简介4.1.2S3C2440A特点(续)5)时钟和电源管理片上MPLL和UPLL:UPLL产生时钟运作USB主机/设备MPLL产生时钟运作1.3V下最高400MHz的MCU;用软件可以有选择的提供时钟给各功能模块;电源模式:普通、慢速、空闲和睡眠模式; 普通模式:正常运行模式; 慢速模式:无PLL的低频率时钟; 空闲模式:只停止CPU的时钟; 睡眠模式:关闭包括所有外设的核心电源;EINT[15:0]或RTC闹钟中断触发从睡眠模式中唤醒。4.1S3C2440简介4.1.2S3C2440A特点(续)6)中断控制器59个中断源(1个看门狗,5个定时器,9个UART,24个外部中断,4个DMA,2个RTC,2个ADC,1个IIC,2个SPI,1个SDI,2个USB,1个LCD,1个电池故障,1个NAND,2个摄像头,1个AC’97);外部中断源中电平/边沿模式;可编程边沿和电平的极性;支持快速中断请求(FIQ)给非常紧急的中断请求。7)脉宽调制(PWM)定时器4通道16位具有PWM功能的定时器,1通道16位基于DMA或基于中断运行的内部定时器;可编程的占空比、频率和极性;失效区发生器;支持外部时钟源。4.1S3C2440简介4.1.2S3C2440A特点(续)8)RCT(实时时钟)完整时钟特性:毫秒、秒、分、时、星期、日、月和年;工作在32.768kHz时钟频率;闹钟中断;时钟节拍中断。9)通用输入/输出端口24个外部中断端口;130个复用输入/输出端口。10)DMA控制器4通道DMA控制器;支持存储器到存储器,IO到存储器,存储器到IO和IO到IO的传输;采用触发传输模式来提高传输速率。4.1S3C2440简介4.1.2S3C2440A特点(续)11)UART3通道基于DMA或基于中断运行的UART;支持5位、6位、7位、或8位串行数据发送/接收;支持UART运行在外部时钟(UEXTCLK);可编程波特率;支持IrDA1.0;测试用回环模式;每个通道都包含内部64位发送FIFO和64位接收FIFO。12)A/D转换器和触屏接口8通道多路复用ADC;最高500kbit/s和10位分辨率;内置FET触屏接口。4.1S3C2440简介4.1.2S3C2440A特点(续)13)IIC总线接口1通道多主机IIC总线;串行、8位、双向数据传输,在标准模式下可达100kbit/s或快速模式下可达400kbit/s。14)LCD控制器STNLCD显示特性支持3种类型STNLCD面板:4位双扫描,4位单扫描和8位单扫描显示类型;支持单色模式,4阶灰度,16阶灰度,256色和4096色的STNLCD;支持多种屏幕尺寸,实际屏幕尺寸典型值为640×480、320×240、160×160和其他。最大帧缓冲区大小为4MB,256色模式下最大实际屏幕尺寸为4096×1024、2048×2048、1024×4096和其他。4.1S3C2440简介4.1.2S3C2440A特点(续)15)TFT(薄膜晶体管)彩色显示特性支持彩色TFT的1、2、4或8bpp(位/像素)调色显示;支持彩色TFT的16,24bpp非调色真彩显示;支持在24bpp模式下最大16M色的TFT;内嵌LPC3600时序控制器,支持LTS350Q1-PD1/2(三星3.5寸竖屏/256K色/反光型a-SiTFTLCD);内嵌LCC3600时序控制器,支持LTS350Q1-PE1/2(三星3.5寸竖屏/256K色/半透型a-SiTFTLCD);支持多种屏幕尺寸,实际屏幕尺寸典型值为640×480,320×240,160×160和其他,最大帧缓冲区大小为4MB,64K色模式下最大实际屏幕尺寸为2048×1024和其他。4.1S3C2440简介4.1.2S3C2440A特点(续)16)看门狗定时器16位看门狗定时器;中断请求或系统复位超时。17)IIS总线接口1通道IIS总线,运行在基于DMA音频接口;串行,8/16位每通道数据传输;发送/接收具备128B(64B+64B)FIFO;支持IIS格式和MSB-justified数据格式AC’97音频编/解码器接口;支持16位采样;1通道立体声PCM输入,1通道立体声PCM输出和1通道MIC输入。4.1S3C2440简介4.1.2S3C2440A特点(续)18)USB主机(Host)2个USB主机端口;遵从OHCIRev.1.0;兼容USB规格1.1版本。19)USB设备(Device)1个USB设备端口;5个USB设备端点;兼容USB规格1.1版本。4.1S3C2440简介4.1.2S3C2440A特点(续)20)SD主机接口正常、中断和DMA数据传输模式(可按字节,半字,字传输);支持DMAburst4访问(只支持字传输);兼容SD记忆卡协议1.0版本;兼容SDIO卡协议1.0版本;发送/接收具备64B的FIFO;兼容MMC卡协议2.11版本。21)SPI接口兼容2通道SPI接口协议2.11版本;发送/接收具备2个8位移位寄存器;基于DMA或基于中断运行。4.1S3C2440简介4.1.2S3C2440A特点(续)22)摄像头接口支持ITU-RBT601/6568位模式;发送/接收具备2个8位移位寄存器;基于DMA或基于中断运行;DZI(数字放大)能力;可编程视频同步信号极性;最大支持4096×4096像素输入(2048×2048像素输入时支持缩放);图像镜像和旋转(X轴镜像,Y轴镜像和180°旋转);格式化摄像头输出(RGB16/24位和YCbCr4:2:0/4:2:2格式)。4.1S3C2440简介4.1.2S3C2440A特点(续)23)工作电压范围核心电压:300MHz下1.20V;400MHz下1.30V;存储器电压:1.8V/2.5V/3.0V/3.3V;I/O口电压:3.3V。24)工作频率Fclk最高400MHz;Hclk最高136MHz;Pclk最高68MHz。25)封装封装形式为289-FBGA。4.2S3C2440A的存储器接口4.2.1S3C2440A存储器控制器4.2.2NANDFlash控制器4.2.3SDRAM原理回本章目录4.2S3C2440A的存储器接口4.2.1S3C2440A存储器控制器S3C2440A存储器控制器为访问外部存储的需要器提供了存储器控制信号。S3C2440A包含以下特性:大/小端(通过软件选择);地址空间:每个Bank有128MB(总共1GB/8个Bank);除了BANK0(16/32位)之外,其他全部BANK都可编程访问宽度(8/16/32位);总共8个存储器Bank,6个存储器Bank为ROM,SRAM等,其余2个存储器Bank为ROM、SRAM、SDRAM等;7个固定的存储器Bank起始地址;1个可变的存储器Bank起始地址并Bank大小可编程;所有存储器Bank的访问周期可编程;外部等待扩展总线周期;支持SDRAM自刷新和掉电模式。回本节目录4.2S3C2440A的存储器接口4.2.2NANDFlash控制器NORFlash存储器价格较高,而SDRAM和NANDFlash存储器更经济,这样促使了一些用户在NANDFlash中执行引导代码,在SDRAM中执行主代码。S3C2440A引导代码可以在外部NANDFlash存储器上执行。为了支持NANDFlash的BootLoader,S3C2440A配备了一个内置的SRAM缓冲器,称为Steppingstone。引导启动时,NANDFlash存储器的开始4KB将被加载到Steppingstone中并且执行加载到Steppingstone的引导代码。通常引导代码会复制NANDFlash的内容到SDRAM中。通过使用硬件ECC,有效地检查NANDFlash数据。在复制完成的基础上,将在SDRAM中执行主程序。回本节目录4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)Bank6/7地址范围地址2MB4MB8MB16MB32MB64MB128MBBank6起始地址0x3000_00000x3000_00000x3000_00000x3000_00000x3000_00000x3000_00000x3000_0000结束地址0x301F_FFFF0x303F_FFFF0x307F_FFFF0x30FF_FFFF0x31FF_FFFF0x33FF_FFFF0x37FF_FFFFBank7起始地址0x3020_00000x3040_00000x3080_00000x3100_00000x3200_00000x3400_00000x3800_0000结束地址0x303F_FFFF0x307F_FFFF0x30FF_FFFF0x31FF_FFFF0x33FF_FFFF0x37FF_FFFF0x3FFF_FFFFBank6和Bank7必须为相同的存储器大小4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)S3C2440A复位后的存储器映射图4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)1)NANDFlash控制器功能特性引导启动:引导代码在复位期间被传送到4KB的Steppingstone;传送后,引导代码将在Steppingstone中执行;NANDFlash存储器接口:支持256字,512B,1K字和2KB页;软件模式:用户可以直接访问NANDFlash存储器,例如此特性可用于NANDFlash存储器的读/擦除/编程;接口:8/16位NANDFlash存储器接口总线;硬件ECC生成,检测和指示(软件纠错);SFRI/F:支持小端模式是按字节/半字/字访问数据和ECC数据寄存器,和按字访问其他寄存器;SteppingStone接口:支持大/小端模式的按字节/半字/字访问;SteppingStone4KB内部SRAM缓冲器可以在NANDFlash引导启动后用于其他用途。4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)NANDFlash控制器结构图。图中,CLE为CommandLatchEnable,ALE为AddressLatchEnable,nFRE为FlashReadEnable,nFCE为FlashChipEnable,nFWE为FlashWriteEnable,FRnB:FlashReady/Busyoutput(FlashNand芯片状态,高电平表准备好,低电平表NandFlash忙)。4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)NANDFlash控制器BootLoader过程4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)2)软件模式S3C2440A只支持软件模式的访问。使用该模式,用户可以完整地访问NANDFlash存储器。NANDFlash控制器支持NANDFlash存储器的直接访问接口。①写命令寄存器=NANDFlash存储器命令周期。②写地址寄存器=NANDFlash存储器地址周期。③写数据寄存器=写入数据到NANDFlash存储器(写周期)。④读数据寄存器=从NANDFlash存储器读取数据(读周期)。⑤读主ECC寄存器和备份ECC寄存器=从NANDFlash存储器读取数据。注意:在软件模式下,必须用定时查询或中断来检测RnB状态输入引脚。4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)3)NANDFlash存储器时序CLE和ALE时序(TACLS=1,TWRPH0=0,TWRPH1=0)4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)3)NANDFlash存储器时序nWE和nRE时序(TWRPH0=0,TWRPH1=0)4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)4)引脚配置OM[1:0]=00:使能NANDFlash存储器引导启动。NCON:NANDFlash存储器选择(普通/先进)。0:普通NANDFlash(256字或512B页大小,3或4个地址周期)。1:先进NANDFlash(1K字或2KB页大小,4或5个地址周期)。GPG13:NANDFlash存储器页容量选择。0:页=256字(NCON=0)或页=1K字(NCON=1)。1:页=512B(NCON=0)或页=2KB(NCON=1)。GPG14:NANDFlash存储器地址周期选择。0:3个地址周期(NCON=0)或4个地址周期(NCON=1)。1:4个地址周期(NCON=0)或5个地址周期(NCON=1)。GPG15:NANDFlash存储器总线宽度选择。0:8位宽度。1:16位宽度。4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)4)引脚配置注意:配置引脚NCON,GPG[15:13]将在复位期间被取出(Fetched)。在正常状态下,这些引脚必须设置为输入,这是为了在由软件或意外情况而进入睡眠模式时,这些引脚的状态不被改变。4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)例4-1下面的程序用于2K/页的NANDFlash的读取,Flash型号为K9F2G08。#include"s3c2440.h"#defineCMD_READ1 0x00 /*页读命令周期1*/#defineCMD_READ2 0x30 /*页读命令周期2*/#defineCMD_RESET 0xff /*复位命令*/#defineNF_CMD(data){rNFCMD=(data);} /*传输命令*/#defineNF_ADDR(addr){rNFADDR=(addr);} /*传输地址*/#defineNF_RDDATA8() (rNFDATA8) /*读8位数据*/#defineNF_WRDATA(data){rNFDATA=(data);} /*写32位数据*/#defineNF_WRDATA8(data){rNFDATA8=(data);} /*写8位数据*/#defineNF_CE_L() {rNFCONT&=~(1<<1);} /*片选使能*/#defineNF_CE_H(){rNFCONT|=(1<<1);} /*片选禁用*/#defineNF_WAITRB() {while(!(rNFSTAT&(1<<0)));} /*等待就绪*/#defineNF_CLEAR_RB() {rNFSTAT|=(1<<2);} /*清除RnB信号*/4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)#defineTACLS 1#defineTWRPH0 2#defineTWRPH1 1voidnand_init(void)/*nand初始化,主要用于配置nand的时钟等*/{rNFCONF=(TACLS<<12)|(TWRPH0<<8)|(TWRPH1<<4);rNFCONT=(1<<4)|(1<<1)|(1<<0);}staticvoidnand_reset() /*复位nandFlash芯片*/{NF_CE_L(); /*使能片选*/NF_CLEAR_RB(); /*清除RnB信号*/NF_CMD(CMD_RESET); /*写入复位命令*/NF_WAITRB(); /*等待就绪*/NF_CE_H(); /*关闭片选*/}4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)/**函数功能:读取页地址为page的页,每页为2048B*参数:* page:第page个页* buff:存放读取到的数据的缓存区*/staticvoid__nand_read1page(constintpage,unsignedchar*constbuff){ inti; nand_reset(); NF_CE_L(); NF_CLEAR_RB(); NF_CMD(CMD_READ1); /*WriteCommand00*/ NF_ADDR(0x0);/*WriteColA0-A7,即页起始地址0x000*/

4.2S3C2440A的存储器接口4.2.2NANDFlash控制器(续)

NF_ADDR(0x0); /*WriteColA8-A11*/ NF_ADDR(page&0xff); /*WriteRowA12-A19*/ NF_ADDR((page>>8)&0xff); /*WriteRowA20-A27*/ NF_ADDR((page>>16)&0xff);/*WriteRowA28*/ NF_CMD(CMD_READ2); /*WriteCommand30*/ NF_WAITRB(); /*等待就绪*/ for(i=0;i<2048;i++) /*连续读一页*/ buff[i]=NF_RDDATA8();/*连续读数据*/ NF_CE_H(); /*关闭片选*/}4.2S3C2440A的存储器接口4.2.3SDRAM原理1)SDRAM内存模组于基本结构SDRAM内存模组如图4-7所示。(1)物理Bank。内存与CPU之间数据交换的北桥芯片的数据宽度称为物理Bank。(2)芯片位宽。芯片的位宽常见的有8bit和16bit的。2)SDRAM内存芯片的内部结构回本节目录4.2S3C2440A的存储器接口4.2.3SDRAM原理(续)2)SDRAM内存芯片的内部结构(1)逻辑Bank(LogicalBank,L-Bank)。SDRAM的内部是一个存储阵列,阵列如同一张表格有行(Row),有列(Column)。这个存储阵列就是逻辑Bank。SDRAM内存一次传输的数据量就是芯片的位宽。那么这个存储单元的容量就是芯片的位宽(也就是L-Bank的位宽)。但是要注意,这种关系只是对SDRAM有效。(2)突发长度(BurstLengths,BL)。突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度。在突发长度内读写数据,只要给出列起始地址和突发长度,内存就会依次自动地对后面相应数量的存储单元进行读写操作,在突发长度内而不再需要控制器提供列地址。这样就可加快读写速度。4.2S3C2440A的存储器接口4.2.3SDRAM原理(续)3)SDRAM内存接口信号4.2S3C2440A的存储器接口4.2.3SDRAM原理(续)4)SDRAM芯片初始化在SDRAM芯片内部有一个逻辑控制单元,有一个模式寄存器(ModeRegister,MR)为其提供控制参数。因此,每次开机时SDRAM都要对这个控制逻辑核心进行初始化,该初始化工作由BIOS完成。SDRAM还有预充电和刷新的概念,这里不再叙述,请读者参考有关SDRAM原理的资料。在SDRAM中,行地址线与列地址线是共用的,用RAS#和CAS#分别指示行地址有效和列地址有效。4.3时钟和电源管理回本章目录时钟和电源管理模块由三部分组成:时钟控制、USB控制和电源控制。S3C2440A中的时钟控制逻辑可以产生必须的时钟信号,包括CPU的FCLK,AHB总线外设的HCLK,以及APB总线外设的PCLK。S3C2440A包含两个锁相环(PLL):一个提供给FCLK、HCLK和PCLK,另一个专用于USB模块(48MHz)。时钟控制逻辑可以不使用PLL来减慢时钟,并且可以由软件链接或断开各外设模块的时钟,以降低功耗。关于电源控制逻辑,S3C2440A包含了各种电源管理方案来保证对给定任务的最佳功耗。S3C2440A中的电源管理模块可以激活成四种模式:正常(NORMAL)模式、慢速(SLOW)模式、空闲(IDLE)模式和睡眠(SLEEP)模式。4.3时钟和电源管理

正常(NORMAL)模式:这个模式提供时钟给CPU,也提供给所有S3C2440A的外设。在此模式中,当所有外设都开启时功耗将达到最大,它允许用户用软件控制外设的运行。例如,如果一个定时器不是必须的,用户可以断开连接到定时器的时钟(CLKCON寄存器),以降低功耗。慢速(SLOW)模式:无PLL模式。不像普通模式,慢速模式使用一个外部时钟(XTIpll或EXTCLK)直接作为FCLK给S3C2440A,而没有使用PLL。在此模式中,功耗只取决于外部时钟的频率,排除了因PLL而产生的功耗。4.3时钟和电源管理空闲(IDLE)模式:这个模块只断开了CPU内核的时钟(FCLK),但它提供时钟给所有其他外设。空闲模式产生了因CPU内核而产生的功耗减少的结果。任何中断请求给CPU都可以使其从空闲模式中唤醒。睡眠(SLEEP)模式:这个模块与内部供电是分离的,因此在此模式中发生了没有因CPU和除唤醒逻辑以外的内部逻辑的功耗。要激活睡眠模式需要两个独立的供电电源,两个电源之一提供电源给唤醒逻辑,另一个提供电源给包括CPU在内的其他内部逻辑,而且应当能够控制供电的开和关。在睡眠模式中,第二个为CPU和内部逻辑供电电源将被关闭。可以由EINT[15:0]或RTC闹铃中断产生从睡眠模式中唤醒。4.4DMAS3C2440A支持4通道处于系统总线和外设总线间的DMA控制器。DMA控制器的每个通道都可以无限制地执行系统总线与/或外设总线之间设备的数据移动。换句话说,每个通道都可以处理以下4种情况:源和目标都在系统总线上;当目标在外设总线上时源在系统总线上;当目标在系统总线上时源在外设总线上;源和目标都在外设总线上。DMA的主要优点是在无CPU干预的情况下能进行数据传输。DMA的运行可以由软件开始,也可以来自内部外设或外部请求引脚的请求。回本章目录4.4DMA4.4.1DMA请求源4.4.2DMA工作过程4.4.3基本DMA时序4.4.4DMA传输大小4.4.5DMA专用寄存器回本章目录4.4DMA4.4.1DMA请求源如果由DCON寄存器选择了硬件DMA请求模式,则DMA控制器的每个通道都可以在4个DMA源中选择DMA请求源的其中之一(注意如果选择了软件请求模式,此DMA请求源没有一点意义)。Source0Source1Source2Source3Source4Source5Source6Ch-0nXDREQ0UART0SDITimerUSBdeviceEP1I2SSDOPCMINCh-1nXDREQ1UART1I2SSDISPI0USBdeviceEP2PCMOUTSDICh-2I2SSDOI2SSDISDITimerUSBdeviceEP3PUMINMICINCh-3UART2SDISPI1TimerUSBdeviceEP4MICINPCMOUT此处的nXDREQ0和nXDREQ1代表两个外部源(外部设备),IISSDO和IISSDI分别代表IIS的发送和接收。回本节目录4.4DMA4.4.2DMA工作过程DMA为其运行使用三态FSM(有限状态机),相关描述如下。状态1:初始状态,DMA等待DMA请求。一旦请求到达则跳到状态2。在此状态下DMAACK和INTREQ为0。状态2:在此状态,DMAACK变为1而且计数器(CURR_TC)从DCON[19:0]寄存器中加载。注意:DMAACK保持为1直到之后将其清除。状态3:在此状态,处理DMA的原子操作的sub-FSM启动。sub-FSM从源地址读取数据,接着写入目标地址。在此操作中考虑数据大小和传输大小(单次或突发)。此操作在全服务模式中一直重复直到计数器(CURR_TC)变为0,在单服务模式只执行一次。当sub-FSM完成了每个原子操作时,主FSM(此FSM)倒计数CURR_TC。此外,当CURR_TC变为0并且DCON[29]寄存器的中断设置置位为1时,主FSM发出INTREQ信号。另外,如果遇到以下状况之一则清除了DMAACK。回本节目录4.4DMA4.4.2DMA工作过程(续)在全服务模式中CURR_TC变为0;在单服务模式中完成原子操作。注意:在单服务模式中有三个主FSM的状态要执行并且接着要停止和等待其他DMAREQ。如果DMAREQ出现了要重复所有的三个状态,则发出DMAACK并接着取消原子传输。与之对比,在全服务模式中,主FSM在状态3中等待直到CURR_TC变为0。所以在所有传输期间发出DMAACK并接着在当TC到达0时取消。总之,当且仅当在CURR_TC变为0时才发出INTREQ,与服务模式(单顾服务模式或全顾服务模式)无关。4.4DMA4.4.3基本DMA时序DMA服务意味着在DMA运行期间执行成对的读取和写入周期,形成单次DMA操作。XnXDREQ和XnXDACK的建立时间和延迟时间在所有模式中都相同;如果XnXDREQ的完成遇到其建立时间,它将同步两次并接着发出XnXDACK;发出XnXDACK后,DMA请求总线并且其如果得到总线将执行其的操作。回本节目录4.4DMA4.4.3基本DMA时序(续)查询/握手模式:查询和握手模式是描述XnXDREQ和XnXDACK之间的协议。一次传输(单次/突发传输)的最后,DMA将检查双同步XnXDREQ的状态。查询模式:如果保持XnXDREQ的发出,立即开始下次的传输;否则等待XnXDREQ的发出。握手模式:如果发出XnXDREQ,DMA在2个周期内取消XnXDACK;否则在取消XnXDREQ前一直等待。在取消XnXDACK(高电平)后就必须发出XnXDREQ(低电平)。4.4DMA4.4.4DMA传输大小DMA有两种不同的传输大小:单元(Unit)和突发4(Burst4)。DMA在大块数据传输期间将牢牢的掌握总线,因此其他总线主机不能得到总线。单元(Unit)传输大小:一次读操作和一次写操作被执行。突发4传输大小:在突发4传输中分别可以执行4种连续读取和写入。回本节目录4.4DMA4.4.5DMA专用寄存器每个DMA通道都有9个控制寄存器(总计36个,因为DMA控制器有4个通道),其中6个控制寄存器控制DMA的传输,另外3个监视DMA控制器的状态。这些寄存器的详情如下。

1.DMA初始源地址寄存器DMA初始源地址寄存器DISRC0~3分别对应DMA的4个通道,用于存放要传输的源数据起始地址DMA初始源地址寄存器(DISRC)寄存器地址读/写描述复位值DISRC00x4B000000读/写DMA0初始源地址寄存器0x00000000DISRC10x4B000040DMA1初始源地址寄存器DISRC20x4B000080DMA2初始源地址寄存器DISRC30x4B0000C0DMA3初始源地址寄存器回本节目录4.4DMA4.4.5DMA专用寄存器(续)

1.DMA初始源地址寄存器DMA初始源地址寄存器(DISRC)的位描述DISRCn位描

述初始状态S_ADDR[30:0]要传输的源数据基本地址(开始地址)。当且仅当CURR_SRC为0并且DMAACK为1时将此位的值锁存到CURR_SRC中0x000000004.4DMA4.4.5DMA专用寄存器(续)2.DMA初始源控制(DISRCC)寄存器DMA初始源控制(DISRCC)寄存器用于选择源数据位于系统总线(AHB)上,还是位于外总线(APB)上,以及源地址的增量方式。DMA初始源控制寄存器(DISRCC)寄存器地址读/写描述复位值DISRCC00x4B000004读/写DMA0初始源控制寄存器0x00000000DISRCC10x4B000044DMA1初始源控制寄存器DISRCC20x4B000084DMA2初始源控制寄存器DISRCC30x4B0000C4DMA3初始源控制寄存器4.4DMA4.4.5DMA专用寄存器(续)2.DMA初始源控制(DISRCC)寄存器DMA初始源控制寄存器(DISRCC)的位描述DISRCCn位描

述初始状态LOC[1]bit[1]是用于源位置的选择。0:源在系统总线(AHB)上;1:源在外设总线(APB)上0INC[0]位[0]是用于地址增加的选择,0:增加;1:固定。如果为0,地址将根据单次和突发模式中每次传输后其数据大小而增加;如果为1,在传输后地址不改变(突发模式中,地址只在突发传输期间增加,但在传输后又回到其第一个值)04.4DMA4.4.5DMA专用寄存器(续)3.DMA初始目标(DIDST)寄存器DMA初始目标寄存器DIDST0~3分别对应DMA的4个通道的初始目标地址,用于存放要传输的目标数据地址。DMA初始目标地址寄存器(DIDST)寄存器地址读/写描述复位值DIDST00x4B000008读/写DMA0初始目标地址寄存器0x00000000DIDST10x4B000048DMA1初始目标地址寄存器DIDST20x4B000088DMA2初始目标地址寄存器DIDST30x4B0000C8DMA3初始目标地址寄存器4.4DMA4.4.5DMA专用寄存器(续)3.DMA初始目标(DIDST)寄存器DMA初始源地址寄存器(DIDST)的位描述DIDSTn位描

述初始状态D_ADDR[30:0]要传输的目标数据基本地址(开始地址)。当且仅当CURR_DST为0并且DMAACK为1时将此位的值锁存到CURR_DST中0x000000004.4DMA4.4.5DMA专用寄存器(续)4.DMA初始目标控制(DIDSTC)寄存器DMA初始目标控制寄存器(DIDSTC)寄存器地址读/写描述复位值DIDSTC00x4B00000C读/写DMA0初始目标控制寄存器0x00000000DIDSTC10x4B00004CDMA1初始目标控制寄存器DIDSTC20x4B00008CDMA2初始目标控制寄存器DIDSTC30x4B0000CCDMA3初始目标控制寄存器4.4DMA4.4.5DMA专用寄存器(续)4.DMA初始目标控制(DIDSTC)寄存器DMA初始源控制寄存器(DIDSTC)的位描述DIDSTCn位描

述初始状态CHK_INT[2]当设置了自动再加载时发生中断的时间选择。0:在TC到达0时发生中断;1:在执行完自动再加载后发生中断0LOC[1]bit[1]是用于目标位置的选择。0:目标在系统总线(AHB)上;1:目标在外设总线(APB)上0INC[0]位[0]是用于地址增加的选择。0:增加;1:固定。如果为0,地址将根据单次和突发模式中每次传输后其数据大小而增加;如果为1,在传输后地址不改变(突发模式中,地址只在突发传输期间增加,但在传输后又回到其第一个值)04.4DMA4.4.5DMA专用寄存器(续)5.DMA控制(DCON)寄存器DMA控制寄存器(DCON)寄存器地址读/写描述复位值DCON00x4B000010读/写DMA0控制寄存器0x00000000DCON10x4B000050DMA1控制寄存器DCON20x4B000090DMA2控制寄存器DCON30x4B0000D0DMA3控制寄存器4.4DMA4.4.5DMA专用寄存器(续)5.DMA控制(DCON)寄存器DMA控制寄存器(DCON)的位描述DCONn位描述初始状态DMD_HS[31]查询模式和握手模式之间选择其中之一,0:选择查询模式;1:选择握手模式。在两种模式下,DMA控制器开始其传输并为发出的DREQ而发出DACK。两种模式之间的差异为:是否需要等待取消DACK。握手模式中,DMA控制器在开始新的传输前等待取消DREQ。如果其发现了取消DREQ,则取消DACK并等待另一个DREQ的发出。与之对比,在查询模式中,DMA控制器不等待直到取消DREQ,其只是取消DACK并且如果发出DACK接着开始另一个传输。我们建议外部DMA请求源使用握手模式以预防新传输的非预定开始04.4DMA4.4.5DMA专用寄存器(续)5.DMA控制(DCON)寄存器DMA控制寄存器(DCON)的位描述DCONn位描述初始状态SYNC[30]DREQ/DACK的同步化选择,0:DREQ和DACK同步于PCLK(APB时钟);1:DREQ和DACK同步于HCLK(AHB时钟)。因此,如果有设备附加在AHB系统总线上时必须将此位设置为1,当这些设备附加在APB系统上它将被设置为0。设备附加在外部系统时用户应当按外部系统是同步于AHB系统还是APB系统来选择此位0INT[29]CURR_TC(终点计数)的中断使能/禁止设置,0:禁止CURR_TC中断,用户必须观察状态寄存器的传输计数(即定时查询);1:当所有传输完成产生中断请求(即CURR_TC变为0)04.4DMA4.4.5DMA专用寄存器(续)5.DMA控制(DCON)寄存器DMA控制寄存器(DCON)的位描述DCONn位描述初始状态TSZ[28]一个原子传输的传输大小选择(即释放总线前每次DMA拥有总线执行传输),0:执行一个单元传输;1:执行一个长度为4的突发传输0SERVMODE[27]单服务模式和全服务模式之间的服务模式选择,0:选择每次原子传输(单次或突发4)后DMA停止和等待其他DMA请求的单服务模式;1:选择传输计数达到0前重复请求得到原子传输的全服务模式。此模式不需要额外请求。注意:即使在全服务模式中,在每个原子传输后DMA释放总线并且为了预防其他总线主机的渴望得到总线而接着试图重新得到总线04.4DMA4.4.5DMA专用寄存器(续)5.DMA控制(DCON)寄存器DMA控制寄存器(DCON)的位描述DCONn位描述初始HWSRCSEL[26:24]每个DMA的DMA请求源的选择000DCON0:000:nXDREQ0;001:UART0;010:SDI;011:Timer100:USBdeviceEP1;101:IISSDO;110:PCMINDCON1:000:nXDREQ1;001:UART1;010:IISSDI;011:SPI100:USBdeviceEP2;101:PCMOUT;110:SDIDCON2:000:IISSDO;001:IISSDI;010:SDI;011:Timer100:USBdeviceEP3;101:PCMIN;110:MICINDCON3:000:UART2;001:SDI;010:SPI;011:Timer100:USBdeviceEP4;101:MICIN;110:PCMOUT这些位控制4选1多路选择器(4-1MUX),选择每个DMA的DMA请求源。当且仅当由DCONn[23]选择了硬件请求模式时这些位才有意义4.4DMA4.4.5DMA专用寄存器(续)5.DMA控制(DCON)寄存器DMA控制寄存器(DCON)的位描述DCONn位描述初始SWHW_SEL[23]DMA源为软件(软件请求模式)或硬件(硬件请求模式)选择。0:选择软件请求模式并且DMA由DMASKTRIG控制寄存器的SW_TRIG位的置位触发;1:由位[26:24]选择DMA源触发DMA操作04.4DMA4.4.5DMA专用寄存器(续)5.DMA控制(DCON)寄存器DMA控制寄存器(DCON)的位描述DCONn位描述初始状态RELOAD[22]设置再加载开/关选项。0:当传输计数的当前值变为0时(即执行了所有请求的传输)执行自动再加载;1:当传输计数的当前值变为0时DMA通道(DMAREQ)关闭。设置通道开/关位(DMASKTRIGn[1])为0(DREQ关闭)来预防非预定的新DMA操作的进一步开始0DSZ[21:20]要传输的数据大小,00=字节;01=半字;10=字;11=保留00TC[19:0]初始传输计数(或传输节拍)。注意:其实际传输的字节数由DSZ×TSZ×TC得到。此处DSZ、TSZ(1或4)和TC分别代表数据大小DCONn[21:20],传输大小DCONn[28]和初始传输计数。当且仅当CURR_TC为0并且DMAACK为1时该值将被加载到CURR_TC0x000004.4DMA4.4.5DMA专用寄存器(续)例4-2下面给出使用DMA将内存中的一块数据复制到另一个地址的程序示例#include"s3c2440.h"#include"interrupt.h"volatilestaticintflag=0;/*标志是否传输完所有的块数*/volatilestaticintfinish=0;/*标志DMA传输是否完成*/volatilestaticintblocks=0;/*记录还需要传输的块数*/volatilestaticintremainder=0;/*记录剩余的不足一块的字数*//*DMA中断处理程序,主要用于判断是否传输完成,若未完成,则启动下一次DMA传输*/voiddma_irp(){rSRCPND|=1<<INT_DMA2; /*清源挂起相应位*/rINTPND|=1<<INT_DMA2; /*清中断挂起相应位*/

4.4DMA4.4.5DMA专用寄存器(续)

if(flag==0){/*块传送完标志*/finish=1; /*置DMA传送完标志*/rDMASKTRIG2=1<<2; /*停止DMA*/}else{/*未传送完*/blocks--;rDISRC2+=0xFFFFF<<2; /*按字传输,故增加的值为字的个数*/rDIDST2+=0xFFFFF<<2;if(blocks==0){rDCON2=(rDCON2&~0xFFFFF)|remainder;

4.4DMA4.4.5DMA专用寄存器(续)

flag=0;}rDMASKTRIG2=(1<<1)|1;}}/*dma初始化,主要用于配置dma中断,以及对一些标志的初始化*/voiddma_init(){rSRCPND|=1<<INT_DMA2; /*清源挂起相应位*/rINTPND|=1<<INT_DMA2; /*清中断挂起相应位*/rINTMSK&=~(1<<INT_DMA2); /*开启相应位中断*/isr_handle_array[INT_DMA2]=dma_irp;/*填写中断矢量*/flag=1;finish=0;}4.4DMA4.4.5DMA专用寄存器(续)/*将内存的一块复制到另一块,按字传输,size为字数*/voiddma_m2m(unsignedint*src,unsignedint*dst,unsignedintsize){remainder=size%0xFFFFF;blocks=size/0xFFFFF;rDISRC2=(unsignedint)src;rDISRCC2=0;rDIDST2=(unsignedint)dst;rDIDSTC2=0;if(blocks==0){flag=0;rDCON2=(0x7<<29)|(1<<27)|(1<<22)|(2<<20)|remainder;}

4.4DMA4.4.5DMA专用寄存器(续)

else{flag=1;rDCON2=(0x7<<29)|(1<<27)|(1<<22)|(2<<20)|0xFFFFF;}rDMASKTRIG2=(1<<1)|1;}4.5I/O端口回本章目录S3C2440A包含了130个多功能输入/输出口引脚并且它们为如下显示的9个端口。●端口A(GPA):22位输出端口;●端口B(GPB):11位输入/输出端口;●端口C(GPC):16位输入/输出端口;●端口D(GPD):16位输入/输出端口;●端口E(GPE):16位输入/输出端口;●端口F(GPF):8位输入/输出端口;●端口G(GPG):16位输入/输出端口;●端口H(GPH):9位输入/输出端口;●端口J(GPJ):13位输入/输出端口。每个端口都可以简单地由软件配置为各种系统配置和设计要求。在开始主程序前定义使用的每个引脚的功能,如果没有使用某个引脚的复用功能,这个引脚可以配置为I/O口。4.5I/O端口

在S3C2440A中,大多数端口为复用引脚,因此要决定每个引脚选择哪项功能。配置这些端口,要通过设置一系列寄存器来实现。与I/O端口配置相关的寄存器包括端口控制寄存器、端口数据寄存器、端口上拉电阻寄存器、外部中断控制寄存器、杂项控制寄存器。端口控制寄存器(GPnCON):决定了每个引脚使用哪项功能。如果在掉电模式中PE0至PE7用于唤醒信号,这些端口必须配置为输入模式。端口数据寄存器(GPADAT至GPJDAT):如果端口配置为输出端口,可以写入数据到GPnDAT的相应位。如果端口配置为输入端口,可以从GPnDAT的相应位读取数据。端口上拉寄存器(GPBUP至GPJUP):端口上拉寄存器控制每个端口组的使能/禁止上拉电阻。当相应位为0时使能引脚的上拉电阻。当为1时禁止上拉电阻。如果使能了上拉电阻,那么上拉电阻与引脚的功能设置无关(输入、输出、DATAn、EINTn等)。杂项控制寄存器:此寄存器控制睡眠模式,USB引脚和CLKOUT选择的数据端口上拉电阻。4.5I/O端口外部中断控制寄存器:24个外部中断由各种信号方式触发。EXTINT寄存器为外部中断请求配置信号触发方式为低电平触发、高电平触发、下降沿触发、上升沿触发或双边沿触发。由于每个外部中断引脚包含一个数字滤波器,中断控制可以确认请求信号是否长于3个时钟。EINT[15:0]用于唤醒源。1)端口控制寄存器端口控制寄存器见表4-14所示。端口A每个引脚与端口A控制寄存器的1位对应。端口B~J的每个引脚与端口B~J控制寄存器的2位对应。4.5I/O端口相关寄存器地址读/写描述复位值GPACON0x56000000读/写端口A控制寄存器,使用位[22:0],0:输出引脚;1:功能引脚0xFFFFFFGPBCON0x56000010端口B控制寄存器,使用位[21:0]00:输入01:输出10:功能1引脚11:功能2或保留0x0GPCCON0x56000020端口C控制寄存器,使用位[31:0]GPDCON0x56000030端口D控制寄存器,使用位[31:0]GPECON0x56000040端口E控制寄存器,使用位[31:0]GPFCON0x56000050端口F控制寄存器,使用位[15:0]GPGCON0x56000060端口G控制寄存器,使用位[31:0]GPHCON0x56000070端口H控制寄存器,使用位[21:0]GPJCON0x560000D0端口J控制寄存器,使用位[25:0]4.5I/O端口2)端口数据寄存器端口A~J的每个引脚与对应的数据寄存器中的1位对应。相关寄存器地址读/写描述复位值GPADAT0x56000004读/写端口A数据寄存器,使用位[22:0]–GPBDAT0x56000014端口B数据寄存器,使用位[10:0]–GPCDAT0x56000024端口C数据寄存器,使用位[15:0]–GPDDAT0x56000034端口D数据寄存器,使用位[15:0]–GPEDAT0x56000044端口E数据寄存器,使用位[15:0]–GPFDAT0x56000054端口F数据寄存器,使用位[7:0]–GPGDAT0x56000064端口G数据寄存器,使用位[15:0]–GPHDAT0x56000074端口H数据寄存器,使用位[10:0]–GPJDAT0x560000D4端口J数据寄存器,使用位[12:0]–4.5I/O端口3)端口上拉寄存器端口B~J的每个引脚与对应的上拉寄存器中的1位对应。相关寄存器地址读/写描述复位值GPBUP0x56000018读/写端口B上拉寄存器,使用位[10:0]0:对应引脚设置上拉1:无上拉功能0x0GPCUP0x56000028端口C上拉寄存器,使用位[15:0]GPDUP0x56000038端口D上拉寄存器,使用位[15:0]0xF000GPEUP0x56000048端口E上拉寄存器,使用位[15:0]0x0GPFUP0x56000058读/写端口F上拉寄存器,使用位[7:0]0:对应引脚设置上拉1:无上拉功能0x0GPGUP0x56000068端口G上拉寄存器,使用位[15:0]0xFC00GPHUP0x56000078端口H上拉寄存器,使用位[10:0]0x0GPJUP0x560000D8端口J上拉寄存器,使用位[12:0]0x04.6定时器回本章目录S3C2440A有5个16位定时器,其中定时器0、1、2和3具有脉宽调制(PWM)功能。定时器4是一个无输出引脚的内部定时器。定时器0还包含用于大电流驱动的死区发生器。定时器0和1共用一个8位预分频器,定时器2、3和4共用另外的8位预分频器。每个定时器都有一个可以生成5种不同分频信号(1/2、1/4、1/8、1/16和TCLK)的时钟分频器,从相应8位预分频器得到时钟的时钟分频器中得到其自己的时钟信号。8位预分频器是可编程的,并且按存储在TCFG0和TCFG1寄存器中的加载值来分频PCLK。定时计数缓冲寄存器(TCNTBn)包含了一个当使能了定时器时的被加载到递减计数器中的初始值,定时比较缓冲寄存器(TCMPBn)包含了一个被加载到比较寄存器中的与递减计数器相比较的初始值。这种TCNTBn和TCMPBn的双缓冲特征保证了改变频率和占空比时定时器产生稳定的输出。4.6定时器每个定时器有它自己的由定时器时钟驱动的16位递减计数器。当递减计数器到达0时,产生定时器中断请求通知CPU定时器操作已经完成。当定时器计数器到达0时,相应的TCNTBn的值将被自动加载到递减计数器以继续下一次操作。然而,如果定时器停止了,TCNTBn的值将不会被重新加载到计数器中。TCMPBn的值是用于脉宽调制(PWM)。当递减计数器的值与定时器控制逻辑中的比较寄存器的值相匹配时定时器控制逻辑改变输出电平。因此,比较寄存器决定PWM输出的开启时间(或关闭时间)。S3C2440A定时器的主要特性有●五个16位定时器;●两个8位预分频器和两个4位分频器;●可编程输出波形的占空比控制(PWM);●自动重载模式或单稳脉冲模式;●死区发生。4.6定时器S3C2440A的16位的PWM定时方块如图4-12所示。4.6定时器例4-3下面给出使用定时器延迟毫秒的程序示例/*使用循环的不精确延时*/voiddelay(unsignedinti){

while(i--);}/*延时毫秒的函数,参数ms表示要延时多少个毫秒*/voidmdelay(volatileu32ms){

/*Timer4:f=50000000/250/4=50000Hz,即节拍周期为1/50000=20ms*/

rTCFG0=~(0xFF<<8);

rTCFG0|=249<<8; /*预分频值249*/

rTCFG1&=~(0xF<<16);

rTCFG1|=0x1<<16; /*分频值4*/

4.6定时器例4-3下面给出使用定时器延迟毫秒的程序示例while(ms--){rTCNTB4=50;rTCON&=~(7<<20);rTCON|=7<<20;rTCON&=~(1<<21);rTCON&=~(1<<22);delay(100);while(rTCNTO4)delay(1);}}

4.7ARM中断回本章目录在S3C2440A中的中断控制器接收来自60个中断源的请求。提供这些中断源的是内部外设,如DMA控制器、UART、IIC等。在这些中断源中,UARTn、AC97和EINTn中断对于中断控制器而言是“或”关系,它们共享一条中断请求线,但LCD中断特性与此不同。当从内部外设和外部中断请求引脚收到多个中断请求时,中断控制器在仲裁步骤后请求ARM920T内核的FIQ或IRQ。4.7ARM中断1.中断运行控制仲裁步骤由硬件优先级逻辑决定并且写入结果到帮助用户通告是各种中断源中的哪个中断发生了的中断挂起寄存器中。中断处理框图如图4-13所示。如果ARM920TCPU中的PSR的F位被置位为1,CPU不会接收来自中断控制器的快中断请求(FIQ)。同样的如果PSR的I位被置位为1,CPU不会接收来自中断控制器的中断请求(IRQ)。因此,中断控制器可以通过清除PSR的F位和I位为0并且设置INTMSK的相应位为0来接收中断。ARM920T有两种中断模式的类型:FIQ或IRQ,所有中断源在中断请求时决定使用哪种类型。4.7ARM中断1.中断运行控制中断处理框图4.7ARM中断2.中断挂起寄存器S3C2440A有两个中断挂起寄存器:源挂起寄存器(SRCPND)和中断挂起寄存器(INTPND),这些挂起寄存器表明一个中断请求是否为挂起。当中断源请求中断服务,SRCPND寄存器的相应位被置位为1,并且同时在仲裁步骤后INTPND寄存器仅有1位自动置位为1。如果屏蔽了中断,则SRCPND寄存器的相应位被置位为1,这并不会引起INTPND寄存器的位的改变。当INTPND寄存器的挂起位为置位,每当I标志或F标志被清除为0,中断服务程序将开始。SRCPND和INTPND寄存器可以被读取和写入,因此服务程序必须首先通过写1到SRCPND寄存器的相应位来清除挂起状态,并且通过相同方法来清除INTPND寄存器中挂起状态。4.7ARM中断3.中断屏蔽寄存器此寄存器表明如果中断相应的屏蔽位被置位为1则禁止该中断。如果某个INTMSK的中断屏蔽位为0,将正常服务中断。如果INTMSK的中断屏蔽位为1并且产生了中断,将置位源挂起位。4.中断源S3C2440A中断源如表4-17和表4-18所示,支持多达60个中断源。次级中断源与(主)中断源共享一条中断线。多个中断源共享一条中断线的需要在中断服务子程序中判断是哪一个中断源发出的中断。4.7ARM中断5.中断优先级产生模块(见图4-14)每个仲裁器可以处理基于1位仲裁器模式控制(ARB_MODE)和选择控制信号(ARB_SEL)的两位的6个中断请求。如果ARB_SEL位为00b,优先级顺序为REQ0、REQ1、REQ2、REQ3、REQ4和REQ5;如果ARB_SEL位为01b,优先级顺序为REQ0、REQ2、REQ3、REQ4、REQ1和REQ5;如果ARB_SEL位为10b,优先级顺序为REQ0、REQ3、REQ4、REQ1、REQ2和REQ5;如果ARB_SEL位为11b,优先级顺序为REQ0、REQ4、REQ1、REQ2、REQ3和REQ5。注意:仲裁器的REQ0的优先级总是最高并且REQ5的优先级总是最低。通过改变ARB_SEL位,可以轮换REQ1到REQ4的顺序。4.7ARM中断5.中断优先级产生模块(见图4-14)中断优先级模块4.7ARM中断5.中断优先级产生模块(见图4-14)此外,如果ARB_MODE位被设置为0,ARB_SEL位不能自动改变,这使得仲裁器操作在固定优先级模式中(注意:即使在此模式中,也不能通过手动改变ARB_SEL位来重新配制优先级)。另一方面,如果ARB_MODE为1,ARB_SEL位会被轮换方式而改变。例如,如果REQ1被服务,ARB_SEL位被自动改为01b以便REQ1进入到最低的优先级。ARB_SEL改变的详细结果如下:如果REQ0或REQ5被服务,ARB_SEL位不会改变;如果REQ1被服务,ARB_SEL位被改为01b;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论