状态寄存器

008NAND_FLASH驱动

試著忘記壹切 提交于 2019-11-29 05:59:48
一、 NAND_FALSH原理及硬件操作(第十九课/第一节) A、 回顾块设备驱动 应用程序读写一个普通文件,最终肯定会去操作到硬件上(比如Flash),这个普通的文件存在什么地方,文件系统会把对普通文件的读写转换为一项一项的对块设备的读写操作,然后会调用"ll_rw_block"这个函数,这个函数就会把这些一项一项的读写操作放入队列优化然后调用请求处理函数执行。 B、 回顾怎么写块设备驱动程序 1. 分配gendisk结构:alloc_disk 2. 设置:a.分配/设置队列;b.设置其它属性(比如容量等) 3. 注册:add_disk C、 NandFlash硬件原理图: D、各引脚作用: 问1:原理图上NAND_FLASH和S3C2440之间只有(DATA0~DATA7)数据线,怎么传输地址呢? 答1:在DATA0~DATA7上既有传输数据,又传输地址,还传输命令。当ALE为高电平时传输的是地址;当ALE为低电平时传输的是数据。 问2:从NAND_FLASH芯片手册可知,要操作NAND_FLASH需要先发出命令,怎么传入命令? 答2:当ALE为高电平时传输的是地址;当CLE为高电平时传输的是命令;当ALE和CLE都为低电平时传输的是数据。 问3:数据线既接到NAND_FLASH,也接到NOR_FLASH,还接到SDRAM,DM9000等等? 答3:这些设备在访问之前必须"选中

第二季-专题6-点亮指路灯

独自空忆成欢 提交于 2019-11-29 04:14:19
专题6-点亮指路灯 1. LED原理图分析 在嵌入式系统软件(bootloader, kernel)开发初期,由于串口等硬件尚未被初始化,因此调试手段相当有限,这时通常会采用LED来作为程序调试的重要手段。 左边的图是低电平导通,右边的图是高电平导通。 LED的引脚究竟接在哪里是依靠核心板的电路图来识别的,依靠核心板的GPIO到底是接在哪里来判断的。 2. GPIO GPIO(General-Purpose Input/Output Ports)通用输入/输出端口。在嵌入式系统中, CPU经常需要控制许多结构简单的外部设备或者电路,这些设备通常只要求两种状态(开/关), 对这些设备的控制,使用传统的串口或者USB口就显得复杂,所以,在嵌入式微处理器上通常提供了一种“通用可编程I/O端口”,也就是GPIO。 一个GPIO端口至少需要两个寄存器,一个是“控制寄存器”,用于选择该端口作为输入还是输出。另一个是存放数据的”数据寄存器”。 s3c2440有130个IO引脚,分成了A-J一共9个组;6410有187个IO引脚,被分成了A-Q一共17个组 3. 设计流程 (1)设置GPIO控制寄存器,把引脚设置为输出功能 (2)根据原理图设置GPIO数据寄存器,点亮LED 4. 写代码 TQ2440: 在TQ210的电路原理图上,可以观测到它的LED启动方式的低电平启动,对应的名称为nLED_1

单片机期末复习

