Presentation is loading. Please wait.

Presentation is loading. Please wait.

第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块

Similar presentations


Presentation on theme: "第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块"— Presentation transcript:

1 第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块 8. 向量中断控制器 9.GPIO 10.UART0 11.UART1 12.I2C接口 13.SPI接口 14.定时器0/1 15.脉宽调制器(PWM) 16.A/D转换器 17.实时时钟 18.看门狗

2 5.5 存储器加速模块(MAM) 概述 LPC2114/2124/2210/2212/2214微控制器的ARM内核工作在最高频率60MHz时,执行一条指令约为17ns。而Flash存储器的访问周期需要50ns,即最高频率20MHz。所以如果将代码存放在Flash中,将影响ARM内核发挥最大效能。为了能将指令从内部Flash存储器更高效快速地提取到ARM内核,而设计产生了一个存储器加速模块(MAM)。

3 MAM结构 使能MAM模块后,ARM内核将通过MAM模块访问Flash存储器。 总线 接口 Flash 存储器组0 存储器组1 总线 接口
分支跟踪缓存 总线 接口 Flash 存储器组0 存储器组1 预取指缓存 数据缓存区 选择 ARM局部总线 2×128位 总线 接口 Flash 存储器组0 存储器组1 分支跟踪缓存 预取指缓存 数据缓存区 选择

4 MAM结构 使能MAM模块后,ARM内核将通过MAM模块访问Flash存储器。 总线 接口 Flash 存储器组0 存储器组1
分支跟踪缓存 总线 接口 Flash 存储器组0 存储器组1 预取指缓存 数据缓存区 选择 ARM局部总线 2×128位 MAM模块中的数据总线宽度为128位,所以一次读取操作可以读出4条ARM指令或8条Thumb指令。 分支跟踪缓存 预取指缓存 Flash 存储器组0 分支跟踪缓存 预取指缓存 Flash 存储器组1 分支跟踪缓存 预取指缓存 Flash存储器被分为两组,当CPU执行其中一组Flash内的指令时,另一组进行读取缓存操作。 每个Flash组包含预取指缓存和分支跟踪缓存。

5 MAM结构 预取指缓存区保存有将要执行的指令。而分支跟踪缓存区保存有程序跳转后可能执行到的指令。 总线 接口 Flash 存储器组0
存储器组1 当程序向前跳转时,尝试从预取指缓存区取指。 ARM局部总线 当程序向后跳转时,尝试从分支跟踪缓存区取指。 预取指缓存 预取指缓存 分支跟踪缓存 分支跟踪缓存 2×128位 2×128位 如果程序跳转出缓存的范围,CPU将要停止,等待若干个周期,直到正确的指令从Flash中被读出。 数据缓存区 选择

6 MAM结构 Flash中除了存储指令之外,还可用来存储不修改或者很少修改的数据,所以在MAM模块中设计有数据缓冲区。数据缓存区可以提高顺序读取数据的操作速度。但是对随机读取操作几乎没有加速效果。 总线 接口 Flash 存储器组0 Flash 存储器组1 ARM局部总线 预取指缓存 预取指缓存 Flash编程由另一个独立的模块完成,Flash在进行编程操作时禁止访问。在编程操作结束后,缓存区的数据将自动失效,可以避免读取到无效的数据。 分支跟踪缓存 分支跟踪缓存 2×128位 2×128位 数据缓存区 数据缓存区 选择

7 5.5 存储器加速模块(MAM) 存储器加速模块寄存器描述 MAM控制寄存器(MAMCR):
7 6 5 4 3 2 [1 : 0] 功能 模式控制 MAMCR[1:0]:用于MAM的模式控制,具体关系如下表。 MAMCR[1:0] 描述 00 禁止MAM功能 01 部分使能MAM功能 10 完全使能MAM功能 11 保留

8 5.5 存储器加速模块(MAM) 存储器加速模块寄存器描述 MAM定时寄存器(MAMTIM):
7 6 5 4 3 [2 : 0] 功能 取指周期控制 MAMTIM[2:0]:决定使用多少个CCLK周期访问Flash存储器,这样可以调整MAM时序使其匹配处理器操作频率,具体关系如下表。 MATIM[2:0] 描述 000 保留 100 取指周期为4个CCLK 001 取指周期为1个CCLK 101 取指周期为5个CCLK 010 取指周期为2个CCLK 110 取指周期为6个CCLK 011 取指周期为3个CCLK 111 取指周期为7个CCLK

9 5.5 存储器加速模块(MAM) 存储器加速模块寄存器描述 MAM定时寄存器(MAMTIM):
当访问周期设置为1个CCLk时,实际上关闭了MAM,但是仍可以选择MAM模式对功耗进行优化。 注意:不正确的设定会导致器件的错误操作 MATIM[2:0] 描述 000 保留 100 取指周期为4个CCLK 001 取指周期为1个CCLK 101 取指周期为5个CCLK 010 取指周期为2个CCLK 110 取指周期为6个CCLK 011 取指周期为3个CCLK 111 取指周期为7个CCLK

