状态寄存器

异常入口流程的细节

生来就可爱ヽ(ⅴ<●) 提交于 2020-01-29 04:18:27
当异常发生时,以下的情况会随之发生: 1 压栈,并且栈指针更新; 2 处理器取出异常向量并且将其写入PC 3 寄存器更新(LR、IPSR和NVIC寄存器) 压栈 当异常发生时, 八个寄存器 会被自动压栈 这些寄存器包括R0-R3,R12,R14(链接寄存器),返回地址(下一条指令的地址或程序计数器),程序状态寄存器(xPSR)。 将寄存器R0-R3,R12,PC,LR和xPSR保存到栈中的原因是,这些寄存器被称为“ 调用者保存寄存器 ” 使用进程栈PSP ——异常发生时处理器处于线程模式并且CONTROL【1】置一, 使用主栈MSP ——对于嵌套异常,压栈时总是使用主栈,因为处理器当前处于处理模式,这种情况下只能使用主栈 ——异常发生时,处理器处于线程模式,CONTROL【1】为0,使用主栈。 C函数不需要保存这些寄存器的值,为了使异常处理能够像普通C函数一样使用,这些寄存器需要由硬件进行保存和恢复,这样在回到线程模式时,中断前的程序能够正常运行。 栈帧 ——压栈时保存到栈里的数据。 当压栈结束后,栈指针会得到更新,并且主栈指针会被选择为当前栈指针,处理模式使用的总是主栈MSP,然后异常向量也会被取出。 寄存器的压栈顺序如图 xPSR是组合状态寄存器 其中的三个寄存器之一:IPSR中断程序状态寄存器,包含了当前的中断服务程序(ISR)编号,由此可以取出异常向量。

ARM之GPIO介绍(Exynos4412平台)

耗尽温柔 提交于 2020-01-29 03:36:09
GPIO 概述 :GPIO的英文全称是General-Purpose Input/Output,也就是通用输入输出。在微控制器芯片上一般都会提供一个“通用可编程IO接口”,即GPIO.接口至少有两个寄存器,即“通用IO控制寄存器”和“通用IO数据寄存器”。 特性 46个可中断通用控制I/O; 172个外部中断; 32个外部可唤醒中断; 252个多路复用I/O口; 睡眠模式引脚状态可控(除了GPX0,GPX1,GPH2,GPH3); GPIO常用寄存器 引脚控制寄存器(GPxCON x=A0~V4) 在exynos4412中,大多数的引脚都是功能复用的,所以必须对每个引脚进行配置。引脚控制寄存器(GPxCON)用来配置每个引脚的功能。 引脚数据寄存器(GPxDAT x=A0~V4) 如果引脚功能被配置为输出功能,可以通过向GPxDAT寄存器对应位写入数据,控制引脚输出相应电平。如果引脚被配置为输入功能,则可以从GPxDAT寄存器对应位读出数据读回的数据就是当前引脚的电平状态。 引脚上拉下拉设置寄存器(GPxPUD x=A0~V4) exynos4412芯片的内部给引脚设置了上拉电路和下拉电路,通过引脚上下拉设置寄存器控制引脚上拉电阻和下拉电阻的使能和禁止。如果引脚的上拉电阻被使能,则无论在哪种状态(输入、输出、DATAn、EINTn等其他功能)下,上拉电阻都起作用。

第二~五章小结 (2017-08-28 00:48:04)

微笑、不失礼 提交于 2020-01-29 02:53:21
第二章 x86处理器架构 中央处理单元(CPU)处理算术和逻辑运算。它包含了有限数量的存储位置,即寄存器,一个高频时钟用于同步其操作,一个控制单元和一个算术逻辑单元。内存存储单元在计算机程序运行时,保存指令和数据。总线是一组并行线路,在计算机不同部件之间传输数据。 一条机器指令的执行可以分为一系列独立的操作,称为指令执行周期。3个主要操作分别为取值、译码和执行。指令周期中的每一步都至少要花费一个系统时钟单位,即时钟周期。加载和执行过程描述了程序如何被操作系统定位,加载入内存,再由操作系统执行。 x86处理器系列有三种基本操作模式:保护模式、实地址模式和系统管理模式。此外,还有一个虚拟8086模式是保护模式的一个特例。Intel 64处理器系列有两种基本操作模式: 兼容模式和64位模式。在兼容模式下处理器可以运行16位和32位应用程序。 寄存器位CPU内的存储位置进行命名,其访问速度比常规内存要快很多。以下是对寄存器的简要说明: l 通用寄存器主要用于算术运算、数据传输和逻辑操作。 l 段寄存器存放预先分配的内存区域的基址,这些内存区域就是段。 l 指令指针寄存器存放的是下一条要执行指令的地址。 l 标志寄存器包含的独立二进制位于控制CPU的操作,并反映ALU操作的结果。 x86有一个浮点单元(FPU)专门用于高速浮点指令的执行。 微型计算机的心脏是它的主板,主板上有CPU

