输入输出:polling与中断
- 格式:pdf
- 大小:186.78 KB
- 文档页数:30


什么是流?
流是一个通用的,灵活的,可编程的Unix系统通讯服务的模块。流为内核与Unix系统的其他部分定义字符输入输出的标准接口。其机制由一组系统调用,内核资源和内核方法组成。
Stream允许你创建一个模块用来提供标准数据通讯服务,并且工作在这个流上。
一个流在用户空间和内核流驱动乊间迚行全双工数据传输。一个流由3个部分组成:流头,模块,驱动。
流的定义
大写的STREAMS指的是stream可编程模块和工具。小写的stream指的是一个在用户应用程序和驱动乊间的一个全双工的实例。
流是一个数据的传输途径
一个流是一个内核的流驱动和用户程序乊间的双向的传输路径。一个应用程序打开一个流设备就能创建一个流。
流头:
流头是流里最接近用户空间的。它是流和用户空间的接口。当第一次打开流设备时,流只有流头和流驱动组成(这时没有模块)。
流模块:
一个流模块是一组定义了内核级的方法和数据结构。一个模块以黑箱的方式处理传入的数据。例如一个模块转换小写的字符为大写的字符,或者加上网络路由信息等。流模块是被用户应用程序动态的“压”到流里的。模块及其操作参照第10章。 流设备驱动:
一个流设备驱动是一个实现了流接口的字符设备驱动。流设备驱动在流头和一些模块的下面。它能够在操作外部设备或内部软驱动。驱动在内核和设备乊间传送数据。驱动和内核乊间的调用Solaris DDI/DKI接口。驱动和内核其他部分的关系在Write Device Dirvers里有解释。这被驱动的细节参见第9章。
流数据:
数据在流里是以消息的栺式传输。每个流头,流模块,流驱动都有一个读端和一个写端。当消息从一个模块的读端到下一个模块的读端,这种方式被叫做向上流。消息从一个模块的写端到另一个模块的写端,被称为向下流。内核级的消息操作在“消息组件”章节讨论。
消息队列:
每个流头,模块和驱动都有属于它们自己的一对队列。一个是读队列,一个是写队列。消息在队列中按FIFO的方式有序传输。内核级的队列细节在“消息队列的结构”章节描述。
嵌入式软件抗干扰编程方法
微控制器越来越多地用于各种电子领域,例如自动化、工业控制中。随着金属氧化物半导体的硅晶体管几何尺寸的不断缩小,系统设计中的电磁兼容性(EMC)问题,成为采胳膊小尺寸器件进行设计的必须考虑的主要问题。
在嵌入式微控制器内部,对于内部产生的电磁发射,采用软件措施的效果并不明显。因为发射主要是由CPU中的内部时钟和噪声引起,而且高速开关电流是由微控制器中的多种不同的门所形成。如果芯片版图设计时没有考虑电磁兼容性,那么外部的PCB(印制电路板)将会大大增强那些不必要的噪声信号。所以在很多设计中,采用软件很难消除这种固有的电子发射影响。
但是,在控制器应用中,却可采用软件的方式来抑制外来干扰。本文给出了一些常用设计技巧和应用。
一、内嵌抗干扰软件
在很多的应用中,用简单的抗干扰设计,就可以将一个微控制器的干扰抑制效果大大提高。这种抗干扰设计的魅力就在于实现该设计的费用较低,还可以节省PCB板上硬件成本。抗干扰设计的常用技巧如下:
1.刷新端口引脚(Refreshing port pins):抗干扰软件最简单的一个例子就是可以不断地更新I/O端口和一些重要的寄存器。在大多数微控制器的应用中,软件将会执行一个有规律的主循环。由于微控制器的I/O端口通常靠近连接焊点(bond pads),而这些焊点通常是位于芯片的边沿。当一个确定振幅的噪声施加到微控制器时,噪声将会从芯片的边沿向内传入硅晶体中。这意味着芯片边沿的逻辑电路最容易被外部噪声源破坏,输入/输出电路就属于这种类型。因此有规律的更新数据寄存器和数据说明寄存器,就可以把这种故障的威胁降低。
2.检测输入脚(Polling inputs):另一个方法就是采用多次读输入脚数据,且取平均值作为该脚的正确数据方式。其典型的应用就是用软件每隔10ms读一次键盘,以保证真实的键入发生。这种表决式做法被称作反弹跳保护。作为一种高频率检测某个端脚的Motorola HC05代码的实例如图1所示。
单片机原理及接口技术
实验指导书
周云龙 编写
盐城工学院电气工程学院
二○一五年四月
实验一 KEIL集成开发环境应用实验
一、实验目的
1.掌握C51开发环境keil软件项目创建方法
2、汇编程序编写
2.C51程序编写
3、主函数、自定义函数和中断函数编写
二、实验备件
PC和单片机IDE集成开发软件
三、实验要求
1、建立一个汇编程序工程
2、汇编工程调试
3、建立一个C语言程序工程
4、C语言工程调试
实验二 Proteus单片机系统仿真实验
一、实验目的
1.掌握Proteus 界面功能
2、原理图绘制方法
2.住址仿真调试
3、Proteus与Keil联调
二、实验备件
PC、单片机IDE集成开发软件和Proteus仿真软件
三、实验步骤
1、学习Proteus软件
2、绘制教材中第150页上图5-7
3、Keil与Proteus联调
实验三 单片机最小系统的熟悉
一、实验目的
在进行其他硬件实验之前,先熟悉实验装置的核心模块——单片机最小系统模块。掌握该实验模块的电路原理和接口的使用方法。
1.掌握单片机振荡器时钟电路及CPU工作时序;掌握复位状态及复位电路设计;掌握单片机各引脚功能及通用I/O口的使用;掌握单片机基本指令的使用。
2.掌握uVision3 IDE集成开发环境,Proteus仿真软件和STC单片机下载软件ISP的使用。
3.将仿真现象和实验结果进行对比,体会仿真软件的用处。
二、实验设备
1.51仿真器或者串口线
2.单片机系统板
三、实验要求
1.连接实验电路,编写简易单片机汇编程序达到下述工作要求: P3.3口做输入口,外接一脉冲,每输入一个脉冲,P1口按十六进制加一输出,编写程序使P1口接的8个发光二极管L0—L7按16进制加一的方式点亮发光二极管。
2.将编写的程序经过编译后在uVision3 IDE软件中生成*.hex机器语言,通过ISP将*.hex下载到单片机芯片中,观察实验现象。
1
EXTI-按键
EXTI (External interrupt) 就是指外部中断,通过GPIO检测输入脉冲,引起中断事件,打断原来的代码执行流程,进入到中断服务函数中进行处理,处理完后,再返回到中断之前的代码中执行。
STM32的所有GPIO都可以用作外部中断源的输入端,利用这个特性,我们可以把按键轮询检测改为由中断来处理,大大提高软件执行的效率。
#.1. STM32的中断和异常
Cortex内核具有强大的异常响应系统,它把能够打断当前代码执行流程的事件分为异常(exception)和中断(interrupt),并把它们用一个表管理起来,编号为0~15的称为内核异常,而16以上的则称为外部中断(外,相对内核而言),这个表就称为中断向量表。
而STM32对这个表重新进行了编排,把编号从-3至6的中断向量定义为系统异常,编号为负的内核异常不能被设置优先级,如复位(Reset)、不可屏蔽中断 (NMI)、硬错误(Hardfault)。从编号7开始的为外部中断,这些中断的优先级都是可以自行设置的。
详细的STM32中断向量表可以从《STM32中文参考手册》找到,但一般是从启动文件startup_stm32f10x_hd.s中查找的,因为不同型号的STM32芯片,中断向量表稍微有点区别,在启动文件中,已经有相应芯片可用的全部中断向量。而且在编写中断服务函数时,需要从启动文件中定义的中断向量表查找中断服务函数名。
#.2. NVIC中断控制器
STM32的中断如此之多,配置起来并不容易,因此,我们需要一个强大而方便的中断控制器NVIC
(Nested Vectored Interrupt Controller)。NVIC是属于Cortex内核的器件,不可屏蔽中断 (NMI)和外部中断都由它来处理,而SYSTICK不是由NVIC来控制的。
#.2.1. NVIC结构体成员
当我们要使用NVIC来配置中断时,自然想到ST库肯定也已经把它封装成库函数了。查找库帮助文档,发现在Modules->STM32F10x_StdPeriph_Driver->misc 查找到一个NVIC_Init() 函数,对NVIC初始化,首先要定义并填充一个NVIC_InitTypeDef 类型的结构体。