数据寄存器

OTP详解

主宰稳场 提交于 2019-12-05 08:38:11
OTP(One Time Programmable)是单片机的一种 存储器类型 ,意思是 一次性可编程 :程序烧入单片机后,将不可再次更改和清除。 随着嵌入式应用的越来越广泛,产品的安全也显得越来越重要。一方面是为了保护硬件设计,另外一方面也是为了产品本身的安全,防止被HACKED.   在嵌入式系统当中,所有的代码和系统数据都是被存储在FLASH芯片内部的。FLASH芯片的特点是可多次擦写,而且掉电数据不会丢失。为了保护FLASH中的数据,越 来越多的FLASH厂商在FLASH内部提供了一种特殊的寄存器:OTP寄存器。OTP=One TimeProgrammable,意思是这个寄存器是只可以编程一次的,编程后就再也不可以修改 了。OTP寄存器和FLASH数据区域很类似,1能被改写为0,但0永远也不能写成1.如果有一个32位的OTP寄存器,出产的值是0xFFFFFFFF,如果用户通过编程,将OTP寄存器的 值写为0xFFFFFFFE后,那OTP寄存器再也不能在改写为0xFFFFFFFF了;当然,这个OTP寄存器的值还可以改写为0xFFFFFFFC或其它。   为了给OTP寄存器提供保护,一般这类FLASH芯片还会提供一个LOCK寄存器。LOCK寄存器(同属OTP)也只能烧写一次。LOCK寄存器的每一位对应于一个OTP寄存 器。如果与OTP寄存器对应LOCK寄存器的位(BIT

CPU子系统

谁都会走 提交于 2019-12-05 07:16:05
CPU的基本结构: CPU的主要部件: ​ 运算部件、缓存部件、寄存器、控制器、时序部件 CPU的工作原理: ​ 主要功能:处理指令、执行操作、控制时间、数据运算 ​ 执行指令的流程:读取指令、指令译码、指令执行、后续工作 部件的控制方式: ​ 同步控制方式:每步操作都向统一的外部时序信号对齐,每步操作之间无交互; ​ 异步控制方式:每步操作都不需向统一的外部时序信号对齐,每步操作之间通过交互应答来实现协同; 外部连接与I/O控制任务 指令系统: 设计CPU的一般过程: ​ 指令系统 --- 数据通路 --- 控制器 --- CPU定型 指令可能会涉及到的操作数类型: ​ 地址码数据:寄存器编号或者存储器地址,无符号整数. ​ 数值型数据:定点数、浮点数等,一般用补码表示; ​ 字符型数据:通常表示为ASCII码/汉字内码格式; ​ 逻辑型数据:常规二进制代码,不具有数值含义。 指令中的寻址方式: ​ 立即寻址: ​ 直接寻址: ​ 寄存器直接寻址: ​ 间接寻址(寄存器间接寻址、堆栈间接寻址): ​ 变址、基址寻址及其变化: ​ 基址寻址: ​ 基址 + 变址: ​ PC相对寻址: ​ 页面寻址(伪直接寻址): 设计传送指令时需要考虑: ​ 规定传送范围、指明传送单位、设置寻址方式 算数、逻辑运算指令: ​ 算数运算指令:设计时需要考虑操作数类型、符号、进制等

计算机组成原理复习(2)

放肆的年华 提交于 2019-12-05 02:54:22
中央处理器由运算器和控制器两大部分组成。 运算器接收从控制器送来的命令并执行相应的动作,对数据进行加工和处理。 运算器主要由算术逻辑单元(ALU)、暂存寄存器、累加寄存器、程序状态字寄存器(PSW)、通用寄存器组、计数器(CT)、移位器组成。 程序状态字寄存器用于保存系统的运行状态。条件转移指令执行时,需对标志寄存器的内容进行测试,判断是否满足转移条件。 程序状态字寄存器用于存放程序状态字,而程序状态字的各位表征程序和机器运行状态,如:含有进位标志C、结果为零标志Z等。 通用寄存器用于存放操作数和各种地址信息等,其位数与机器字长相等,这样便于操作控制。 控制器的基本功能就是执行指令,每条指令的执行是由控制器发出的一组微操作实现的。 控制器的功能是取指令、分析指令和执行指令,并产生有关操作控制信号。 控制器由硬布线控制器和微程序控制器两种类型。 控制器由程序计数器(PC)、指令寄存器(IR)、指令译码器、存储器地址寄存器(MAR)、存储器数据寄存器(MDR)、时序系统和微操作信号发生器等组成。 控制器的工作原理是根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机个部件要用到的控制信号。计算机整机各硬件系统在这些控制信号的控制下协同运行,产生预期的执行结果。 程序计数器用于存放下一条指令在主存中的地址,具有自增功能。 程序计数器的内容为下一条指令在主存中的地址

汇编语言复习提纲

99封情书 提交于 2019-12-05 00:07:09
第一章:掌握各进制的转换,有符号数的补码表示 1.1 各进制的转换 10进制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16进制 1 2 3 4 5 6 7 8 9 A B C D E F 2进制 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 十进制数一般用D、二进制数用B、八进制数用O、十六进制数用H来表示。 例如:10101100B,115D ,0075H等。 例: (1)N=45D 十进制数转换为二进制数(用除以2取余) 45/2 = 22 (a0= 1) 22/2 = 11 (a1= 0) 11/2 = 5 (a2= 1) 5/2 = 2 (a3= 1) 2/2 = 1 (a4= 0) 1/2 = 0 (a5= 1) 所以:N=45D=101101B (2)N=117D 十进制转换为十六进制数(除以16取余法) 117/16 = 7 (a0= 5) 7/16 = 0 (a1= 7) 所以 :N=117D=75H (3)将二进制数1011100转换为十进制数(各位二进制数码乘以与其对应的权之和) 1011100B = 1×2^6 + 0×2^5 + 1×2^4 + 1×2^3 + 1×2^2 + 0×2^1 + 0×2^0 = 92D (4

标志寄存器

自作多情 提交于 2019-12-04 23:24:06
目录 标志寄存器(8086CPU) 作用 大小 使用方式 ZF标志,在第6位,结果为0则为1,否则为0 PF标志,在第2位,结果中1的个数为偶数则为1,否则为0 SF 标志,在第7位,结果为负则为1,否则为0;有符号运算有效 CF标志,在第0位,存储进位或借位的值 OF标志,在第11位,结果溢出则为1,否则为0;没理解透彻 DF标志 串传送指令movsb 串传送指令movsw cld和std设置DF标志位 adc 指令,带位加法指令,用于计算特别大的数据 sbb 指令, 带借位减法指令,用于运算特别大的数据 cmp指令,这个玩意有点复杂(P234, 11.8) pushf和popf 标志寄存器在debug中的表示 标志寄存器(8086CPU) 作用 用来存储相关指令的某些执行结果 用来为CPU执行相关指令提供行为依据 用来控制CPU的相关工作方式 大小 标志寄存器有16位 使用方式 标志寄存器是按位起作用,也就是说每一个位都有专门的含义,记录特定的i西南西 flag的1、3、5、12、13、14、15位在8086CPU中没有使用,不具有任何含义。而0、2、4、6、7、8、9、10、11位都具有特殊的含义 ZF标志,在第6位,结果为0则为1,否则为0 zf (Zero Flag) 是零标志位,在第6位;它记录相关指令执行后,其结果是否为0,如果为0,那么 zf = 1 ;否则 zf

I/O管理杂记

纵然是瞬间 提交于 2019-12-04 20:59:14
  这是一篇杂记,记录了操作系统层面与I/O管理的零散知识点,用于温习使用。由于I/O管理是一个很大的范畴,后续会不断按照自己的生产需求来补充用的到的知识点。计算机系统是人造系统,没有绝对的对错(相对于自然系统的绝对性),只有特定场景下的优劣。我们在理解一块知识时应当从它提出的背景以及要解决的问题出发,去理解机制而不是纠结于如何具体的实现。即使目的相同,不同的公司或开发者在不同场景下的实现也不尽相同,了解几个例子加深自己的理解、帮助自己构建起知识体系即可(个人观点)。 设备控制器   设备控制器是计算机中的一个实体,其主要职责是 控制一个或多个I/O设 备,以实现I/O设备和计算机之间的数据交换。它是 CPU与I/O设备之间的接口 ,它接收从CPU发来的命令,并去控制I/O设备工作, 以使处理机从繁杂的设备控制事务中解脱出来 。设备控制器是一个 可编址 的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。设备控制器的复杂性因不同设备而异,相差甚大,于是可把设备控制器分成两类:一类是用于控制 字符设备 的控制器,另一类是用于控制 块设备 的控制器。在微型机和小型机中的控制器,常做成印刷电路卡形式,因而也常称为接口卡,可将它插入计算机。有些控制器还可以处理两个、四个或八个同类设备。   控制器由

offsetof(s,m)解析

南笙酒味 提交于 2019-12-04 18:49:08
h ttps://www.cnblogs.com/jingzhishen/p/3696293.html sizeof()用法汇总 sizeof()功能:计算数据空间的字节数 1.与strlen()比较 strlen()计算字符数组的字符数,以"\0"为结束判断,不计算为'\0'的数组元素。 而sizeof计算数据(包括数组、变量、类型、结构体等)所占内存空间,用字节数表示。 2.指针与静态数组的sizeof操作 指针均可看为变量类型的一种。所有指针变量的sizeof 操作结果均为4。 注意:int *p; sizeof(p)=4; 但sizeof(*p)相当于sizeof(int); 对于静态数组,sizeof可直接计算数组大小; 例:int a[10];char b[]="hello"; sizeof(a)等于4*10=40; sizeof(b)等于6; 注意:数组做型参时,数组名称当作指针使用!! void fun(char p[]) {sizeof(p)等于4} char str[20]="0123456789"; int a=strlen(str); //a=10; int b=sizeof(str); //而b=20; char ss[] = "0123456789"; sizeof(ss) 结果 11 ===》ss是数组,计算到\0位置,因此是10+1 sizeof(

cortex-A7架构概要

风流意气都作罢 提交于 2019-12-04 18:05:24
1.运行模式 1.1:m3架构就只有特权和非特权两种模式,而A7有1种用户模式+8种特权模式 1.2:用户模式不能访问系统的所有资源,需借助异常来切换到其他模式才能访问被授以权限的资源 1.3:当发生中断或异常,处理器进入相应的处理模式,为了保护用户模式下的寄存器不被破坏,相应的模式提供了对应的寄存器组以供使用 2.寄存器组 2.1:浅色即是与user共用的寄存器,蓝色是各个模式所特有的 2.2:未备份寄存器R0-R7,9种模式所共用,切换模式,数据就会被破坏 2.3.:备份寄存器:R8-R14;R13也即sp,存放专用的栈地址;R14即连接寄存器,存放当前子程序的返回地址 2.4:程序计数器:R15,存放指向正在执行的指令的地址+8bytes(32位arm三级流水线,取指>译码>执行) 2.5:程序状态寄存器:CPSR,该寄存器包含了条件标志位、中断禁止位、当前处理器模式标志等一些状态位以及一些控制位。所有的处理器模式都共用一个 CPSR 必然会导致冲突,为此,除了 User 和 Sys 这两个模式以外,其他 7 个模式每个都配备了一个专用的物理状态寄存器,叫做 SPSR(备份程序状态寄存器),当特定的异常中断发生时,SPSR 寄存器用来保存当前程序状态寄存器(CPSR)的值,当异常退出以后可以用 SPSR 中保存的值来恢复 CPSR 3.GNU汇编语法 3.1:语句组成:

Rocket - debug - Example: Read Memory

半城伤御伤魂 提交于 2019-12-04 16:21:38
https://mp.weixin.qq.com/s/ChXNTbx94WDC72GvmE9bGA 介绍riscv-debug的使用实例:使用三种方法读取内存。 1. Using System Bus Access 1) System Bus Access 除了抽象命令,Program Buffer之外,调试模块可以包含一个系统总线访问模块,以在不依赖核心的情况下,访问系统总线(使用物理地址): 访问大小可以是8/16/32/64/128位: 需要自己保证访问的缓存一致性: 2) sbcs/sbaddress/sbdata a. sbcs 用于控制系统总线访问,以及获取访问状态: b. sbaddress0..3 存储要访问的系统总线物理地址。 写sbaddress寄存器可能触发对该地址的读操作: c. sbdata0..3 保存读取和要写入的数据。 读sbdata0寄存器可能触发系统总线的读操作: 写sbdata0寄存器可能触发系统总线的写操作: 3) 实例:Read a word from memory A. 写sbcs寄存器: a. sbaccess=2:访问大小为32bit; b. sbreadonaddr=1:every write to sbaddress0 automatically triggers a system bus read at the new

手写bootloader(手写*_*)

╄→尐↘猪︶ㄣ 提交于 2019-12-04 14:01:11
思路 1.关看门狗 2.设置时钟 3.初始化sdram 4.重定位 5.执行main .text 表示代码段 .global _start (global 表示全局标号) 关看门狗 可以调c完成disable_watch_dag 确定看门狗地址0x.... ldr r0 ,=0x... ldr 违汇编指令 mov r1,#0 str r1, [r0] 设置时钟 可以用 c clock_init() CLKDIVN 定义位置board中 ldr r0, =0x4c00001 mov r1, #0x03 0x03 分频系数 //FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1 str r1,[r0] asm 如果是c,它是标志嵌入汇编 读芯片手册,调整异步模式,根据芯片具体情况 mrc 指令将ARM处理器的寄存器中的数据传送到协处理器的寄存器中。如果协处理器不能成功地执行该操作,将产生未定义的指令异常中断 MCR{ } p15, 0, , , {, } 为协处理器将执行的操作的操作码。对于CP15协处理器来说, 永远为0b000,当 不为0b000时,该指令操作结果不可预知 作为元寄存器的ARM寄存器,其值被传< Rd>不能为PC,当其为PC时,指令操作结果不可预知送到得协处理器寄存器中 作为目标寄存器的协处理器寄存器,其编号可能为C0,C1....C15。