汇编语言指令

拈花ヽ惹草 提交于 2020-01-26 21:26:19
指令助记符 如MOV, SUB这些词分别表示传送, 减法. 汇编源程序时, 系统使用内部对照表将每条指令的助记符翻译成对应的机器码 目的操作数 目的操作数一共有两个作用 参与指令操作 暂时储存操作结果 源操作数 源操作数主要提供原始数据或操作对象, 面向所有寻址方式. 例如, 在指令SUB AX, BX 中 的值作为减数提供给指令SUB 操作符 dup:表示定义重复的数据,和db、dw、dd配合使用,db 3 dup(‘A’)相当于db ‘AAA’。 注释 这是对源程序的说明, 在汇编中用 ; 号, 后面的内容将被注释   介绍指令前, 先熟悉下这些在指令中的符号(必须要记得) imme: 立即数 DST: 目的操作数 SRC: 源操作数 mem: 存储器操作数 OPR: 操作数 reg: 通用寄存器 EA: 偏移地址(偏移量) Sreg: 段寄存器 Port: 端口地址 Label: 标号 指令集不外乎下面几种: 数据传送指令 算术运算指令 逻辑运算与移位指令【整型 与 浮点型的处理】 串操作指令 程序控制指令 处理器控制指令 伪指令 一、数据传送【也叫转移】指令 通用数据传送指令. l MOV DST, SRC ;传送指令: 把源操作数的内容送入目的操作数 传送字或字节. 注意: 立即数做源操作数时, 立即数的长度必须小于等于目的操作数的长度 操作数DST, SRC分别为reg

PCM data flow - 3 - ASoC codec driver

怎甘沉沦 提交于 2020-01-26 08:36:43
上一章提到codec_drv的几个组成部分,下面逐一介绍,基本是以内核文档Documentation/sound/alsa/soc/codec.txt中的内容为脉络来分析的。codec的作用,在概述中有说明,本章主要罗列下codec driver中重要的数据结构及注册流程。 Codec DAI and PCM configuration codec_dai和pcm配置信息通过结构体snd_soc_dai_driver描述,包括dai的能力描述和操作接口,snd_soc_dai_driver最终会被注册到asoc-core中。 /* * Digital Audio Interface Driver. * * Describes the Digital Audio Interface in terms of its ALSA, DAI and AC97 * operations and capabilities. Codec and platform drivers will register this * structure for every DAI they have. * This structure covers the clocking, formating and ALSA operations for each * interface. */ struct snd

GPIO及基本打通原理

寵の児 提交于 2020-01-26 07:44:07
GPIO及基本打通原理 底层驱动 I/O接口 通用IO(GPIO) GPIO输入引脚连接方式 带上拉电阻的连接 带下拉电阻的连接 “悬空”连接 GPIO输出引脚 KL25芯片 KL25芯片(80引脚封装) GPIO模块 GPIO基本编程步骤与基本打通程序 编程实例 底层驱动 指如何通过程序直接干预硬件。 I/O接口 即输入/输出接口,是MCU与外界进行交互的重要桥梁,MCU与外界的数据交换都需要通过I/O接口实现。 实质是一种电子电路,由内部若干专用寄存器和逻辑控制电路构成。 通用IO(GPIO) 是I/O的基本形式。一般情况下,使用正逻辑,规定高电平状态对应数字信号"1",低电平状态对应数字信号“0”。 当引脚作为通用输入时,MCU可以通过端口寄存器获取引脚的状态,反之,当引脚作为输出时,MCU可以通过内部寄存器控制引脚的输出状态。 GPIO输入引脚连接方式 带上拉电阻的连接 通过一个电阻连接到电源(VCC),可以设置引脚初始电平为高电平。 带下拉电阻的连接 通过一个电阻连接到地(GND)上,可以设置引脚初始电平为低电平。 “悬空”连接 一般不使用。 GPIO输出引脚 通过MCU内部程序控制引脚输出为高电平或低电平。 输出引脚O1和O2采样不同方式驱动外部器件,不同驱动电路,电流要求不同,采样不同接法。 图中当O1引脚输出为低电平时,LED点亮。 当O2引脚输出为高电平时

蜂鸟E203 硬件学习-两级流水线的实现(三)

