状态寄存器

CPU中断的工作原理,从最底层讲起

a 夏天 提交于 2020-02-15 13:23:23
  前言   中断的概念属于硬件层。虽然我们在进行软件编程时不会直接使用中断,但理解它对我们来说依然重要。   我们在使用线程切换及状态管理、异常处理、硬件与处理器的交互、I/O操作等指令时,中断都在默默的为我们服务。   处理器基于硬件封装对外的指令集,底层语言封装指令集为我们提供更加简单的抽象,高级语言基于底层语言赋予程序更明确的语义。可以看到在这条关系链条中,下层的变动会牵一发而动全身影响上层。而上层想要提高效率,改变机制也必须得到下层的支持。   像 I/O 处理的不断演进,从占用CPU等待到通过中断阻塞等待到多路复用与异步,如果没有下层的支持上层是不可能实现的。而不了解下层的原理我们也很难真正理解一个机制的高效的原因。因此了解下层的原理对应用层工程师来说同样重要。   什么是中断   现代计算机具有多任务处理的能力,往往一台我们办公使用的普通计算机上都会同时运行着几十上百的任务(进程)。我们很难想象,我们点击一下鼠标,需要等待计算机的进程调度模块调度到鼠标处理任务后再给我们做出响应,这对我们来说是不可接受的。   现实是我们在点击鼠标或键盘时(正如我现在在做的事情),计算机会立即给我反馈处理结果,计算机与我们之间是在进行实时交互的。而实时性的实现便是依赖了中断,中断是为了顺应人们对实时性交互的需求而产生的技术。中断之所以有用,是因为它会立刻停下当前的程序(软件

FPGA基础知识关键点摘要

梦想与她 提交于 2020-02-15 09:19:03
FPGA基础知识关键点摘要 一.组合逻辑和时序逻辑的区别: 组合逻辑与输入直接实时相关,时序逻辑还必须在时钟上升沿出发后输出新值,有没有时钟输入是他们最大的区别! 组合时序容易出现竞争冒险现象出现亚稳态,时序逻辑不会出现,且更容易达到时序收敛 所以必须很好的掌握时序逻辑 设置不使用的 IO 为 为 in-tri 状态 RTL,Register Transfer Level,直译为寄存器转换级,顾名思义,也就是在这个级别下,要描述各级寄存器(时序逻辑中的寄存器),以及寄存器之间的信号的是如何转换的(时序逻辑中的组合逻辑)。 RTL 级代码 ︴ 综合 逻辑电路 ︴ 布局布线 ︴ 电路 可综合的语法就是那些可以在电路上实现的语法… 行为级语法就是不能够实现在电路里面,却可以作为仿真验证的高层次语法! reg型和wire型信号有什么本质的区别? 此问题较大,需常百度查查! 二.阻塞和非阻塞赋值: =,<= 区别与联系? 在输入输出GPIO口电路中,用到assign,它的详细用法如下: 1.被assign赋值的信号定义为wire型,被always@(*)结构块下的信号定义为reg型,值得注意的是,这里的reg并不是一个真正的触发器,只有敏感列表为上升沿触发的写法才会综合为触发器,在仿真时才具有触发器的特性。 2.另外一个区别则是更细微的差别:举个例子, wirea; regb;

MODBUS协议整理——功能码简述

那年仲夏 提交于 2020-02-12 05:46:28
1.Modbus简介——来自维基百科 Modbus是一种串行通信协议,是Modicon于1979年,为使用可编程逻辑控制器(PLC)而发表的。Modbus是工业领域通信协议的业界标准,并且现在是工业电子设备之间相当常用的连接方式。Modbus比其他通信协议使用的更广泛的主要原因有: 【1】公开发表并且无版税要求 【2】相对容易的工业网络部署 【3】对供应商来说,修改移动原生的位元或字节没有很多限制 图1 modbus结构示意图—— 来自 2.协议整理链接 【 功能码简述 】 【 读线圈寄存器01H、读离散输入寄存器02H 】 【 读保持寄存器03H、读输入寄存器04H 】 【 写单个线圈寄存器05H、写单个保持寄存器06H 】 【 写多个线圈寄存器0FH,写多个保持寄存器10H 】 3.相关博文 【 freemodbus modbus TCP 学习笔记 】——freemodbus+uIP 【 树莓派学习笔记——实现modbus RTU从机 】——raspberry+python modbus-tk 【 EasyARM i.mx28学习笔记——通过modbus tcp控制GPIO 】——i.mx287+freemodbus modbus tcp 【 MODBUS学习笔记——modbus tk modbus TCP主机实现 】 1.MODBUS功能码简述

计算机CPU是怎么认识代码的?

夙愿已清 提交于 2020-02-11 14:41:45
先说一下半导体,啥叫半导体?就是介于导体和绝缘体中间的一种东西,比如二极管。 电流可以从A端流向C端,但反过来则不行。你可以把它理解成一种防止电流逆流的东西。 当C端10V,A端0V,二极管可以视为断开。 当C端0V,A端10V,二极管可以视为导线,结果就是A端的电流源源不断的流向C端,导致最后的结果就是A端=C端=10V 等等,不是说好的C端0V,A端10V么?咋就变成结果是A端=C端=10V了?你可以把这个理解成初始状态,当最后稳定下来之后就会变成A端=C端=10V。 文科的童鞋们对不住了,实在不懂问高中物理老师吧。反正你不能理解的话就记住这种情况下它相当于导线就行了。 利用半导体,我们可以制作一些有趣的电路,比如【与门】 此时A端B端只要有一个是0V,那Y端就会和0V地方直接导通,导致Y端也变成0V。只有AB两端都是10V,Y和AB之间才没有电流流动,Y端也才是10V。 我们把这个装置成为【与门】,把有电压的地方计为1,0电压的地方计为0。至于具体几V电压,那不重要。 也就是AB必须同时输入1,输出端Y才是1;AB有一个是0,输出端Y就是0。 其他还有【或门】【非门】和【异或门】,跟这个都差不多,或门就是输入有一个是1输出就是1,输入00则输入0。 非门也好理解,就是输入1输出0,输入0输出1。 异或门难理解一些,不过也就那么回事,输入01或者10则输出1

《编码》读书笔记:从无到有构建计算机系统

人走茶凉 提交于 2020-02-10 07:49:47
1 简单的电报系统: 按键、发声装置,电池和一些导线即可构成: 当电报机的键按下时,发生器的电磁铁将可动棒拖下发出“滴”的声音;当键放开时,棒弹回初始位置,发出“嗒”的声音。快速的“嘀嗒”为点,慢速的则为划。 2 继电器 电磁式继电器一般由铁芯、线圈、衔铁、触点簧片等组成的。只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)吸合。这样吸合、释放,从而达到了在电路中的导通、切断的目的。对于继电器的“常开、常闭”触点,可以这样来区分:继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。 长距离导线会有很大的电阻,会导致电流越来越小。下图中的继电器系统就是为了增大电流。 上述通信系统中的继电器的简单实现: 3 逻辑代数与电路 逻辑代数是分析和设计逻辑电路的数学基础。逻辑代数是由英国科学家乔治·布尔(George·Boole)创立的,故又称布尔代数。 4 逻辑门 (logic gates) 逻辑门和通常让水和人通过的门十分相似。逻辑门通过阻挡或允许电流通过在逻辑中执行简单的任务。 (1)与门