10 5.5 存储器加速模块(MAM) MAM使用要点 当改变MAM定时值时,必须先将MAMCR设置为0关闭MAM,然后将新值写入MAMTIM。最后将需要的操作模式的对应值(1或2)写入MAMCR,再次打开MAM; 对于低于20MHz的系统时钟,MAMTIM设定为001,将Flash访问时间设定为1CCLK ;对于20MHz到40MHz之间的系统时钟,建议将Flash访问时间设定为2CCLK;高于40MHz的系统时钟,建议使用3CCLK。

11 相关启动代码分析 C代码: 设置步骤: 1.关闭MAM模块; 2.根据用户定义的系统时钟频率决定MAM定时寄存器的值;
. . . MAMCR = 0; #if Fcclk < MAMTIM = 1; #else #if Fcclk < MAMTIM = 2; MAMTIM = 3; #endif MAMCR = 2; 1.关闭MAM模块; 2.根据用户定义的系统时钟频率决定MAM定时寄存器的值; 系统时钟(CCLK) MAM定时值 < 20MHz 1 20MHz ~ 40MHz 2 > 40MHz 3 3.打开MAM模块,完全使能MAM模块;

12 第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块 8. 向量中断控制器 9.GPIO 10.UART0 11.UART1 12.I2C接口 13.SPI接口 14.定时器0/1 15.脉宽调制器(PWM) 16.A/D转换器 17.实时时钟 18.看门狗

13 外部存储器控制器概述 外部静态存储器控制器是一个AHB总线上的从模块 。 只有LPC2200系列的微控制器含有EMC模块 。
ARM7TDMI-S CPU AHB To VPB EMC VIC I2C串行接口 SPI串行接口 UART0 & 1 CAN 看门狗定时器 系统控制 外部中断 TIMER0/1 ADC 通用I/O PWM0 实时时钟 SRAM Flash AHB总线 ARM7 局部总线 系统功能 外部静态存储器控制器是一个AHB总线上的从模块 。 EMC 只有LPC2200系列的微控制器含有EMC模块 。 EMC模块为AHB系统总线和外部存储器件之间提供了一个接口。

14 外部存储器控制器概述 ARM7TDMI-S CPU AHB To VPB EMC VIC I2C串行接口 外部中断 TIMER0/1 SRAM Flash AHB总线 ARM7 局部总线 系统功能 外部存储器或 外部I/O器件 EMC模块支持4个独立配置的存储器组,每个存储器组的总线宽度可设置为8、16或者32位,但是同一个存储器组的器件必须宽度相同。 每个存储器组最大支持16MB寻址空间。 支持字节定位读取。

15 外部存储器控制器概述 地址输出线是A[23:0],其中地址位A[25:24]用于4个存储器组的译码(CS[3:0])。 总线 存储器组选择线
ARM7TDMI-S CPU AHB To VPB EMC VIC I2C串行接口 外部中断 TIMER0/1 SRAM Flash AHB总线 ARM7 局部总线 系统功能 总线 外部存储器或 外部I/O器件 Bank0 Bank1 Bank2 Bank3 存储器组选择线 CS[3:0] Bank 地址范围 配置寄存器 0x ~0x80FF FFFF BCFG0 1 0x ~0x81FF FFFF BCFG1 2 0x ~0x82FF FFFF BCFG2 3 0x ~0x83FF FFFF BCFG3 地址输出线是A[23:0],其中地址位A[25:24]用于4个存储器组的译码(CS[3:0])。

16 外部存储器总线接口描述 接口引脚描述: 引脚名 类型 引脚描述 D[31:0] 输入/输出 外部存储器数据线 A[23:0] 输出 外部存储器地址线 OE 输出使能信号,低有效 BLS 字节定位选择信号,低有效 WE 写使能信号,低有效 CS[3:0] 芯片选择信号,低有效 这些引脚与P1、P2和P3口GPIO功能复用,所以在使用外部总线前首先要正确设置PINSEL2寄存器。可以在硬件上对引脚BOOT1:0设定,复位时微处理器自动初始化PINSEL2。或者在软件上字节初始化PINSEL2,这只适用于片内FLASH引导程序运行的系统中。

17 经过一个等待状态后,存储器输出有效数据。
外部存储器总线接口描述 外部存储器读访问典型波形: XCLK CS OE WE/BLS Addr Data 有效地址 变化数据 有效数据 经过一个等待状态后,存储器输出有效数据。 外部存储器写访问典型波形: XCLK CS OE WE/BLS Addr Data 有效数据 有效地址

18 5.6 外部存储器控制器(EMC) 相关寄存器 外部存储器控制器包含4个寄存器,它们分别对应一个存储器组。通过这些寄存器,可以分别设置每个存储器组读写访问之间插入的等待周期个数、每个存储器组的总线宽度等。 名称 描述 访问 复位值 地址 BCFG0 存储器组0的配置寄存器 读/写 0x2000 FBEF 0xFFE0 0000 BCFG1 存储器组1的配置寄存器 0xFFE0 0004 BCFG2 存储器组2的配置寄存器 0x1000 FBEF 0xFFE0 0008 BCFG3 存储器组3的配置寄存器 0x0000 FBEF 0xFFE0 000C

