状态寄存器

单片机的中断系统

独自空忆成欢 提交于 2020-02-02 04:38:04
有关单片机中断系统的概念:什么是中断,我们从一个生活中的例程引入。你正在家中看书,突然电话铃响了,你放下书本,去接电话,和来电话的人交谈,然后放下电话,回来继续看你的书。这就是生活中的“中断”的现象,就是正常的工作过程被外部的事件打断了。仔细研究一下生活中的中断,对于我们学习单片机的中断也很有好处。 第一、什么可经引起中断,生活中很多事件能引起中断:有人按了门铃了,电话铃响了,你的闹钟闹响了,你烧的水开了….等等诸如此类的事件,我们把能引起中断的称之为中断源,单片机中也有一些能引起中断的事件,8031中一共有5个:两个外部中断,两个计数/定时器中断,一个串行口中断。 第二、中断的嵌套与优先级处理:设想一下,我们正在看书,电话铃响了,同时又有人按了门铃,你该先做那样呢?如果你正是在等一个很重要的电话,你一般不会去理会门铃的,而反之,你正在等一个重要的客人,则可能就不会去理会电话了。如果不是这两者(即不等电话,也不是等人上门),你可能会按你常常的习惯去处理。总之这里存在一个优先级的问题,单片机中也是如此,也有优先级的问题。优先级的问题不仅仅发生在两个中断同时产生的情况,也发生在一个中断已产生,又有一个中断产生的情况,比如你正接电话,有人按门铃的情况,或你正开门与人交谈,又有电话响了情况。考虑一下我们会怎么办吧。 第三、中断的响应过程:当有事件产生

2018-2019-1 20165312 《信息安全系统设计基础》第四周学习总结

谁说胖子不能爱 提交于 2020-02-01 03:04:28
2018-2019-1 20165312 《信息安全系统设计基础》第四周学习总结 本周学习内容 1.程序员可见状态 程序寄存器(RF):%rax,%rsp,%r8,%r12,%rcx,%rbp,%r9,%r13,%rdr,%rsi,%r10,%r14,%rbr,%rdi,%r11; 条件码:ZF\SF\OF; 程序状态 AOK:正常操作; HLT:执行halt指令; ADR:非法地址; INS:非法指令; 程序计数器(PC):正在执行的指令的地址; 2.程序寄存器标识符 3、指令编码 4、指令集功能码 来源: https://www.cnblogs.com/cxgg/p/9827512.html

第六周学习报告

筅森魡賤 提交于 2020-02-01 02:55:32
4.1Y86指令体系结构 程序员可见状态 ISA: 一个处理器支持的指令和指令的字节级编码称为~。 冒险: 一条指令的位置或者操作数依赖于其他仍在流水线中的指令。 程序员可见状态: Y86程序中的每条指令都会读取或修改处理器状态的某些部分 =>只要我们保证机器级程序能够访问程序员可见状态,就不需要完全按照ISA隐藏方式来表示和组织这个处理器状态。 Y86的处理器状态类似于IA32。 有8个程序寄存器。处理器每个程序寄存器储存一个字。寄存器%esp被入栈,出栈,调用和返回指令作为栈指针。 有3个一位条件码:ZF,SF, OF.保存最近的算术或者逻辑指令所造成影响的有关信息。 程序计数器PC:存放当前正在执行指令的地址。 存储器:(概念上来说是一个很大的字节数组)保存着程序和数据。Y86程序用虚拟地址来引用存储器位置。 程序状态的最后一部分状态码Stat,表明程序执行总体状态。 Y86指令 只包括四字节整数操作,所以称之为“字 ”。 Y86指令集,长度1~6字节不等。一条指令含有一个单字节的指令表示符,可能含有一个单字节的寄存器指示符,还可能含有一个四字节的常数字。 字段fn:指明是某个整数操作(OPL),数据移动条件(comvxx)或是分支条件(jxx)。所有数值都使用16进制。 Y86指令的更多细节: movl指令分成了四个不同的指令irmovl,rrmovl

20145334 《信息安全系统设计基础》第六周学习

