目前,在众多应用领域中,出现了许多所谓“智能仪表”和“智能仪器”,这些系统大多是以单片机为核心的计算机应用系统。在众多的单片机中,intel公司的8xc196mc/md可谓其中的佼佼者。它是16位单片机中功能最强大的单片机之一,几乎可以胜任各种测控工作,尤其在电机控制中备受青睐。然而由于8x196mc/md单片机没有提供硬件的通用异步收发器(uart),这给用惯了uart的用户带来了一些不便。但利用专门的pts模式,不仅可以实现串行通信,而且操作更加灵活,效率更高,cpu的开销也更小;既可以实现异步(asio)功能,也可以实现同步(ssio)功能;波特率由epa建立,包括校验位和停止位在内,收发数据格式可达16位/字符。
1 epa和pts概述
1.1 epa及其工作原理
epa(event processor array,事件处理器阵列),类似于hsio,用来处理与时间有关的输入和输出事件,但比其更灵活、更高效。在epa中,主要提供两类模块--捕获/比较模块和独立的比较模块,用于实现捕获和比较两种功能。每个模块都与指定的一个输入/输出引脚相关联,支持其高速输入输出功能,所有模块都能产生中断。“捕获”用来捕获产生于引脚上的跳变事件,包括正跳变、负跳变和正负跳变,并记录这些事件发生的时刻;“比较”是和预定的时间作比较,时间一到即执行以下选定的输出功能:复位定时器,启动一次a/d转换,为波形发生器产生一个重装载触发信号,改变输出引脚状态等。
1.2 pts及其工作原理
pts(peripheral transaction server,外设事务服务器),是一种特殊的中断响应方式。与普通中断响应相比,pts响应把同一个中断映射到相应的pts通道。该通道产生一个pts周期,它就像dma周期那样插入到正常指令流中,不需要额外的软件开销,因此其cpu开销要比一般的中断响应少得多。pts有一个pts向量表,其排列次序和优先级顺序与普通中断向量相同,但去掉了nmi、非法操作码和软件陷阱3种中断。除了nmi之外,所有的pts通道的优先级高于任何一个普通中断。每个pts向量都指向一个pts控制块(ptscb),控制块说明了应执行的微代码。它必须驻留在内部ram空间内,每个控制块包含8个字节,其首址应能被8除尽。
8xc196mc/md有4种pts工作方式,要实现串行通信需使用其sio(串行输入/输出)方式。其中sio有两种方式:asio(异步串行i/o)和ssio(同步串行i/o)。要工作于某一方式必须建立相应的控制块(ptscb)。与sio方式相对应的控制块有两个,如图1所示。此处只对baud和samptime加以说明。
baud(lo和hi):存放控制sio运行波特率的16位数据。异步方式下,由下式计算:fxtal/(4×波特率×epa预置值)。其中:fxtal为xtal1脚的输入频率,单位为hz。
samptime:只用于异步接收多数采样方式,用来指定采样时间间隔,由下式计算:fxtal×tsam/2-9。其中,tsam为采样间隔时间(μs);fxtal同上,但单位为mhz。
2 利用epa和pts实现串行通信
2.1 基本思想
利用epa和pts实现串行通信的基本思想是:首先,选择一个epa捕获/比较模块作为串行通信的接收模块,选择一个独立比较模块(或选择一个捕获/比较模块而只利用其比较方式)作为串行通信的发送模块,构成串行通信的硬件端口。然后,对所选的epa模块开辟相应的pts通道,根据通信要求编写发送和接收pts模块。epa和pts两者联合工作共同实现串行通信。
2.2 应用实例及具体实现
下面以常用的异步串行通信方式为例介绍具体的实现原理和方法。本例用一个epa捕获/比较模块capcomp0产生移位时钟,p2.o作发送端(txd),波特率为9 600 bps,8位数据位,无校验位,1位停止位,用定时器1作时基,16mhz晶振。由于篇幅所限,仅介绍异步串行发送。
2.2.1 建立并定位控制块
要利用pts实现串行通信,必须首先定义相应的控制块,并将其定位于能被8整除的首地址处;还要将控制块地址赋给pts向量。具体实现代码如下:
2.2.2 发送初始化及pts中断子程序
在发送时,要用到epa中的一个比较模块,或者使用一个捕获/比较模块而使其工作于比较方式下,主要用作发送时产生移位时钟,以保证指定的位周期。其具体过程如下:首先,在指定的发送引脚上产生一个下降沿(为确保产生下降沿,应先对该引脚置1),并根据指定的波特率对epa比较模块的时间寄存器(capcompx_time或compx_time)置值,以指定发送的位周期。然后,打开中断和pts功能,启动数据发送过程;以后每隔一个位周期便会产生一个pts周期,在每个pts周期中,将data寄存器中的数据逐位移到指定的发送脚上,直到最后一位移出后,产生一次end_of_pts中断,该帧数据发送完毕。每帧数据的位数在控制块的ptscount中指定。如果需要继续发送数据,就要在中断服务程序中对ptscb、epa时间寄存器和相应引脚重新初始化,再次启动发送过程。发送数据保存在transmit数组中,发送帧数,即数据个数由t_count控制。具体实现代码如下:
结语
该方法和实例已在实际应用中得到验证。实践证明其完全可以满足串行通信的需要,而且效率更高,更加灵活。
鱼与熊掌不可兼得也 索尼A9的高速性是以牺牲动态范围为代价
OPPO全球最快最安全手机充电技术——VOOC技术原理
stm32f103zet6串口数基本配置详细说明
BUCK电路元件的过流值该如何正确选择?
感谢石油工业防腐保温产品质量监督检验中心对我司的认可
基于EPA和PTS实现串行通信的设计与应用
电脑电源的工作原理是怎么样的
Adapter基础讲解
珠海联通联合华为率先部署了首个面向商用的1.7m一体化A+P基站设备
基于机器学习实现商家和银行交易对账结算
在智能手机等小型电子设备中的使用事例
工业现场数据管理 | 为什么要有工业现场数据管理
氢燃料电池汽车
10 天加速 82 倍!西湖大学 GPU Hackathon 加速科研 HPC+AI 应用
澳大利亚正在进一步强化国内比特币的反洗钱法规
人工智能技术的个性化:Gomer人性化
vr体验馆投资大概多少钱?加盟元宇宙虚拟现实新赛道?
调频和调幅的基本概念
多个创新方向孕育PCB成长新机
英创信息技术eGalax触摸屏在Linux/X11下的标定方法