19 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3):
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 31:30 29:28 27 26 25 24 功能 AT MW BM WP WPERR BUSERR IDCY:在两个存储器组之间切换访问时,或是读写操作切换时,为了避免器件对总线竞争,需要插入空闲的CCLK周期,该域控制着这个周期数。 计算公式为:空闲CCLK周期数 = IDCY +1;(IDCY的复位值为15)

20 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3):
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 31:30 29:28 27 26 25 24 功能 AT MW BM WP WPERR BUSERR WST1:一些慢速的外部存储器可能不能适应EMC最高速度的读操作,所以需要在读周期中插入若干个空闲等待周期,以降低读操作的速度。该域控制着读周期中插入的空闲CCLK周期数。 计算公式为:读操作周期长度 = WST1 + 3;(WST1的复位值为15)

21 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3): 外部存储器读访问波形(WST1=0): 位
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 外部存储器读访问波形(WST1=0): XCLK CS OE WE/BLS Addr Data 有效地址 变化数据 有效数据 WST1=0 1个等待周期 读操作,共需3个周期

22 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3): 外部存储器读访问波形(WST1=1): 位
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 外部存储器读访问波形(WST1=1): XCLK CS OE WE/BLS Addr Data 有效地址 变化数据 有效数据 增加1个等待周期 WST1=0 1个等待周期 读操作,共需3个周期

23 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3): 外部存储器读访问波形(WST1=1): 位
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 外部存储器读访问波形(WST1=1): XCLK CS OE WE/BLS Addr Data 有效地址 变化数据 有效数据 读操作,共需4个周期 WST1=1,2个等待周期

24 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3):
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 31:30 29:28 27 26 25 24 功能 AT MW BM WP WPERR BUSERR RBLE:如果外部存储器的总线宽度为16或32位,那么读写操作是对总线上的2个或4个字节的数据同时进行的。某些存储器允许对总线上的某几个字节进行独立的读写操作,而不影响其它字节,这通过芯片的字节定位引脚实现。当RBLE位为1时使能字节定位功能,BLS3:0在读写操作时输出低电平。当RBLE位为0时,禁止该功能。

25 5.6 外部存储器控制器(EMC) 相关寄存器 例1:向地址0x80001000写入一个8位数据0xAA LPC2200 SRAM
LDR R0,=0x MOV R1,#0xAA STRB R1,[R0] 汇编代码: D[7:0] D[15:8] nBLS0 nBLS1 nLB nUB A[23:0] nCS0 nCE nWE D[15:0] LPC2200 SRAM 0x 0xAA 无效数据 1.地址总线上出现地址; 2.数据总线上出现数据0x??AA,高8位无效; 3.控制线nBLS0、nCS0和nWE拉低,将低8位数据写入芯片。

26 5.6 外部存储器控制器(EMC) 相关寄存器 例2:向地址0x80001001写入一个8位数据0x55 LPC2200 SRAM
LDR R0,=0x MOV R1,#0x55 STRB R1,[R0] 汇编代码: D[7:0] D[15:8] nBLS0 nBLS1 nLB nUB A[23:0] nCS0 nCE nWE D[15:0] LPC2200 SRAM 0x 0x55 无效数据 1.地址总线上出现地址; 2.数据总线上出现数据0x55??,低8位无效; 3.控制线nBLS1、nCS0和nWE拉低,将高8位数据写入芯片。

27 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3):
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 31:30 29:28 27 26 25 24 功能 AT MW BM WP WPERR BUSERR WST2:和读操作类似,一些慢速的外部存储器可能不能适应EMC最高速度的写操作,所以需要在写周期中插入若干个空闲等待周期,以降低写操作的速度。该域控制着写周期中插入的空闲CCLK周期数。 计算公式为:写操作周期长度 = WST2 + 3;(WST2的复位值为15) 对于Burst ROM,计算公式为:写操作周期长度 = WST2 + 1;

28 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3): 外部存储器写访问波形(WST2=0): 位
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 外部存储器写访问波形(WST2=0): XCLK CS OE WE/BLS Addr Data 有效数据 有效地址 WST1=0 1个等待周期 写操作,共需3个周期

29 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3): 外部存储器写访问波形(WST2=1): 位
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 外部存储器写访问波形(WST2=1): XCLK CS OE WE/BLS Addr Data 增加1个等待周期 有效数据 有效地址 WST1=0 1个等待周期 写操作,共需3个周期

30 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3): 外部存储器写访问波形(WST2=1): 位
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 外部存储器写访问波形(WST2=1): XCLK CS OE WE/BLS Addr Data 有效数据 有效地址 WST1=1 2个等待周期 写操作,共需4个周期

31 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3):
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 31:30 29:28 27 26 25 24 功能 AT MW BM WP WPERR BUSERR BUSERR:总线错误状态位。如果EMC检测到AMBA总线上出现一个大于32位数据访问的请求,那么该位将置位。ARM7TDMI-S内核不会出现这样的请求; WPERR:错误写状态位。如果对一个已经写保护(WP位为1)的存储器组进行写操作,该位将置位。向该位写入1,可以清零该位。

32 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3): WP:该位为1时,相应的存储器组被写保护;
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 31:30 29:28 27 26 25 24 功能 AT MW BM WP WPERR BUSERR WP:该位为1时,相应的存储器组被写保护; BM:如果外部存储器使用了Burst ROM,将该位置1; AT:该域通常写入00。