嵌入式GPIO接口及操作(一)

邮差的信 提交于 2020-02-10 02:59:20
  GPIO意思就是通用输入输出,一些引脚可以通过他们输出高低电平,或者通过它们读入引脚的状态。 对GPIO的操作是对所有硬件的操作最基本的技能。 一、通过寄存器来操作GPIO引脚,一个引脚可以用于输入、输出或者其他的特殊功能,那么一定有寄存器来配置这些功能, 对于输入,就是读取引脚的状态,一定可以从寄存器在中读取到引脚的状态;对于输出,也有相应的寄存器,向寄存器中 写入数据使引脚输出高低电平;其他特殊功能,有另外的寄存器来控制它。 对于S3C2440来说,同样的道理,也会有上面所说的寄存器,GPxCON用于配置引脚的功能的(输入、输出或其他功能), GPxDAT用于读/写引脚数据;另外GPxUP用于是否使用内部上拉电阻。 1、GPxCON寄存器-配置寄存器 对于S3C2440,除了GPACON特殊外(寄存器每一位对应一个引脚),其它都是寄存器的没2位控制一根引脚:00表示输入, 01表示输出、10表示特殊、11保留不用。 2、GPxDAT寄存器 用于读/写引脚:当引脚被设为输入时,从GPxDAT寄存器读取引脚的状态;当引脚被设为输出时,将数据写入GPxDAT寄存器 相应的引脚会输出相应的该低电平。 3、GPxUP寄存器 某位为1时,相应引脚无内部上拉电阻;某位为0时,相应引脚使用上拉电阻。 上拉电阻、下拉电阻的作用:GPIO为第三态时(相当于无外接芯片),引脚的电平状态有上拉电阻

计算机是这样工作的

本秂侑毒 提交于 2020-02-09 03:12:12
陈民禾,原创作品转载请注明出处《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 ,我的博客中有一部分是出自MOOC课程中视频,再加上一些我自己的理解。 一、首先在理解计算机是如何工作之前,我们先来理解一下现代计算机的模型。 现代计算机是存储程序计算机,依据冯诺依曼体系结构构造。从硬件的层面,也就是我们从计算机的主板。冯诺依曼体系结构我们可以大概抽象成一个cpu。还有一块可以抽象成内存,cpu和内存有一个连接,我们称之为总线,然后就是cpu内部,cpu里面有个很重要的寄存器,叫做ip,它总是指向内存的某一块区域,比如说它指向代码段,此时cpu就从IP指向的那个内存地址取过来一条指令执行,执行完之后Ip自加一,这样像贪吃蛇一样一步步向下面走,这就是从硬件方面解释的冯诺依曼体系。 二、计算机依靠机器语言进行工作,我们可以通过汇编语言来“指挥”计算机完成一些工作,下面就是一些汇编基础知识,总结如下: X86计算机的寄存器:32位的X86计算机的寄存器,它的低16位作为16位的寄存器,16位的寄存器,它还有8位的寄存器。8位的寄存器包含AH,BH,CH,DH,AL,BL,CL,DL。16位的寄存器包含AX,BX,CX,DX,BP,SI,DI,SP。所有开头为E的寄存器一般来讲是32位的。譬如EAX:累加器

