ARM7串口9位方式多机遇信的编程技术

发布者:脑电风暴最新更新时间:2011-06-21 关键字:ARM7  多机遇信  编程技术 手机看文章 扫描二维码
随时随地手机看文章
1 主从式多机通信
   
所谓主从式多机系统,即在数个ARM(或单片机)中,有一个是主机,其余的为从机。从机要服从主机的调度、支配,其拓扑结构如图1所示。

    主机信息可以发到各个从机,从机发送的信息只能被主机接收,从机之间不进行通信。
    51单片机串口不同寻常的特征是包括第9位方式(在串口模式2和模式3下)。它允许把在串行口通信增加的第9位用于标志特殊字节的接收。一般约定第9位为高时表示该字节为地址字节,第9位为低时为数据字节。第9位方式允许接收单片机信息,仅当字节具有一个第9位时才能被中断。用这种方式,主机首先广播1字节,并让其第9位为高,同时收到该字节的各个从机,只有地址相符的打开,以接收后面的数据字节。所接续的数据字节(第9位为低)不能引起其他从机中断,因为未送它们的地址。
    51单片机用9位方式多机通信时,串口模式必须在方式2或方式3。
    其实现多机通信的原理和工作过程如下:作主机的8051的SM2应设定为O,作从机的sM2设定为1。主机发送并被从机接收的信息有两类:一类是地址,用于指示需要和主机通信的从机地址,由串行数据第9位为“1”来标志;另一类是数据,由串行数据第9位为“0”来标志。由于所有从机的SM2=1,故每个从机总能在R1=O收到主机发来的地址(因为串行数据的第9位为“l”),并进入各自的中断服务程序。在中断服务程序中,每台从机把接收到的从机地址和它的本机地址(系统设计时所分配)进行比较。所有比较不相等的从机均从各自的中断服务程序中退出(SM2仍为1),只有比较成功的从机才足被主机寻址通信的从机。被寻址的从机在程序中使SM2=0,以便接收随之而来的数据或命令(RB8=0)。上述过程进一步归结如下:
    ①主机的SM2为O,所有从机的SM2=1,以便接收主机发来的地址。
    ②主机给从机发送地址时,第9数据位应设置l,以指示从机接收这个地址。
    ③所有从机在SM2=1、RB8=1和RI=O时,接收主机发来的从机地址,进入相应中断服务程序,并与本机地址相比较,以便确认是否为被寻址从机。
    ④被寻址从机通过指令清除SM2,以便正常接收数据,并向主机发回接收到的从机地址,供主机核对。未被寻址的从机保持SM2=1,并退出各自中断服务程序。
    ⑤完成主机和被寻址之间的数据通信,被寻址从机在通信完成后重新使SM2=l,并退出中断服务程序,等待下次通信。
    从以上8051实现9位方式多机通信的过程可见,关键问题在于:
    ①发送端(主机)如何发送第9位,并且可编程设置1或O;
    ②接收端(从机)如何接收到这第9位,并判断出是l还是0。
    以上问题,8051串口可通过控制寄存器SCON中的TB8、RB8和SM2位的设置和读取轻松解决,但在ARM中并没有与805l类似功能的寄存器。那么ARM7多机系统怎样实现如上9位方式多机通信呢?下面通过分析ARM串口(以UART0为例)的内部结构和相关寄存器,给出一个有效的解决方案。