33 5.6 外部存储器控制器(EMC) 相关寄存器 存储器组配置寄存器0~3(BCFG0~3):
23:16 15:11 10 9:5 4 3:0 功能 保留 WST2 RBLE WST1 IDCY 31:30 29:28 27 26 25 24 功能 AT MW BM WP WPERR BUSERR MW:该位控制相应存储器组的数据总线宽度,如下表所示。 BCFGx[29:28] 数据总线宽度 00 8 01 16 10 32 11 保留

34 5.6 外部存储器控制器(EMC) 相关寄存器 MW控制域(BCFG[29:28])与引脚BOOT1:0的关系:
由于Bank0可用于引导程序运行,所以BCFG0[29:28]的复位值与引脚BOOT1:0的设定有关(当BOOT1:0=11时,复位后从片内Flash引导程序运行)。 Bank 复位时BOOT1:0的状态 BCFG[29:28]复位值 存储器宽度 LL 00 8 LH 01 16 HL 10 32 HH 1 XX 2 3

35 5.6 外部存储器控制器(EMC) 与外部存储器的连接
如果存储器组配置成32位宽度,地址线A0和A1无用,可作为GPIO使用(由PINSEL2设置); 如果存储器组配置成16位宽度,地址线A0无用,可作为GPIO使用(由PINSEL2设置); 如果存储器组配置成8位宽度,并且使能字节定位功能(RBLE=1),存储器的写信号由BLS[0]提供,否则由WE信号提供; 同一寄存器组的器件宽度必须一致。

36 与外部存储器连接——32位宽度 由1片32位宽度的存储器芯片构成32位存储器 由2片16位宽度的存储器芯片构成32位存储器
由4片8位的存储器芯片构成32位存储器

37 使用字节定位引脚BLS[0]作为写使能信号
与外部存储器连接——8/16位宽度 由1片16位宽度的存储器芯片构成16位存储器 由2片8位宽度的存储器芯片构成16位存储器 使用字节定位引脚BLS[0]作为写使能信号 由1片8位宽度的存储器芯片构成8位存储器

38 相关启动代码分析 C代码: 在LPC2200的启动代码中包含总线的初始化设置。 设置步骤:
. . . LDR R0, =PINSEL2 IF :DEF: EN_CRP LDR R1, =0x0f814910 ELSE LDR R1, =0x0f814914 ENDIF STR R1, [R0] LDR R0, =BCFG0 LDR R1, =0x1000ffef 1.设置引脚连接模块,将P2口用于外部存储器总线接口。这里使用了汇编的条件编译语句,前者为芯片加密时的设置值(禁止JTAG调试); 芯片加密,禁止JTAG调试功能 2.设置BANK0,将其设置为16位总线接口,使能字节定位功能,并把读写周期设置为最大,以兼容不同速度的外部存储器,实际应用中根据存储器的实际速度进行调整;

39 相关启动代码分析 C代码: 设置步骤: 3.设置BANK1,与BANK0的设置值相同;
. . . LDR R0, =BCFG1 LDR R1, =0x1000ffef STR R1, [R0] ; LDR R0, =BCFG2 ; LDR R1, =0x2000ffef ; STR R1, [R0] ; LDR R0, =BCFG3 3.设置BANK1,与BANK0的设置值相同; 4.BANK3和BANK4被设置为32位宽度其它与BANK0相同。因为在暂时没有使用到这两个BNAK,所以在此被屏蔽,需要使用时再进行设置;

40 第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块 8. 向量中断控制器 9.GPIO 10.UART0 11.UART1 12.I2C接口 13.SPI接口 14.定时器0/1 15.脉宽调制器(PWM) 16.A/D转换器 17.实时时钟 18.看门狗

41 5.7 引脚连接模块 概述 LPC2000系列微控制器的大部分管脚都具有多种功能,即管脚复用,但是同一引脚在同一时刻只能使用其中一个功能,通过配置相关寄存器控制多路开关来连接引脚与片内外设。 GPIO TXD0 PWM1输出 P0.0 通过引脚连接模块控制引脚功能

42 外部存储器寄存器描述——PINSEL0 表示寄存器中某两位的设定值 如PINSEL0[1:0]=01时,连接TXD0 表示寄存器中的控制位
引脚名称 00 01 10 11 复位值 1:0 P0.0 GPIO P0.0 TxD0 PWM1 保留 3:2 P0.1 GPIO P0.1 RxD0 PWM3 EINT0 5:4 P0.2 GPIO P0.2 SCL 捕获0.0 7:6 P0.3 GPIO P0.3 SDA 匹配0.0 EINT1 9:8 P0.4 GPIO P0.4 SCK0 捕获0.1 11:10 P0.5 GPIO P0.5 MISO0 匹配0.1 13:12 P0.6 GPIO P0.6 MOSI0 捕获0.2 15:14 P0.7 GPIO P0.7 SSEL0 PWM2 EINT2 17:16 P0.8 GPIO P0.8 TxD1 PWM4 19:18 P0.9 GPIO P0.9 RxD1 PWM6 EINT3 21:20 P0.10 GPIO P0.10 RTS 捕获1.0 23:22 P0.11 GPIO P0.11 CTS 捕获1.1 25:24 P0.12 GPIO P0.12 DSR 匹配1.0 27:26 P0.13 GPIO P0.13 DTR 匹配1.1 29:28 P0.14 GPIO P0.14 CD 31:30 P0.15 GPIO P0.15 RI 表示寄存器中某两位的设定值 如PINSEL0[1:0]=01时,连接TXD0 表示寄存器中的控制位 如[9:8]表示PINSEL0寄存器的第9和8位

