通用寄存器

UART在4412上的裸机开发

百般思念 提交于 2019-12-09 12:46:32
UART(通用异步传输收发器)简介 串行通信简介 我们的实际生活中,常见的通信方式有很多,例如:蓝牙,WIFI,网线,红外,HDMI VGA,USB,I2C,SP1,UART等,每种都有自己的特点以及常用的场合。今天,我们就来看看我们的串行通信。通用异步收发器简称UART,即“Universal Asynchronous Receiver Transmitter”, 它 串行通信是指计算机与I/O 设备之间数据传输的各位是按顺序依次一位接一位进行传送。通常数据在一根数据线上传输。具体情况如下:用来传输串行数据:发送数据时,CPU将并行数据写入UART,UART按照一定的格式在一根电线上串行发出;接收数据时,UART检测另一根电线上的信号,将串行收集放在缓冲区中,CPU即可读取UART获得这些数据。UART之间以全双工方式传输数据,最精简的连线方法只有三根电线:TxD用于发送数据,RxD用于接收数据,Gnd用于给双方提供参考电平,连线如图7.1所示:transmission recvfrom 我们通俗所使用的串口硬件格式为: 实质上,大部分我们只是使用了里面的3根线。 UART使用标准的TTL/CMOS逻辑电平(0~5V、0~3.3V、0~2.5V或0~1.8V四种)来表示数据,高电平表示1,低电平表示0。为了增强数据的抗干扰能力、提高传输长度,通常将TTL

汇编入门四-寄存器

邮差的信 提交于 2019-12-09 11:23:36
本篇博文对应 汇编语言 第二版 第二章 寄存器内容,属于个人读书笔记。 作为一名转职法师,对于魔法阵核心运作原理还是比较向往的,我的魔法数学学的不好,魔法阵结构原理的选修也学的并不深入,所以也是时时充满着危机感,毕竟在法师领域,战斗力、学识的深度都是和金币、名誉挂钩的。 前段时间用java做爬虫,了解到一些用python的道友,运起真元力抓取数据,有排山倒海之势、亦有四两拨千斤之自如。遂有些向往,于是花了少许时间,粗浅一筑基。发现这大道三千,无不归于一体,遂顿悟,大道至简,殊途同归!遂归于本源,返璞而归真。 扯了这么多,简单来说就是这两年来对自己方向的总结。以前也有过,或是公司需求,如微信小程序,看见什么就想学什么,但是在这一领域,热门技术层出不穷,学是学不完的。但是在这过程中,也渐渐发现无论什么技术,只要有个官方文档、参考几篇博客,看个几天也就搞出来了。当然过程也很辛苦,一脚一个坑,但走过来发现也就那些东西,所以只要打好基础,然后英语好一些就行了,对于一些核心算法与数据结构领域,本人愚钝,自然有高薪算法专家或某博士大牛搞定。所以,2018的方向则是基础、英语、然后lunix可以再深入一些。 近来双目不适、心情压抑,所以进度很慢,于是回家吃饭。。。。 -20180129 正题开始:一个典型的CPU主要由运算器、控制器、寄存器等器件组成,这些器件有内部总线相连 运算器:信息处理

FreeRTOS----调度器