安稳与你 提交于 2019-11-28 23:34:57
一、硬件结构 1.1部分引脚说明 RST:复位引脚,两个机器周期的高电平后复位 ALE:锁存低八位地址 EA:高电平时,访问内部程序存储器(ROM) P0:双向IO口、分时复用-低八位地址,数据总线 P1:双向IO口 P2:双向IO口,访问外部存储器时,提供高八位地址总线 P3:双向IO口,有第二功能 1.2存储器 物理上分为:4 个空间 即片内ROM、 、 片外ROM(程序存储器) 片内RAM、 、 片外RAM(数据存储器) 逻辑上分为: : 3 个空间 , 程序内存(ROM) ( 片内 、 外 ) 统一编址 MOVC 数据存储器 ( 片内) ) MOV 数据存储器(片外) MOVX 1.2.1程序存储器(ROM 作用:存储用户程序和表格常数 特殊单元: 0000H:复位后从这里开始执行程序 中断单元: 外中断0 (INT0 ) 0003H 定时器0 (T0 ) 000BH 外中断1 (INT1 ) 0013H 定时器1 (T1 ) 001BH 串行口(UART ) 0023H 1.2.2内部数据存储器(RAM 通用工作寄存器组 00~1FH共32个,四组通用寄存器,即(四组R0~R7) 可以使用RS1(PSW.4)RS0(PSW.3)来切换寄存器区 RS1 RS0 寄存器区 内存地址 00 0区 00-07H 01 1区 08-0FH 10 2区 10-17H 11 3区 18

实验1 Windows汇编语言开发环境

时光毁灭记忆、已成空白 提交于 2019-11-28 22:50:31
Windows 、 Linux 等现代操作系统都运行于 CPU 的保护模式下。学习保护模式的汇编语言编程,要选用合适的编译、调试工具,编译工具决定了汇编程序的语法、结构,而调试工具则能够帮助我们迅速查找程序中的错误,提高调试效率。 本实验指导书采用 Microsoft 公司的 MASM 6.14 作为编译工具, Microsoft Visual C/C++ 作为开发调试环境。 1.1 汇编程序结构 和其他语言一样,汇编语言的源程序也要符合一定的格式,才能被编译程序所识别和处理。学习和掌握这些格式,是进行汇编编程的第一步。 1.1.1 一个显示字符串的汇编程序 下面是一个简单的汇编程序。 ;程序清单:test.asm(在控制台上显示一个字符串) .386 .model flat, stdcall option casemap:none ; 说明程序中用到的库、函数原型和常量 includelib msvcrt.lib printf PROTO C :ptr sbyte, :vararg ; 数据区 .data szMsg byte “ Hello World! ” , 0ah, 0 ; 代码区 .code start: mov eax, OFFSET szMsg invoke printf, eax ret end start 1.1.2 程序格式 在源程序 test.asm 中

Alientek I.MX6UL Linux Note,Welcom Come To Discuss

淺唱寂寞╮ 提交于 2019-11-28 20:21:58
第六章 Contex-A7 MPCore架构 Contex-A处理器运行模型   以前的ARM处理器有七种运行模式,现在有九种,新增加Monitor和Hyp运行模式。 模式 描述 USR(User) 用户模式,非特权模式,大部分程序运行的时候处于此模式 FIQ 快速中断模式,进入FIQ中断异常 IRQ 一般中断模式 SVC(Supervisor) 超级管理员模式,特权模式,宫操作系统使用 MON(Monitor) 监视模式,这个模式用于安全扩展模式,指用户安全 ABT(Abort) 数据访问终止模式,用于虚拟存储以及存储保护 HYP(Hyp) 超级监视模式,用于虚拟化扩展 UND(Undef) 未定义指令终止模式 SYS(System) 系统模式,用于运行特权级的操作系统任务 记忆(UFIS MAHUS) Contex-A寄存器组   ARM提供了16个32位通用寄存器(R0 R15)供软件使用,前15个(R0 R14)可以用作通用的数据存储,R15是程序计数器PC,用来保存将要执行的命令,ARM还提供了一个当前程序状态寄存器CPSR和一个备份程序寄存器SPSR,SPSR是CPSR的备份。 总结一下, Cortex-A内核寄存器组成如下(共43个): ①、 34个通用寄存器,包括 R15程序计数器 (PC),这些寄存器都是 32位的。 ②、 8个状态寄存器,包括 CPSR和

认识CPU的工作原理

末鹿安然 提交于 2019-11-28 16:59:00
学习CPU的工作原理 在了解CPU的工作原理之前,先简单谈谈CPU是如何生产出来的。 CPU是在特别纯净的硅材料上制造的。一个CPU的芯片包含上百万个精巧的晶体管。人们在一块指甲盖大小的硅片上,用化学的方法蚀刻或光刻出晶体管。因此从这个意义上来说,CPU正是由晶体管组合而成的。 简单而言,晶体管就是微型的电子开关。它们是构建CPU的基石,你可以把一个晶体管当做一个点灯开关,它们有个操作位,分别代表两种状态:(开)和OFF(关) 这一开一关就相当于晶体管的连通断开,而这两种状态正好与二进制中的状态:0 1 对应! 这样,计算机就具备了处理信息的能力。 此处为:硅材料图、晶体管图。 但是你不要以为,只有简单的0 和 1 两种状态的晶体管的原理很简单,其实它们的发展经过科学家们多年的辛苦研究得来的。 在晶体管之前,计算机依靠速度缓慢,低效率的真空电子管和机械开关来处理信息,后来科研人员把这两个晶体管放置到了一个硅晶体中,这样便创作出第一个集成电路,后面才有了微处理器。 看到这里,你一定想知道 晶体管是如何利用0 和 1 这两种电子信号来执行指令和处理数据的呢? 其实,所有电子设备都有自己的电路和开关,电子在电路中流动或断开,完全是由开关来控制的。如果你将开关设置为OFF 那么电子将停止流动,如果你再将设置为ON 那么电子又会继续流动,晶体管的这种ON 与 OFF 的切换只有电子信号控制

计算机如何执行一条机器指令

一曲冷凌霜 提交于 2019-11-28 15:36:42
文章目录 指令运行过程: 微程序控制基本概念: 几个周期区别 寻址方式: 指令运行过程:  在 上篇 我们谈到,计算机处理一段程序,就会将程序翻译成机器指令,然后执行完成相应的任务。执行指令的过程分为取指令阶段、分析取数阶段和执行阶段。 1.取指阶段: 图中概念解释: PC(程序计数器),MAR(存储地址寄存器),CU(控制单元),IR(指令寄存器) AB(地址总线) ,DB(数据总线), CB(控制总线)。 取指令阶段完成的任务是将现行指令从主存中取出来并送至指令寄存器中去,具体的操作如下: ① 将程序计数器(PC)中的内容先送至存储器地址寄存器(MAR),然后送至地址总线(AB). ② 由控制单元(CU)经控制总线(CB)向存储器发读命令. ③ 从主存中取出的指令通过数据总线(DB)送到存储器数据寄存器(MDR). ④ 将MDR的内容送至指令寄存器(IR)中. ⑤ 将PC的内容递增,为取下一条指令做好准备. 2.分析取数阶段: 取出指令后,指令译码器(ID)可识别和区分出不同的指令类型.此时计算机进入分析取数阶段,以获取操作数.由于各条指令功能不同,寻址方式也不同,所以分析取数阶段的操作是各不相同的. 对于无操作数指令,直接进入执行阶段。 取数要计算操作数有效地址。对于不同的寻址方式,有效地址的计算方法是不同的,有时需要多次访问主存才能取出操作数(间接寻址)。如果通用寄存器中有

RV32FDQ/RV64RDQ指令集(1)

大憨熊 提交于 2019-11-28 12:13:55
Risc-V架构定义了可选的单精度浮点指令(F扩展指令集)和双精度浮点指令(D扩展指令集)。 Risc-V架构规定: 处理器可以选择只实现F扩展指令子集而不支持D扩展指令子集;但是如果支持了D扩展指令子集,则必须支持F扩展指令子集。 Risc-V架构规定的浮点数符合IEEE754 2008规则,可以从下面的链接了解浮点数格式的详细信息: https://www.cnblogs.com/german-iris/p/5759557.html Risc-V规定,如果支持单精度浮点指令或者双精度浮点指令,则需要增加一组独立的通用浮点寄存器组,包括32个通用浮点寄存器,标号位f0到f31。如果仅支持F扩展指令子集,则每个通用寄存器是32位的,如果支持D扩展那指令子集,则每个通用寄存器是64位的。 Risc-V架构规定,如果支持单精度浮点指令或者双精度浮点指令,需要增加一个浮点控制状态寄存器fcsr,该寄存器是一个可读可写的csr寄存器。 fcsr寄存器包含浮点异常标志域(fflags),不同的标志位表示不同的异常类型。如果浮点运算单元在运算中出现了相应的异常,则会将fcsr寄存器中对应的标志位设置为1,且会一直保持累积。软件可以通过写0的方式单独清除某个异常标志位。 根据IEEE-754标准,浮点运算需要指定舍入模式(rounding mode),Risc

2.5 习题

你离开我真会死。 提交于 2019-11-28 11:21:37
题2.1 8086/8088 通用寄存器的通用性表现在何处?8个通用寄存器各自有何专门的用途?哪些寄存器可作为存储器寻址方式的指针寄存器? 答:8086、8088通用寄存器既可用存储数据,也可用于存放运算的中间值、运算结果。8个通用寄存器的专门用途如下:   AX:字乘法、字除法、字I/O、累加器   AL:字节乘法、字节除法、字节I/0、十进制算术运算   AH:字节乘法、字节除法   BX: 存储器指针   CX:串操作、循环控制中的计数器   CL: 移位计数器   DX:字乘法、字除法、间接I/0   SI: 存储器指针(串操作源指针)   DI:存储器指针(串操作目的指针)   BP:存储器指针(默认为堆栈段)   SP:指令指针 可作为存储器寻址方式指针寄存器为:BX、SI、DI、BP 题2.2 从程序员的角度看,8086/8088有多少个可访问的16位寄存器?有多少个可访问的8位寄存器? 答:AX,BX,CX,DX,SI,DI,BP,SP,DS,CS,ES,SS,IP,FLAG。共14个16位寄存器。AH,AL,BH,BL,CH,CL,DH,DL共8个8位寄存器。 题2.3 寄存器AX与寄存器AH和AL的关系如何?请写出如下程序片段中每条指令执行后寄存器AX的内容: MOV AX,1234H AX=1234H MOV AL,98H    AX=1298H MOV AH

Linux x86和x64的区别

孤者浪人 提交于 2019-11-28 10:05:33
0x01:寄存器分配的不同 (1)64位有16个寄存器,32位只有8个。但是32位前8个都有不同的命名,分别是e _ ,而64位前8个使用了r代替e,也就是r _。e开头的寄存器命名依然可以直接运用于相应寄存器的低32位,而剩下的寄存器名则是从r8 - r15,其低位分别用d、w、b指定长度; (2)32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数,rax作为返回值; (3)64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用; (4)64位支持一些形式的以PC相关的寻址,而32位只有在jmp的时候才会用到这种寻址方式; 0x02:(新增)汇编指令的不同 mov、push、pop扩展了movq系列的mov和pushq以及popq用来操作quad word。 补充: (1)movabsq不是32位的扩展,是纯新增的指令。用来将一个64位的字面值直接存到一个64位寄存器中。因为movq只能将32位的值存入,所以新增了这样一条指令 (2)64位的汇编代码在ret之前可能会加一句rep,这里的rep没有实际意义,只是出于AMD处理器的原因,避免jmp所到达的地方直接就是ret,这样会使得处理器运行更快一些 0x03:函数调用的不同 (1)x_64的参数通过寄存器传递