用户态与内核态的切换

ぃ、小莉子 提交于 2020-02-07 13:54:23
内核态与用户态的理解: 2)特权级 熟悉Unix/Linux系统的人都知道,fork的工作实际上是以系统调用的方式完成相应功能的,具体的工作是由sys_fork负责实施。其实无论是不是Unix或者Linux,对于任何操作系统来说,创建一个新的进程都是属于核心功能,因为它要做很多底层细致地工作,消耗系统的物理资源,比如分配物理内存,从父进程拷贝相关信息,拷贝设置页目录页表等等,这些显然不能随便让哪个程序就能去做,于是就自然引出特权级别的概念,显然,最关键性的权力必须由高特权级的程序来执行,这样才可以做到集中管理,减少有限资源的访问和使用冲突。 特权级显然是非常有效的管理和控制程序执行的手段,因此在硬件上对特权级做了很多支持,就Intel x86架构的CPU来说一共有0~3四个特权级,0级最高,3级最低,硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查,相关的概念有CPL、DPL和RPL,这里不再过多阐述。硬件已经提供了一套特权级使用的相关机制,软件自然就是好好利用的问题,这属于操作系统要做的事情,对于Unix/Linux来说,只使用了0级特权级和3级特权级。也就是说在Unix/Linux系统中,一条工作在0级特权级的指令具有了CPU能提供的最高权力,而一条工作在3级特权级的指令具有CPU提供的最低或者说最基本权力。 3)用户态和内核态

2、LED实验

a 夏天 提交于 2020-02-04 22:01:36
CC2530的IO口概述   CC2530芯片有21 个数字输入/输出引脚,可以配置为通用数字I/O 或外设I/O 信号,配置为连接到ADC、定时器或USART外设;这些I/O 口的用途可以通过一系列寄存器配置,由用户软件加以实现   I/O 端口具备如下重要特性:     (1)21 个数字I/O 引脚     (2)可以配置为通用I/O 或外部设备I/O     (3)输入口具备上拉或下拉能力     (4)具有外部中断能力   21 个I/O 引脚都可以用作于外部中断源输入口,因此如果需要外部设备可以产生中断, 外部中断功能也可以从睡眠模式唤醒设备 未使用的I/O 引脚处理   未使用的I/O 引脚电平是确定的,不能悬空;一个方法是使引脚不连接,配置引脚为具有上拉电阻的通用I/O输入,这也是所有引脚复位后的状态(除了P1.0 和P1.1 没有上拉/下拉功能);或者引脚可以配置为通用I/O输出,这两种情况下引脚都不能直接连接到VDD 或GND, 以避免过多的功耗 低I/O电压   在数字I/O 电压引脚DVDD1和DVDD2低于2.6V的应用中,寄存器位PICTL.PADSC应设置为1,以获得DC特性表中所述的输出DC 特性 通用I/O   用作通用I/O 时,引脚可以组成3个8位端口,端口0、端口1 和端口2,表示为P0、P1 和P2;其中,P0和P1 是完全的8 位端口

20145206 《信息安全系统设计基础》第6周学习总结

巧了我就是萌 提交于 2020-02-04 04:19:17
20145206 《信息安全系统设计基础》第6周学习总结 教材学习内容总结 1.流水线化的处理器: 将每条指令的执行分解成五步,每个步骤由一个独立的硬件部分或者阶段来处理。指令步经流水线的各个阶段,且每个时钟周期有一条新指令进入流水线。所以处理器可以同时执行五条指令的不同阶段。 2.程序员可见的状态: Y86程序中的每条指令都会读取或者修改处理器状态中的某些部分。这称为程序员可见状态。 3.Stat 程序状态的最后一个部分是状态码Stat,它表明程序执行的总体状态;它会指示是正常运行还是出现了某种异常。 4.Y86 一个简单的、可以称之为IA32指令集的子集的指令集;只包括四字节整数操作,寻址方式比较少。指令编码长度从1——6字节不等。 关于指令结构,每条指令的第一个字节表明指令的类型;这个字节分为两个部分,每部分四位:高四位是代码部分(0——0xB),第四位是功能部分。这里补充一些缩写:立即数(i),寄存器(r)、存储器(m)。指令附加的寄存器指示符字节依次是数据源(如果是立即数,把这一位设置成0xf)、目的寄存器/基址寄存器。有些指令需要附加四字节的常数字,采用小端法(倒序)编码 5.stat代码可能取值反应了机器的不同状态—— AOK:正常操作(除此之外的任何状态都会使得处理器停止执行指令) HLT:处理器执行halt指令 ADR:遇到非法地址 INS:遇到非法指令 6