您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 第4章LPC2000系列ARM硬件结构(5~9).
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.实时时钟•中断原理•外部中断•例程ARM7TDMI-SCPUAHBToVPB桥EMCVICI2C串行接口SPI串行接口UART0&1看门狗定时器系统控制外部中断TIMER0/1ADC通用I/OPWM0实时时钟SRAMFlashAHB总线ARM7局部总线系统功能VPB总线•芯片内部结构LPC2000系列微控制器包含4大部分:支持仿真的ARM7TDMI-SCPU1与片内存储器控制器接口的ARM7局部总线2与中断控制器接口的AMBA高性能总线(AHB)3连接片内外设功能的VLSI外设总线(VPB)44.5存储器加速模块(MAM)•概述LPC2000微控制器扩展了器件内部Flash总线宽度为128位,用于提高处理器的指令执行速度。这个接口通过存储器加速模块(MAM)来控制。•MAM内部结构LPC2200系列芯片把Flash存储器被分成两组,它们轮番工作,及时的为CPU提供需要的指令和数据,以防止CPU取指暂停。每组Flash存储器都有自己的预取指缓冲区、分支跟踪缓冲区和数据缓冲区。分支跟踪缓存分支跟踪缓存总线接口Flash存储器组0Flash存储器组1预取指缓存预取指缓存数据缓存区选择ARM7局部总线2×128位2×128位存储器地址存储器数据/指令Flash组2Flash组1CPU执行指令取指阶段等待指令提供指令1提供指令3......取指阶段提供指令4取指阶段等待3等待取指阶段提供指令2取指阶段等待124•关闭MAM指令执行情况从Flash组1中读取指令,CPU处于等待状态。1CPU从1组指令缓存区中获取指令并执行。2从Flash组2中读取指令,CPU处于等待状态。3CPU从2组指令缓存区中获取指令并执行。4所有存储器操作请求都会直接对Flash操作,由此产生了CPU停止,等待若干周期的情况。Flash组2Flash组1CPU执行指令•开启MAM指令执行情况...1413提供指令13141516取指阶段1211109取指阶段提供指令91011128765取指阶段提供指令56784321提供指令12345678取指阶段取指阶段等待指令......两组指令缓存区中不存在指令,启动Flash存储器指令读取周期,CPU停止,等待若干周期。1CPU执行Flash组1指令缓存区中的指令。2CPU执行Flash组2指令缓存区中的指令,同时从Flash组1中读取指令。3只要指令存在两个组的指令缓存区中,CPU的指令执行是连续的,由此大大提高了指令执行效率。4.5存储器加速模块(MAM)•程序顺序执行每个128位值包括了4个32位ARM指令或8个16位Thumb指令。在连续执行代码时,通常一个Flash组包含当前正在取指的指令和包含该指令的整个Flash行,而另一个Flash组则包含或正在预取指下一个连续的代码行。4.5存储器加速模块(MAM)•程序出现分支在预取指缓存区中保存着将要执行的指令,在分支跟踪缓存区中保存着程序跳转后可执行到的指令。CPU取跳转之后的指令跳转方向从Flash读取指令将指令行放入分支跟踪缓存区和预取指缓存区指令在预取指缓存区指令在分支跟踪缓存区读取指令读取指令向后向前否否是是4.5存储器加速模块(MAM)•程序获取数据当CPU在从Flash中获取数据时,如果这些数据没有出现在MAM的数据缓冲区中,那么MAM会执行一次Flash读操作,并把一个128位的数据行存入数据缓冲区,这样就加快了按顺序访问数据的速度。数据访问使用一个单行的缓冲区,和访问代码时提供两个缓冲区不同,因为数据访问不需要预取指功能。4.5存储器加速模块(MAM)•MAM与Flash编程Flash编程功能不受存储器加速器模块的控制,而是作为一个独立的功能进行处理。Flash存储器的布线使其每个扇区同时存在于两个组当中,这样扇区擦除操作可同时对两个组执行。4.5存储器加速模块(MAM)•MAM的操作模式LPC2000系列芯片允许用户设置MAM的加速级别,使芯片适用于某些对功耗和可预测性有要求的场合。MAM定义了三种操作模式:加速级别顺序执行程序分支数据功耗可预测性关闭不预取代码不缓冲代码不缓冲数据低高部分使能预取代码缓冲代码缓冲但时序固定中中完全使能预取代码缓冲代码缓冲数据高低4.5存储器加速模块(MAM)•MAM的配置在复位后,MAM默认为禁止状态。软件可以随时将存储器访问加速打开或关闭。通常我们都会把加速设置为完全使能,这可使程序以最高速度运行。而运行某些要求更精确定时的代码时,我们可以关闭或部分使能MAM,以较慢但可预测的速度运行代码。4.5存储器加速模块(MAM)•寄存器描述控制寄存器MAMCR——7:21:0模式控制控制寄存器MAMTIM——7:32:0取指周期控制MAM控制寄存器(MAMCR):MAMCR[1:0]:用于MAM的模式控制,具体关系如下表。MAMCR[1:0]描述00禁止MAM功能01部分使能MAM功能10完全使能MAM功能11保留MAM定时寄存器(MAMTIM):MAMTIM[2:0]:决定使用多少个CCLK周期访问Flash存储器,这样可以调整MAM时序使其匹配处理器操作频率,具体关系如下表。MAMTIM[2:0]描述MAMTIM[2: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,否则会导致操作错误。系统时钟(CCLK)MAM定时值20MHz120MHz~40MHz240MHz~60MHz3Flash编程问题:在编程和擦除操作过程中不允许访问Flash存储器。为了防止从Flash存储器中读取无效的数据,在Flash编程或擦除操作开始后MAM将不缓冲任何数据。所以在Flash操作结束后,任何对Flash地址的读操作都将启动新的取指操作。4.5存储器加速模块(MAM)•MAM应用示例voidMAMSet(uint32Fcclk){MAMCR=0;If(Fcclk200000000){MAMTIM=1;}elseif(Fcclk40000000){MAMTIM=2;}else{MAMTIM=3;}MAMCR=2;}MAM部件Flash访问时钟的配置:关闭MAM部件;1启动MAM部件。3根据系统时钟配置取指周期;2+3.3VLED1XTAL162XTAL261P0.0/TxD0/PWM119P0.1/RxD0/PWM3/EINT021P0.2/SCL0/CAP0.022P0.3/SDA0/MAT0..0/EINT126P0.4/SCK0/CAP0.1/AD0.627P0.5/MISO0/MAT0.1/AD0.729P0.6/MOSI0/CAP0.2/AD1.030P0.7/SSEL0/PWM2/EINT231P0.8/TxD1/PWM4/AD1.133P0.9/RxD1/PWM6/EINT334P0.10/RTS1/CAP1.0/AD1.235P0.11/CTS1/CAP1.1/SCL137P0.12/DSR1/MAT1.0/AD1.338P0.13/DTR1/MAT1.1/AD1.439P0.14/DCD1/EINT1/SDA141P0.15/RI1/EINT2/AD1.545P0.16/EINT0/MAT0.2/CAP0.246P0.17/CAP1.2/SCK1/MAT1.247P0.18/CAP1.3/MISO1/MAT1.353P0.19/MAT1.2/MOSI1/CAP1.254P0.20/MAT1.3/SSEL1/EINT355P0.21/PWM5/AD1.6/CAP1.31P0.22/AD1.7/CAP0.0/MAT0.02P0.2358P0.25/AD0.4/AOUT9P0.27/AD0.0/CAP0.1/MAT0.111P0.28/AD0.1/CAP0.2/MAT0.213P0.29/AD0.2/CAP0.3/MAT0.314P0.30/AD0.3/EINT3/CAP0.015V323RST57VREF63VSS6VSSA59P1.16/TRACEPKT016P1.17/TRACEPKT112P1.18/TRACEPKT28P1.19/TRACEPKT34P1.20/TRACESYNC48P1.21/PIPESTAT044P1.22/PIPESTAT140P1.23/PIPESTAT236P1.24/TRACECLK32P1.25/EXTIN028P1.26/RTCK24P1.27/TDO64P1.28/TDI60P1.29/TCK56P1.30/TMS52P1.31/TRST20V343V351VSS18VSS25VSS42VSS50RTXC13RTXC25V3A7VBAT49P0.3117P0.26/AD0.510U1LPC2138KEY1LED2R11k•#includeConfig.h•#includeTarget.h•#includeintrinsics.h•#defineLED1118//P0.18控制LED1•/*******************************************************************************************•**函数名称:DelayNS()•**函数功能:长软件延时•**入口参数:dly延时参数,值越大,延时越久•**出口参数:无•*******************************************************************************************/•voidDelayNS(uint32dly)•{uint32i;•for(;dly0;dly--)•for(i=0;i50000;i++);•}•/*******************************************************************************************•**函数名称:main()•**函数功能:验证存储器加速模块MAM对程序运行速度的影响•*******************************************************************************************/•intmain(void)•{uint32i;•TargetResetInit();•PINSEL1=0x00000001;//P0.16连接EINT0•IO0DIR=LED1;//设置LED1控制口为输出,其余输入•for(i=0;i5;i++)//LED1闪烁5次,注意观察LED1的闪烁频率•{IO0SET=LED1;•DelayNS(5);•IO0CLR=LED1;•DelayNS(5);•}•DelayNS(10);•/*关闭MAM*/•MAMCR=0;//关闭MAM•/*关闭MAM后LED1闪烁5次,注意闪烁频率*/•for(i=0;i5;i++)//LED1闪烁5次,注意观察LED1的闪烁频率•{
本文标题:第4章LPC2000系列ARM硬件结构(5~9).
链接地址:https://www.777doc.com/doc-2156378 .html