蓝咒 提交于 2020-01-26 06:40:16
(二)EXU模块 EXU段包括指令译码,指令派发,指令发射,指令执行,内存操作,数据写回。而E203是简单的顺序单发射,顺序执行,顺序写回类型的处理器。 将IFU通过IR寄存器发送给EXU的指令进行译码和派遣。 通过译码出的操作数寄存器索引(Index)读取Regfile(如图中RD-Regfile) 维护指令的数据相关性(如OITF) 将指令派遣(Dispatch)给不同的运算单元执行(ALU、Long-Pipes、LSU、以及EAI) 将指令交付(检查指令分支预测是否正确,是否产生中断和异常) 将指令运算的结果写回Regfile(WB ARB) (1)EXU译码模块 (e203_exu_decode.v) 译码模块的输入信号来自于IR阶段,包含当前需要译码的指令,执行PC,预测结果,非对齐和存储器访问错误。 首先根据最后两个比特位判断当前译码指令是RV32还是RV16,再根据指令格式,产生不同的指令类型信息。如:寄存堆的索引和控制信号,跳转类型和所需计算的信息。 输出dec_info包含很多模块的控制信息,有BJP单元的控制信息,ALU单元的控制信息,CSR单元的控制信息,乘除单元的控制信息,AGU单元的控制信息。同时还要生成后面执行所需要的各类型立即数,当执行的指令为非法指令时,译码器模块还将产生各类型的异常指令异常信息。 (2)整数通用寄存器组 (e203_exu

JVM介绍(入门知识)

◇◆丶佛笑我妖孽 提交于 2020-01-26 00:17:25
Java 虚 拟 机 (JVM) 是可运行 Java 代 码 的假想 计 算机。只要根据 JVM 规 格描述将解 释 器移植到特定的 计 算机上,就能保 证经过编译 的任何 Java 代 码 能 够 在 该 系 统 上运行。本文首先 简 要介 绍 从 Java 文件的 编译 到最 终执 行的 过 程,随后 对 JVM 规 格描述作一 说 明。       一 .Java 源文件的 编译 、下 载 、解 释 和 执 行    Java 应 用程序的 开发 周期包括 编译 、下 载 、解 释 和 执 行几个部分。 Java 编译 程序将 Java 源程序翻 译为 JVM 可 执 行 字 节码 。 这 一 编译过 程同 C/C++ 的 编译 有些不同。当 C 编译 器 编译 生成一个 对 象的代 码时 , 该 代 码 是 为 在某一特定硬件平台运行而 产 生的。因此,在 编译过 程中, 编译 程序通 过查 表将所有 对 符号的引用 转换为 特定的内存偏移量,以保 证 程序运行。 Java 编译 器却不将 对变 量和方法的引用 编译为 数 值 引用,也不确定程序 执 行 过 程中的内存布局,而是将 这 些符号引用信息保留在字 节码 中,由解 释 器在运行 过 程中 创 立内存布局,然后再通 过查 表来确定一个方法所在的地址。 这样 就有效的保 证 了 Java 的可移植性和安全性。   

JVM(JAVA虚拟机)

↘锁芯ラ 提交于 2020-01-26 00:16:35
Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。本文首先简要介绍从Java文件的编译到最终执行的过程,随后对JVM规格描述作一说明。   一.Java源文件的编译、下载、解释和执行   Java应用程序的开发周期包括编译、下载、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行代码—字节码。这一编译过程同C/C++的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。   运行JVM字节码的工作是由解释器来完成的。解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。装入代码的工作由"类装载器"(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时,该类被放在自己的名字空间中

Java编译器、JVM、解释器

徘徊边缘 提交于 2020-01-26 00:15:51
Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。本文首先简要介绍从Java文件的编译到最终执行的过程,随后对JVM规格描述作一说明。      一.Java源文件的编译、下载 、解释和执行   Java应用程序的开发周期包括编译、下载 、解释和执行几个部分。Java编译程序将Java源程序翻译为JVM可执行的字节码。这一编译过程同C/C++ 的编译有些不同。当C编译器编译生成一个对象的代码时,该代码是为在某一特定硬件平台运行而产生的。因此,在编译过程中,编译程序通过查表将所有对符号的引用转换为特定的内存偏移量,以保证程序运行。Java编译器却不将对变量和方法的引用编译为数值引用,也不确定程序执行过程中的内存布局,而是将这些符号引用信息保留在字节码中,由解释器在运行过程中创立内存布局,然后再通过查表来确定一个方法所在的地址。这样就有效的保证了Java的可移植性和安全性。      运行JVM字节码的工作是由解释器来完成的。解释执行过程分三部进行:代码的装入、代码的校验和代码的执行。装入代码的工作由"类装载器"(class loader)完成。类装载器负责装入运行一个程序需要的所有代码,这也包括程序代码中的类所继承的类和被其调用的类。当类装载器装入一个类时