断了今生、忘了曾经 提交于 2020-02-01 02:08:04
1.程序员可见状态 Y86程序中的每条指令都会读取或修改处理器状态的某些部分,称为程序员可见状态。其中包括: 8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp。 条件码:ZF(零)、SF(符号)、OF(有符号溢出) 程序计数器(PC):存放当前正在执行的指令的地址 存储器:很大的字节数组,保存着程序和数据。Y86系统用虚拟地址来引用存储器的位置,硬件和操作系统软件联合起来将虚拟地址翻译成实际或者物理地址。 状态码(stat):表明程序执行的总体状态。 Y86指令 movl:irmovl、rrmovl、mrmovl、rmmovl,分别显式地指明源和目的地的格式。第一个字母表明源的类型,i(立即数)、r(寄存器)或m(存储器 ),第二个字母代表目的,可以是r或者m。 整数操作指令OPl:addl、subl、andl和xorl。只对寄存器数据进行操作,同时还设置条件码。 跳转指令jXX:jmp、jle、jl、je、jne、jge、jg,根据分支指令的类型和条件码的设置来选择分支。 条件传送指令cmovXX:cmovle、cmovl、cmove、cmovne、cmovge和comvg,与寄存器-寄存器传送指令rrmovl一样,但只有当条件码满足所需要的约束时才会更新目的寄存器的值。 call指令将返回地址入栈,然后跳转到目的地址

20145235 《信息安全系统设计基础》第06周学习总结 _01

霸气de小男生 提交于 2020-02-01 02:03:28
20145235 《信息安全系统设计基础》第06周学习总结 _01 4.1.4 Y86异常 关于可见状态码Stat的几个值: 1:AOK 程序执行正常 2:HLT 表示处理器执行了一条halt指令 3:ADR 表示处理器从一个非法的存储器地址读或者向一个非法的存储器地址写 4:INS 表示遇到非法指令 4.1.5 Y86程序 “.”开头的词是汇编器命令,告诉他们汇编器调整命令,以便在哪产生代码或者插入数据 P239 Y86程序结构: 声明代码产生的起始地址 (.pos 0 ) 初始化栈指针和帧指针 为代码所声明的数据开辟地址 给栈分配空间 指令模拟器,成为YIS。 模拟器只打印出在模拟过程中被改变了的寄存器或存储器中的字。左边是原始值,右边是最终值。 4.1.6 对于“pushl %esp”在上学期的汇编中有详细指明:是现将数据push,然后对指针sp进行修改;而对于“popl %esp”,是先修改指针,然后再进行pop。然而4.1.6中说是不确定的。 4.2 逻辑设计和硬件控制语言HCL 要实现数字系统,需三个主要组成部分: 计算对位进行操作的逻辑结构、存储位的存储器元素,以及控制存储器元素更新的时钟信号。 4.2.1 逻辑门 逻辑运算:&&、||、! 位运算:&、|、~ 4.2.2 组合电路和HCL布尔表达式 将很多逻辑门组合成一个网,就能构建计算快,称为组合电路。限制

处理器体系结构学习记录

笑着哭i 提交于 2020-02-01 01:16:57
重要知识点 指令集体系结构 一个处理器支持的指令和指令的字节级编码称为它的指令集体系结构。 Y86处理器 Y86处理器状态类似于IA32。有8个程序寄存器:%eax,%ecx,%edx,%ebx,%esi,%edi,%esp和%ebp。处理器每个程序寄存器存储一个字。寄存器%esp被入栈、出栈、调用和返回指令作为栈指针。在其他情况中,寄存器没有固定的含义或固定值。有3个一位的条件码:ZF、SF和OF,它们保存最近的算术或逻辑指令所造成影响的相关信息。程序计数器(PC)存放当前正在执行的指令地址。 Y86指令 字节 halt 0 0 nop 1 0 rrmovl rA,rB 2 0 rA rB irmovl V,rB 3 0 F rB V rmmovl rA,D(rB) 4 0 rA rB D mrmovl D(rB),rA 5 0 rA rB D OPl rA,rB 6 fn rA rB jXX Dest 7 fn Dest comvXX rA,rB 2 fn rA rB call Dest 8 0 Dest ret 9 0 pushl rA A 0 rA F popl rA B 0 rA F 注:rA、rB为寄存器标识符,V,D,为常数,Dest为地址。 Y86指令编码 整数操作编码 addl 6 0 subl 6 1 andl 6 2 xorl 6 3 分支操作编码 jmp 7

STM32的SPI问题。

