1、LPC2000系列ARM硬件结构1.LPC2000系列简介2.引脚描述3.存储器寻址4.系统控制模块5.存储器加速模块 (MAM)6.外部存储器控制器(EMC)7.引脚连接模块8.GPIO9.向量中断控制器10.外部中断输入11.定时器0和定时器112.SPI接口13.I2C接口14.UART(0、1)15.A/D转换器16.看门狗17.脉宽调制器(PWM)18.实时时钟4.5 存储器加速模块(MAM)概述 LPC2000微控制器扩展了器件内部Flash总线宽度为128位,用于提高处理器的指令执行速度。这个接口通过存储器加速模块(MAM)来控制。MAM内部结构 LPC2200系列芯片把Flas
2、h存储器被分成两组,它们轮番工作,及时的为CPU提供需要的指令和数据,以防止CPU取指暂停。每组Flash存储器都有自己的预取指缓冲区、分支跟踪缓冲区和数据缓冲区。分支跟踪缓存分支跟踪缓存总线接口Flash存储器组0Flash存储器组1预取指缓存预取指缓存数据缓存区选择ARM7局部总线2128位2128位存储器地址存储器数据/指令Flash组2Flash组1CPU 执行指令取指阶段 等待 指令提供指令1提供指令3.取指阶段提供指令4取指阶段 等待3 等待取指阶段提供指令2取指阶段 等待124关闭MAM指令执行情况 从Flash组1中读取指令,CPU处于等待状态。1 CPU从1组指令缓存区中获取
3、指令并执行。2 从Flash组2中读取指令,CPU处于等待状态。3 CPU从2组指令缓存区中获取指令并执行。4 所有存储器操作请求都会直接对Flash操作,由此产生了CPU停止,等待若干周期的情况。Flash组2Flash组1CPU 执行指令开启MAM指令执行情况.1413提供指令13 14 15 16取指阶段1211109取指阶段提供指令910 11 128765取指阶段提供指令56784321提供指令12345678取指阶段取指阶段 等待 指令.两组指令缓存区中不存在指令,启动Flash存储器指令读取周期,CPU停止,等待若干周期。1 CPU执行Flash组1指令缓存区中的指令。2 CPU
4、执行Flash组2指令缓存区中的指令,同时从Flash组1中读取指令。3 只要指令存在两个组的指令缓存区中,CPU的指令执行是连续的,由此大大提高了指令执行效率。4.5 存储器加速模块(MAM)程序顺序执行 每个128位值包括了4个32位ARM指令或8个16位Thumb指令。在连续执行代码时,通常一个Flash组包含当前正在取指的指令和包含该指令的整个Flash行,而另一个Flash组则包含或正在预取指下一个连续的代码行。4.5 存储器加速模块(MAM)程序出现分支 在预取指缓存区中保存着将要执行的指令,在分支跟踪缓存区中保存着程序跳转后可执行到的指令。CPU取跳转之后的指令跳转方向从Flas
5、h读取指令将指令行放入分支跟踪缓存区和预取指缓存区指令在预取指缓存区指令在分支跟踪缓存区读取指令读取指令向后向前否否是是4.5 存储器加速模块(MAM)程序获取数据 当CPU在从Flash中获取数据时,如果这些数据没有出现在MAM的数据缓冲区中,那么MAM会执行一次Flash读操作,并把一个128位的数据行存入数据缓冲区,这样就加快了按顺序访问数据的速度。数据访问使用一个单行的缓冲区,和访问代码时提供两个缓冲区不同,因为数据访问不需要预取指功能。4.5 存储器加速模块(MAM)MAM与Flash编程 Flash编程功能不受存储器加速器模块的控制,而是作为一个独立的功能进行处理。Flash存储器
6、的布线使其每个扇区同时存在于两个组当中,这样扇区擦除操作可同时对两个组执行。4.5 存储器加速模块(MAM)MAM的操作模式 LPC2000系列芯片允许用户设置MAM的加速级别,使芯片适用于某些对功耗和可预测性有要求的场合。MAM定义了三种操作模式:加速级别加速级别顺序执行顺序执行程序分支程序分支数据数据功耗功耗可预测性可预测性关闭关闭不预取代码不缓冲代码不缓冲数据低高部分使能部分使能预取代码缓冲代码缓冲但时序固定中中完全使能完全使能预取代码缓冲代码缓冲数据高低4.5 存储器加速模块(MAM)MAM的配置 在复位后,MAM默认为禁止状态。软件可以随时将存储器访问加速打开或关闭。通常我们都会把加
7、速设置为完全使能,这可使程序以最高速度运行。而运行某些要求更精确定时的代码时,我们可以关闭或部分使能MAM,以较慢但可预测的速度运行代码。4.5 存储器加速模块(MAM)寄存器描述控制寄存器MAMCR7:21:0模式控制控制寄存器MAMTIM7:32:0取指周期控制MAM控制寄存器(MAMCR):MAMCR1:0:用于MAM的模式控制,具体关系如下表。MAMCR1:0描述00禁止MAM功能01部分使能MAM功能10完全使能MAM功能11保留MAM定时寄存器(MAMTIM):MAMTIM2:0:决定使用多少个CCLK周期访问Flash存储器,这样可以调整MAM时序使其匹配处理器操作频率,具体关系
8、如下表。MAMTIM2:0描述MAMTIM2:0描述000保留100取指周期为4个CCLK001取指周期为1个CCLK101取指周期为5个CCLK010取指周期为2个CCLK110取指周期为6个CCLK011取指周期为3个CCLK111取指周期为7个CCLK 当访问周期设置为1个CCLk时,实际上关闭了MAM,但是仍可以选择MAM模式对功耗进行优化。注意:不正确的设定会导致器件的错误操作4.5 存储器加速模块(MAM)MAM使用注意事项MAM定时问题:在改变MAM定时值时必须先关闭MAM。其设置的定时值和系统时钟有如下关系,目的是为了确保Flash的访问周期不会小于50ns,否则会导致操作错误
9、系统时钟系统时钟(CCLK)MAM定时值定时值 20MHz120MHz 40MHz240MHz 60MHz3Flash编程问题:在编程和擦除操作过程中不允许访问Flash存储器。为了防止从Flash存储器中读取无效的数据,在Flash编程或擦除操作开始后MAM将不缓冲任何数据。所以在Flash操作结束后,任何对Flash地址的读操作都将启动新的取指操作。4.5 存储器加速模块(MAM)MAM应用示例void MAMSet(uint32 Fcclk)MAMCR=0;If(Fcclk 200000000)MAMTIM=1;else if(Fcclk 40000000)MAMTIM=2;else
10、MAMTIM=3;MAMCR=2;MAM部件Flash访问时钟的配置:关闭MAM部件;1 启动MAM部件。3 根据系统时钟配置取指周期;21.LPC2000系列简介2.引脚描述3.存储器寻址4.系统控制模块5.存储器加速模块 (MAM)6.外部存储器控制器(EMC)7.引脚连接模块8.GPIOLPC2000系列ARM硬件结构9.向量中断控制器10.外部中断输入11.定时器0和定时器112.SPI接口13.I2C接口14.UART(0、1)15.A/D转换器16.看门狗17.脉宽调制器(PWM)18.实时时钟4.6 外部存储器控制器(EMC)概述 外部存储器控制器是AMBA AHB总线上的一个从
11、模块,它为AMBA AHB系统总线和外部(片外)存储器器件提供了一个接口。该模块可同时支持多达4个单独配置的存储器组,每个存储器组都支持SRAM、ROM、Flash EPROM、Burst ROM存储器或一些外部I/O器件。存储器或外部I/O口器件存储器或外部I/O口器件存储器或外部I/O口器件存储器或外部I/O口器件ARM7TDMI-S内核EMC模块Bank0Bank1Bank2Bank3AMBA AHB总线CS0/1/2/34.6 外部存储器控制器(EMC)特性支持静态存储器映射器件;4个存储器组(Bank0 Bank3)可单独配置,每个存储器组可访问16M字节空间;总线空闲周期可编程;可
12、对静态RAM器件的读写等待时间进行编程;可编程外部数据总线宽度8位、16位和32位。4.6 外部存储器控制器(EMC)引脚描述引脚名称引脚名称类型类型引脚描述引脚描述复用引脚复用引脚D31:0输入/输出外部存储器数据线P2.0P2.31A23:0输出外部存储器地址线P3.0P3.23OE输出读使能信号,低有效P1.1WE输出写使能信号,低有效P3.27CS3:0输出片选信号,低有效P1.0、P3.24P3.26BLS3:0输出字节定位选择信号,低有效P3.28P3.31 注:每个这些引脚是与P1、P2和P3口GPIO功能复用,所以在使用外部总线前首先要正确配置PINSEL2寄存器。4.6 外部
13、存储器控制器(EMC)寄存器描述 外部存储器控制器包含4个配置寄存器。每个配置寄存器控制一个外部存储器接口的总线空闲时间、读访问长度、写访问长度、存储器组是否写保护、存储器组的总线宽度的设置等。ARM7TDMI-S内核EMC模块Bank0Bank1Bank2Bank3AMBA AHB配置寄存器BCFG1BCFG0BCFG2BCFG34.6 外部存储器控制器(EMC)寄存器描述配置寄存器BCFG033:0IDCY31:30AT49:5WST110RBLE15:11WST223:1624BUSERR25WPERR26WP27BM29:28MWIDCYWST1 IDCY:总线空闲时间控制位。该位控制
14、着一个存储器内部的读写访问之间,以及访问一个存储器组和访问另一个存储器组之间EMC需要给定的“空闲”CCLK周期最小数目,以避免器件间的总线竞争。计算公式为:空闲CCLK周期数 IDCY+1;存储器组配置寄存器03(BCFG03):WST1:读写访问长度控制位。该位控制读访问的长度,以调节对外部存储器的读访问时间。读访问的长度以CCLK周期来计量。计算公式为:读操作周期长度 WST1+3;XCLKCSOEWE/BLSAddrData有效地址变化数据有效数据WST1=01个等待周期个等待周期外部存储器读访问波形(WST1=0):读操作,共需读操作,共需3个周期个周期增加1个等待周期外部存储器读访
15、问波形(WST1=1):WST1=1,2个等待周期个等待周期有效地址变化数据有效数据读操作,共需读操作,共需4个周期个周期4.6 外部存储器控制器(EMC)寄存器描述配置寄存器BCFG033:0IDCY31:30AT49:5WST110RBLE15:11WST223:1624BUSERR25WPERR26WP27BM29:28MWRBLE存储器组配置寄存器03(BCFG03):RBLE:字节定位使能位。在LPC2200微处理器中,EMC提供了一组字节定位选择信号(BLS0BLS3)实现对16位或32位外部存储器组的字节操作。设定RBLE可实现:写访问时,RBLE位决定WE信号是否有效(低电平有
16、效);读访问时,RBLE位决定BLSn信号是否有效(低电平有效)。4.6 外部存储器控制器(EMC)寄存器描述配置寄存器BCFG033:0IDCY31:30AT49:5WST110RBLE15:11WST223:1624BUSERR25WPERR26WP27BM29:28MWWST2存储器组配置寄存器03(BCFG03):WST2:写访问长度控制位。和读操作类似,该位控制写访问的长度(对Burst ROM的连续读访问除外),以调节对外部存储器的写访问时间。写访问的长度以CCLK周期来计量。计算公式为:写操作周期长度 WST2+3;外部存储器写访问波形(WST2=0):XCLKCSOEWE/BL
17、SAddrData有效数据有效地址WST2=01个等待周期个等待周期写操作,共需写操作,共需3个周期个周期外部存储器写访问波形(WST2=1):增加1个等待周期写操作,共需写操作,共需4个周期个周期有效数据有效地址WST2=12个等待周期个等待周期4.6 外部存储器控制器(EMC)寄存器描述配置寄存器BCFG033:0IDCY31:30AT49:5WST110RBLE15:11WST223:1624BUSERR25WPERR26WP27BM29:28MWMW存储器组配置寄存器03(BCFG03):MW:该位控制相应存储器组的数据总线宽度。BCFGx29:28数据总线宽度008011610321
18、1保留4.6 外部存储器控制器(EMC)寄存器描述MW控制域(BCFG29:28)与引脚BOOT1:0的关系:由于Bank0可用于引导程序运行,所以BCFG029:28的复位值与引脚BOOT1:0的设定有关(当BOOT1:0=11时,复位后从片内Flash引导程序运行)。Bank复位时引脚BOOT1:0的状态BCFG29:28复位值存储器宽度0LL0080LH01160HL10320HH10321XX10322XX01163XX0084.6 外部存储器控制器(EMC)外部存储器接口 LPC2200的外部存储器宽度可设定为8位、16位和32位模式,每一种模式对应的硬件连接都是不同的,原因就是在总
19、线工作模式上存在差别。4.6 外部存储器控制器(EMC)8位总线宽度 数据总线D7D0有效,字节定位信号中只有BLS0是有效的,总线的工作模式 如表。LPC2200工作模式RBLECSOEWEBLS0说明读操作(8位数据)0LLHH1LLHL1写操作(8位操作)0LHHL21LHLL空闲操作XHHHH说明:1、如果此时使用BLS0作为存储芯片的写使能信号,那么在执行读取操作时,存储芯片上的读、写使能信号就会同时有效。4.6 外部存储器控制器(EMC)8位总线宽度连接方式需要设置RBLE=1,否则在写数据时,WE不会出现有效信号。需要设置RBLE=0,否则在读数据时,读、写使能信号都有效,就会出
20、现总线数据错误。4.6 外部存储器控制器(EMC)16位总线宽度 数据总线D15D0有效,地址总线A0无效,字节定位信号中BLS0和BLS1有效。16位存储器数据16位存储器地址D15 D8D7 D0高字节低字节0 x0000 0000高字节低字节0 x0000 0001高字节低字节0 x0000 0010高字节低字节 LPC2200操作16位存储器时,需将LPC2200的地址线A1连接到存储器地址线A0处。总线工作模式如表。16位存储器件中,高、低字节定位表示方法:LPC2200工作模式RBLECSOEWEBLS1BLS0读操作8位、16位数据0LLHHH1LLHLL写操作8位数据0LHHH
21、LLH1LHLHLLH16位数据0LHHLL1LHLLL空闲操作XHHHHH4.6 外部存储器控制器(EMC)16位总线宽度连接方式RBLE=0。否则在对存储器进行读操作时,读、写使能信号都有效。RBLE=1。否则在对存储器进行写操作时,写使能信号无效。4.6 外部存储器控制器(EMC)16位总线操作示例 LPC2000与存储芯片MT45W4MW16 的连接示意图。MT45W4MW16是一款PSRAM芯片,16位总线宽度,容量8M字节。RBLE=1MT45W4MW16部分引脚描述引脚描述A0A22地址线D0D15数据线CE片选线OE读使能线WE写使能线UB高字节使能线LB低字节使能线4.6 外
22、部存储器控制器(EMC)向PSRAM中写入16位数据uint16 *point16;uint16 data16=0 x00;point16=(uint16*)0 x80001020;while(1)*point16=data16+;向PSRAM中0 x80001020地址循环写入从0开始递增的数据。使用逻辑分析仪捕捉到前4次操作的波形。4.6 外部存储器控制器(EMC)向PSRAM中低字节地址写入8位数据uint8 *point8;uint8 data8=0 x00;point8=(uint8*)0 x80001010;while(1)*point8=data8+;向PSRAM中低字节地址0
23、x8 0001010循环写入从0开始递增的8位数据。WE、BLS0有效,数据线上D7D0有效,D15D8无效4.6 外部存储器控制器(EMC)向PSRAM中高字节地址写入8位数据uint8 *point8;uint8 data8=0 x00;point8=(uint8*)0 x80001011;while(1)*point8=data8+;向PSRAM中高字节地址0 x8 0001011循环写入从0开始递增的8位数据。WE、BLS1有效,数据线上D15D8有效,D7D0无效4.6 外部存储器控制器(EMC)1、写入16位数据时,EMC将16位数据输出到D15:0,同时使BLS0和BLS1均有效
24、2、向“低字节地址”处写入8位数据时,EMC将8位数据输出到D7:0,同时使BLS0输出有效,BLS1输出无效;3、向“高字节地址”处写入8位数据时,EMC将8位数据输出到D15:8,同时使BLS1输出有效,BLS0输出无效。16位写操作总结4.6 外部存储器控制器(EMC)从PSRAM中读取8位数据uint8 RcvData8;uint8 *point8;point8=(uint8*)0 x80001010;while(1)RcvData8=*point8+;RcvData8=*point8+;RcvData8=*point8+;RcvData8=*point8-;point8-;poin
25、t8-;从PSRAM 0 x8000 1010 0 x8000 1013循环读取8位数据 读取16位数据时,BLS0和BLS1均有效,有效数据位于:D15:0;读取“低字节”数据时,BLS0和BLS1均有效,有效数据位于:D7:0;读取“高字节”数据时,BLS0和BLS1均有效,有效数据位于:D15:8。4.6 外部存储器控制器(EMC)32位总线宽度 数据总线D31D0有效,地址总线A1、A0无效,字节定位信号中BLS0BLS3有效。32位存储器件中字节0、1、2、3的定位表示法:32位存储器数据32位存储器件地址D31 D24D23 D16D15 D8D7 D0字节3字节2字节1字节00
26、x0000 0000字节3字节2字节1字节00 x0000 0001字节3字节2字节1字节00 x0000 0010字节3字节2字节1字节0 LPC2200操作32位存储器时,需将LPC2200的地址线A2连接到存储器地址线A0处。4.6 外部存储器控制器(EMC)32位总线宽度连接方式1.LPC2000系列简介2.引脚描述3.存储器寻址4.系统控制模块5.存储器加速模块 (MAM)6.外部存储器控制器(EMC)7.引脚连接模块8.GPIOLPC2000系列ARM硬件结构9.向量中断控制器10.外部中断输入11.定时器0和定时器112.SPI接口13.I2C接口14.UART(0、1)15.A
27、/D转换器16.看门狗17.脉宽调制器(PWM)18.实时时钟4.7 引脚连接模块概述 LPC2000系列微控制器的大部分管脚都具有多种功能,即管脚复用,但是同一引脚在同一时刻只能使用其中一个功能,通过配置相关寄存器控制多路开关来连接引脚与片内外设。引脚P0.0GPIOTXD0PWM1输出保留PINSELx引脚连接寄存器PINSELx1:000011011P0.0默认为GPIO功能P0.0选择TXD0功能,配置对应位为01P0.0选择PWM1功能,配置对应位为10P0.0选择保留功能,配置对应位为114.7 引脚连接模块 LPC2000系列微控制器具有三个32位宽度PINSEL寄存器,其中PI
28、NSEL0和PINSEL1控制端口0,PINSEL2根据芯片的不同控制的端口数量也不同。寄存器描述寄存器LPC2100LPC2200PINSEL0P00:15PINSEL1P016:31PINSEL2P116:31P10:1、P116:31、P20:31、P30:314.7 引脚连接模块应用示例PINSEL0=0 x05 16;要求将P0.8、P0.9设置为TxD1、RxD1 通过查阅PINSE0寄存器设置表,得到P0.9和P0.8的控制位为PINSEL019:16,当该域设置为0101(0 x05)时选择 RxD1和 TxD1。为了不影响别的管脚连接设置,通常选择下面的设置方法。PINSEL
29、0=(PINSEL0&0 xFFF0FFFF)|(0 x05 16);1.LPC2000系列简介2.引脚描述3.存储器寻址4.系统控制模块5.存储器加速模块 (MAM)6.外部存储器控制器(EMC)7.引脚连接模块8.GPIOLPC2000系列ARM硬件结构9.向量中断控制器10.外部中断输入11.定时器0和定时器112.SPI接口13.I2C接口14.UART(0、1)15.A/D转换器16.看门狗17.脉宽调制器(PWM)18.实时时钟4.8 GPIO引脚描述 LPC2114/2124微控制器具有两个端口P0和P1,可以作为GPIO使用的引脚数为46个。LPC2210/2212/2214微
30、控制器还包含另外两个端口P2和P3,这个两个端口与外部存储器总线复用,当它们全部作为GPIO使用时,GPIO引脚数多达112个。GPIO与控制寄存器的关系PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10引脚PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10通用名称描述访问类型复位值IOPINGPIO引脚值寄存器,不管方向模式如何,引脚的当前状态都可以从该寄存器中读出只读NAIOSETGPIO输出置位寄存器。该寄存器控制引脚输出高电平读/置位0 x00000000IO
31、CLRGPIO输出置位寄存器。该寄存器控制引脚输出低电平只清零0 x00000000IODIRGPIO方向控制寄存器。该寄存器单独控制每个IO口的方向读/写0 x00000000GPIO相关寄存器描述PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相关寄存器描述IOxPINIOxPIN描述复位值31:0GPIO引脚值。IOxPIN0对应于Px.0 IOxPIN31对应于Px.31引脚未定义 该寄存器反映了当前引脚的状态。IOxPIN中的x对应于某一个端口,如P1口对应于IO1PIN。所以芯片存在多少个端口,就有多少个IOxPIN分别与之对应。写该寄存器会将值
32、保存到输出寄存器。注意:无论引脚被设置为输入还是输出模式,都不影响引脚状态的读出。PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相关寄存器描述IOxDIRIOxDIR描述复位值31:0方向控制位。IOxDIR0对应于Px.0 IOxDIR31对应于Px.31引脚0 当引脚设置为GPIO输出模式时,可使用该寄存器控制引脚的方向。向某位写入1使对应引脚作为输出功能,写入0时作为输入功能。作为输入功能时,引脚处于高阻态。PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相关寄存器描述IOxSETIOxSET描述复位值31:0输出
33、置位。IOxSET0对应于Px.0 IOxPIN31对应于Px.31引脚0 当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出高电平。向某位写入1使对应引脚输出高电平。写入0无效。从该寄存器读回的数据为GPIO输出寄存器的值。PINSELxIOxDIRIOxCLRIOxPINIOxSETinout10GPIO相关寄存器描述IOxCLRIOxCLR描述复位值31:0输出清零。IOxCLR0对应于Px.0 IOxCLR31对应于Px.31引脚0 当引脚设置为GPIO输出模式时,可使用该寄存器从引脚输出低电平。向某位写入1使对应引脚输出低电平。写入0无效。注意:读取该寄存器无效,不能读回输出寄
34、存器的值。4.8 GPIO使用GPIO注意要点引脚设置为输出方式时,输出状态由IOxSET和IOxCLR中最后操作的寄存器决定;复位后默认所有GPIO为输入模式。.PINSEL0&=0 xFFFFFFFC;IO0DIR|=0 x00000001;IO0SET =0 x00000001;.C代码:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10GPIO应用示例设置P0.0输出高电平P0.0(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输出(3)设置P0.0口状态,输出高电平1 .uint32 PinStat;PINSEL0&=0 xFFFF
35、FFFC;IO0DIR&=0 xFFFFFFFE;PinStat =IO0PIN;.C代码:PINSEL0IO0DIRIO0CLRIO0PINIO0SETinout10GPIO应用示例读取P0.0引脚状态P0.0(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输入(3)从IO0PIN读取引脚状态IO0PIN#define DataBus 0 xFF PINSEL0&=0 xFFFF0000;IO0DIR|=DataBus;IO0CLR =DataBus;IO0SET =Data;.使用IOxSET和IOxCLR实现:GPIO应用示例输出多位数据至IO口(1)设置引脚连
36、接模块,P0.07为GPIO(2)设置P0.0口方向,设置为输出(3)清零8位IO口的输出状态 在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。本例将8位无符号整形变量Data的值输出到P0.0P0.7。(4)Data变量中为1的位将输出高电平0 x?0 x00Data数据输出线:#define DataBus 0 xFF PINSEL0&=0 xFFFF0000;IO0DIR|=DataBus;IO0PIN =(IO0SET&0 xFFFFFF00)|Data;.GP
37、IO应用示例输出多位数据至IO口(1)设置引脚连接模块,P0.0为GPIO(2)设置P0.0口方向,设置为输出(3)写IO0PIN,输出数据 在需要将多位数据同时输出到某几个IO口线时,通常使用IOxSET和IOxCLR来实现,在某些情况下也可以使用IOxPIN寄存器实现。后者可以在多个IO口上直接输出0和1电平。本例将8位无符号整数变量Data的值输出到P0.0P0.7。使用IOxPIN实现:0 x?Data数据输出线:0 x?0 x00Data与前者对比:1.LPC2000系列简介2.引脚描述3.存储器寻址4.系统控制模块5.存储器加速模块 (MAM)6.外部存储器控制器(EMC)7.引脚
38、连接模块8.GPIOLPC2000系列ARM硬件结构9.向量中断控制器10.外部中断输入11.定时器0和定时器112.SPI接口13.I2C接口14.UART(0、1)15.A/D转换器16.看门狗17.脉宽调制器(PWM)18.实时时钟4.9 向量中断控制器概述 ARM7TDMI内核具有两个中断输入,分别为IRQ中断和FIQ中断。向量中断控制器(VIC)负责管理芯片的中断源,最多可以管理32个中断输入请求。CPU 内核ARM7TDMI-S4.9 向量中断控制器程序状态寄存器CPSR与VIC的关系 ARM内核通过CPSR来监视和控制内部的操作,CPSR中的“I”位和“F”位分别用来控制IRQ模
39、式和FIQ模式的使能。CPUARM7TDMI-SVICIRQFIQCPSR 7(I)CPSR 6(F)4.9 向量中断控制器程序状态寄存器CPSR与VIC的关系 当I=1时,禁止IRQ中断CPUARM7TDMI-SVICIRQFIQCPSR 7(I)CPSR 6(F)当I=0时,使能IRQ中断CPUARM7TDMI-SVICIRQFIQCPSR 7(I)CPSR 6(F)4.9 向量中断控制器程序状态寄存器CPSR与VIC的关系 当F=1时,禁止FIQ中断CPUARM7TDMI-SVICIRQFIQCPSR 7(I)CPSR 6(F)当F=0时,使能FIQ中断CPUARM7TDMI-SVICI
40、RQFIQCPSR 7(I)CPSR 6(F)4.9 向量中断控制器中断分类中断输入请求可以在VIC中被设置为以下三类:FIQ中断:具有最高优先级;向量IRQ中断:具有中等优先级;非向量IRQ中断:具有最低优先级;4.9 向量中断控制器FIQ中断硬件处理流程将当前的程序状态寄存器的内容备份即,SPSR_fiq=CPSR处理器切换到FIQ模式禁止IRQ和FIQ中断,即,I=F=1保存返回地址LR_fiq=PC设置FIQ异常入口地址PC=0 x1C发生FIQ异常事件说明:ARM7不支持FIQ中断嵌套4.9 向量中断控制器IRQ中断相应流程将当前的程序状态寄存器的内容备份即,SPSR_irq=CPS
41、R处理器切换到IRQ模式禁止IRQ中断,即,I=1保存返回地址LR_irq=PC设置IRQ异常入口地址PC=0 x18发生IRQ异常事件说明:ARM7不支持IRQ中断嵌套中断选择寄存器VICIntSelect中断使能寄存器VICIntEnable中断使能清零寄存器VICIntEnClr中断源31:0软件中断使能寄存器VICSoftInt软件中断清零寄存器VICSoftIntClear中断状态寄存器VICRawIntrIRQFIQ名称描述访问复位值地址VICIntEnable中断使能寄存器中断使能寄存器 控制32个中断请求(包括软件中断)的使能R/W00 xFFFF F010VICIntEnCl
42、r中断使能清零寄存器中断使能清零寄存器 将中断使能寄存器中的一个或多个位清零W00 xFFFF F014VICIntSelect中断选择寄存器中断选择寄存器 将32个中断请求的每个中断分配为FIQ或IRQR/W00 xFFFF F00CVICSoftInt软件中断寄存器软件中断寄存器 控制对应通道产生软件中断R/W00 xFFFF F018VICSoftIntClear软件中断清零寄存器软件中断清零寄存器 禁止对应通道的软件中断W00 xFFFF F01C寄存器描述控制寄存器控制寄存器功能描述4.9 向量中断控制器控制寄存器功能描述VICIntEnable使能(禁止)中断源产生中断VICInt
43、EnClrVICIntSelect中断类型选择:FIQ&IRQVICSoftInt软件中断设置寄存器VICSoftIntClearFIQ中断向量IRQ中断非向量IRQ中断中断源0中断源1中断源31VIC将32个中断输入进行分配向量IRQ0使能中断源向量IRQ0控制寄存器VICVectCntl0向量地址0寄存器VICVectAddr0默认向量地址寄存器VICDefVectAddr向量IRQ15使能中断源向量IRQ15控制寄存器VICVectCntl15向量地址15寄存器VICVectAddr15向量地址寄存器VICVectAddr寄存器描述参数设置寄存器名称描述复位置地址VICVectCntl0
44、VICVectCntl15向量控制0寄存器 向量控制15寄存器 00 xFFFF F2000 xFFFF F23C VICVectAddr0 VICVectAddr15 向量地址0寄存器 向量地址15寄存器 00 xFFFF F100 0 xFFFF F13C VICDefVectAddr 默认向量地址寄存器 00 xFFFF F034 VICVectAddr 向量地址寄存器 00 xFFFF F030 IRQ中断特点4.9 向量中断控制器特点区别向量IRQl 支持16个向量IRQ中断;l 16个优先级;l 每个优先级指定一个服务程序入口地址。能为每个非向量IRQ中断源设置服务程序地址。非向量
45、IRQl 支持1个非向量IRQ中断;l 所有非向量IRQ的入口地址都相同。所有的非向量IRQ中断都共用一个相同的服务程序入口地址。IRQ中断相关寄存器4.9 向量中断控制器寄存器名称功能VICVectCntl015为中断源分配向量IRQ中断的优先级。VICVectAddr015为该中断优先级设置服务程序入口地址。VICDefVectAddr设置非向量中断服务程序的入口地址。注意:如果将同一个中断源分配给多个使能的向量IRQ中断,那么该中断源发生中断时,会使用最高优先级(最低编号)的寄存器设置。产生中断后的服务程序地址4.9 向量中断控制器向量IRQ中断发生向量IRQ中断后,VIC将对应的向量地
46、址寄存器中的数据存入VICVectAddr寄存器中。非向量IRQ中断发生非向量IRQ中断后,VIC将默认向量地址寄存器中的数据存入VICVectAddr寄存器中IRQ中断状态寄存器VICIRQStatus中断选择寄存器VICIntSelect中断使能寄存器VICIntEnable中断使能清零寄存器VICIntEnClr中断源31:0软件中断使能寄存器VICSoftInt软件中断清零寄存器VICSoftIntClearFIQ中断状态寄存器VICFIQStatus中断状态寄存器VICRawIntrIRQFIQ寄存器描述状态寄存器名称描述访问复位值地址VICIRQStatusIRQIRQ状态寄存器状
47、态寄存器该寄存器读出定义为IRQ并使能的中断的状态RO00 xFFFF F000VICFIQStatusFIQFIQ状态请求状态请求该寄存器读出定义为FIQ并使能的中断的状态RO00 xFFFF F004VICRawIntr所有中断的状态寄存器所有中断的状态寄存器 该寄存器该寄存器读出32个中断请求/软件中断的状态,不管中断是否使能或分类RO00 xFFFF F008注意:读取VICRawIntr寄存器将得到所有32个中断请求和软件中断的状态,它不管中断是否使能或分类。保护使能寄存器4.9 向量中断控制器保护使能寄存器(VICProtection):位31:10功能当该位为1时,只能在特权模式
48、下访问VIC寄存器。在某些场合可能需要禁止在用户模式下访问VIC寄存器,以提高软件的安全等级。FIQ中断处理4.9 向量中断控制器SPSR_fiq=CPSR12CPSR=nzcvqIFt_fiq3LR_fiq=PC4PC=0 x1C硬件处理软件处理中断服务程序1设置返回地址2恢复程序状态寄存器CPSR3SUBS PC,LR,#4IRQ中断处理4.9 向量中断控制器硬件处理SPSR_irq=CPSR12CPSR=nzcvqIft_irq3VICVectAddr=VICVectAddrn4LR_irq=PC5PC=0 x18软件处理执行中断服务程序2设置返回地址3恢复程序状态寄存器CPSR4获取中
49、断服务程序地址1IRQ中断处理4.9 向量中断控制器SPSR_irq=CPSR12CPSR=nzcvqIft_irq3VICVectAddr=VICVectAddrn4LR_irq=PC硬件处理5PC=0 x18软件处理执行中断服务程序2设置返回地址3恢复程序状态寄存器CPSR4PC VICVectAddr1IRQ中断处理4.9 向量中断控制器SUBS PC,LR,#4SPSR_irq=CPSR12CPSR=nzcvqIft_irq3VICVectAddr=VICVectAddrn4LR_irq=PC硬件处理5PC=0 x18软件处理执行中断服务程序2设置返回地址3恢复程序状态寄存器CPSR4
50、LDR PC,PC,#-0 xff01IRQ中断的设计实例 将定时器0中断分配为向量IRQ通道0,中断服务程序地址设置为Timer0_ISR。C代码:步骤:IRQ通道0控制寄存器VICVectCntl031:654:0010 x04向量IRQ通道0控制寄存器位分配位数值IRQ通道0向量地址寄存器VICVectAddr0定时器0中断服务程序地址Timer0_ISR中断使能寄存器VICIntEnable中断通道#4对应位,置“1”中断选择寄存器VICIntSelect中断通道4分配为IRQ中断(定时器0位于中断通道#4)VICIntSelect =0 x00000000;VICVectAddr0=