43 如:PINSEL[19:18]设置为01时,引脚P0.9的功能为RXD1
引脚名称 00 01 10 11 复位值 1:0 P0.0 GPIO P0.0 TxD0 PWM1 保留 3:2 P0.1 GPIO P0.1 RxD0 PWM3 EINT0 5:4 P0.2 GPIO P0.2 SCL 捕获0.0 7:6 P0.3 GPIO P0.3 SDA 匹配0.0 EINT1 9:8 P0.4 GPIO P0.4 SCK0 捕获0.1 11:10 P0.5 GPIO P0.5 MISO0 匹配0.1 13:12 P0.6 GPIO P0.6 MOSI0 捕获0.2 15:14 P0.7 GPIO P0.7 SSEL0 PWM2 EINT2 17:16 P0.8 GPIO P0.8 TxD1 PWM4 19:18 P0.9 GPIO P0.9 RxD1 PWM6 EINT3 21:20 P0.10 GPIO P0.10 RTS 捕获1.0 23:22 P0.11 GPIO P0.11 CTS 捕获1.1 25:24 P0.12 GPIO P0.12 DSR 匹配1.0 27:26 P0.13 GPIO P0.13 DTR 匹配1.1 29:28 P0.14 GPIO P0.14 CD 31:30 P0.15 GPIO P0.15 RI 如:PINSEL[19:18]设置为01时,引脚P0.9的功能为RXD1

44 外部存储器寄存器描述——PINSEL1 PINSEL1 引脚名称 00 01 10 11 复位值 1:0 P0.16 GPIO P0.16
EINT1 匹配0.2 保留 3:2 P0.17 GPIO P0.17 捕获1.2 SCK1 匹配1.2 5:4 P0.18 GPIO P0.18 捕获1.3 MISO1 匹配1.3 7:6 P0.19 GPIO P0.19 MOSI1 9:8 P0.20 GPIO P0.20 SSEL1 EINT3 11:10 P0.21 GPIO P0.21 PWM5 13:12 P0.22 GPIO P0.22 捕获0.0 匹配0.0 15:14 P0.23 GPIO P0.23 17:16 P0.24 GPIO P0.24 19:18 P0.25 GPIO P0.25 21:20 P0.26 23:22 P0.27 GPIO P0.27 AIN0 捕获0.1 匹配0.1 25:24 P0.28 GPIO P0.28 AIN1 捕获0.2 27:26 P0.29 GPIO P0.29 AIN2 捕获0.3 匹配0.3 29:28 P0.30 GPIO P0.30 AIN3 31:30 P0.31

45 外部存储器寄存器描述——PINSEL2 PINSEL2 描述 复位值 1:0 保留 00 2 为0时,P1.36:26作GPIO使用
5:4 控制数据总线和选通引脚的使用 复位时将BOOT1:0引脚电平作为该域的复位值 6 当数据总线不占用P3.29时: 为1时,P3.29作GPIO使用 为0时,P3.29作AIN6使用 1 7 当数据总线不占用P3.28时: 为1时,P3.28作GPIO使用 为0时,P3.28作AIN7使用 8 为1时,P3.27作GPIO使用 为0时,P3.27作WE使用

46 外部存储器控制器概述——PINSEL2 PINSEL2 描述 复位值 10:9 保留 — 11 为1时,P3.26作CS1使用
为0时,P3.26作GPIO使用 12 13 当地址总线不占用P3.23引脚时: 为1时,P3.23作外部总线时钟输出(XCLK)使用 为0时,P3.29作GPIO使用 15:14 为00时,P3.25作GPIO使用 为01时,P3.25作CS2使用 其它设置值保留 00 17:16 为00时,P3.24作GPIO使用 为01时,P3.24作CS3使用 19:18

47 外部存储器控制器概述——PINSEL2 PINSEL2 描述 复位值 20 当数据总线没有占用P2.29:28时:
为0时,P3.29:28作GPIO使用 为1时,保留 21 当数据总线没有占用P2.30时: 为0时,P2.30作GPIO使用 为1时,P2.30作AIN4使用 1 22 当数据总线没有占用P2.31时: 为0时,P2.31作GPIO使用 为1时,P2.31作AIN5使用 23 为0时,P3.0作GPIO使用 为1时,P3.0作地址线A0使用 复位时,BOOT1:0引脚都为低电平时,该位为1 24 为0时,P3.1作GPIO使用 为1时,P3.1作地址线A1使用 复位时,BOOT1引脚为低电平时,该位为1 27:25 控制P3.23/A23和P3.22/A2中的地址总线的数目 复位时,BOOT1:0引脚都为高电平时,该域为000,否则为111 31:28 保留