我们两清 提交于 2019-12-06 02:39:20
FreeRTOS----调度器 调度器的启动流程分析 当创建完任务之后,会调用vTaskStartScheduler()函数,启动任务调度器; void vTaskStartScheduler( void ) { /* 部分代码如下: */ BaseType_t xReturn; xReturn = xTaskCreate( prvIdleTask, configIDLE_TASK_NAME, configMINIMAL_STACK_SIZE, ( void * ) NULL, portPRIVILEGE_BIT, &xIdleTaskHandle ); #if ( configUSE_TIMERS == 1 ) { if( xReturn == pdPASS ) { xReturn = xTimerCreateTimerTask(); } else { mtCOVERAGE_TEST_MARKER(); } } #endif /* configUSE_TIMERS */ if( xReturn == pdPASS ) { #ifdef FREERTOS_TASKS_C_ADDITIONS_INIT { freertos_tasks_c_additions_init(); } #endif portDISABLE_INTERRUPTS(); #if ( configUSE

汇编(三)——关于寄存器的操作

三世轮回 提交于 2019-12-05 18:31:17
目录 汇编(三) 一、通用寄存器 二、加深对AX、BX、CX、DX印象 三、监测点2.1 四、地址寄存器 五、监测点2.2 六、CPU如何区分指令与数据 七、加深CPU如何区分指令和数据印象 八、IP寄存器和指令的关系 汇编(三) 一、通用寄存器 AX、BX、CX、DX 1 byte = 8 bit 2 byte = 16 bit 0000 0000 0000 0000 ~ 1111 1111 1111 11111 他们可以各自分为2个8位寄存器 AX = AH*AL BX = BH*BL CX = CH *CL DX = DH*DL 为什么存在通用寄存器? 1.因为为了兼容之前的8位寄存器,保证之前的程序,稍加修改就可以运行在8086CPU上 2.内存最小单元 8 bit CPU从内存中读取一个字节 8 bit字节的数据 8位数据 -> 8位寄存器中 16根数据线 8086CPU一次性可以处理 2种尺寸的数据 字节型数据 byte 8bit 8位寄存器中 字型数据 2byte 16bit 16位寄存器中 2个字节 一个字节是高位数据,一个是低位 二、加深对AX、BX、CX、DX印象 mov ax,5 mov ax,0 mov al,5 按下r查询,按下t执行 分析下面命令 mov ax,4E20 mov bx,ax mov ch,bl mov cl,bh mov dl,ch

单片机期末复习

心不动则不痛 提交于 2019-12-05 18:17:55
一、硬件结构 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

《操作系统真象还原》保护模式入门

有些话、适合烂在心里 提交于 2019-12-04 16:48:08
  以下是第四章的收获: 保护模式   什么是保护模式?直接定义保护模式似乎是件很抽象的事情,我们不妨先看看为什么要有保护模式,且保护模式能为我们做些什么?   保护模式是相对于实模式而言的,且是为了解决实模式的一些问题而提出来的。实模式是8086CPU下的寻址模式、指令用法、寄存器大小等。   那么实模式有什么问题呢?为什么需要保护模式呢? 为什么需要保护模式   ①实模式下,用户进程和系统进程属于同一特权级别,平起平坐,系统进程能调用什么,用户进程就能调用什么。   ②实模式下,进程访问的地址直接就是物理地址,想修改内存里面的内容十分容易,没有一点限制。   ③实模式下,可以随意修改段基址,访问所有内存。   以上三点均为安全问题,也是主要问题。我们可以从保护模式的“保护”中看出,保护模式下运行的程序会更加安全可靠,更具“安全感”,不会被另一个程序随意修改。   ④访问内存,需要不断变换段基址,来访问我们想要的内存地址,因为一个段的大小只有64KB。   ⑤内存大小只有1M,不够用。   ⑥每次只能运行一个程序,浪费CPU的资源。   ④到⑥点是使用上的问题,想想如果我们现在的电脑还用着使用着实模式下的CPU的的话,程序的效率会有多么低下,访问内存还得自缚手脚,运行一个程序还要等上一个程序运行完,显然是现代操作系统里难以想象的。   下面就来想如何解决这些问题,第①点的话

汇编之各个寄存器的作用

陌路散爱 提交于 2019-12-04 06:01:50
原文链接:[ https://www.cnblogs.com/zimmerk/articles/2520011.html ] 4个数据寄存器(EAX、EBX、ECX和EDX) 2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP) 6个段寄存器(ES、CS、SS、DS、FS和GS) 1个指令指针寄存器(EIP) 1个标志寄存器(EFlags) 1、数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。对低16位数据的存取,不会影响高16位的数据。这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。 4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器的这种”可分可合”的特性,灵活地处理字/字节的信息。 寄存器AX和AL通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。累加器可用于乘、 除、输入/输出等操作,它们的使用频率很高; 寄存器BX称为基地址寄存器(Base Register)。它可作为存储器指针来使用; 寄存器CX称为计数寄存器(Count

ucore-lab1-练习3report

断了今生、忘了曾经 提交于 2019-12-04 04:20:15
文章链接: https://www.cnblogs.com/cyx-b/p/11809742.html 作者: chuyaoxin 一、实验内容 BIOS将通过读取硬盘主引导扇区到内存,并转跳到对应内存中的位置执行bootloader。请分析bootloader是如何完成从实模式进入保护模式的。 提示:需要阅读 小节“保护模式和分段机制”和lab1/boot/bootasm.S源码,了解如何从实模式切换到保护模式,需要了解: 为何开启A20,以及如何开启A20 如何初始化GDT表 如何使能和进入保护模式 二、实验相关 (1)汇编 没有学过汇编的我刚看到源码时,有点懵逼,于是,我首先查了不少关于汇编的小资料。 Ucore中用到的是AT&T格式的汇编 在 AT&T 汇编格式中 %   寄存器名要加上 '%' 作为前缀; $   用 '$' 前缀表示一个立即操作数;   .set symbol, expression 将symbol的值设为expression cli 屏蔽系统中断 .code16 由于代码段在实模式下运行,所以要告诉编译器使用16位的模式编译 标号: 在x86汇编代码中,标号有唯一的名字加冒号组成。它可以出现在汇编程序的任何地方,并与紧跟其后的哪行代码具有相同的地址。 概括的说 ,当程序中要跳转到另一位置时,需要有一个标识来指示新的位置,这就是标号

ucore-lab1-练习3report

瘦欲@ 提交于 2019-12-04 04:02:47
文章链接: https://www.cnblogs.com/cyx-b/p/11809742.html 作者: chuyaoxin 一、实验内容 BIOS将通过读取硬盘主引导扇区到内存,并转跳到对应内存中的位置执行bootloader。请分析bootloader是如何完成从实模式进入保护模式的。 提示:需要阅读 小节“保护模式和分段机制”和lab1/boot/bootasm.S源码,了解如何从实模式切换到保护模式,需要了解: 为何开启A20,以及如何开启A20 如何初始化GDT表 如何使能和进入保护模式 二、实验相关 (1)汇编 没有学过汇编的我刚看到源码时,有点懵逼,于是,我首先查了不少关于汇编的小资料。 Ucore中用到的是AT&T格式的汇编 在 AT&T 汇编格式中 %   寄存器名要加上 '%' 作为前缀; $   用 '$' 前缀表示一个立即操作数;   .set symbol, expression 将symbol的值设为expression cli 屏蔽系统中断 .code16 由于代码段在实模式下运行,所以要告诉编译器使用16位的模式编译 标号: 在x86汇编代码中,标号有唯一的名字加冒号组成。它可以出现在汇编程序的任何地方,并与紧跟其后的哪行代码具有相同的地址。 概括的说 ,当程序中要跳转到另一位置时,需要有一个标识来指示新的位置,这就是标号

Rocket - debug - Example: Accessing Registers Using Abstract Command

落花浮王杯 提交于 2019-12-04 02:12:33
https://mp.weixin.qq.com/s/RdJzE06mMkh2x__vVj_fEA 介绍riscv debug接口的使用实例:使用抽象命令读取寄存器。 1. Read s0 using abstract command 1) abstract command 抽象命令,Debug模块支持一些可选的抽象命令。一般情况下,debugger执行命令时,CPU核心是被暂停的: 命令是否支持只能通过执行之后判断返回的错误码来确定: debugger通过写command寄存器来执行命令: 使用data寄存器进行传参和接收返回值: 目前支持的抽象命令有三种: 2) command寄存器 3) Access Register Command 如果抽象命令是访问寄存器,那么command寄存器的格式如下: 在当前这个实例中: a. aarsize=2:表示Access the lowest 32 bits of the register; b. transfer=1:表示Do the operation specied by write; c. write=0:表示Copy data from the specified register into arg0 portion of data,即把目标寄存器的数据拷贝到data0; d. regno=0x1008