2 ARM7串口UART0内部结构
    使用ARM7串口UARTO之前须设置5个寄存器,即中断使能寄存器UOIER、UARTO格式控制寄存器UOLCR、FIFO控制寄存器UOFCR和波特率设置寄存器UODLM和UODLL。发送过程是:CPU内核通过VPB接口对UARTO的寄存器进行读写访问,数据首先进入发送缓存UOTHR,经发送移位寄存器UOTSR逐位移出,经TxDO引脚输出。接收过程是:数据经RxDO,先进入接收移位寄存器UORSR,经接收缓存U0RBR,通过VPB与CPU内核相连。特别注意的是,通信过程中ARM7串口中的中断标志寄存器U0IIR和UART0状态寄存器UOLSR的各位将随着通信收发而自动受到影响,也就是说这两个寄存器记录了数据通信过程的状态信息,这些信息很有用。
    UOIIR寄存器的描述如表1所列。

    UOIIR提供状态代码,用于指示一个挂起中断的中断源和优先级。在访问UOIIR的过程中,中断被冻结。如果在访问UOIIR时产生了中断,该中断将被记录,在下次访问UOIIR时可以读出,避免了中断的丢失。
    UOLSR寄存器描述如下:

    RDR:接收数据就绪。判断该位是否置1,决定能否从FIF0中读取数据。
    0——UORBR为空。
    l——UORBR中包含有效数据。从接收FIFO中读走所有数据后,恢复为O。
    0E:溢出错误标志。当U0RBR寄存器中已经有新的字符就绪,而接收FIF0已满时,该位置位。
    0——接收缓存区没有溢出。
    1——接收缓存区发生溢出错误。
    PE:奇偶校验错误。在使能奇偶校验位之后,对所有接收的数据都进行奇偶校验,如果与UOLCR中的设置不符,将引起奇偶校验错误。
    O——没有发生奇偶校验错误。
    1——发生奇偶校验错误。读操作使该位恢复为O。
    FE:帧错误标志。当接收字符的停止位为O时,产生帧错误。
    O——没有发生帧错误。
    1——发生帧错误。读取该位时恢复为O。
    BI:间隔中断标志。在发送数据时,如果RXDO引脚保持低电平,将产生间隔中断。发生间隔中断后,接收模块停止数据接收。
    O——没有发生间隔中断。
    1——发生间隔中断。
    THRE:反映UOTHR是否为空,也可以认为发送FIFO是否为空。
    O——不为空。
    1——空。对UOTHR进行写操作,使该位恢复为O。
    TEMT:当发送移位寄存器和UOTHR均为空时,该位置位。
    0——不为空。
    1——空。对UOTHR进行写操作,使该位恢复为0。
    RXFE:如果一个带有接收错误(如帧错误、奇偶错误或间隔中断)的字符装入UORBR时,该位置位。
    O——UORBR中没有接收错误,或UOFCR[O]为0。
    1——UORBR中包含至少一个UARTO Rx错误。
    另外,还有两个很重要的寄存器:一个是前面提到的格式控制寄存器UOLCR,另一个是FIFO控制寄存器UOFCR。
    UOLCR寄存器的描述如下:

[page]

其中第3位和第4、5位十分重要。
    奇偶使能:控制是否进行奇偶校验。如果使能,发送时将添加一位校验位。
    O——禁止奇偶产生和校验。
    1——使能奇偶产生和校验。
    奇偶选择:设置奇偶校验类型。
    OO——奇数(数据位+校验位=奇数)。
    01——偶数(数据位+校验位=偶数)。
    10——校验位强制为1。
    11——校验位强制为O。
    U0FCR寄存器的描述如下:

    这里面注意第6、7位。
    Rx触发点设置:通过设置这两位可以调整接收FIF0中触发RDA中断的有效字节数量。
    00——触发点O(1字节)。
    01——触发点1(4字节)。
    10——触发点2(8字节)。
    11——触发点3(14字节)。


