数据寄存器

TMS320F28377学习笔记——SCI串行通信接口

淺唱寂寞╮ 提交于 2019-11-29 23:43:40
本章介绍串行通信接口(SCI)模块的功能和操作。 SCI是一种双线异步串行端口,通常称为UART。 SCI模块支持CPU和使用标准非归零(NRZ)格式的其他异步外设之间的数字通信。 SCI接收器和发送器每个都有一个16级深FIFO,用于减少服务开销,每个都有自己独立的使能和中断位。 两者都可以独立操作以进行半双工通信,或同时进行全双工通信。 为了指定数据完整性,SCI检查接收到的数据是否存在中断检测,奇偶校验,溢出和帧错误。 比特率可通过16位波特选择寄存器编程为不同的速度。 SCI模块的功能包括: •两个外部引脚: SCITXD:SCI发送输出引脚 SCIRXD:SCI接收输入引脚 如果不用于SCI,则两个引脚都可以用作GPIO。 •波特率可编程为64K不同速率 •数据字格式 一个开始位 数据字长度可编程为1至8位 可选偶数/奇数/无奇偶校验位 一个或两个停止位 •四个错误检测标志:奇偶校验,溢出,成帧和​​中断检测 •两种唤醒多处理器模式:空闲线和地址位 •半双工或全双工操作 •双缓冲接收和发送功能 •发送器和接收器操作可以通过具有状态标志的中断驱动或轮询算法来完成。 •发送器和接收器中断的独立使能位(BRKDT除外) •NRZ(不归零)格式 •13个SCI模块控制寄存器位于控制寄存器帧中,从地址7050h开始 该模块中的所有寄存器都是8位寄存器,连接到外设帧2.当访问寄存器时

CPU上下文切换

风流意气都作罢 提交于 2019-11-29 16:51:42
进程在竞争 CPU 的时候并没有真正运行,为什么还会导致系统的负载升高呢?CPU 上下文切换就是罪魁祸首。 我们都知道,Linux 是一个多任务操作系统,它支持远大于 CPU 数量的任务同时运行。当然,这些任务实际上并不是真的在同时运行,而是因为系统在很短的时间内,将 CPU 轮流分配给它们,造成多任务同时运行的错觉。 而在每个任务运行前,CPU 都需要知道任务从哪里加载、又从哪里开始运行,也就是说,需要系统事先帮它设置好CPU 寄存器和程序计数器(Program Counter,PC)。 CPU 寄存器,是 CPU 内置的容量小、但速度极快的内存。而程序计数器,则是用来存储 CPU 正在执行的指令位置、或者即将执行的下一条指令位置。它们都是 CPU 在运行任何任务前,必须的依赖环境,因此也被叫做 CPU 上下文 。 知道了什么是 CPU 上下文,我想你也很容易理解 CPU 上下文切换 。 CPU 上下文切换,就是先把前一个任务的 CPU 上下文(也就是 CPU 寄存器和程序计数器)保存起来, 然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。 而这些保存下来的上下文,会存储在系统内核中,并在任务重新调度执行时再次加载进来。这样就能保证任务原来的状态不受影响,让任务看起来还是连续运行。 根据任务的不同 ,CPU

Modbus 地址

北城余情 提交于 2019-11-29 06:05:22
通常 Modbus地址由 5位数字组成,包括起始的数据类型代号,以 及后面的偏移地址。 Modbus Master协议库把标准的 Modbus 地址 映射为所谓 Modbus功能号,读写从站的数据。 Modbus Master协 议库支持如下地址: 00001 - 09999:数字量输出( 线圈) 10001 - 19999:数字量输入(触点) 30001 - 39999:输入数据寄存器(通常为模拟量输入) 40001 - 49999:数据保持寄存器 Modbus Master协议库支持的功能 为了支持上述 Modbus地址的读写, Modbus Master协议库需要从 站支持下列功能: 表 1.需要从站支持的功能 Modbus 读 / Modbus从站须支持 地址 写 的功能 00001 - 读 09999 功能 1 功能 5:写单输出点 功能 15:写多输出点 数字量输写 出 10001 - 读 19999 写 功能 2 - 数字量输 入 30001 - 读 39999 功能 4 输入寄存 写 器 - 读 功能 3 40001 - 功能 6:写单寄存器 49999 单元 保持寄存 写 器 功能 16:写多寄存器 单元 如何理解 Modbus地址与功能码的区别? Modbus地址与 Modbus的功能码是两个层次的概念。 根据 Modbus通信协议, Modbus数据的地址使用

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

深入浅出计算机组成原理:冒险和预测(二)-流水线里的接力赛(第23讲)