做~自己de王妃 提交于 2020-01-31 09:25:56
问题描述 : 之前一直使用的单片机是LPC2109,对其SPI很熟悉。基本就是原本拿来稍作修改就用。 由于某种原因需要使用STM32,然后设备的驱动是之前写好的,只修改了一些硬件控制端口,由于硬件驱动使用到了SPI接口,而我是把SPI接口提供了出来,本来以为简单修改SPI配置到对应单片机就行了。简单看了STM3的SPI配置,轻车熟路改代码,瞬间体现了良好的接口有哈。 编译,生成目标文件,下载运行。 并没有出现预想的结果。由于之前的设备驱动是能用的,所以排除设备驱动问题。 开始以为是由于对STM32端口配置的不熟悉导致的、看手册,看别人代码,没发现问题。 debug........ 问题定在SPI代码上。查看配置,一样啊。郁闷!!! 把自己配置考到别人能用的代码中,可以使用。更加郁闷!!!! debug看寄存器。对比能运行代码寄存器状态。发现运行到一段代码的时候寄存器不同 SPI_CR 0x0043 SPI_CR 0x0002 看datasheet.OVR置位。问题应该就在这了。可是为什么呢?????? 搜此问题,此处出自 这里 溢出错误(OVR)  溢出错误表示连续传输多个数据时,后一个数据覆盖了前一个数据而产生的错误。  状态标志SPIF表示的是数据传输正在进行中,它对数据的传输有较大的影响。主器件的SPIF有效由数据寄存器的空标志SPTE=0产生

一点一点学汇编2

ε祈祈猫儿з 提交于 2020-01-30 05:54:32
寄存器 这回我们来看寄存器。CPU是由运算器,控制器,寄存器这些个器件组成。 运算器 主要负责数据的各种数据的处理工作,比如算数运算,逻辑运算; 控制器 是根据给出的相应的机器指令,发出对应的具体控制信号驱动硬件工作。它有指令译码的工作,就是根据指令寄存器的内容,产生相应的微指令; 加法指令的执行可分为:取指,计算地址,取操作数和加法运算四步,每一步都由一组微操作实现.这一组能同时执行的微操作就构成一条微指令。 寄存器 则是CPU中存储数据的部件。对于一个汇编程序员,CPU中最重要的部件就是寄存器。通过对各个寄存器数据的改变,完成对于CPU的控制。不同的CPU,寄存器的结构,数量是不同的。比如,8086CPU中有14个寄存器,名称分别是:AX,BX,CX,DX,CS,DS,ES,SS,IP,SP,BP,SI,DI,PSW。我们不在这里一一介绍每个寄存器的功能,以后用到什么寄存器,就学习什么。大体上我会按照书上的顺序来写这些寄存器。 上述这些个器件,全部集成到了一个CPU芯片中。CPU中数据的传输通过 内总线 进行。前面一篇提到了总线,那个总线是指 外总线 ,是用来连接CPU和主板上的其他部件的。 ----------------------------------------------------------------------------------------------

STM32库函数与寄存器的区别

无人久伴 提交于 2020-01-30 02:15:11
#STM32库函数与寄存器# 1.固件库是什么?与寄存器有什么关系? 固件库就是函数的集合,向下与寄存器直接打交道,向上提供用户调用函数的接口(API) 2.最佳使用情况 寄存器:单独对IO口状态控制,对寄存器进行位操作(如51) 调试debug时对寄存器进行位操作(需要理解与什么寄存器有关并理解过程,调试时翻阅寄存器手册) 库函数:寄存器数量过多(如STM32)调用库函数 来源: CSDN 作者: 等登灯灯 链接: https://blog.csdn.net/qq_45163431/article/details/104109431

STM32 中断优先级管理NVIC

放肆的年华 提交于 2020-01-29 17:57:19
STM32内核为CM3 CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。 STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。 STM32有84个中断,包括16个内核中断和68个可屏蔽中断,具有16级可编程的中断优先级。 STM32F103系列上面,又只有60个可屏蔽中断(在107系列才有68个) 1.中断管理方法 首先,对STM32中断进行分组,组0~4。同时,对每个中断设置一个抢占优先级和一个响应优先级值。 (分组配置是在寄存器SCB->AIRCR中配置) 抢占优先级 & 响应优先级区别 高优先级的抢占优先级是可以打断正在进行的低抢占优先级中断的。 抢占优先级相同的中断,高响应优先级不可以打断低响应优先级的中断。 抢占优先级相同的中断,当两个中断同时发生的情况下,哪个响应优先级高,哪个先执行。 如果两个中断的抢占优先级和响应优先级都是一样的话,则看哪个中断先发生就先执行。 PS:一般情况下,系统代码执行过程中,只设置一次中断优先级分组,比如分组2,设置好分组之后一般不会再改变分组。随意改变分组会导致中断管理混乱,程序出现意想不到的执行结果。 2.相关寄存器 中断设置相关寄存器 __IO uint8_t IP[240]; //中断优先级控制的寄存器组 __IO uint32_t ISER[8]; /