3 9位方式多机通信编程实现

    上面已说明,9位方式多机通信的关键是第9位的编程发送和第9位的接收和判断。
    对于发送端,利用UOLCR寄存器的设置便能实现第9位的编程发送。
    UOLCR=0x2B; //带奇偶校验,强制为l
    UOLCR=Ox3B; //带奇偶校验,强制为O
    通过以上设置,只要编程发送1字节,ARM就自动将第9位按程序设置的0或1发送出去。
    难点在于接收端,即接收端把接收到的第9位放到哪了,程序员又如何知道这第9位是0还是1。
    其实,ARM并不像51单片机那样把接收到的第9位数据自动装入SCON的RB8。实际上,ARM并没有这样的寄存器SCON,也没有RB8位。要实现判断第9位为1或0,只能利用ARM串口通信的奇偶校验功能!
    具体思路如下:
    ①设置奇偶校验使能;
    ②编程读取UOLSR寄存器的PE位(具体含义见UOLSR寄存器的描述部分);
    ③编程判断收到的l字节中有多少个“1”,并设置一标志PP;
    ④将上述标志与PE位比较处理;
    ⑤比较的结果就正确表示了第9位是“O”,还是“1”。
    按照以上思路,可有效实现第9位的判断。下面给出相应的程序代码:


    上述程序中变量u9就是得到的第9位标志:
    当u9=OxFF时,说明第9位为1;
    当u9=OxFE时,说明第9位为O。
    还需注意的是,接收端奇偶校验设置成偶校验还是奇校验,要根据后面程序中标志pp的设置而定。

4 总 结
    本设计方案巧妙地应用ARM串口通信奇偶校验功能,实现了9位方式的多机通信,并在相关课题中成功应用,而且保证了通信的可靠性。

 

关键字:ARM7  多机遇信  编程技术 引用地址:ARM7串口9位方式多机遇信的编程技术

上一篇:基于ARM和CPLD的温度控制器的设计
下一篇:ARM7的键盘与VFD显示器接口技术

推荐阅读最新更新时间:2024-03-16 12:37

ARM7 LPC2378 远程升级----软中断SWI
我在这里,将我在学习这篇文章时遇到的疑问及理解和大家分享一下 LPC2300.S文件中的相关软中断代码如下: EXPORT SWI_Handler extern EnableIrqFunc ;使能中断函数名,用C语言实现 extern DisableIrqFunc ;禁止中断函数名,用C语言实现 SWI_Handler STMFD SP!, {R0,R12,LR} ;入栈 LDR R0, ;取指令 BIC R0,R0,#0xFF000000 ;取软件中断命令号 CMP R0,#0 ;和0比较,因为我的使能中断用了软件中断命令0,禁止中
[单片机]
<font color='red'>ARM7</font> LPC2378 远程升级----软中断SWI
ARM核流水线——ARM7,ARM9E,ARM11,Cortex-A系列处理器
本文主要介绍ARM7,ARM9E,ARM11以及Cortex-A系列处理器的流水线,从指令读取fetch,指令解码decode到指令执行的各个阶段。 参考ARM的网站http://www.arm.com/about/company-profile/index.php,ARM公司成立于1990年,目前已经销售了超过150亿个芯片,并向超过200多加公司销售了超过600个处理器的授权,目前全世界有超过95%的手机以及超过25%的消费电子产品使用ARM作为处理器核心。 ARM(Advanced RISC Machines)是专注于RISC(Reduced Instruction Set computer)架构的处理器公司,最早的ARM1
[单片机]
基于ARM7 TDMI的SoC语音处理系统的设计
   引 言   随着微电子和计算机技术的高速发展,许多嵌入式应用系统应运而生。其中,各种语音处理系统不断被开发出来,在各行业得到广泛应用,如语音报站器、自动解说装置、采访录音笔等,为人类的生产、生活提供了极大的便利。本文基于东南大学国家专用集成电路的32位嵌入式SoC——SEP3203处理器,采用G.721标准ADPCM算法,实现了语音信号的软件实时编解码,为语音处理应用提供了一种有效的嵌入式解决方案。    1、G.721标准概述   1937年,A.H.Reeves提出脉冲编码调制(PCM),开创了语音数字化通信的历程。CCITT在20世纪80年代初,开始研究低于64 Kb/s的非PCM编码算法,先后制定通过了