48 PINSEL[5:4]与数据总线和控制线的关系列表
外部总线设置 PINSEL[5:4]与数据总线和控制线的关系列表 PINSEL2 [5:4] 数据总线宽度 P2.27:15 P2.15:8 P2.7:0 P3.31 P3.30 P3.29:28 P1.1 P1.0 00 8位 D[7:0] BLS0 OE CS0 01 16位 D[15:0] BLS1 10 32位 D[31:16] BLS3:2 11 注:“—”表示该引脚不作数据总线使用,可作其它用途。 PINSEL[27:25]与地址线的关系列表 PINSEL2 [27:25] 000 001 010 011 100 101 110 111 地址线宽度 无地址线 A3:2 A5:2 A7:2 A11:2 A15:2 A19:2 A23:2

49 5.7 引脚连接模块 使用示例——将P0.8、P0.9设置为TxD1、RxD1
5.7 引脚连接模块 使用示例——将P0.8、P0.9设置为TxD1、RxD1 通过查阅PINSE0寄存器设置表,得到P0.9和P0.8的控制位为PINSEL0[19:16],当该域设置为[0101](0x05)时选择 RxD1和 TxD1 ; C代码: PINSEL0 = 0x05 << 16; 为了不影响别的管脚连接设置,通常选择下面的设置方法。 C代码: PINSEL0 = (PINSEL0 & 0xFFF0FFFF) | (0x05 << 16);

50 5.7 引脚连接模块 启动代码相关部分 LPC2200系列微控制器是总线开放型芯片,其总线宽度可设置为8位、16位或32位,对于没有使用到的总线引脚(比如16位总线宽度时,D16~D31位没有使用),可作为GPIO使用。

51 5.7 引脚连接模块 启动代码相关部分 C代码: . . . LDR R0, =PINSEL2 IF :DEF: EN_CRP LDR R1, =0x0f814910 ELSE LDR R1, =0x0f814914 ENDIF STR R1, [R0] 如果在工程目标中选择RelInChip项,编译器将会预定义EN_CRP宏,PINSEL2被设置为0x0f814910,禁止JTAG调试。 当没有预定义EN_CRP宏时,PINSEL2被设置为0x0f814914,使能JTAG调试。

52 第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块
第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块 8. 向量中断控制器 9.GPIO 10.UART0 11.UART1 12.I2C接口 13.SPI接口 14.定时器0/1 15.脉宽调制器(PWM) 16.A/D转换器 17.实时时钟 18.看门狗

53 5.8 向量中断控制器(VIC) 向量中断控制器概述
ARM7TDMI内核具有两个中断输入,分别为IRQ中断和FIQ中断。但是芯片内部有许多中断源,最多可以有32个中断输入请求。向量中断控制器的作用就是允许哪些中断源可以产生中断、可以产生哪类中断、产生中断后执行哪段服务程序。 ARM7TDMI-S IRQ FIQ VIC 中断请求输入0 中断请求输入31 . . .

54 5.8 向量中断控制器(VIC) 中断源列表 模块 可产生中断的标志 VIC通道号 WDT 看门狗中断(WDINT) — 保留给软件中断 1
保留给软件中断 1 ARM内核 EmbeddedICE,DbgCommRx 2 EmbeddedICE,DbgCommTx 3 定时器0 匹配0~3(MR0,MR1,MR2,MR3) 捕获0~3(CR0,CR1,CR2,CR3) 4 定时器1 5 UART0 Rx线状态(RLS),发送保持寄存器空(THRE) Rx数据可用(RDA),字符超时指示(CTI) 6

55 5.8 向量中断控制器(VIC) 中断源列表 模块 可产生中断的标志 VIC通道号 UART1
Rx线状态(RLS),发送保持寄存器空(THRE) Rx数据可用(RDA),字符超时指示(CTI) 7 PWM0 匹配0~6(MR0,MR1,MR2,MR3,MR4,MR5,MR6) 8 I2C SI(状态改变) 9 SPI0 SPI中断标志(SPIF),模式错误(MODF) 10 SPI1 11 PLL PLL锁定(PLOCK) 12 RTC 计数器增加(RTCCIF),报警(RTCALF) 13

56 5.8 向量中断控制器(VIC) 中断源列表 模块 可产生中断的标志 VIC通道号 系统控制 外部中断0(EINT0) 14
15 外部中断2(EINT2) 16 外部中断3(EINT3) 17 A/D A/D转换器 18 保留 19~31

57 5.8 向量中断控制器(VIC) 允许中断源产生中断
芯片内部许多部件都可以作为中断源,但并不是每个中断源都需要在中断情况下进行操作,也可以通过其它方法来处理各种状态。 比如通过串口发送一段数据,可以选择在一批发送结束后产生中断,然后在中断服务程序中发送下一批数据。也可以通过查询发送标志位来决定什么时候发送下一批数据。 允许中断源产生中断由寄存器VICIntEnable和VICIntEnClr控制,前者使能中断,后者禁止中断。

58 5.8 向量中断控制器(VIC) 允许中断源产生中断 中断使能寄存器(VICIntEnable):
31 18 17 2 1 功能 保留 A/D转换器 外部中断3 ARM内核 WDT 寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入1时,允许对应的中断源产生中断。 中断使能清零寄存器(VICIntEnClr): 31 18 17 2 1 功能 保留 A/D转换器 外部中断3 ARM内核 WDT 与中断使能寄存器的功能相反,向某位写入1时,禁止对应的中断源产生中断。

59 5.8 向量中断控制器(VIC) 选择产生中断的类型
ARM7TDMI内核具有FIQ和IRQ两个中断输入,所有中断源产生的中断都可以选择产生其中一种中断。这通过中断选择寄存器完成。 中断选择寄存器(VICIntSelect): 31 18 17 2 1 功能 保留 A/D转换器 外部中断3 ARM内核 WDT 寄存器中每一位控制着一个中断源,各中断源的位置与中断源列表所示相同。向某位写入1时,对应中断源产生的中断为FIQ中断,否则为IRQ中断。

60 5.8 向量中断控制器(VIC) 中断类型 中断输入请求可以在VIC中被设置为以下三类: FIQ中断:具有最高优先级;
向量IRQ中断:具有中等优先级; 非向量IRQ中断:具有最低优先级; 19个 中断输入 VIC 将32个 进行分配 13个未使用 FIQ中断 向量IRQ中断 非向量IRQ中断 中断源0 中断源1 …… 中断源18

61 5.8 向量中断控制器(VIC) 向量IRQ中断 VIC最多支持16个向量IRQ中断,这些中断被分为16个优先级,并且为每个优先级指定一个服务程序入口地址。在发生向量IRQ中断后,相应优先级的服务程序入口地址被装入向量地址寄存器VICVectAddr中,通过一条ARM指令即可跳转到相应的服务程序入口处,所以向量IRQ中断具有较快的中断响应。

62 5.8 向量中断控制器(VIC) 非向量IRQ中断
任何中断源都可以设置为非向量IRQ中断。它与向量IRQ中断的区别在于前者不能为每个非向量IRQ中断源设置服务程序地址,而是所有的非向量IRQ中断都共用一个相同的服务程序入口地址。 当有多个中断源被设置为非向量IRQ中断时,需要在用户程序中识别中断源,并分别作出处理。所以非向量IRQ中断响应延时相对较长。

63 5.8 向量中断控制器(VIC) 向量IRQ中断相关寄存器
VICVectCntl0~15和VICVectAddr0~15两类寄存器与向量IRQ中断设置有关,前者为中断源分配向量IRQ中断的优先级,后者为该中断优先级设置服务程序入口地址。寄存器名称最后的数字同时也代表该寄存器控制的向量IRQ中断的优先级,数值越小优先级越高。 注意:如果将同一个中断源分配给多个使能的向量IRQ中断,那么该中断源发生中断时,会使用最高优先级(最低编号)的寄存器设置。

64 5.8 向量中断控制器(VIC) 向量IRQ中断相关寄存器 向量控制寄存器(VICVectCntl0~15):
7 6 5 [4:0] 功能 EN 中断源序号 VICVectCntlx[4:0]:分配给此优先级向量IRQ中断的中断源序号; VICVectCntlx[5]:该位为1,使能当前优先级的向量IRQ中断。否则为禁止。 向量地址寄存器(VICVectAddr0~15): [31:0] 功能 中断服务程序入口地址 该寄存器中存放对应优先级向量IRQ中断服务程序的入口地址。

65 5.8 向量中断控制器(VIC) 非向量IRQ中断相关寄存器 向量地址寄存器(VICDefVectAddr):
[31:0] 功能 中断服务程序入口地址 VICDefVectAddr寄存器存放非向量中断服务程序的入口地址,当发生非向量中断时该寄存器中保存的地址存入VICVectAddr寄存器。

66 5.8 向量中断控制器(VIC) 产生中断后的服务程序地址
在发生向量IRQ中断后,VIC能将对应中断的服务程序地址存入VICVectAddr寄存器中。如果为非向量中断,将把VICDefVectAddr寄存器的值存入该寄存器。在异常向量表的IRQ异常入口处放置一条指令,将VICVectAddr寄存器的内容装入程序计数器(PC),就可以跳转到当前中断的服务函数。 这样的设计可以减小中断响应延时。 向量地址寄存器(VICVectAddr): [31:0] 功能 中断服务程序入口地址

67 5.8 向量中断控制器(VIC) 中断状态寄存器 如果使用了多个非向量IRQ中断或多个FIQ中断,那么在发生中断后要在程序中查找中断源。通过IRQ状态寄存器和FIQ状态寄存器可以了解到这些中断源的中断请求状态。 任何在VIC中使能的中断都会把中断请求反映在“所有中断状态寄存器(VICRawIntr)”中。

68 5.8 向量中断控制器(VIC) 中断状态寄存器 所有中断状态寄存器(VICRawIntr):
[31:0] 功能 当某位为1时表示对应位的中断源产生中断请求。 FIQ状态寄存器(VICFIQStatus): [31:0] 功能 当某位为1时表示对应位的中断源产生FIQ中断请求。 IRQ状态寄存器(VICIRQStatus): [31:0] 功能 当某位为1时表示对应位的中断源产生IRQ中断请求。

69 5.8 向量中断控制器(VIC) 软件中断寄存器 在一些特殊场合或者调试时,可能需要使用软件强制产生某个中断请求。
软件中断寄存器(VICSoftInt): [31:0] 功能 当某位为1时,将产生与该位相对应的中断请求。 软件中断清零寄存器(VICSoftIntClear): [31:0] 功能 当某位为1时,将清零VICSoftInt寄存器中对应位

70 当该位为1时,只能在特权模式下访问VIC寄存器。
保护使能寄存器 在某些场合可能需要禁止在用户模式下访问VIC寄存器,以提高软件的安全等级。 软件中断寄存器(VICSoftInt): [31:1] 功能 当该位为1时,只能在特权模式下访问VIC寄存器。

71 IRQ中断的设计实例 设置外部中断0产生向量IRQ中断后执行中断服务程序“IRQ_Eint0( )”。 步骤: C代码:
1.设置引脚连接模块,将P0.16设置为外部中断功能; ... PINSEL1 = (PINSEL1&0xFFFFFFFC)|0x01; VICIntSelect = 0x ; VICVectCntl0 = (0x20 | 14); VICVectAddr0 = (int)IRQ_Eint0; EXTINT = 0x01; VICIntEnable = (1 << 14); (1) (2) 2.设置所有中断为IRQ中断; (3) 3.将外部中断0(在中断源列表中序号14)设置到优先级0中,并使能IRQ中断; (4) (5) 4.将外部中断0的中断服务程序写入对应优先级的地址寄存器中; 5.清除外部中断0的标志后使能外部中断0;

72 图示IRQ中断的发生过程 1.正在执行用户程序; 用户程序 中断服务程序 异常向量表 2.外部中断0发生中断;
0x 0xFFFF FFFF 用户程序 中断服务程序 异常向量表 2.外部中断0发生中断; 3.VIC硬件将中断服务程序地址装入VICVectAddr寄存器; 4.程序跳转至异常向量表中IRQ入口0x0018处; 5.执行指令跳转至VICVectAddr寄存器中的中断服务地址; 6.中断服务程序执行完毕,返回被中断的用户程序继续执行被中断的代码。 LDR PC, [PC, #-0xff0] IRQ_Eint0 ??? VICVectAddr0 VICVectAddr

73 图示IRQ中断的发生过程 注意: 任何IRQ中断产生之后,微控制器跳转到地址0x18执行代码,该地址处的指令为:
LDR PC, [PC, #-0xff0] 在执行该指令时,PC指向当前指令后的第2条指令,即地址0x20。 该指令将内存地址: 0x20-0xFF0 = 0xFFFFF030 处的内容存入PC,该地址正是 VICVectAddr寄存器的地址。 所以一条ARM指令即可实现程序向中断服务程序的跳转。 0x 0xFFFF FFFF 用户程序 中断服务程序 异常向量表 IRQ_Eint0 ??? VICVectAddr0 VICVectAddr LDR PC, [PC, #-0xff0] IRQ_Eint0

74 5.8 向量中断控制器(VIC) 使用VIC的注意要点
如果在片内RAM中调试程序,并使用了中断,那么必须将存储器映射控制设置为内部RAM模式; 将多个中断源设置为FIQ,将增加中断响应延时,所以建议FIQ中断只有一个中断源; ADS1.2规定在定义中断服务函数时必须加入关键字“__irq”,保证函数返回时会切换处理器模式; 在退出中断服务程序时要清零相应外设的中断标志,以及VICVectAddr寄存器,为响应下次中断作好准备。

75 VIC相关启动代码分析 TargetResetInit函数:
... /* 初始化VIC */ VICIntEnClr = 0xffffffff; VICVectAddr = 0; VICIntSelect = 0; 在LPC2100、LPC2200的启动代码中包含有VIC初始化程序,默认是禁止所有中断。 处理器各模式堆栈设置: 在LPC2100、 LPC2200的启动代码中默认是关闭IRQ和FIQ中断的。如果用户需要使用这两个中断,则要设置CPSR寄存器的I位或F位,这需要在特权模式下处理。最简单的方法是在启动代码中设置(修改0xdf值)。 InitStack ... MSR CPSR_c,#0xdf LDR SP,=StackUsr MOV PC,R0

76 VIC相关启动代码分析 异常向量表: 一旦产生IRQ中断,微控制器切换到IRQ模式,并跳转到向量表0x0018地址执行指令。
CODE32 AREA vectors,CODE,READONLY ENTRY Reset LDR PC, ResetAddr LDR PC, UndefinedAddr . . . DCD 0xb9205f80 LDR PC, [PC, #-0xff0] LDR PC, FIQ_Addr ResetAddr DCD ResetInit UndefinedAddr DCD Undefined Nouse DCD 0 IRQ_Addr DCD 0 FIQ_Addr DCD FIQ_Handler 一旦产生IRQ中断,微控制器切换到IRQ模式,并跳转到向量表0x0018地址执行指令。 一旦产生FIQ中断,微控制器切换到FIQ模式,并跳转到向量表0x001C地址执行指令,然后跳转到FIQ_Handler代码段。

77


Download ppt "第5章 目录 1.简介 2.引脚配置 3.存储器寻址 4.系统控制模块 5.存储器加速模块 6.外部存储器控制器 7.引脚连接模块"

Similar presentations


Ads by Google