岁酱吖の 提交于 2019-11-29 02:35:34
一、引子 1、解决不同指令之间的数据依赖问题。 上一讲,我为你讲解了结构冒险和数据冒险,以及应对这两种冒险的两个解决方案。一种方案是增加资源,通过添加指令缓存和数据缓存,让我们对于指令和数据的访问可以同时进行。 这个办法帮助CPU解决了取指令和访问数据之间的资源冲突。另一种方案是直接进行等待。通过插入NOP这样的无效指令,等待之前的指令完成。这样我们就能解决不同指令之间的数据依赖问题 2、上一讲的这两种方案这两种方案都有点儿笨。 着急的人,看完上一讲的这两种方案,可能已经要跳起来问了:“这也能算解决方案么?”的确,这两种方案都有点儿笨。 第一种解决方案,好比是在软件开发的过程中,发现效率不够,于是研发负责人说:“ 我们需要双倍的人手和研发资源 。”而第二种解决方案,好比你在提需求的时候,研发负责人告诉你说: “来不及做,你只能等 我们需求排期。” 你应该很清楚地知道,“堆资源”和“等排期”这样的解决方案,并不会真的提高我们的效率,只是避免冲突的无奈之举。 那针对流水线冒险的问题,我们有没有更高级或者更高效的解决方案呢?既不用简单花钱加硬件电路这样 “堆资源” ,也不是纯粹等待之前的任务完成这样 “等排期” 。 答案当然是有的。这一讲,我们就来看看计算机组成原理中,一个更加精巧的解决方案, 操作数前推 二、NOP操作和指令对齐 要想理解操作数前推技术,我们先来回顾一下,第5讲讲过的

实验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 中

米联客 ZYNQ/SOC精品教程 S02-CH08 定时器中断实验

纵然是瞬间 提交于 2019-11-28 21:49:31
软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛: www.osrc.cn 答疑解惑专栏开通,欢迎大家给我提问!! 8.1 概述 本课将中断对于实时系统是非常重要。本课简要介绍了ZYNQ的中断原理和中断类型,详细介绍了私有定时器,在ZYNQ的纯PS里实现私有定时器中断。每隔一秒钟中断一次,在中断函数里计数加1,通过串口打印输出。 8.2 中断原理 中断对于保证任务的实时性非常必要,ZYNQ中集成了中断控制器GIC(Generic Interrupt Controller).GIC可以接受I/O外设中断IOP和PL中断,将这些中断发给CPU。 中断体系结构框图图下: 8.2.1 软件中断(SGI) SGI通过写ICDSGIR寄存器产生SGI. 8.2.2 共享中断SPI 通过PS和PL内各种I/O和存储器控制器产生。 8.2.3 私有中断(PPI) 包含:全局定时器,私有看门狗定时器,私有定时器以及来自PL的FIQ/IRQ。本文主要介绍PPI,其它的请参考官方手册ug585_Zynq_7000_TRM.pdf。 ZYNQ每个CPU连接5个私有外设中断,所有中断的触发类型固定不变。并且来自PL的快速中断信号FIQ和中断信号IRQ反向。尽管在ICDICFR1寄存器内反应它们是低电平触发,但是PS

米联客 ZYNQ/SOC精品教程 S02-CH03 XADC 实验

╄→尐↘猪︶ㄣ 提交于 2019-11-28 17:34:18
软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛: www.osrc.cn 答疑解惑专栏开通,欢迎大家给我提问!! 3.1 概述 本课讲解了使用芯片内部XADC采集片上电压以及温度的方法。 Xilinx 7系列的ADC是一个双12位分辨率的而且每秒一兆(MSPS, 1 Mega sample per second)采样速率的模数转换器,是一种通用的、高精度的模数转换器,双通道的ADC支持单极和差分输入工作模式,其最多可支持17路外部模拟输入通道。 上图为XADC的一个内部实现框图,从图中可以看出ADC分为12位的A和B两个,故称为双12位。其中ADC A可以对供电电压进行采样,供电电压包括VCCINT、VCCAUX、VCCBRAM,其中Zynq-7000系列的芯片还支持对VCCPINT、VCCPAUX和VCCO_DDR的采样,还包括温度的采样和外部模拟输入的采样。ADC B只能对外部模拟输入进行采样转换。 XADC内部包括16位的控制寄存器和状态寄存器,控制寄存器可以通过DRP(DynamicReconfiguration Port)进行读写操作,从而实现对XADC的初始化配置,而状态寄存器只能进行读取,ADC将采样转换后的值保存在对应的状态寄存器,通过DRP便可以将其读出

认识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 的切换只有电子信号控制