[单片机]
基于<font color='red'>ARM7</font> TDMI的SoC语音处理系统的设计
ARM7TDMI-S在嵌入式系统中的Bootloader代码设计
引言 芯片的Bootloader代码(即启动代码)就是芯片复位后进入操作系统之前执行的一段代码,主要是为运行操作系统提供基本的运行环境,如初始化CPU堆栈、初始化存储器系统等。Bootloader代码与CPU芯片的内核结构、具体芯片和使用的操作系统等因素有关。其功能有点类似于PC机的BIOS(Basic Input/Output System,基本输入输出系统)程序,但是由于嵌入式系统的软硬件都要比PC机的简单,所以它的Bootloader代码要比BIOS程序简单得多。 嵌入式系统被定义为:以应用中为心,以计算机技术为基础,软件硬件可裁剪,适用于系统对功能、可靠性、成本、何种、功耗有严格要求的专用计算机系统。嵌入式系统的核
[单片机]
ARM7TDMI-S在嵌入式系统中的Bootloader代码设计
掉电保护在嵌入式系统中的设计应用
    中心议题: 掉电保护在嵌入式系统中的设计应用 基于掉电保护方案的硬件设计     解决方案: 在S3C4510B和μClinux构建的嵌入式平台实现 使用5V和3.3V的直流稳压电源 采用守候进程的方式     在嵌入式系统设计过程中,系统的掉电保护越来越受到重视。本文介绍的方法是在用ARM7系列芯片S3C4510B和μClinux构建的嵌入式平台上实现的。整个掉电保护实现的基本思路是:产生掉电信号,捕捉掉电信号和处理掉电信号。重点介绍这个过程的具体实现。     系统防掉电设计的目的是:采用一种机制,使得系统在意外失去供电的情况下,可以保证系统运行状态的确定性以及记录数据的完整性;
[电源管理]
掉电保护在嵌入式系统中的设计应用
ARM7入门12,SPI通信
数码管显示1-F。 主程序: /******************************************************************************* *File: Main.c *功能: LED数码管显示0-F字符,同时控制4个LED显示对应的十六进制 *******************************************************************************/ #include config.h #define HC595_CS 0x00000100 /*P0.8口为74HC595的片选*/ uint8 rcv_d
[单片机]
<font color='red'>ARM7</font>入门12,SPI通信
ARM7启动过程
嵌入式系统资源有限,程序通常都固化在ROM总运行。ROM中程序执行前,需要对系统硬件和软件运行环境进行初始化,这些工作是用汇编语言编写的启动程序完成。启动程序是嵌入式程序的开头部分,应与应用程序一起固化在ROM中,应首先在系统上运行的启动程序应包含各模块中可能出现的所有段类,并合理安排他们的次序。   启动程序一般流程如下:   (1) 设置入口指针   (2) 设置中断向量     ARM7要求中断向量必须设置从0地址开始,连续8*4字节的空间,分别是复位、未定义指令错误、软件中断、预取指令中断、数据存取错误、IRQ、FIQ和一个保留的中断向量   (如果ROM位于0地址,向量表包含一系列指令跳转到中断服务程序,
[单片机]
基于ARM7网络型汽车防盗系统的研制
  引言   随着人们生活水平的提高,汽车已逐步进入家庭, 但日益猖獗的汽车盗窃案件也呈上升趋势,如何有效防止汽车被盗是车主们最关心的问题。近年来,科学技术飞速发展,结合各种新技术的新型汽车防盗装备相继出现。随着通信技术的发展, 无线远程通信技术也被应用于汽车领域中。基于S3C44B0X网络型汽车防盗控制系统是采用ARM 7微处理器构造的嵌入式系统,结合了传统防盗技术和新型的GPRS无线通信技术,实现已有防盗器现有各种功能的基础上,开发了远程控制功能,提高了防盗系统的安全性、灵活性和可靠性。   1 系统设计   1.1 系统特点和功能   在对各类汽车防盗系统的特点进行分析后,设计了基于S3C44B0X网络型汽车
[单片机]
基于<font color='red'>ARM7</font>网络型汽车防盗系统的研制
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved