第2讲CM3嵌入式系统体系结构.ppt
文本预览下载声明
ARM指令分类 ARM采用长乘法指令、增强的DSP指令,集合了RISC与CISC的优势,中断响应快速,支持虚拟存储系统和高级语言等。ARM指令集分为: 1、跳转指令 2、数据处理指令 3、程序状态寄存器(PSR)处理指令 4、加载/存储指令 5、协处理器指令 6、异常产生指令 MRS指令结构 Instruction [S] [Rd] , [Rn] , [Rm] 指令操作码 更新CPSR 目的寄存器 源操作数 Thumb指令集 Thumb是ARM指令集的一个子集,允许指令编码长度为16位,可节省系统存储空间。 所有Thumb指令都对应ARM指令,只要遵循原则,它们的子程序可以互相调用。 处理器执行ARM程序段时处于ARM工作状态,执行Thumb程序段时,处于Thumb工作状态。 Thumb舍弃了ARM指令集的一些特性,但操作数仍是32位的,时间效率和空间效率有变化。 Thumb-2指令集 Thumb-2强大、易用、高效,支持16位和32位指令集,是一种突破性指令集,是16位Thumb指令集的一个超集。 Thumb-2把16位Thumb指令和32位ARM指令并存,处理器执行程序没有切换的额外开销、可节省执行时间和指令空间;不需要把源代码分成按ARM和Thumb编译,软件开发管理减负,无需反复求证和测试状态何时切换,程序效率高,软件开发容易。 CM3的三级指令流水线 指令执行步骤: 1、CM3处理器从内存读取指令(Fetch) 2、解码(Decode) 3、执行(Execute) CM3处理器的异常 异常:当内核产生复位、存取失败、遇到未定义指令时,正常执行的程序暂停,转到相应的处理程序执行称为异常。每个异常对应一个异常处理程序。 异常程序执行完后,返回当前程序继续执行 CM3允许多个异常同时发生,并按固定的优先级进行处理。 中断与异常 中断:当CM3内核的外部发生某一事件,产生触发信号,引起CPU暂停当前执行的程序,转到相应的事件中断处理程序去执行。执行完后返回。 异常与中断的区别:中断对CM3内核来说是意外突发事件,请求信号来自外部;异常时CM3内核产生的,即在执行指令或存取中产生的。 中断与异常名称、概念相似,如不特别说明,按中断性质处理。 CM3处理器的异常处理 自动的状态保存和恢复 自动读取代码存储器或SRAM中包含ISR地址的向量表入口 支持末尾连锁 中断优先级可动态重新设置 中断数目可配置为1~240 中断优先级的数目可配置为1~8位 使用C/C++标准的调用规范 优先级屏蔽支持临界区 CM3处理器的异常类型 嵌套向量中断控制器NVIC NVIC基本功能:支持向量中断、可屏蔽中断、嵌套中断、很短中断延时和动态优先级调整。 中断挂起:不能被立即响应的中断。 中断挂起的原因:有高优先级中断在执行,或相关屏蔽位被置位。 被挂起的中断,对应有一个挂起寄存器保存其中断请求,等到该中断能响应时执行服务程序。传统ARM由产生中断的设备保存住请求信号,CM3由NVIC挂起寄存器来保存。 NVIC支持内置睡眠模式的电源管理,调用WFI或WFE指令则进入睡眠,发生中断退出睡眠。 Systick定时器:NVIC集成了1个24位Systick定时器,产生时间片,可用于操作系统或预订服务。 进入ISR之前,CM3处理器采取的步骤 8个寄存器压栈(xPSR、PC、LR、R12、 R3、R2、R1、R0压栈) 读中断向量表 从中断向量表中读SP 更新PC 加载流水线 更新LR 中断、异常过程 在所选的堆栈上把xPSR、PC、LR、R12、R3、R2、R1、R0压栈 读存储器中向量表,地址=向量表基址+(异常号)*4,中断函数入口 在复位时,将SP更新为向量表中第1个字的值 利用向量表读出的位置更新PC,直到第1条指令开始执行时,才能出来迟来异常 从向量表指向的位置加载指令,它与寄存器压栈操作同时执行 LR设置为EXC_RETURN,以便从异常中退出(LR的值并非进入异常程序的地址)。 CM3处理器的异常优先级 优先级 优先级分组 在一个系统中,通常有5种分组,由32位AIRC寄存器的[10:8]这3位决定使用那一组 异常占先示意图 抢占之后堆栈中的内容 末尾连锁示意图 异常迟来示意图 异常返回 如果激活异常的优先级比所有被压栈的异常的优先级都高,则处理器会末尾连锁到一个激活异常 如果没有激活异常,或者如果被压栈的异常的最高优先级比激活异常的最高优先级还要
显示全部