【小黑嵌入式系统第四课】嵌入式系统硬件平台(二)——I/O设备、通信设备(UARTUSB蓝牙)、其他(电源时钟复位中断)
上一课:
【小黑嵌入式系统第三课】嵌入式系统硬件平台(一)——概述、总线、存储设备(RAM&ROM&FLASH)
文章目录
- 一、I/O设备
- 1. 定时器/计数器
- 2. ADC和DAC
- 3. 人机接口设备
- 3.1 键盘
- 3.2 LCD显示器
- 3.3 触摸屏
- 二、通信设备
- 1. 通用异步收发器(UART)
- (1) 数据通信模式
- (2) 标准串行通信电气接口
- (3) UART
- 功能
- 配置
- 应用
- 2. USB设备
- (1) USB总线概述
- (2) USB优点
- (3) USB总线的硬件结构
- (4) USB级联星形拓扑
- (5) USB总线的软件结构
- (6) USB总线的数据传输方式
- (7) USB设备即插即用的实现
- (8) USB 器件的选择
- 3. 蓝牙
- (1) 体系结构
- (2) BLE工作流程
- 角色
- 广播
- 扫描
- 连接
- 通信
- 断开
- 三、其他
- 1. 电源
- 2. 时钟
- 3. 复位
- 4. 中断
- (1) 中断机制概述
- **(2) 中断源**
- (3) 中断系统的功能
一、I/O设备
一个实用的嵌入式系统常常配有一定的外部设备,构成一个以微处理器为核心的计算机系统。
这些外部设备包括输入设备,如键盘、触摸屏等;输出设备,如显示器等;完成数据控制和转换的设备,如定时器/计数器、模/数转换器、数/模转换器等。
这些外部设备中,有的是集成为片上设备(称为片上外围),有的是片外单独实现。
- 定时器/计数器
- ADC和DAC
- 人机接口设备
1. 定时器/计数器
-
所有的嵌入式处理器都集成了定时器/计数器模块。
-
系统中至少有一个定时器,用作系统时钟。
-
定时器和计数器都是由带有保存当前值的寄存器和向当前寄存器值加1(或减1)的一个增量输入的加法器逻辑电路组成。或者说是一种能够累计输入脉冲的个数的数字电路。它由触发器构成,具有记忆功能,除了能够完成计数外,还能够用作分频和定时。
下降沿动作的异步二进制加法计数器:
三位加法计数器时序图:
定时器、计数器的区别:
- 定时器的计数装置是连到已知的周期性时钟信号上的,用来测量时间间隔;
- 计数器的计数装置是连到非周期性信号上的,用来计外部事件的发生次数。
因为同样的逻辑电路可以有这两种使用方式,所以该设备经常被称为“定时器/计数器”。
嵌入式处理器上的定时器/计数器具有的作用:
- 嵌入式操作系统的任务调度,特别是具有时间片轮转调度功能的操作系统必须使用定时器产生时间片。
- 嵌入式操作系统的软件时钟需要基于硬件定时器产生定时信号。
- 通信电路的波特率发生器。
- 实时时钟电路。
- 集成的片上A/D转换和D/A转换电路。
- 处理器监控电路,如看门狗等。
- 集成的液晶显示控制器用于液晶屏的刷新。
- 集成的动态存储器控制器用于动态存储器的刷新。
……
定时器的扩展——脉宽调制(PWM)器:
通过在定时器电路中增加比较器等额外电路,容易构成脉宽调制(PWM)器,用于输出一个频率和占空比可调的矩形波。典型地用于电机调速、LED亮度调节、简易数/模转换等等 。
定时器/计数器的扩展——捕获(Capture):
通过在定时器/计数器电路中增加锁存器等额外电路,容易实现捕获功能。此时向定时器提供已知频率的时钟,用户通过设置捕获的(硬件)触发条件,可在触发条件发生时刻将当前计数值锁存到捕获寄存器中。
捕获机制典型地用于硬件事件发生时刻的精确定时。可以避免“事件发生时刻→软件获取到计数值”这段时间的计时不准确性。
2. ADC和DAC
模/数(A/D)转换器和数/模(D/A)转换器是非数字(即模拟信号)设备和嵌入式系统之间联系的接口。
两者均需要一个参考电压,它决定了可数字化的最大模拟输入电压值(对于ADC)或者可转换输出的最大模拟电压值(对于DAC)。
D/A转换器的控制相对简单,输入数据值被连续转换成模拟输出信号。
R-2R电阻网络构造的4位DAC:
DAC关键技术指标:分辨率、建立时间/更新率、积分非线性INL、微分非线性DNL、无杂散动态范围SFDR。
(必须注意的是,并非分辨率、更新率越高,DAC性能就一定越好。其它技术指标在一些应用场合也许更关键)
A/D转换器将连续变化的模拟信号转换为数字信号,以便计算机和数字系统进行存储、处理。
A/D转换在将模拟输入转换为数字形式前需要对模拟输入进行采样,获取某一“点时刻”的模拟输入信号值,并在完成一次完整的转换期间保持该获取值稳定不变。这部分电路称为采样/保持电路。控制信号使得A/D转换器进行采样/保持并将其数字化。
典型的A/D转换器接口除了模拟输入外还有两个主要的数字接口。
- 一个数据端口允许A/D转换结果寄存器被读出;
- 一个控制信号通知什么时候开始下一次转换。
ADC主要类型:并行比较型Flash、逐次比较型SAR、Σ-Δ型、积分型、电压—频率型。
选用何种类型ADC应根据使用场合具体需求,分析转换速度、精度、价格、功能及接口条件等因素综合考虑。
ADC关键技术指标:分辨率、转换速率、积分非线性INL、微分非线性DNL、信噪失真比SINAD/有效位数ENOB。
(必须注意的是,并非分辨率、转换速率越高,ADC性能就一定越好。其它技术指标在一些应用场合也许更关键)
3. 人机接口设备
虽然人机接口在许多应用中不是必须的,但它们确实很常见。
为了使嵌入式系统具有友好的人机接口以方便使用,需要给嵌入式系统配置显示装置,如LED显示、LCD显示器或必要的音响提示等。
要进行人机交互,还需要有输入装置,如键盘、触摸屏等,使得用户能够对嵌入式控制器发出命令或输入必要的控制参数。
- 键盘
- LCD显示器
- 触摸屏
3.1 键盘
键盘是标准的输入设备,广泛用于嵌入式产品,如微波炉、传真机、复印机等。
- 键盘可以用来输入数字型数据或者选择控制设备的操作模式。
- 键盘的组成
- 一个开关阵列
- 一些逻辑电路,简化它与微处理器的接口
矩阵式键盘(按行扫描该行按键状态):
由于按键的触点是用机械方式通断的,故按键接通或者断开的操作并不能理想地一次性地完成,而是在经历一段较短时间(由接触不良所引起)的反复通断现象后,才变得稳定。
消除按键抖动影响(即在按键发生动作时仅产生一个边沿)的方法有多种,可用硬件也可用软件的方式,典型的一种方法是定时采样按键的电平状态,其采样间隔需大于按键抖动时长。
//Port 1 interrupt service routine
#pragma vector=PORT1 VECTOR
_interrupt void Port 1(void)
{
//Debounce
unsigned int Push Key = 0;Push Key = P1IFG&(~P1DIR); // Detect which button is pushed
delay_cycles(10000); //Delay to debounce
if ((Push_Key&P1IN) == 0) // Determine if it is Hi-low edge
{ //按下,则P1.3=0; 松开P1.3=1; 如果是高则为毛刺 P10UT ^= BIT6; //P1.6 = toggle
}P1IFG &= ~BIT3; // P1.3 IFG cleared}
3.2 LCD显示器
液晶显示(Liquid Crystal Display,LCD)是一种被动的显示,它不能发光,需在周围环境光下使用。
-
液晶显示器显示图案或字符时只需要很小的能量(但有背光源时背光耗电则很大)。因此,低功耗、小型化的LCD成为较佳的显示设备。
-
一般情况下,显示设备可以直接驱动,也可以通过帧缓冲区驱动。
3.3 触摸屏
触摸屏是覆盖在输出设备上的输入设备,用来记录触摸位置。把触摸屏覆盖在显示器上,使用者可以对显示的信息做出反应。
触摸屏按其工作原理不同分为电阻屏、电容屏、红外屏和表面声波屏等。
其中常用的触摸屏是电阻式触摸屏。电阻式触摸屏通过测量二维电压来探测触摸的位置。
二、通信设备
- 通用异步收发器(UART)
- USB设备
- 蓝牙设备
I2C、SPI、LIN、CAN、I2S、HDLC …
1. 通用异步收发器(UART)
通用异步收发器(Universal Asynchronous Receiver and Transmitter,UART)是典型地用于计算机与异步串行设备的接口。
- 数据通信模式
- 标准串行通信电气接口(描述的是电气特性)
- UART (描述的是逻辑方面的内容)
(1) 数据通信模式
数据通信是两台数字设备之间的数据传输。
数据通信方式可以分为:
- 单工和双工通信
- 串行和并行通信
- 同步和异步通信
各种通信方式的详情可以前往:
【物联网】总结SPI、I2C、UART三者的区别以及有关知识
(2) 标准串行通信电气接口
标准异步串行通信电气接口主要有以下几种:
- RS-232C
- RS-422
- RS-485
各种接口的详情可以前往:
【物联网】RS-232、RS-485和RS-422:串行通信标准详解
(3) UART
功能
- UART提供对RS-232C等数据终端设备的接口,提供以下功能:
- 将计算机外部传来的串行数据转换为字节,供计算机内部使用并行数据的器件使用;
- 将由计算机内部传过来的并行数据转换为输出的串行数据;
- 在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验;
- 在输出数据流中加入“起”、“止”标记,并从接收数据流中删除“起”、“止”标记;
- 处理计算机与外部串行设备的同步管理问题。
配置
- 对于CPU而言,可将一个UART视为包含若干个存储点及I/O端口。其它底层细节由硬件自动处理。
- UART一般包括一个或多个状态寄存器,用于验证数据发送和接收时的状态、进程。
- UART还可以通过一个或多个控制寄存器进行配置,配置内容包括波特率的设置、停止位数量的设置、奇偶校验的设置,以及在发送/接收完成时产生中断等。
- 异步通信过程在UART上几乎是透明地运作。为了收发数据,程序只需简单地对UART相关寄存器执行读写操作。
应用
- 比较流行的UART类型有NS16550型、AMD Z8530、ACIA、Motorola 6850、Zilog Z-80 STO等。
- 当UART用于嵌入式设计时,嵌入式系统就能够非常方便地利用通信终端、计算机甚至是其它嵌入式微处理器上的数据资源,或实现控制功能。
- 当前多数PC机已不再配备硬件实现的UART串口,但由于它是PC机与其它设备通信的最便捷方式,故经常采用USB转UART的方式,虚拟出一个UART串口。
UART可配合RS-232/422/485使用,较多地是配合RS-232使用,这时需要将 UART器件与某款RS-232收发器(如MAX232)连接。
UART的详情可以前往:
【物联网】一文读懂UART通信协议
2. USB设备
(1) USB总线概述
通用串行总线(Universal Serial Bus,USB)是1995年Intel、Microsoft、Compaq、IBM等公司联合制定的一种计算机外部串行通信标准。
USB自推出以来,得到各PC厂商、芯片制造商和PC外设厂商的广泛支持。已成功替代串口和并口,成为21世纪大量计算机和智能设备的标准扩展接口和必备接口之一,现已发展到USB 4.0版本(???)。
USB 具有传输速度快、使用方便、支持热插拔、连接灵活、独立供电等优点,可连接键盘、鼠标、大容量存储设备等多种外设,该接口也被广泛用于智能手机中。
通用串行总线是一种将USB外围设备连接到主机的外部总线结构,它通过PCI总线和PC的内部系统数据线连接,实现数据传送。
USB同时又是一种通信协议,它支持主机系统和USB外围设备之间的数据传送,通过一个4针的标准插头,采用菊花链形式把所有的外设连接起来。
(2) USB优点
- 支持热插拔(hot plug)和即插即用(Plug-and-Play)。
- 为所有的USB外设提供单一的、易于操作的标准连接类型,排除了外设对系统资源的需求。
- USB 1.1提供全速12Mb/s和低速1.5Mb/s的模式,USB 2.0提供高达-480Mb/s的设计传输速率。(USB 3.0 — 5Gb/s)
- USB提供了四种不同的数据传送类型。
- 易于扩展,理论上最多可支持127个设备。
(3) USB总线的硬件结构
- USB总线是基于令牌的总线,类似于令牌环网络。
- USB主控制器广播令牌,总线上的设备检测令牌中的地址是否与自身相符,通过接收或者发送数据来响应主机。
- USB通过支持悬挂/恢复操作来管理USB总线电源。
(4) USB级联星形拓扑
USB系统采用级联星形拓扑,由三个基本部分组成:
- 主机(Host)——也称为根或Root Hub,它做在主板上或作为适配卡安装在计算机上。主机通过主控制器和根集线器(Root Hub)与USB设备进行交互,控制着总线上的数据和控制信息的流动。
- 集线器(Hub)每个USB系统只能有一个根集线器,它连在主控制器上。集线器是USB结构中的特定成分,它提供端口能够将设备连接到USB总线上,同时检测连接在总线上的设备,并为这些设备提供电源管理、负责总线的故障检测和恢复。集线器可为总线提供能源,也可为自身提供能源(从外部得到电源)。
- 功能设备通过端口与总线连接,同时也可做Hub使用。
(5) USB总线的软件结构
每个USB系统仅有一个主机,在通信过程中占主导地位。
包括USB总线接口、USB设备层和功能层三层结构。
主机各层具有的功能包括:
- 检测连接和移去的USB设备
- 管理主机和USB设备间的数据流
- 连接USB状态和活动统计
- 控制主控制器和USB设备间的电气接口,包括限量能量供应
主机端:
- USB总线接口——USB总线接口处理电气层与协议层的互连,由主控制器实现。
- USB系统软件——USB系统包括三个基本组件,主控制器驱动程序(HCD)、USB驱动程序(USBD)和主机软件。
- USB客户软件——USB客户软件是软件结构的最高层,负责处理特定的USB设备驱动。
(6) USB总线的数据传输方式
数据和控制信号在主机和USB设备之间的交换存在两种通道:单向和双向。
USB的数据传送是在主机和某个USB设备的指定端点(Endpoint)之间进行的(端点0专门作为控制端点),这种主机和USB设备的端点间的联系称作管道(Pipe)。
对任何给定的设备进行设置时,一个管道上的数据传输只能支持下列四种USB数据传输方式中的一种,即同步(isochronous)、控制(control)、中断(interrupt)和批量(bulk),以支持各种不同用途的外设。
(7) USB设备即插即用的实现
USB设备可以实现热插拔。
当USB设备插入到主机中时,主机通过查询设备的描述符(Descriptor)来了解设备,进而建立通信,这个过程叫作对设备的枚举。
当一个USB设备插入到主机后,主机巡检到便通过控制端点开始询问设备的各种描述符。描述符中包含了设备端点号、设备类型和数据传输能力等信息,使得主机能够了解设备的详细情况。
(8) USB 器件的选择
首先要根据具体使用要求选择合适的USB 控制器。目前,市场上供应的USB控制器主要有两种:带USB接口的单片机(MCU)和纯粹的USB接口芯片。
-
带USB接口的单片机(MCU):USB接口的单片机从应用上可以分成两类,一类是从底层设计专用于USB 控制的单片机;另一类是增加了USB接口的普通单片机,如Cypress公司的EZ-USB(基于8051)。
-
纯粹的USB接口芯片:仅处理USB通信,必须有一个外部微处理器来进行协议处理和数据交换。典型产品有Philips公司的PDIUSBD11 (I2C 接口)、PDIUSBD12 (并行接口),NS公司的USBN9603/9604 (并行接口)等。
3. 蓝牙
蓝牙是一种近距离无线通信技术,运行在2.4GHz免费频段,目前已大量应用于各种移动终端、物联网、健康医疗、智能家居等行业。一般将蓝牙3.0之前的BR/EDR蓝牙称为传统蓝牙,蓝牙4.0以后的版本分为两种模式,单模蓝牙和双模蓝牙。
- 单模蓝牙,即低功耗蓝牙(BLE),是蓝牙4.0中的重点技术,低成本、低功耗、快连接、长距离。但不支持音频协议。BLE采用非常快速的连接方式,因此平时可以处于“非连接”状态(节省能源),此时链路两端相互间只是知晓对方,只有在必要时才开启链路,然后在尽可能短时间内关闭链路(每次最多传20字节)。
- 双模蓝牙,支持BLE的同时还兼容经典蓝牙。经典蓝牙的特点是大数据高速率,支持音频、数据两大类协议.
低功耗蓝牙瞄准多个市场,特别是移动智能终端、智能家居、互联设备等领域,主要特点包括: - 低功耗,使用纽扣电池就可以运行数月至数年。
- 快连接,毫秒级的连接速度,传统蓝牙甚至长达数分钟。
- 远距离,长达数百米的通信距离,而传统蓝牙通常10米左右。
- 低成本,是目前手机和智能硬件通信的性价比最高的手段。
蓝牙联盟沿用经典蓝牙的规范内容,为低功耗蓝牙定义了一些配置(Profile)。Profile理解为数据规范,只要遵守该规范,任意厂家的蓝牙设备,均可以相互连接与通信,例如无线蓝牙键盘鼠标,无论是安卓或是iOS还是Windows,均是即插即用。低功耗蓝牙支持的标准Profile有:
- HID,用于无线鼠标,键盘或其他遥控设备。
- BatteryServices,电池状态服务,用于告知电池电量状态。
- HRP,心率计Profile,用于心率采集。等等。
另外,低功耗蓝牙还可以自定义Profile。
(1) 体系结构
BLE协议栈一般是指芯片厂家,依据 Bluetooth SIG 发布的 Bluetooth Core Specification 核心协议实现的代码固件,并提供函数接口由芯片内部程序调用,实现BLE工作流程等相关功能。
常见的协议栈有TI公司的ble-stack和Nordic的SoftDevice。
- 控制器,是一个物理设备,负责编/解码数据包和发/收射频信号。
- 主机,是软件栈,包含了各种协议和配置,用于管理两个或更多设备互相通信。
- 应用,使用软件栈和控制器来实现某种特定功能。
(2) BLE工作流程
角色
BLE设备角色主要分为两种角色,主机(Master或Central)和从机(Peripheral),当主机和从机建立连接之后才能相互收发数据。
- 主机,主机可以发起对从机的扫描连接。如手机,常作为主机设备。
- 从机,从机只能广播并等待主机的连接。如智能手环。
另外还有观察者(Observer)和广播者(Broadcaster),这两种角色不常使用,但也十分有用,例如iBeacon,就可以使用广播者角色来做,只需要广播特定内容即可。
- 观察者,观察者角色监听空中的广播事件,和主机唯一的区别是不能发起连接,只能持续扫描从机。
- 广播者,广播者可以持续广播信息,和从机的唯一区别是不能被主机连接,只能广播数据。
蓝牙协议栈没有限制设备的角色范围,同一个BLE设备,可以作为主机,也可以作为从机,可称之为主从一体。好处是每个BLE设备都是对等的,可以发起连接,也可以被别人连接,更加实用。
广播
广播是指从机每经过一个时间间隔发送一次广播数据包,这个时间间隔称为广播间隔,这个动作叫做广播事件,只有当从机处于广播状态时,主机才能发现该从机。
在每个广播事件中,广播包会分别在37、38和39三个信道上依次
广播,如下图所示。
广播时间间隔的范围是从20ms到10.24s,广播间隔影响建立连接的时间。广播间隔越大,连接的时间越长。
另外BLE链路层会在两个广播事件之间添加一个0~ 10ms的随机延时,保证多个设备广播时,不会一直碰撞广播。也就是说,设置100ms的广播事件间隔,实际上两次广播事件的时间间隔可能是100~110ms之间的任意时间。
当主机收到从机广播的数据包后,它可以再发送获取更多数据包的请求,这个时候从机将广播扫描回应数据包。
扫描
扫描是主机监听从机广播数据包和发送扫描请求的过程,主机通过扫描,可以获取到从机的广播包以及扫描回应数据包,主机可以对已扫描到的从机设备发起连接请求,从而连接从机设备并通信。
扫描动作有两个比较重要的时间参数:扫描窗口和扫描间隔,如果扫描窗口等于扫描间隔,那么主机将一直处于扫描状态之中,持续监听从机广播包。
- 被动扫描,主机监听广播信道的数据,当接收到广播包时,协议栈将向上层(也就是应用层,用户可编程)传递广播包。
- 主动扫描,主动扫描除了完成被动扫描的动作外,还会向从机发送一个扫描请求,从机收到该请求时,会再次发送一个称作扫描回应的广播包。
连接
在BLE连接中,使用跳频方案,两个设备在特定时间、特定频道上彼此发送和接收数据。这些设备稍后在新的通道(协议栈的链路层处理通道切换)上通过这个约定的时间相遇。这次用于收发数据的相遇称为连接事件。如果没有要发送或接收的应用数据,则交换链路层数据来维护连接。
两个连接事件之间的时间跨度称为连接间隔,是以1.25ms为单位,范围从最小值7.5ms到最大值4.0s。
通信
通俗地说,将从机具有的数据或者属性特征,称之为Profile。
从机中添加Profile配置(定义和存储Profile),作为GATT的Server端。主机则作为GATT的Client端。
Profile包含一个或者多个Service(服务),每个Service又包含一个或者多个Characteristic(特征值)。主机可发现和获取从机的Service和Characteristic,然后与之通信。
每个服务和特征值都有自己的唯一标识UUID,标准UUID为128位,蓝牙协议栈中一般采用16位,即两个字节的UUID格式。
特征值是主从通信的最小单元,每个特值都有自己的属性 Property,属性的取值有:可读 Read、可写 Write 以及 通知 Notify 。
- 主机可主动向从机Write或Read数据
- 从机可主动向主机Notify通知数据
断开
主机或从机都可以发起断开连接请求,对方会收到该请求,然后断开连接恢复连接前的状态。
三、其他
1. 电源
大多数嵌入式系统本身都有电源,且电源的供电具有一种特定的电压范围。
某些系统本身不具有供电子系统,它们使用外部电源或者从信号线来取电。
开关电源:
开关电源不同于线性电源,开关电源利用的切换晶体管多半是在全开模式(饱和区)及全闭模式(截止区)之间切换,这两个模式都有低耗散,切换之间的转换会有较高的耗散,但时间很短。理想上,开关电源本身是不会消耗电能的,开关电源的高转换效率是其一大优点。 电压稳压则是透过调整晶体管导通及断路的时间来达到。
要求高效率、小体积重量时,开关电源比线性电源要好。但开关电源较复杂,内部晶体管切换频繁,若切换电流未加处理,产生的噪声及电磁干扰可能会影响其它设备。且若无特别设计,功率因数不高。
- 现代开关电源有两种:直流开关电源、交流开关电源。
- 直流开关电源的核心是DC/DC转换器,按输入与输出之间是否有电气隔离可以分为两类:隔离式DC/DC转换器、非隔离式DC/DC转换器。
- 非隔离式DC/DC转换器,按有源功率器件的个数,可以分为单管、双管和四管三类。单管DC/DC转换器共有六种:降压式(Buck)、升压式(Boost)、升压降压式(Buck Boost)、Cuk、Zeta和SEPIC。
- 隔离式DC/DC转换器在实现输出与输入电气隔离时,常采用变压器。
2. 时钟
在嵌入式系统中,处理器需要有一个时钟振荡(clock oscillator)电路。时钟控制着CPU、以及其它同步外设。
嵌入式系统通常把时钟发生电路尽可能地集成在嵌入式处理器上,外面只需要接石英晶体和补偿电容即可。
高性能的嵌入式处理器功能强大,芯片上集成了众多的功能部件,很多都需要各自不同频率的时钟源。这样的处理器会设计多时钟源,分别为CPU内核、实时时钟电路、不同的I/O电路提供时钟信号。
嵌入式系统的时钟电路一般有以下几种形式:RC振荡器、石英晶体振荡器、外部时钟输入、锁相倍频时钟。
3. 复位
复位是指使器件进入到一个确定的初始状态,并且使处理器从起始地址开始执行指令。
这个起始地址是处理器程序计数器(PC)加电时的默认设置。处理器复位之后,从存储器的这个地址开始取程序指令。
通常外部施加的复位信号有效一定时间后便可处于无效状态。由处理器内部电路保持复位处于有效状态,初始化完毕后退出复位状态,从而使程序从默认的起始地址开始执行。
常用的复位电路有:阻容复位电路、专用复位电路、手动复位电路、看门狗定时器超时复位及软件复位。
看门狗定时器是一种特殊用途的定时器,内部结构同一般定时器。当定时器计数值到达所设定的时长时,将引起处理器复位。为使之不产生复位,需及时喂狗(重装计数值初值)以避免其到达计时时长。
看门狗定时器是一种监控软件异常的机制。在应用时,软件应在合适的位置加入及时喂狗代码,以使得程序正常运行时不会产生看门狗复位,但在程序执行异常时由于不满足及时喂狗条件而产生看门狗复位,用复位的方式让系统重新回到一个确定的状态中。
若系统中有多个设备需要复位,这时不仅要保证每个设备各自的复位时长要求,而且需注意设备间的复位时序。
4. 中断
(1) 中断机制概述
问题的提出:
有一类事件,它们一定会发生,但又无法预测什么时候发生,比如说火灾等故障事件、键盘有按键按下、通信接口有数据发来等突发事件。此时可以采取以下两种方式进行处理:
- 定时查询方式,定期检测是否有事件发生。这将消耗大量的CPU时间来完成查询工作,从而降低CPU的工作效率。
- 中断方式,当突发事件发生时提出请求,CPU可以暂时停止当前正在处理的程序,转去处理突发事件,如故障处理、按键字符数据的接收、通信接口数据的接收,等处理这些事务的程序执行完毕后,再回到原先程序被打断的地方去继续执行后续程序。
应注意,这个运作流程是由中断系统硬件来实现的,用户程序仅仅是配置中断及编写中断服务程序 。中断服务程序并不能由用户调用。中断请求一般允许用户程序发起。
中断包括三个过程:
- 请求过程:中断控制器检测到中断事件发生时,向CPU提出中断请求,同时提供给CPU该中断事件对应的中断矢量 。
- 响应过程:CPU在合适的时候向中断控制器返回响应告知将进入中断处理。 CPU执行完当前指令,保存下一条本应执行的指令的地址(断点)至栈中,转入中断矢量处执行中断服务程序。
- 服务过程:执行请求事件的服务程序。结束时向中断控制器返回响应告知将退出中断,从栈中取出之前保存的指令地址,CPU转到该指令地址处执行(即在原被中断的程序位置之后继续执行)。
中断的基本概念:
-
中断源:引发中断的事件称为中断源。
-
中断断点(地址):CPU转入中断服务程序前,原来程序将被暂停,暂停点为将执行但没被执行的下一条指令的地址。
-
中断服务程序:为中断事件服务的程序段称为中断服务程序。因此由不同中断源引发的中断需要转到各自对应的中断服务程序来执行。
-
中断向量/中断矢量:中断服务程序的入口地址。
-
中断服务程序与子程序区别:子程序由某个指令调用,而跳入子程序模块执行,因此,它的调用是由程序设定的。中断服务程序由某个事件的发生而引发,它是随机和不确定的,由硬件自动控制CPU转入,而不由用户主动调用。
使用中断的优点:
- 同步操作
- 实现实时处理
- 故障处理
(2) 中断源
引起中断的原因,或者能够发出中断申请的来源,称为中断源。
分类:
- 硬件和软件相关的中断源
- 软件错误相关的硬件中断
- 实时时钟
- 为调试程序而设置的中断源
(3) 中断系统的功能
为了实现各种中断请求,中断系统应具有以下功能:
- 实现中断及返回
- 能够实现优先级排队
- 高级中断源能够中断低级的中断处理
相关文章:

【小黑嵌入式系统第四课】嵌入式系统硬件平台(二)——I/O设备、通信设备(UARTUSB蓝牙)、其他(电源时钟复位中断)
上一课: 【小黑嵌入式系统第三课】嵌入式系统硬件平台(一)——概述、总线、存储设备(RAM&ROM&FLASH) 文章目录 一、I/O设备1. 定时器/计数器2. ADC和DAC3. 人机接口设备3.1 键盘3.2 LCD显示器3.3 触摸屏 二、通信设备1. 通…...

报错:AttributeError: module ‘tensorflow‘ has no attribute ‘flags‘
改成如下: 报错原因:tensorflow1.x与2.x版本问题不兼容...

Android--Retrofit2执行多个请求任务并行,任务结束后执行统一输出结果
场景:后端上传文件接口只支持单个文件上传,而业务需求一次性上传多个图片,因此需要多个上传任务并发进行,拿到所有的返回结果后,才能进行下一个流程。 1、使用Java并发工具 private List<Response<JSONObject>…...

面试算法30:插入、删除和随机访问都是O(1)的容器
题目 设计一个数据结构,使如下3个操作的时间复杂度都是O(1)。 insert(value):如果数据集中不包含一个数值,则把它添加到数据集中。remove(value):如果数据集…...

Qt/C++开源作品45-CPU内存显示控件/和任务管理器一致
一、前言 在很多软件上,会在某个部位显示一个部件,专门显示当前的CPU使用率以及内存占用,方便用户判断当前程序或者当前环境中是否还有剩余的CPU和内存留给程序使用,在不用打开任务管理器或者资源查看器的时候直接得知当前系统的…...

win32汇编-使用子程序
当程序中相同功能的一段代码用得比较频繁时,可以将它分离出来写成一个子程序,在主程序中用call指令来调用它。这样可以不用重复写相同的代码, 仅仅用call指令就可以完成多次同样的工作了。Win 32汇编中的子程序也采用堆栈来传递参数ÿ…...

【论文阅读】 Cola-Dif; An explainable task-specific synthesis network
文章目录 CoLa-Diff: Conditional Latent Diffusion Model for Multi-modal MRI SynthesisAn Explainable Deep Framework: Towards Task-Specific Fusion for Multi-to-One MRI Synthesis CoLa-Diff: Conditional Latent Diffusion Model for Multi-modal MRI Synthesis 论文…...

ShareMouse for Mac(多台电脑鼠标键盘共享软件)
ShareMouse mac版是一款Mac平台上可以在多台电脑间共享鼠标的工具软件,sharemousefor Mac支持 Windows 与 Mac,并可以在不同电脑间共享剪贴板。只需要移动鼠标指针的到想控制的显示器那里去、鼠标光标就会神奇地“跨越”到邻近的电脑屏幕上。每个计算机都…...

中文编程开发语言工具开发案例:多种称重方式编程实际例子
中文编程开发语言工具开发案例:多种称重方式编程实际例子 上图为 计价秤,使用串口通讯线连接电脑的主机,软件自动读取称的重量,自动计算金额。这种方式称重快速,不需再打印条码。 上图这个称重方式为 一体称称重&#…...

国密sm2的Vue、Python、Java互通使用
目录 一、Vue 二、Python 三、Java 一、Vue # npm install --save sm-cryptoimport {sm2} from sm-crypto const cipherMode 1 const private_key d9d37f4f46e8514c6f9398a984e74f3eead994e8f4ac5f92e5deb313cb5ad6a6 const public_key 04 e332ee43ac37be458550652fb9…...

如何通过SK集成chatGPT实现DotNet项目工程化?
智能助手服务 以下案例将讲解如何实现天气插件 当前文档对应src/assistant/Chat.SemanticServer项目 首先我们介绍一下Chat.SemanticServer的技术架构 SemanticKernel 是什么? Semantic Kernel是一个SDK,它将OpenAI、Azure OpenAI和Hugging Face等大…...

DRM中render-node编号的分配
DRM系统 DRM是direct rendering manager的简称。DRM是linux kernel中与负责video cards功能的GPU打交道的子系统。DRM给出了一组API,可以供用户程序来发送命令和数据给GPU设备从而来控制比如display、render等功能。 render-node由来 在以前,DRM子系统…...

将输入对象转换为数组数组的维度大于等于1numpy.atleast_1d()
【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将输入对象转换为数组 数组的维度大于等于1 numpy.atleast_1d() 选择题 使用numpy.atleast_1d()函数,下列正确的是? import numpy as np a1 1 a2 ((1,2,3),(4,5,6)) print("…...

js 删除树状图无用数据,如果子级没有数据则删除
有一个需求,当你从后端拿到一个树状图的时候,有些子级没数据,这时就需要我们处理一下数据,当然了,如果第一层底下的第二层没数据,第二层底下的所有都没数据,那这一层都不需要。 我的写法&#x…...

Docker 容器化(初学者的分享)
目录 一、什么是docker 二、docker的缺陷 三、简单的操作 一、首先配置一台虚拟机 二、安装Docker-CE 一、安装utils 二、 将 Docker 的软件源添加到 CentOS 的 yum 仓库中。这样可以通过 yum 命令来安装、更新和管理 Docker 相关的软件包。 三、将 download.docker.co…...

LCS 01.下载插件
题目来源: leetcode题目,网址:写文章-CSDN创作中心 解题思路: 假设需要 n 分钟下载插件,前 n-1 分钟将带宽加倍,最后一分钟下载时总时间最少。 解题代码: class Solution { public:int l…...

架构-设计原则
1、面向对象的SOLID 1.1 概述 SOLID是5个设计原则开头字母的缩写,其本身就有“稳定的”的意思,寓意是“遵从SOLID原则可以建立稳定、灵活、健壮的系统”。5个原则分别如下: Single Responsibility Principle(SRP)&am…...

在 Python 3 中释放 LightGBM 的力量:您的机器学习大师之路
机器学习是 Python 占据主导地位的领域,它一直在给全球各行各业带来革命性的变化。要在这个不断变化的环境中脱颖而出,掌握正确的工具是关键。LightGBM 就是这样一个工具,它是一个强大且快速的梯度提升框架。在这份综合指南中,我们将通过实际示例和示例数据集从基础知识到高…...

Spring学习笔记(2)
Spring学习笔记(2) 一、Spring配置非定义Bean1.1 DruidDataSource1.2、Connection1.3、Date1.4、SqlSessionFactory 二、Bean实例化的基本流程2.1 BeanDefinition2.2 单例池和流程总结 三、Spring的bean工厂后处理器3.1 bean工厂后处理器入门3.2、注册Be…...

cmd使用ssh连接Linux脚本
前言 在开发过程中,由于MobaXterm,我不知道怎么分页(不是屏内分页),用crtlTab,用起来不习惯,主要是MobaXterm连接了多个服务器,切换起来很麻烦。我是比较习惯使用altTab,…...

Python万圣节蝙蝠
目录 系列文章 前言 蝙蝠 程序设计 程序分析 运行结果 尾声 系列文章 序号文章目录直达链接1浪漫520表白代码https://want595.blog.csdn.net/article/details/1306668812满屏表白代码https://want595.blog.csdn.net/article/details/1297945183跳动的爱心https://want5…...

TCP流套接字编程
文章目录 前言TCP 和 UDP 的特点对比TcpEchoServer 服务端实现1. 创建 ServerSocket 类实现通信双方建立连接2. 取出建立的连接实现双方通信3. 服务端业务逻辑实现关闭资源服务端整体代码 TcpEchoClient 客户端实现1. 创建出 Socket 对象来与服务端实现通信2. 实现客户端的主要…...

Python迭代器创建与使用:从入门到精通
一、可迭代对象 1、 什么是可迭代对象? 表示可以逐一迭代或者遍历的对象,序列:列表、元组、集合、字符串。非序列:字典、文件。自定义对象:实现了__iter__()方法的对象;实现了使用整数索引的 getitem()方…...

mac虚拟机安装homebrew时的问题
安装了mac虚拟机,结果在需要通过“brew install svn”安装svn时,才注意到没有下载安装homebrew。 于是便想着先安装homebrew,网上查的教程大多是通过类似以下命令 “ruby <(curl -fsSkL raw.github.com/mxcl/homebrew/go)” 但是都会出现…...

学信息系统项目管理师第4版系列32_信息技术发展
1. 大型信息系统 1.1. 大型信息系统是指以信息技术和通信技术为支撑,规模庞大,分布广阔,采用多级 网络结构,跨越多个安全域;处理海量的,复杂且形式多样的数据,提供多种类型应用 的大系统 1.1.…...

Vue3 + Nodejs 实战 ,文件上传项目--大文件分片上传+断点续传
目录 1.大文件上传的场景 2.前端实现 2.1 对文件进行分片 2.2 生成hash值(唯一标识) 2.3 发送上传文件请求 3.后端实现 3.1 接收分片数据临时存储 3.2 合并分片 4.完成段点续传 4.1修改后端 4.2 修改前端 5.测试 博客主页:専心_前端…...

宏(预编译)详解
目录 一、程序的编译环境 二、运行环境 三、预编译详解 3.1预定义符号 3.2.1 #define 定义标识符 3.2.2 #define 定义宏 3.2.3#define替换规则 3.2.4 #和## 2)##的作用: 3.2.5宏和函数的对比 3.2.6宏的命名约定和#undef指令 一、命名约定: …...

hue实现对hiveserver2 的负载均衡
如果你使用的是CDH集群那就很是方便的 在Cloudera Manager中,进入HDFS Service 进入Instances标签页面,点击Add Role Instances按钮,如下图所示 点击Continue按钮,如下图所示 返回Instances页面,选择HttpFS角色…...

SkyWalking 告警规则配置说明
Skywalking告警功能是在6.x版本新增的,其核心由一组规则驱动,这些规则定义在config/alarm-settings.yml 文件中。告警规则定义分为两部分: 1、告警规则:它们定义了应该如何触发度量警报,应该考虑什么条件 2、webhook(网络钩子):定义当告警触发时,哪些服务终端需要被…...

HTML 表单笔记/练习
表单 概述 表单用于收集用户信息,用户填写表单提交到服务器 一般传参方式: GETPOSTCookie 传参要素 传参方式 GETPOST 参数的名字目标页面内容的数据类型(只有在上传文件的时候) 提示信息 一个表单中通常还包含一些说明性的文…...