周立功单片机 ZLG9518S SPI转多串口

周立功单片机 ZLG9518S SPI转多串口
周立功单片机 ZLG9518S SPI转多串口

——————————————概述

ZLG9518S 芯片是广州周立功单片机科技有限公司针对多串口应用而设计的一款专用IC ,也是一款将高速SPI 转换为8路低速UART 的接口转换芯片;ZLG9518S 芯片在串口数量上支持动态配置,最高可支持8个串口;串口与串口之间的资源不共享,每个串口在物理上都是绝对独立的;8个串口都可动态配置,支持8种波特率、5种校验方式、4种数据长度、3种停止位等;每个串口都支持可选的硬件流控功能,用户可以根据需要开启或者关闭硬件流控功能;除此之外,ZLG9518S 芯片还提供了丰富的寄存器,包括可选的中断功能、中断模式、错误状态查询等;SPI 时钟最高可达33M ,且SPI 协议非常简单。ZLG9518S 芯片满足目前大部分多串口应用场合,大大缩短产品的研发周期,提高产品的可靠性和稳定性。

——————————————产品特性

支持1~8路串口可动态扩展; ◆ 8路串口在物理上绝对独立;

◆ 串口的收、发缓存独立,高达255bytes ; ◆ 支持8种波特率,最高可达115200bps ; ◆ 支持5种校验方式; ◆ 支持4种数据长度; ◆ 支持3种停止位;

◆ 支持可选的硬件流控功能; ◆ 支持RTS 和CTS 单独使用; ◆ 支持多种流控触发点配置;

◆ 支持可选的中断功能、中断模式等; ◆ 支持多种中断触发点配置;

◆ 支持错误状态查询和错误中断等; ◆ SPI 时钟最高可达33MHz ;

◆ SPI 支持模式3,协议简单易懂;

◆ 内设多个寄存器,且寄存器精简易用; ◆

温度范围-40~85o C 。

————————————产品应用

● 集散控制系统; ● 数据采集系统; ● 行车记录仪; ● 串口屏。

ZLG9518S

多串口专用IC

广州周立功单片机科技有限公司

————————————————————————————————典型应用

目录

1. 功能简介 (1)

2. 引脚描述 (2)

3. 功能描述 (4)

3.1 复位FIFO (4)

3.2 串口配置 (1)

3.3 流控功能 (1)

3.4 中断功能 (1)

3.4.1 FIFO中断 (2)

3.4.2 流控中断 (2)

3.4.3 错误中断 (3)

3.5 检错功能 (3)

3.5.1 FIFO溢出错误 (3)

3.5.2 校验/帧错误 (3)

3.5.3 命令/参数错误 (4)

3.5.4 读错误 (4)

3.6 RXLVL和TXLVL (4)

3.7 写FIFO (4)

3.8 读FIFO (4)

4. SPI接口协议 (5)

4.1 协议 (5)

4.2 写时序 (6)

4.3 读时序 (6)

5. 操作说明 (8)

5.1 初始化配置 (8)

5.2 写/读命令 (9)

5.2.1 写命令 (10)

5.2.2 读命令 (11)

5.3 硬件流控 (12)

5.4 中断处理 (13)

6. 免责声明 (16)

1. 功能简介

ZLG9518S芯片是一款SPI转多路串口的专用IC,该芯片支持将高达33MHz的SPI接口转换为8路波特率低达4800bps的串口,实现了高低速接口之间的无缝连接。

ZLG9518S芯片在串口的数量上支持动态配置,即用户可以任意使用其中的一个或者多个串口,可随时打开或者关闭任意串口;任意两个串口之间的资源是不共享的,无论是收发缓存,还是外部端口,在物理上都是绝对独立的;每个串口都可以支持多种动态配置,如8种波特率、5种校验方式、4种数据长度、3种停止位等,且都支持RTS和CTS的流控功能,用户可以根据自己的需要,使能或禁能任意一路或者多路的串口流控功能,甚至可以单独使能RTS功能或者CTS功能等;ZLG9518S芯片还支持中断,且有一个外部中断引脚IRQ,由于8路串口共享IRQ引脚,因此只要有任意1路串口满足产生中断的条件,IRQ引脚即输出中断信号,中断支持多种模式,比如FIFO中断、流控中断和错误中断等,且这些中断都可以根据自己需要任意启动或关闭;ZLG9518S芯片还具有检错的能力,当在通讯中产生错误时,用户可以通过查询相应的寄存器来得知产生错误的类别,且可以自由设置产生错误之后是否发送中断信号等。ZLG9518S芯片的内部结构如图1.1所示。

图1.1 芯片内部框图

2. 引脚描述

ZLG9518S 芯片的管脚如图2.1所示。

图2.1 ZLG9518S 芯片引脚图

具体管脚说明如表2.1所示。

表2.1 ZLG9518S 芯片管脚说明

3. 功能描述

ZLG9518S芯片的所有功能都是通过寄存器来实现的,MCU可以通过SPI接口任意修改和访问ZLG9518S芯片的寄存器。MCU可以在ZLG9518S芯片的工作过程中,复位ZLG9518S芯片的FIFO、开启或关闭任意一个串口、配置任意一个串口的波特率、停止位、校验方式、数据长度等、开启或关闭任意一个串口的流控功能、配置任意一个串口的中断模式和中断使能等。ZLG9518S芯片内部共有11个寄存器,且每个寄存器都是8位的,如表3.1所示。

表3.1 ZLG9518S芯片的寄存器说明

注:其中没有用到的地址均为保留位,主要是方便以后的功能扩展。

ZLG9518S芯片支持4线的

SPI接口,方便与外部的MCU进

行通信,如图3.1所示。ZLG9518S

芯片将内部的复杂运算逻辑简化

为如表3.1所示的11个寄存器,

使得外部MCU对ZLG9518S芯片

的操作变得简单,可将ZLG9518S

图3.1 MCU与ZLG9518S芯片的连接

芯片当成外设来访问。除此之外,

ZLG9518S芯片还有一个IRQ中断引脚,这使得MCU可以更加实时和高效的了解ZLG9518S 芯片的当前工作状态,以便于及时处理和调整。

3.1 复位FIFO

MCU可以在ZLG9518S芯片的工作过程中,复位其串口的发送或者接收FIFO,使得FIFO恢复到初始状态。相比重新复位ZLG9518S芯片而言,MCU可以省略重新配置串口参数的步骤。具体操作是在FCR寄存器中,在对应的位上置1将自动复位一次FIFO,复位之后ZLG9518S芯片继续正常工作,此时该位不会自动清零,需由用户手动清零该位。如果该位不清零,ZLG9518S芯片也不会一直处于复位状态。ZLG9518S芯片的FIFO复位动作,只对当前写入的复位FIFO命令执行一趟复位。FCR寄存器详细参数如表3.2所示。

表3.2 FCR寄存器(地址为0)

3.2 串口配置

ZLG9518S芯片的串口支持动态配置,MCU可以在ZLG9518S芯片的工作过程中,对任意一个串口进行配置,如波特率、数据长度、校验方式、停止位等。具体配置方法是,将所需的参数写入到LCR0和LCR1寄存器中,LCR0和LCR1寄存器的详细参数如表3.3和表3.4所示。

表3.3 LCR0寄存器(地址为1)

表3.4 LCR1寄存器(地址为2)

LCR0和LCR1寄存器中具体相关的位所代表的含义如表3.5至表3.9所示。

表3.5 LCR0寄存器的停止位

表3.6 LCR0寄存器的状态位

表3.7 LCR0寄存器的数据长度位

表3.8 LCR0寄存器的校验位

表3.9 LCR1寄存器的波特率位

注:当写入的的参数错误时,ZLG9518S芯片将会在错误寄存器中提示此时的参数输入错误,且此时不会将该参数赋值给寄存器。

3.3 流控功能

ZLG9518S芯片支持硬件流控RTS和CTS功能,其主要作用是为了在串口进行大量数据传输时,防止数据丢失。用户可以根据自己的应用场合,开启或者关闭流控功能。当关闭流控功能时,RTS输出低电平,表示始终允许对方发送了数据;当开启流控功能时,RTS 会自动根据串口的接收缓存进行电平控制,而MCU只管通过SPI接口从ZLG9518S芯片发送或读取FIFO的数据即可。开启和关闭RTS和CTS功能主要是通过LCR1寄存器的bit3和bit4来实现的,具体如表3.4所示。

ZLG9518S芯片的自动流控功能还支持触发点的设置,通过向TCR寄存器写入相应的参数,即可实现对触发位置的调整。其中,TCR寄存器主要分为高4位和低4位,高4位代表恢复流控触发点,低4位代表终止流控触发点,具体如表3.10所示。

表3.10 TCR寄存器(地址为3)

引脚的输出电平跳变位置。流控RTS的输出波形

就像施密特触发器一样,如图3.2所示。当串口的

接收缓存达到TCR寄存器中的终止流控触发点

时,RTS从低电平跳变到高电平;当串口的接收

缓存少于TCR寄存器中的恢复流控触发点时,

RTS才会从高电平跳变回低电平,恢复串口的接

图3.2 区域拷贝示意图

收功能。当拉大恢复触发点和终止触发点的距离

时,此时RTS引脚的电平跳变过渡时间变长;相反则过渡时间变短。

调整恢复触发点和终止触发点的方法很简单,只需在TCR寄存器中,将相应的参数写入到该寄存器中即可,具体参数如表3.11所示。

表3.11 TCR寄存器的触发点参数

注:恢复触发点的值必须小于终止触发点的值,否则会导致错误寄存器的参数错误位置位。

3.4 中断功能

ZLG9518S芯片支持中断,由于8路串口共用一个中断引脚IRQ,因此只要其中有一路串口满足中断条件,且使能了该中断,那么IRQ将输出信号通知MCU,MCU可以即刻响应中断,以及时了解和处理ZLG9518S芯片的事务。

ZLG9518S芯片的每一路串口都支持三种中断,分别为FIFO中断、流控中断和错误中

断。这三种中断都可以根据需要使能和禁能,如表3.4所示的LCR1寄存器,可以控制该寄存器的第5、6和7位来使能或者禁能某一中断。

当ZLG9518S芯片产生了中断信号时,MCU可以通过查询IER寄存器来获知具体是哪一类触发了中断。IER寄存器的具体参数如表3.12所示。

表3.12 IER寄存器(地址为7)

注:IER寄存器中只要有任意一位置1,则IRQ引脚将输出低电平的中断信号,MCU只能通过读取该寄存器来清零和清除中断信号。

其中,LCR1寄存器的第5位控制着IER寄存器的发送和接收FIFO中断;LCR1寄存器的第6位控制着IER寄存器的流控RTS和CTS中断;LCR1寄存器的第7位则是控制着IER寄存器的错误中断位。当LCR1寄存器的相应中断控制位置1时,IER寄存器在满足中断的条件下才会将相应的中断位置1,进而产生中断;否则,即使满足了中断条件,IER寄存器的相应中断位也不会置1,从而导致中断被屏蔽和禁能。

3.4.1 FIFO中断

ZLG9518S芯片的任意一个串口收发缓存都各高达255字节,MCU可以使用查询的方式获知某一路串口此时的FIFO中接收了多少个数据,进而决定是否要读取该FIFO中的数据。然而,采用查询的方式势必会降低MCU的效率,且在大多数情况下,用户可能只要接收到十几个数据后通知MCU去读数据,因此,采用FIFO中断方式即可实现。

FIFO中断分为发送FIFO中断和接收FIFO中断。当发送FIFO中的使用空间数超过发送FIFO的中断触发点时,且使能FIFO中断的条件下,IER寄存器的bit1将置1,并在IRQ 引脚产生中断信号;同样,当接收FIFO中的使用空间数超过接收FIFO的中断触发点时,且使能FIFO中断的条件下,IER寄存器的bit0将置1,并在IRQ引脚产生中断信号。设置发送和接收FIFO的中断触发点主要是通过TLR寄存器,TLR寄存器如表3.13所示。

表3.13 TLR寄存器(地址为4)

调整发送和接收中断触发点的方法和TCR寄存器一样,只需将相应的参数写入到该寄存器中即可,具体参数如表3.11所示。一般情况下,接收FIFO中断使用的会比较多,而发送FIFO中断使用的很少,此时,我们可以将发送FIFO的中断触发点设置比较大,比如设置为240个字节,这样发送FIFO中断基本就不会出现。

3.4.2 流控中断

与FIFO中断不同,流控中断分为RTS中断和CTS中断。当接收FIFO中的使用空间数超过了终止触发点,且使能流控中断的条件下,如果此时还有数据继续送往接收FIFO,IER

寄存器的bit2将置1,并在IRQ引脚产生中断信号;而CTS中断则根据对方RTS无效时,此时发送FIFO中还存在数据,且使能了流控中断的条件下,IER寄存器的bit3将置1,并在IRQ引脚产生中断信号。调整恢复触发点和终止触发点,只需在TCR寄存器中,将相应的参数写入到该寄存器中即可,具体参数如表3.11所示。

3.4.3 错误中断

ZLG9518S芯片还支持错误中断,可以在数据的传输过程中通知MCU通讯错误或者写入命令、参数错误等。用户可以根据自己的应用场合,控制LCR1寄存器第7位来使能或者禁能错误中断。具体如表3.4所示。

3.5 检错功能

ZLG9518S芯片支持检错功能,这使得ZLG9518S芯片可以实时监控数据通讯总线,当出现错误时,ZLG9518S芯片可以分析产生错误的种类并及时通知MCU去处理,从而具有自我纠错的能力。

检错种类包括发送和接收FIFO溢出错误、命令错误、参数错误、帧错误、串口校验错误和读错误等。当出现错误时,ZLG9518S芯片会将这些错误标记在LSR寄存器,LSR寄存器的详细参数如表3.14所示。如果此时使能错误中断,那么LSR寄存器会将错误及时通知MCU,以制止错误的继续产生。

表3.14 LSR寄存器(地址为8)

注:LSR寄存器中只要有任意一位置1,且在只能错误中断的条件下,则IRQ引脚将输出低电平的中断信号,MCU只能通过读取该寄存器来清零和清除中断信号。

3.5.1 FIFO溢出错误

FIFO溢出错误包括发送FIFO溢出错误和接收FIFO溢出错误。

当发送FIFO已满时,此时MCU如果还继续往ZLG9518S芯片的FIFO中发送数据,将会导致ZLG9518S芯片由于没有再多的空余空间存放数据而造成数据丢失,因此产生发送FIFO溢出错误,并在LSR寄存器的相应位置1;同样,当接收FIFO已满时,此时如果ZLG9518S芯片的串口RXD引脚还有数据在接收,这将会导致由于MCU没有及时读走数据而造成对方的串口数据丢失,因此产生接收FIFO溢出错误,并在LSR寄存器相应位置1。

3.5.2 校验/帧错误

ZLG9518S芯片可配置为奇校验、偶校验等方式,通过数据校验,可大大提高数据的可靠性。当ZLG9518S芯片对接收的串口数据校验出错时,将会在LSR的相应位置1,以提示此时的串口数据存在问题。出现问题的可能性可能是双方的配置不一致,或者是通讯距离

过远导致电压不稳定等问题;当ZLG9518S芯片提示帧错误时,此时也可能是双方的配置不一致或者停止位错误等问题。

3.5.3 命令/参数错误

命令或参数错误主要是MCU在发送命令及命令参数的时候数据错误。比如命令错误,MCU可能写入了ZLG9518S芯片中不存在的寄存器地址,或者是对只读的寄存器进行写操作,或者是对只写的寄存器进行读操作等;而参数错误出现的情况,在前面一些寄存器中也有涉及,主要是写入的参数不合法,在逻辑上有错误等。

3.5.4 读错误

当ZLG9518S芯片的FIFO为空时,如果此时MCU还去读该芯片的FIFO,将会导致读错误,并在LSR寄存器的相应位置1,且读出的数据均为0。

3.6 RXLVL和TXLVL

ZLG9518S芯片内部还设置了RXLVL和TXLVL两个寄存器,MCU可以通过这两个寄存器来查询此时ZLG9518S芯片内部的接收和发送FIFO中未使用的空间数。当FIFO中使用的空间数不足以触发中断时,可以通过查询这两个寄存器来确定FIFO中是否存在数据,从而决定是否继续读或者写数据。RXLVL和TXLVL寄存器如表3.15和表3.16所示。

表3.15 TXLVL寄存器(地址为5)

表3.16 RXLVL寄存器(地址为6)

3.7 写FIFO

写FIFO操作和写其他寄存器操作是一样的,MCU通过将数据写入到THR寄存器即可实现将数据通过ZLG9518S芯片的串口发送出去。THR寄存器如表3.17所示。写FIFO操作一次只能对FIFO写入一个数据,当串口的数据长度不是8的时候,都要按照低位对齐。具体写时序如图4.2所示。

表3.17 THR寄存器(地址为11)

3.8 读FIFO

与写FIFO不同,读FIFO既可以支持一次只读一个数据,也可以支持连读模式,即MCU 只需发送一次读操作命令,就可以直接从ZLG9518S芯片的RHR寄存器中连续读多个FIFO 的数据,直到读空。RHR寄存器如表所示。具体时序如图4.4所示。

表3.18 RHR寄存器(地址为10)

4. SPI接口协议

ZLG9518S芯片与MCU的通讯接口为标准的4线SPI接口,采用传输模式3,SPI时钟最高可达33MHz。为了实现MCU只通过SPI接口就能访问和控制8路串口,因此在SPI 的传输上必须要有一些约定,比如寻址哪个串口、发送什么命令或者参数等,因此在SPI 接口上需要做一些协议。

4.1 协议

无论MCU是读还是写ZLG9518S芯片,都需要先发送一个字节长度的命令和数据。为了使MCU访问ZLG9518S芯片的方式变得更灵活,ZLG9518S芯片在SPI时序上做了调整,使得MCU可以采用硬件外设或者I/O口模拟SPI时序。主要修改的地方在于片选信号CS 上,在发送完寄存器地址或者完整的一帧命令之后,CS线既可以上拉,也可以不用上拉,而无需一定要发送完一整帧命令之后才拉高CS线,这使得MCU可以直接使用8位的硬件SPI外设来访问ZLG9518S芯片,使得MCU访问ZLG9518S芯片变得更加灵活和简单。操作ZLG9518S芯片的时序如图4.1所示。

图4.1 ZLG9518S芯片的驱动时序

注:以上时序为ZLG9518S芯片的写时序,如果前面的功能描述中无提及时序要求,则都是默认按照上图的时序。ZLG9518S芯片的写时序和读时序稍微不一样,在后面会详细介绍。

图4.1中对ZLG9518S芯片的驱动时序要求如表4.1所示。

表4.1 ZLG9518S芯片的驱动时序参数

由于ZLG9518S芯片中包含了11个寄存器,且寄存器可读可写,同时又有8如串口,因此,在发送的命令中,必须包含这些信息,命令的具体参数如表4.2所示。

表4.2 命令协议

4.2 写时序

写寄存器和写FIFO操作是一样的。当写寄存器时,后面的数据就是该寄存器的参数,ZLG9518S芯片会自动判断写入命令和参数的合法性,当命令和参数合法时,才会将该参数写入到相应的寄存器中;而写FIFO的时候,后面的数据就是串口数据,ZLG9518S芯片会将该数据转载到发送FIFO中,然后通过相应的串口将该数据送出。时序如图4.2所示。

图4.2 ZLG9518S芯片的写时序

4.3 读时序

读时序与写时序不同,在发送完命令之后,紧接着的数据并不是FIFO的数据,而是命令的参数,之后才是真正的数据。命令参数实际上只对RHR寄存器有效,而对于其他寄存器是无效的。ZLG9518S芯片读其他寄存器的时序如图4.3所示。MCU首先发送一个字节长度的读命令,紧接着发送一个字节长度的参数,这个参数中的值可以任意,因为它只对RHR 寄存器有效,最后才是寄存器的数据。ZLG9518S芯片的读使能信号REN标识了MCU何时可以去读该寄存器的值,当REN为低时,代表MCU此时可以去读该寄存器的值了。

图4.3 ZLG9518S芯片的读时序

当读RHR寄存器时,命令参数的作用是代表连读FIFO中数据的个数,详细的命令参数如表4.3所示。

表4.3 读命令的参数

读RHR寄存器的时序如图4.4所示。当MCU发送的命令参数为n时,代表需要连续

从FIFO中读取数据的个数,之后MCU将在REN信号的提示下,逐一从ZLG9518S芯片的FIFO中读取n个数据。

图4.4 ZLG9518S芯片的连读时序

5. 操作说明

本次的操作说明都是在ZLG9518S Demo板上进行展开。该Demo板上主要包含ZLG9518S芯片和LPC1342F主控芯片。通过LPC1342F主控芯片相应的驱动程序来测试ZLG9518S芯片。

5.1 初始化配置

ZLG9518S芯片的初始化配置主要是配置串口的波特率、校验方式等,以及流控、中断等,为了提高代码的可读性,我们都以宏定义的形式来编写,如程序清单5.1所示。

程序清单5.1 初始化配置函数

/****************************************************************************************** ** Function name: s2u_configure_one_uart

** Descriptions: 配置ZLG9518S芯片的一个串口

** input parameters: uart_chan: 串口通道号

** output parameters: 无

** Returned value: 无

******************************************************************************************/ void s2u_configure_one_uart(uint8_t uart_chan)

{

uint8_t cmd_prm; /* 定义一个命令参数变量*/ /*

* 配置串口为8位数据长度、无校验方式、一位停止位和打开状态

*/

cmd_prm = S2UC_LCR0_PUT_STATE_BIT(S2UC_LCR0_ON_STATE)

| S2UC_LCR0_PUT_DLEN_BIT(S2UC_LCR0_8_BIT_DATA)

| S2UC_LCR0_PUT_PARITY_BIT(S2UC_LCR0_PARITY_NONE)

| S2UC_LCR0_PUT_STOP_BIT(S2UC_LCR0_STOP_1_BIT);

zlg9518s_send_write_cmd(ZLG9518S_LCRO_REG, uart_chan, cmd_prm, cmd_buf);

/*

* 配置串口的波特率为115200bps、关闭流控功能、流控中断和错误中断,使能FIFO中断

*/

cmd_prm = S2UC_LCR1_PUT_BAUD_BIT(S2UC_LCR1_BAUD_115200)

| S2UC_LCR1_PUT_CTS_BIT(S2UC_LCR1_CTS_OFF)

| S2UC_LCR1_PUT_RTS_BIT(S2UC_LCR1_RTS_OFF)

| S2UC_LCR1_PUT_FIFO_ENINT_BIT(S2UC_LCR1_INT_EN)

| S2UC_LCR1_PUT_STREAM_ENINT_BIT(S2UC_LCR1_INT_DIS)

| S2UC_LCR1_PUT_ERR_ENINT_BIT(S2UC_LCR1_INT_DIS);

zlg9518s_send_write_cmd(ZLG9518S_LCR1_REG, uart_chan, cmd_prm, cmd_buf);

/*

* 配置流控恢复触发点为32个字节,终止触发点为224字节

*/

cmd_prm = S2UC_TCR_PUT_STREAM_START_BIT(S2UC_TCR_STREAM_32_BYTE_MAX255) | S2UC_TCR_PUT_STREAM_END_BIT(S2UC_TCR_STREAM_224_BYTE_MAX255);

zlg9518s_send_write_cmd(ZLG9518S_TCR_REG, uart_chan, cmd_prm, cmd_buf);

/*

* 配置接收FIFO中断触发点为224个字节,发送FIFO触发点为240个字节

*/

cmd_prm = S2UC_TLR_PUT_RFIFO_INT_BIT(S2UC_TCR_STREAM_224_BYTE_MAX255) | S2UC_TLR_PUT_TFIFO_INT_BIT(S2UC_TCR_STREAM_240_BYTE_MAX255);

zlg9518s_send_write_cmd(ZLG9518S_TLR_REG, uart_chan, cmd_prm, cmd_buf);

}

这些配置参数可以在ZLG9518S芯片的工作过程中随时随意修改,且配置顺序可以任意调换,无需一定要按照程序清单5.1中的格式。

如果用户不想修改程序清单5.1的函数,可以将一些配置参数引出作为形参来传递,但这样的话,形参较多,建议将这些参数封装为数组或者链表后再作为形参使用。本次操作为了简要说明,所以直接初始化。

假设我们现在只初始化串口0,那么可调用程序清单5.1的函数,如程序清单5.2所示。

程序清单5.2 初始化一个串口

s2u_configure_one_uart(UART_CHAN_0); /* 初始化串口0 */ 如果要初始化多个串口,那么只需多次引用该函数即可,如程序清单5.3所示。

程序清单5.3 初始化多个串口

s2u_configure_one_uart(UART_CHAN_0); /* 初始化串口0 */

s2u_configure_one_uart(UART_CHAN_1); /* 初始化串口1 */

s2u_configure_one_uart(UART_CHAN_2); /* 初始化串口2 */

s2u_configure_one_uart(UART_CHAN_3); /* 初始化串口3 */

s2u_configure_one_uart(UART_CHAN_4); /* 初始化串口4 */

s2u_configure_one_uart(UART_CHAN_5); /* 初始化串口5 */

s2u_configure_one_uart(UART_CHAN_6); /* 初始化串口6 */

s2u_configure_one_uart(UART_CHAN_7); /* 初始化串口7 */ 5.2 写/读命令

发送读命令或者写命令的时候,主要是将数据按照表4.2的命令协议格式进行处理。如程序清单5.4所示。

程序清单5.4 命令函数

/******************************************************************************************

** Function name: zlg9518s_set_cmd

** Descriptions: ZLG9518S芯片的命令协议格式

** input parameters: rw:读写位;reg:寄存器地址;uart_chan:串口通道号;prm:命令参数

** output parameters: cmd_buf:命令缓存

** Returned value: 无

******************************************************************************************/

void zlg9518s_set_cmd(uint8_t rw, uint8_t reg, uint8_t uart_chan, uint8_t prm, uint16_t *cmd_buf)

{

uint16_t cmd;

cmd = S2UC_PUT_RW_BIT(rw)

| S2UC_PUT_REG_BIT(reg)

| S2UC_PUT_CHAN_BIT(uart_chan)

| S2UC_PUT_DA TA_BIT(prm);

cmd_buf[0] = (cmd >> 8) & 0xFF;

cmd_buf[1] = (cmd >> 0) & 0xFF;

}

5.2.1 写命令

写命令函数可以直接调用程序清单5.4中的命令函数,如程序清单5.5所示。

程序清单5.5 写命令函数

/****************************************************************************************** ** Function name: zlg9518s_send_write_cmd

** Descriptions: ZLG9518S芯片的写命令

** input parameters: reg:寄存器地址;uart_chan:串口通道号;prm:命令参数;cmd_buf:缓存** output parameters: 无

** Returned value: 无

******************************************************************************************/ void zlg9518s_send_write_cmd(uint8_t reg, uint8_t uart_chan, uint8_t prm, uint16_t *cmd_buf)

{

zlg9518s_set_cmd(S2UC_WRITE_FORM, reg, uart_chan, prm, cmd_buf);

SPI_OUT(cmd_buf, 2); /* 发送写命令*/ }

假设现在向串口0的THR寄存器写入0x95和0x18这两个数据,代码如程序清单5.6所示。

程序清单5.6 写命令函数使用示例

/*

* 向串口0的THR寄存器分别发送0x95和0x18数据

*/

zlg9518s_send_write_cmd(ZLG9518S_THR_REG, UART_CHAN_0, 0x95, cmd_buf);

zlg9518s_send_write_cmd(ZLG9518S_THR_REG, UART_CHAN_0, 0x18, cmd_buf);

执行程序清单5.6的代码之后,通过逻辑分析仪捕获的时序如图5.1所示。

图5.1 写命令函数使用示例时序图

5.2.2 读命令

读命令函数也可以直接调用程序清单5.4中的命令函数,如程序清单5.7所示。

程序清单5.7 读命令函数

/****************************************************************************************** ** Function name: zlg9518s_send_read_cmd

** Descriptions: ZLG9518S芯片的读命令

** input parameters: reg:寄存器地址;uart_chan:串口通道号;prm:命令参数;cmd_buf:缓存** output parameters: 无

** Returned value: 无

******************************************************************************************/ void zlg9518s_send_read_cmd(uint8_t reg, uint8_t uart_chan, uint8_t prm, uint16_t *cmd_buf)

{

zlg9518s_set_cmd(S2UC_READ_FORM, reg, uart_chan, prm, cmd_buf);

SPI_OUT(cmd_buf, 2); /* 发送读命令*/ }

由于读寄存器或FIFO之前,需要判断REN信号,且还有连读模式等,因此我们需要再编写一个读寄存器或数据的函数,如程序清单5.8所示。

程序清单5.8 读数据函数

/****************************************************************************************** ** Function name: zlg9518s_read_reg_pack

** Descriptions: ZLG9518S芯片的读数据函数

** input parameters: reg:寄存器地址;uart_chan:串口通道号;prm:命令参数

** output parameters: 无

** Returned value: 无

******************************************************************************************/ uint8_t zlg9518s_read_reg_pack(uint8_t reg, uint8_t uart_chan, uint8_t prm)

{

uint8_t uart_data;

zlg9518s_send_read_cmd(reg, uart_chan, prm, cmd_buf); /* 发送读命令*/

if (reg == ZLG9518S_RHR_REG) { /* RHR寄存器连读*/ if (prm > 1) {

zlg9518s_read_mul_data(prm, data_buf);

return 0;

}

}

zlg9518s_ren(); /* 判断读使能信号*/ uart_data = zlg9518s_read_data(reg_buf); /* 读所有寄存器*/ return uart_data;

}

假设现在ZLG9518S芯片的RHR寄存器有两个数据,分别为0x95和0x18,那么我们

可以发送相应的读命令,并将这两个数据从RHR中读出来,代码如程序清单5.9所示。

程序清单5.9 读命令函数使用示例

uint8_t uart_left; /* RHR中的数据个数*/

/* 读取RXLVL寄存器*/ uart_left = UART_TX_BUF_SIZE - read_reg_pack(ZLG9518S_RXLVL_REG, UART_CHAN_0, 0);

read_reg_pack(ZLG9518S_RHR_REG, UART_CHAN_0, uart_left); /* 读取RHR寄存器*/ 执行程序清单5.9的代码之后,通过逻辑分析仪捕获的时序如图5.2所示。

图5.2 读命令函数使用示例时序图

5.3 硬件流控

硬件流控功能的使用可以在初始化的时候就就开启,也可以在ZLG9518S芯片工作的过程中随时启动。开启硬件流控功能的代码如程序清单5.10所示。

程序清单5.10 开启硬件流控的配置函数

/****************************************************************************************** ** Function name: s2u_configure_one_uart

** Descriptions: 配置ZLG9518S芯片的一个串口

** input parameters: uart_chan: 串口通道号

** output parameters: 无

** Returned value: 无

******************************************************************************************/ void s2u_configure_one_uart(uint8_t uart_chan)

{

uint8_t cmd_prm; /* 定义一个命令参数变量*/

/*

* 配置串口的波特率为115200bps、关闭FIFO中断和错误中断,开启流控功能和使能流控中断

*/

cmd_prm = S2UC_LCR1_PUT_BAUD_BIT(S2UC_LCR1_BAUD_115200)

| S2UC_LCR1_PUT_CTS_BIT(S2UC_LCR1_CTS_ON)

| S2UC_LCR1_PUT_RTS_BIT(S2UC_LCR1_RTS_ON)

| S2UC_LCR1_PUT_FIFO_ENINT_BIT(S2UC_LCR1_INT_EN)

| S2UC_LCR1_PUT_STREAM_ENINT_BIT(S2UC_LCR1_INT_DIS)

| S2UC_LCR1_PUT_ERR_ENINT_BIT(S2UC_LCR1_INT_DIS);

zlg9518s_send_write_cmd(ZLG9518S_LCR1_REG, uart_chan, cmd_prm, cmd_buf);

/*

单片机外部RA扩展

单片机外部RAM扩展模块 MCS-51系列单片机外部RAM为64K,在一些特殊场合下,远不能满足需要,本文就AT89C51讨论MCS-51系列单片机大容量RAM的扩 展方法。 首先介绍128K随机读取RAM HM628128。HM628128 是32脚双列直插式128K静态随机读取RAM,它具有容 量大、功耗低、价格便宜、集成度高、速度快、设计和 使用方便等特点。如若在系统中加入掉电保护电路,保 护数据有很高的可靠性,可以和EEPROM相媲美。 技术特性: (1)最大存取时间为120ns; (2)典型选通功耗75mW;典型未选通功耗10uW; (3)使用单一5V电源供电; (4)全静态存储器,不需要时钟及时序选通信号; (5)周期时间与存取时间相等; (6)采用三态输出电路,数据输入和输出端公用; 图6 HM628128外部引脚(7)所有输入和输出引脚均与TTL电平直接兼 容; (8)有两个片选端,适合于低功耗使用,即为了保存信息,用电池作为后备电源。保存信息的最低电源电压Vcc=2V。 引脚安排及功能表: 图6是HM628128的外部引脚排列图,各引脚名称及功用分别如下: A0~A16是17条地址线;I/O0~I/O7是8条双向数据线;CS1是片选1,低电平有效,CS2是片选2,高电平有效;WR是写控制线,当CS1为低电平,CS2为高电平时,WR的上升沿将I/O0~I/O7上的数据写到A0~A16选中的存储单元中;OE是读出允许端,低电平有效。 HM628128的功能表如表3所示。 WR CS1 CS2 OE 工作方式 X H X X未选中 X X L X未选中 H L H H 输出禁止 H L H L 读 L L H H 写 其中,H表示高电平,L表示低电平,X表示任意状态由于AT89C51直接外部RAM容量为64K,地址线为16条,其中低8位地址和数据分时复用,因此需要外部地址锁存器和ALE锁存信号来锁存低8位地址。又由于AT89C51的外部数据和外设地址通用,若扩展外设必然占用数据地址。因此本系统采用P2.7(A15)口来区分数据和外设:当P2.7(A15)口为高电平时,

利用单片机串行口实现多个LED显示的方法

利用单片机串行口实现多个LED显示的方法 在单片机系统中,常常用数码管(LED)做显示器。一般的显示器为4位或8位,即需要4个或8个LED。实现这种显示的方法比较多,也比较简单。但是,对于多个LED显示,就必须采取必要的措施才能实现。本文介绍一种设计方法,利用该方法设计的多路LED显示系统具有硬件结构简单,软件编程方便,价格低廉的特点,经在储蓄所大屏幕利率显示屏中应用,效果很好。 1硬件电路 80C31单片机是MCS-51系列单片机的一种,它广泛应用于各种小型控制系统中。我们知道,80C31单片机有一个串行口可用于串行通讯,笔者发现它在方式0状态下,还可以扩展并行I/O口,从而实现多个LED显示,其硬件原理如图1所示。其中,74HC164为串行输入、并行输出移位寄存器,74HC164为单向总线驱动器,LED采用5EF1183KR型共阴极数码管。 当80C31单片机复位时,串行口为方式0状态,即工作在移位寄存器方式,波特率为振荡频率的十二分之一。参看图2,器件执行任何一条将SBUF作为目的寄存器的命令时,数据便开始从RXD端发送。在写信号有效时,相隔一个机器周期后发送控制端SEND有效,即允许RXD发送数据,同时,允许从TXD端输出移位脉冲。第一帧(8位)数据发送完毕时,各控制信号均恢复原状态,只有TI保持高电平,呈中断申请状态。第一个74HC164把第一帧数据并行输出,LED1显示该数据(发送时序如图2所示)。然后,用软件将TI清零,发送第二帧数据。第二帧数据发送完毕,LED1显示第二帧数据,第一帧数据串行输入给第二个74HC164,LED2显示第一帧数据。依此类推,直到把数据区内所有数据发送出去。应该注意,数据全部发送完后,第一帧数据在最后一个LED显示。由于TXD端最多可以驱动8个TTL门,当LED显示器超过8个时,我们采用74HC244芯片驱动。每个74HC244有8路驱动,每一路可驱动8个LED,即每增加一个74HC244,可增加64个LED驱动。 2软件编程 该软件程序采用MCS-51系列单片机汇编语言编制,并把显示程序作为一个子程序,以便在主程序中调用。设LED为共限极显示器,共有64个,显示区首地十在内部RAM20H单元,需显示的数据以BCD码依次存放在显示区。 LED照明https://www.360docs.net/doc/509666035.html,

单片机系统扩展

第六章单片机系统扩展 通常情况下,采用MCS-51单片机的最小系统只能用于一些很简单的应用场合,此情况下直接使用单片机内部程序存储器、数据存储器、定时功能、中断功能,I/O端口;使得应用系统的成本降低。但在许多应用场合,仅靠单片机的内部资源不能满足要求,因此,系统扩展是单片机应用系统硬件设计中最常遇到的问题。 在很多复杂的应用情况下,单片机内的RAM ,ROM 和 I/O接口数量有限,不够使用,这种情况下就需要进行扩展。因此单片机的系统扩展主要是指外接数据存贮器、程序存贮器或I/O接口等,以满足应用系统的需要。 6.1 单片机应用系统 按照单片机系统扩展与系统配置状况,单片机应用系统可以分为最小应用系统、最小功耗系统、典型应用系统等。 最小应用系统,是指能维持单片机运行的最简单配置的系统。这种系统成本低廉、结构简单,常用来构成简单的控制系统,如开关状态的输入/输出控制等。对于片内有ROM/EPROM 的单片机,其最小应用系统即为配有晶振、复位电路和电源的单个单片机。对于片内无ROM/EPROM的单片机,其最小系统除了外部配置晶振、复位电路和电源外,还应当外接EPROM 或EEPROM作为程序存储器用。最小应用系统的功能取决于单片机芯片的技术水平。 单片机的最小功耗应用系统是指能正常运行而又功耗力求最小的单片机系统。 单片机的典型应用系统是指单片机要完成工业测控功能所必须具备的硬件结构系统。 6.1.1 8051/8751最小应用系统 MCS-51系列单片机的特点就是体积小,功能全,系统结构紧凑,硬件设计灵活。对于简单的应用,最小系统即能满足要求。 8051/8751是片内有ROM/EPROM的单片机,因此,用这些芯片构成的最小系统简单、可靠。 图6-1 8051/8751最小应用系统 用8051/8751单片机构成最小应用系统时,只要将单片机接上时钟电路和复位电路即可,如图6-1所示。由于集成度的限制,最小应用系统只能用作一些小型的控制单元。其应用特点: (1)有可供用户使用的大量I/O口线。因没有外部存储器扩展,这时EA接高电平,P0、P1、P2、P3都可作用户I/O口使用。

51单片机外部ram扩展c程序及硬件结构

c程序 #include #include #define uchar unsigned char #define uint unsigned int int n,m; void main() { unsigned int i; while(1) { for(i=0x0000;i<=0x7fff;i++) { XBYTE[i]=n;//写入ram } for(i=0x7fff;i>0x0000;i--) { m=XBYTE[i];//读外部存储器 } }

} 62256外部ram芯片 相关知识: XBYTE是一个地址指针(可当成一个数组名或数组的首地址),它在文件absacc.h中由系统定义,指向外部RAM(包括I/O口)的0000H单元,XBYTE后面的中括号[ ]0x2000H 是指数组首地址0000H的偏移地址,即用XBYTE[0x2000]可访问偏移地址为0x2000的I/O端口。 这个主要是在用C51的P0,P2口做外部扩展时使用,其中XBYTE [0x0002],P2口对应于地址高位,P0口对应于地址低位。一般P2口用于控制信号,P0口作为数据通道。 比如:P2.7接WR,P2.6接RD,P2.5接CS,那么就可

以确定个外部RAM的一个地址,想往外部RAM的一个地址写一个字节时,地址可以定为XBYTE [0x4000],其中WR,CS为低,RD为高,那就是高位的4,当然其余的可以根据情况自己定,然后通过 XBYTE [0x4000] = 57; 这赋值语句,就可以把57写到外部RAM的0x4000处了,此地址对应一个字节。 XBYTE 的作用,可以用来定义绝对地址,是P0口和P2口的,其中P2口对应的是高位,P0口对应的是低位 如XBYTE[0x1234] = 0x56; 则等价于 mov dptr,#1234h mov @dptr,#56h 谢谢大家

arm 嵌入式系统基础教程 - 广州周立功单片机发展有限公司

ARM嵌入式系统基础教程 周立功等编著 北京航空航天大学出版社 2005年1月定价:32.00元 内容简介 本书是《ARM嵌入式系统系列教程》中的理论课教材。以PHILIPS公司LPC2000系列ARM微控制器为例,深入浅出地介绍嵌入式系统开发的各个方面。全书共分为3部分:第1章和第2章为理论部分,主要介绍嵌入式系统的概念及开发方法。第3~5章为基础部分,主要介绍ARM7体系结构、指令系统及LPC2000系列ARM微控制器的结构原理。第6~8章为应用部分,主要以LPC2000系列微控制器为例介绍如何设计嵌入式系统,包括硬件的设计、μC/OSII的移植以及建立软件开发平台的方法。本书可以作为高等院校电子、自动化、机电一体化计算机等相关专业嵌入式系统课程的教材,也可作为从事嵌入式系统应用开发工程师的参考资料。本书配套多媒体教学课件。 序 1. ARM嵌入式系统的发展趋势 由于网络与通信技术的发展,嵌入式系统在经历了近20年的发展历程后,又进入了一个新的历史发展阶段,即从普遍的低端应用进入到一个高、低端并行发展,并且不断提升低端应用技术水平的时代,其标志是近年来32位MCU的发展。 32位MCU的应用不会走8位机百花齐放、百余种型号系列齐上阵的道路,这是因为在8位机的低端应用中,嵌入对象与对象专业领域十分广泛而复杂;而当前32位MCU的高端应用则多集中在网络、通信和多媒体技术领域,32位MCU将会集中在少数厂家发展的少数型号系列上。 在嵌入式系统高端应用的发展中,曾经有众多的厂家参与,很早就有许多8位嵌入式MCU厂家实施

了8位、16位和32位机的发展计划。后来,8位和32位机的技术扩展侵占了16位机的发展空间。传统电子系统智能化对8位机的需求使这些厂家将主要精力放在8位机的发展上,形成了32位机发展迟迟不前的局面。当网络、通信和多媒体信息家电业兴起后,出现了嵌入式系统高端应用的市场;而在嵌入式系统的高端应用中,进行多年技术准备的ARM公司适时地推出了32位ARM系列嵌入式微处理器,以其明显的性能优势和知识产权平台扇出的运行方式,迅速形成32位机高端应用的主流地位,以至于使不少传统嵌入式系统厂家放弃了自己的32位发展计划,转而使用ARM内核来发展自己的32位MCU。甚至在嵌入式系统发展史上做出卓越贡献的Intel公司以及将单片微型计算机发展到微控制器的PHILIPS公司,在发展32位嵌入式系统时都不另起炉灶,而是转而使用ARM公司的嵌入式系统内核来发展自己的32位MCU。 网络、通信、多媒体和信息家电时代的到来,无疑为32位嵌入式系统高端应用提供了空前巨大的发展空间;同时,也为力不从心的8位机向高端发展起到了接力作用。一般来说,嵌入式系统的高、低端应用模糊地界定为:高端用于具有海量数据处理的网络、通信和多媒体领域,低端则用于对象系统的控制领域。然而,控制系统的网络化、智能化的发展趋势要求在这些8位机的应用中提升海量数据处理能力。当8位机无法满足这些提升要求时,便会转而求助32位机的解决办法。因此,32位机的市场需求发展由两方面所致:一方面是高端新兴领域(网络、通信、多媒体和信息家电)的拓展;另一方面是低端控制领域应用在数据处理能力的提升要求。 后PC时代的到来以及32位嵌入式系统的高端应用吸引了大量计算机专业人士的介入,加之嵌入式系统软/硬件技术的发展,导致了嵌入式系统应用模式的巨大变化,即使嵌入式系统应用进入到一个基于软/硬件平台、集成开发环境的应用系统开发时代,并带动了SoC技术的发展。 在众多嵌入式系统厂家参与下,基于ARM系列处理器的应用技术会在众多领域取得突破性进展。Intel 公司将ARM系列向更高端的嵌入式系统发展;而PHILIPS公司则在向高端嵌入式系统发展的同时,向低端的8位和16位机的高端应用延伸。Intel公司和PHILIPS公司的发展都体现了各自的特点,并充分发挥了各自的优势。因此,在32位嵌入式系统的应用中,ARM系列会形成ARM公司领军,众多厂家参与,计算机专业、电子技术专业以及对象专业人士共同推动的局面,形成未来32位嵌入式系统应用的主流趋势。这种集中分工的技术发展模式有利于嵌入式系统的快速发展。 面对这种形势,近年来,嵌入式系统业界人士掀起了广泛学习嵌入式系统理论及应用开发的热潮,相关的出版物和培训班如雨后春笋不断出现。无论是原有的嵌入式系统业界人士,还是刚进入嵌入式系统的人们,都渴望了解嵌入式系统理论,掌握嵌入式系统的应用技术。高等院校面对这种形式,也迫切需要开设相应的课程。因此,为了满足高等院校嵌入式系统教学以及社会上各种培训的需要,作者结合几年来在嵌入式系统领域教学与开发的经验和特点,编写了本套《ARM嵌入式系统系列教程》。 2. 本套教程的组成 本套教程由理论教材、实验教材和学习指导3部分(共5册)组成,且配套的所有教学实验平台都是基于PHILIPS公司的LPC2000系列ARM微控制器(基于ARM7TDMI S核心)而设计。 理论教材 《ARM嵌入式系统基础教程》 ——含开放式多媒体教学课件,可自行添加或删减内容 实验教材 《ARM嵌入式系统实验教程(一)》 ——含开放式多媒体实验教学课件,可自行添加或删减内容 ——配套EasyARM2200教学实验平台 《ARM嵌入式系统实验教程(二)》 ——含开放式多媒体实验教学课件,可自行添加或删减内容

51单片机的串行口扩展方法

51单片机的串行口扩展方法 -------------------------------------------------------------------------------- 摘要:在以单片机为核心的多级分布式系统中,常常需要扩展单片机的串行通信口,本文分别介绍了基于SP2538专用串行口扩展芯片及Intel8251的两种串行口扩展方法,并给出了实际的硬件电路原理及相应的通信程序段。 关键词:串口扩展;单片机;SP2538;Intel8251 1 引言 在研究采场瓦斯积聚模拟试验台的过程中,笔者设计了主从式多机采控系统结构。主从式多机控制系统是实时控制系统中较为普遍的结构形式,它具有可靠性高,结构灵活等优点。当选用单串口51单片机构成这种主从式多机系统时,51单片机一方面可能要和主机Computer通信,一方面又要和下位机通信,这时就需要扩展串行通道。本文具体介绍了两种串行通道的扩展方法。 2 串行口的扩展方法 常用的标准51单片机内部仅含有一个可编程的全双工串行通信接口,具有UART的全部功能。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。当以此类型单片机构成分布式多级应用系统时,器件本身的串口资源就不够用了。笔者在实际开发中,查阅了有关资料,总结出如下两种常用而有效的串行通道扩展方法。 2.1 基于SP2538的扩展方法 SP2538是专用低功耗串行口扩展芯片,该芯片主要是为解决当前基于UART串口通信的外围智能模块及器件较多,而单片机或DSP原有的UART串口又过少的问题而推出的。利用该器件可将现有单片机或DSP的单串口扩展至5个全双工串口。使用方法简单、高效。 在应用SP2538扩展串行通道时,母串口波特率K1=2880*Fosc_in,单位是MHz,且Fosc_in 小于20.0MHz, 在SP2538输入时钟Fosc_in =20.0MHz时母串口可自适应上位机的56000bps 和57600bps两种标准波特率输入。子串口波特率K2=480*Fosc_in。 母串口和所有子串口都是TTL电平接口,可直接匹配其他单片机或TTL数字电路,如需连接PC机则必须增加电平转换芯片如MAX202 、MAX232 等。SP2538具有内置的上电复位电路和可关闭的看门狗*电路。上位机写命令字0x10可实现喂狗,写命令字0x15关闭看门狗,初次上电后看门狗处于激活状态或写命令字0x20激活看门狗*功能。上位机可通过芯片复位指令0x35在任何时候让芯片进行指令复位,也可通过芯片睡眠指令0x55在任何时候让芯片进入微功耗睡眠模式以降低系统功耗。初次上电后芯片不会自行进入睡眠模式,但只能由上位机通过母串口任意发送一个字节数据将其唤醒,其他子串口不具备这一功能。 图(1)是AT89C52单片机与SP2538的电路连接,图中,AT89C52的全双工串口与SP2538的母串口5相连,该串口同时也作为命令/数据口。SP2538的ADRI0、ADRI1、ADRI2分别与AT89C52的P2.3、P2.4、P2.5口相连,可用于选择发送数据是选择相应的串口0~4;ADRO0、ADRO1、ADRO2与P2.0、P2.1、P2.2相连,用于判断接收的数据来自哪一个串口。SP2538的时钟频率选为20.0MHZ,此时母串口5的波特率为57600bps,串口0~4的波特率为9600bps。

基于SPI的多串口扩展方案

基于SPI的多串口扩展方案(1扩8) 前言 随着电子技术的发展,以微处理器(MCU),PC机组成的主从分布式测控系统已成为当今复杂的测控系统的典型解决方案。单片机以其独特的串口通信功能为主,从设备之间的数据传输提供了便利。但是51系列单片机只提供了一个全双工的串行通信接口,这对于一个实时性要求较高,测控功能复杂的系统而言是一个美中不足之处。在我们设计的智能密集测控系统中,就需要测控工具有多个实时全双工的串行通信接口。我们现在只能是选择有多个串口的单片机或者是进行串口扩展,选择多串口的单片机肯定成本比较高,而且局限性比较大;那么最好的方案还是进行串口扩展。根据本人的对多款串口扩展芯片在性能、价格上的比较,个人认为维肯电子的VK3266这款串口扩展芯片还是相当不错的,下面我们就也VK3266来对单片机的串口进行扩展。以单片机的一个串口,扩展为4个全双工的串口。

1、系统原理框图 2、 硬件原理图 硬件原理框图介绍:本设计主要依赖的硬件是2块VK3224串口扩展芯片实现一个spi 接口扩展8个uart 接口,外部电路实现简单。主要是晶振电路,复位电路,spi 接口电路。

3、VK3224芯片介绍 1.产品概述 VK3224是SPI TM接口的4通道UART器件。VK3224实现SPI桥接/扩展4个串口(UART)的功能。 扩展的子通道的UART具备如下功能特点: 每个子通道UART的波特率、字长、校验格式可以独立设置,最高可以提供1Mbps的通信速率。 每个子通道可以独立设置工作在IrDA红外通信。 每个子通道具备收/发独立的16 BYTE FIFO,FIFO的中断为4级可编程条件触发点。 VK3224采用SOP20绿色环保的无铅封装,可以工作在2.5~5.5V的宽工作电压范围,具备可配置自动休眠/唤醒功能。 [注]:SPI TM为MOTOLORA公司的注册商标。 2.基本特性 2.1 总体特性 低功耗设计,可以配置自动休眠,自动唤醒模式 宽工作电压设计,工作电压为 2.5V~5.5V 精简的配置寄存器和控制字,操作简单可靠 提供工业级和商业级产品 高速CMOS工艺 采用符合绿色环保政策的SOP20无铅封装

用多路复用器扩展MCU串口

用多路复用器扩展MCU串口 多微控制器(MCU)/微机组成的分布式、主从式系统是现代复杂通信、控制系统的典型解决方案。分布式环境下的多机协同,要求系统状态和控制信息在多机间进行快速传递,这通常借助简单有效的串行通信方式。现有的微控制器一般所带的串行接口非常适用于点对点通信的场合;但对于实时性要求高的多机通信场合,这类接口必须在串口数量和功能上进行扩展,才能满足对实时性要求较高的应用场合的需要。 ?本文讨论了一种适用于多机实时环境下的、新的可重配置串口扩展方案。图1为本方案框图。多路复用器是本方案的硬件核心。方案的要点是利用Mux动态地将MCU的串口在串行通道间切换,以达到串口扩展的目的。本文中MCU 以89C51为例,Mux 以MAX353为例。 ?MAX353 是Maxim公司推出的高性能多路复用器,实际可构成两对单刀单掷模拟开关,两对开关状态由一个引脚控制。MAX353基本参数为导通电阻小于35Ω;导通时间小于175ns,关断时间小于145ns。以上参数完全满足本方案的使用要求。 ?以下介绍本串口扩展方案的基本工作原理。 ?两串行通道和MAX353、89C51的连接两串行通道CH1,CH2通过多路复用器MAX353接到89C51的串口,多路复用器MAX353由89C51的一个I/O引脚控制。其中串行通道CH2的输出TXD2同时接到89C51的外部中断输入请 求INT0或INT1上。为了适应各种串口通信协议的需要,可在电路中加上电平转换器件,如图1所示。 ?中断源的使用和设置CH1仍旧使用串口中断,而CH2使用外部中断INT0或INT1(下面以INT0为例)。当CH2有信息来时,TXD2上将出现起始标志:

单片机并口扩展

单片机IO口扩展技术 2010-05-09 18:13 0 引言 在单片机家族的众多成员中,MCS-51系列单片机以其优越的性能、成熟的技术、高可靠性和高性价比,占领了工业测控和自动化工程应用的主要市场,并成为国内单片机应用领域中的主流机型。 MCS-51单片机的并行口有P0、P1、P2和P3,由于P0口是地址/数据总线口,P2口是高8位地址线,P3口具有第二功能,这样,真正可以作为双向I/O口应用的就只有P1口了。这在大多数应用中是不够的,因此,大部分MCS-51单片机应用系统设计都不可避免的需要对P0口进行扩展。 由于MCS-51单片机的外部RAM和I/O口是统一编址的,因此,可以把单片机外部64K字节RAM空间的一部分作为扩展外围I/O口的地址空间。这样,单片机就可以像访问外部RAM存储器单元那样访问外部的P0口接口芯片,以对P0口进行读/写操作。用于P0口扩展的专用芯片很多。如8255可编程并行P0口扩展芯片、8155可编程并行P0口扩展芯片

等。本文重点介绍采用具有三态缓冲的74HC244芯片和输出带锁存的74HC377芯片对P0口进行的并行扩展的具体方法。 1 输入接口的扩展 MCS-51单片机的数据总线是一种公用总线,不能被独占使用,这就要求接在上面的芯片必须具备“三态”功能,因此扩展输入接口实际上就是要找一个能够用于控制且具备三 态输出的芯片。以便在输入设备被选通时,它能使输入设备的数据线和单片机的数据总线直接接通;而当输入设备没有被选通时,它又能隔离数据源和数据总线(即三态缓冲器为高阻抗状态)。 1.1 74HC2244芯片的功能 如果输入的数据可以保持比较长的时间(比如键盘),简单输入接口扩展通常使用的典型芯片为74HC244,由该芯片可构成三态数据缓冲器。74HC244芯片的引脚排列如图1所示。

CD4052 单片机串行口扩展技术应用

CD4052 单片机串行口扩展技术应用 CD4052 是一种数字控制的模拟数据选择/ 分配器,本文将它用于UART串口扩展,解决了普通单片机UART串口太少的问题。文中给出该器件的主要特性、引脚说明及电气特性,并以A T89C51 单片机为例给出多串口扩展应用电路。 1 概述 当前,以单片机为核心构成的智能化测控系统及电子产品不断涌现,为了满足数字化及智能化要求,许多外围电路功能模块、部件、器件及传感器也具备了UART 串口通信功能,而现阶段的8 位、16 位、32位单片机却大部分仅提供一个UART 串口,这样就很难满足系统中一方面要与具有UART 功能的串口部件通信,另一方面又要与上位机通信的要求。利用CD4052 做多串口扩展器,可很好地解决此问题。 2 封装及引脚功能 该器件具有SOP、SOIC、TSSOP和PDIP四种封装形式,皆是16 个引脚。图1 所示为其PDIP封装引脚分布图,图2 是CD4052 的逻辑图,数字控制真值表见表1。 图1 CD4052PDIP引脚分布图 3 工作特性 CD4052 模拟数据选择/ 分配器是数字控制的模拟开关,具有低导通阻抗和非常低的关断泄漏电流。315V 的数字信号可以控制15VP- P 的模拟信号。例如,若VDD = 5V , VSS = 0V , VEE = - 5V ,则的数字信号可以控制- 5V + 5V 的模拟信号输入输出。数据选择器在整个VDDVSS 和VDDVEE 范围具有非常低的静态功耗,而且与控制信号的逻辑状态无关。 图2 CD4052 的逻辑图

表1 真值表 CD4052 是一个独立的4 通道数据选择器,具有二进制控制输入端A、B 和一个禁止输入INH。A、B的四种二进制组合状态用来在四对通道中选择其中的一对,当逻辑“1”加到INH 输入端时,所有的通道都关闭。CD4052 的器件特性为: 1) 宽范围的数字和模拟信号电平:数字315V ,模拟可达15VP- P。 2) 低导通阻抗:在VDD - VEE = 15V 的条件下,整个15V P - P信号输入范围的典型值为80Ω。

基于单片机的系统扩展

基于单片机的系统扩展 一、实验目的1、学习片外存贮器扩展方法。2、学习数据存贮器不同的 读写方法。3、学习片外程序存贮器的读方法。二、实验内容1.实验原理图: 2、实验内容(1)使用一片2764EPROM,作为片外扩展的程序存贮器,对 其进行读。(2)使用一片6264RAM,作为片外扩展的数据存贮器,对其进 行读写(使用键盘监控命令和程序运行两种方法)。3、实验说明(1)在使用键 盘监控命令读片外扩展的程序存贮器2764 中内容时,由于本系统中该程序存 贮器作为用户目标系统的程序存贮器,因此DVCC 系统必须处于仿真2 状态, 即H.....态,用MEM 键即可读出。(2)在使用键盘监控命令读写片外扩展的 数据存贮器6264 中的内容时,由于本系统中该数据存贮器作为用户目标系统 的数据存贮器,因此DVCC 系统处于仿真1 态(P.....态)或仿真2 态(H.....态),用ODRW 键即可读写。(3)读写数据的选用。本实验采用的是 55H(0101,0101)与AAH(1010,1010),一般采用这两个数据的读写操作就可 查出数据总线的短路、断路等,在实验调试用户电路时非常有效。(4)在仿 真1 态即P.....状态下,编写程序对片外扩展的数据存贮器进行读写,若L1 灯 闪动说明RAM 读写正常。三、程序程序清单:ORG 0C80H MOV DPTR,#8000H MOV R6,#0FH MOV A,#55HRAM1: MOV R7,#0FFHRAM2: MOVX @DPTR,A CLR P1.0 INC DPTR DJNZ R7,RAM2 DJNZ R6,RAM1 MOV DPTR,#8000H MOV R6,#0FHRAM3: MOV R7,#0FFHRAM4: MOVX A,@DPTR CJNE A,#55H,RAM6 SETB P1.0 INC DPTR DJNZ R7,RAM4 DJNZ R6,RAM3RAM5: CLR P1.0 CALL DELAY SETB P1.0 CALL DELAY SJMP RAM5DELAY: MOV R5,#0FFHDELAY1: MOV R4,#0FFH DJNZ R4,$ DJNZ R5,DELAY1 RETRAM6: SETB P1.0 SJMP RAM6 END 四、实验步骤1、片外

单片机多串行口设计方案

单片机多串行口设计方案 在以单片机为核心的测控系统中.微控制器往往需要两个或两个以上的串行口与其他主机或外设进行通讯,如何使系统具备多个串行接口,是一个具有普遍性的问题。尤其在航空航天领域,由于GPS、大气数据系统、数字罗盘、无线电高度表、甚至陀螺等航空电子设备普遍采用串行通讯方式,单片计算机系统就更需要有多个串行口以满足与外界信息交换的需要。常用的多串行口设计方法 ①选用多串行口单片机 直接选用多串行口单片机作为系统的CPU,显然是最直接有效的方法。现在有许多新型CPU配备两个或两个以上串行口,如W77E58、DS80C320、MSP430F149、C8051F020单片机和数字信号处理器TMS320C30有两个串行口,而cygnal的C8051F系列单片机有4-5个全双工的异步串行口。 ②用CPU的I/O模拟串行口 当串行口的波特率设为9600波特时,传送一个bit需要100us左右,对于一般的单片机而言,软件定时器完全有能力按异步串行通讯协议模拟出串行口的时序。所以,用CPU的两个I/O口和一个软件定时器,就可以纯粹用软件模拟出一个串行口来。文献介绍了一种具体的实现方法,发送时,只需按时序一位一位输出数据即可,接收时,首先利用外部中断检测到I/O接收口上的起始电平,然后利用定时器按半个bit的时间长度延时接收第一个bit的数据,再按一个bit的时间长度延时依此读取其他位的信号。 ③基于高速输入输出的软件串行口 80C196系列单片机配备了高速输入HSI和高速输出HSO接口.可以利用HSI和HSO来模拟串行口。数据的输出利用HSO,只要在HSO的定时器里写入与波特率对应的延迟时间,HSO每中断一次,输出一个数据位,直到停止位输出完毕。接收时,利用HSI自身的信号跳变检测功能检测起始位,并产生中断通知CPU开始接收数据,后续的数据位由软件定时器按波特率定时读取。文献详细介绍了实现方法,并给出了完整

51单片机如何进行ROM外扩

51单片机如何进行ROM外扩 强烈建议用户尽可能不要考虑外扩程序存储器,如果非扩不可,可以仿照 下图所示电路进行扩展 图中P0 口输出外部ROM 的低8 位地址信号,P2 口输出高8 位地址信号;ALE 端输出地址锁存信号,/PSEN 输出程序存储器输出使能信号。两个模块 P89V51RD2 单片机内部有64K 用户ROM 区和8K BOOT ROM 区两个模块两个模块在物理上是分开的,尽管地址重合,但一般不会发生冲突。 用户程序存储区P89V51RD2 内部有64K Flash ROM,不需要用户再进行ROM 扩展地址范围:0000H~FFFFH 其内部分配和其他51 系列单片机是相同的Flash ROM 可以反复擦除和下载程序擦除和编程的方法并行编程器ISP (在系统编程:In-System Program)直接调用单片机BOOTROM 区的IAP 函数IAP (在应用编程:In-Application Program)一般情况下优先使用ISP 方式,更方便、更快捷 关于BOOT ROM 区存储介质:Flash Memory 容量:8K 字节存储内容:ISP 引导程序和IAP 函数这些程序出厂时已经由PHILIPS 已经写入,用户可以对其修改,但建议一般用户不要试图修改它。单片机在复位后会等待400ms,如果 在此期间用户在上位计算机上运行了FlashMagic 等类似ISP 软件,且串口通信正常,单片机将进入BOOT ROM 区运行ISP 引导程序;否则,单片机在400ms 以后将自动从用户ROM 区0000H 单元开始运行用户程序关于ISPISP 在系统编程:In-System Program,指用户不必把单片机从目标板上取下来,在特定的软件配合下直接通过串口(或其他端口)就可以对单片机进行读取、擦除、设置和程序下载等操作,从而取代了并行编程器的很多功能。现在越来越

周立功写给单片机学习者

周立功写给学单片机的年轻人的 作为过来人思前想后,我感到完全有责任将发自心底的感受传递给年轻一代,“一个企业家心灵深处渴望优秀人才的卓越追求和深层次的叹息、痛苦和感受”。您们千万不要等到毕业求职时才觉得自己能力太差,世界上从来就没有后悔药。当然,如果您现在看了我写的这篇文章可能还不算晚,因为您还有机会在以后的岁月里奋起直追——“亡羊补牢,尤未为晚”。对于现在刚进入大学的学生,您应该更加珍惜这美好的求学机会,因为眨眼之间几年就过去了,您很快就会感到来自全社会生存竞争的压力,您面临的对手再也不仅仅是您身边的同学,今天您在班上的成绩的确是前几名,但一走到社会上去才感到是多么地脆弱而又多么地不堪一击。 在面试大多数本科生时,我仅仅是询问了一些有关MCS-51 系列单片机的基本原理,但却几乎很少有人能够完全答对,简直是五花八门。很多作为一个即将毕业的自动化专业本科生,至今还不知道单片机是这个专业的核心基础,难道不可悲吗?您的水平不高我完全心中有底,其实我只要求这些学生能够掌握单片机应用开发的基本技能,用汇编和C51 写过一些基本的程序,真正动手做过一些简单的项目,然后将自己做过的项目写成比较规范的文档。我想,这种形式的“自我介绍”肯定要比让别人看您那写的千遍一律的“八股文”简历不知要强多少倍,古人言:“一叶知秋”其实讲的就是这个道理。 平心而论只有具备这样基础的学生才配得上企业花钱对您进行二次“开发” 事实上,很多学生根本就不管老师平时是多么地劝导都听不进去,我认为您只要平时善于做一个有心人,主动一些多找老师请教,然后从大三开始帮老师打打下手干一些活。还有一个途径就是自己花钱购买一些学习开发实验板,加强动手能力的训练。但也有很多学生说没有钱,可事实上并非如此,

广州周立功单片机科技有限公司 MPS MP2155_r1.0

MP2155 High Efficiency Single Inductor Buck-Boost Converter with 2.2A Switches The Future of Analog IC Technology DESCRIPTION The MP2155 is a highly efficient, low quiescent current Buck-Boost converter, which operates from input voltage above, below and equal to the output voltage. The device provides power solution for products powered by a one-cell Lithium-Ion or multi-cell alkaline battery applications where the output voltage is within battery voltage range. The MP2155 uses a current mode, fixed frequency PWM control for optimal stability and transient response. The fixed 1MHz switching frequency and integrated low R DS(ON) N-channel and P-channel MOSFETs minimize the solution footprint while maintaining high efficiency. To ensure the longest battery life MP2155 has an optional pulse skipping mode that reduces switching frequency under light load conditions. For other low noise applications where variable frequency power save mode may cause interference, the logic control input MODE pin forces fixed frequency PWM operation under all load conditions. The MP2155 operates with input voltage from 2V to 5.5V to provide adjustable output voltage (1.5V to 5V). With an input from 2.7V to 5.5V it can supply a maximum 1A current to load at 3.3V output voltage. The MP2155 is available in small QFN10-3x3mm package. FEATURES ?High Efficiency up to 95%. ?Load Disconnect During Shutdown ?Input Voltage Range: 2V to 5.5V ?Adjustable Output Voltage from 1.5V to 5V ? 3.3V/1A Load Capability from 2.7V-to-5.5V Vin ?1MHz Switching Frequency ?Pulse Skipping Mode at Light Load ? Typical 80μA Quiescent Current ?Internal Loop Compensation for Fast Response ?Internal Soft Start ?OTP, Hiccup SCP ?Available in Small 3x3mm QFN10 Package APPLICATIONS ? Battery-Powered Products ?Portable Instruments ?Tablet PCs ? POS Systems ? GSM/GPRS ? System Controls All MPS parts are lead-free and adhere to the RoHS directive. For MPS green status, please visit MPS website under Quality Assurance. “MPS” and “The Future of Analog IC Technology” are Registered Trademarks of Monolithic Power Systems, Inc. TYPICAL APPLICATION

51单片机串行口扩展法

51单片机串行口扩展法 1 引言 在研究采场瓦斯积聚模拟试验台的过程中,笔者设计了主从式多机采控系统结构。主从式多机控制系统是实时控制系统中较为普遍的结构形式,它具有可靠性高,结构灵活等优点。当选用单串口51单片机构成这种主从式多机系统时,51单片机一方面可能要和主机Computer通信,一方面又要和下位机通信,这时就需要扩展串行通道。本文具体介绍了两种串行通道的扩展方法。 2 串行口的扩展方法 常用的标准51单片机内部仅含有一个可编程的全双工串行通信接口,具有UART的全部功能。该接口电路不仅能同时进行数据的发送和接收,也可作为一个同步移位寄存器使用。当以此类型单片机构成分布式多级应用系统时,器件本身的串口资源就不够用了。笔者在实际开发中,查阅了有关资料,总结出如下两种常用而有效的串行通道扩展方法。 2.1 基于SP2538的扩展方法 SP2538是专用低功耗串行口扩展芯片,该芯片主要是为解决当前基于UART串口通信的外围智能模块及器件较多,而单片机或DSP原有的UART串口又过少的问题而推出的。利用该器件可将现有单片机或DSP的单串口扩展至5个全双工串口。使用方法简单、高效。 在应用SP2538扩展串行通道时,母串口波特率K1=2880*Fosc_in,单位是MHz,且Fosc_in 小于20.0MHz, 在SP2538输入时钟Fosc_in =20.0MHz时母串口可自适应上位机的56000bps 和57600bps两种标准波特率输入。子串口波特率K2=480*Fosc_in。 母串口和所有子串口都是TTL电平接口,可直接匹配其他单片机或TTL数字电路,如需连接PC机则必须增加电平转换芯片如MAX202 、MAX232 等。SP2538具有内置的上电复位电路和可关闭的看门狗监控电路。上位机写命令字0x10可实现喂狗,写命令字0x15关闭看门狗,初次上电后看门狗处于激活状态或写命令字0x20激活看门狗监控功能。上位机可通过芯片复位指令0x35在任何时候让芯片进行指令复位,也可通过芯片睡眠指令0x55在任何时候让芯片进入微功耗睡眠模式以降低系统功耗。初次上电后芯片不会自行进入睡眠模式,但只能由上位机通过母串口任意发送一个字节数据将其唤醒,其他子串口不具备这一功能。 图(1)是AT89C52单片机与SP2538的电路连接,图中,AT89C52的全双工串口与SP2538的母串口5相连,该串口同时也作为命令/数据口。SP2538的ADRI0、ADRI1、ADRI2分别与A T89C52的P2.3、P2.4、P2.5口相连,可用于选择发送数据是选择相应的串口0~4;ADRO0、ADRO1、ADRO2与P2.0、P2.1、P2.2相连,用于判断接收的数据来自哪一个串口。SP2538的时钟频率选为20.0MHZ,此时母串口5的波特率为57600bps,串口0~4的波特率为9600bps。 下面是与上述硬件电路相关的接口程序,该程序用A51汇编语言编制,程序仅说明了中断方式下对子串口0(TX0、RX0)的操作,其它子串口类似。 TBLOCK DATA 20H RBLOCK DATA 30H LENGTH DATA 14H … TXR_REV_SEND: CLR ES

项目6 单片机外部总线与接口扩展技术

项目6 单片机外部总线 与接口扩展技术 项目要求: 本项目通过对单片机外部总线与接口扩展技术分析介绍,要求学生会对单片机进行功能扩展及接口控制,掌握有关接口芯片的功能特征以及操作方法等。

1、掌握单片机外部总线的功能并会对其进行操作。 2、掌握有存储器扩展原理及方法;掌握一些新型串行接口的技术路线以及相关接口芯片的应用及操作方法。 3、理解数/模(D/A)转换及模/数(A/D)转换的概念,掌握D/A及A/D转换的实现方法,掌握常用D/A及A/D转 换芯片的接口扩展技术。 技能目标: 1、认识有关存储器芯片、新型串行接口芯片、D/A及 A/D转换芯片,懂得相关技术指标的含义,能根据设计目标对芯片进行选型。 2、能根据系统要求设计外部总线接口扩展电路及控制程序,并完成制作。

MCS-51单片机内部虽然集成了储存器、I/O口、定时器/计数器等硬件资源,但随着单片机应用的范围日益广泛,对其资源提出了更高的要求,在一些情况下使用时内部资源不够,为了满足各种复杂的应用系统的要求,可在单片机外部扩展存储器和各种功能的器件。 MCS-51单片机有着完善的并行三总线结构,利用这个优势可以方便地扩展外部资源,特别是存储器的扩展。随着单片机技术的发展,串行外设接口技术受到的重视程度越来越高,串行外设接线简单灵活,占用单片机接口数量少,系统硬件结构简单,易形成用户模块化结构,对于增加系统扩展的灵活性、降低硬件成本、缩短产品开发周期具有现实意义。

由于单片机只能处理数字量,而在实际应用中,各种模拟信号(如温度、压力、流量等)十分常见,这就需要将模拟信号转变为数字信号才能送入单片机处理;反之单片机只能输出数字量的控制信号,如果被控制对象需接收模拟信号,则必须将数字量转变为模拟量才能实施控制。因此模/数(A/D)转换和数/模(D/A)转换也是单片机接口扩展的重要任务之一。

相关文档
最新文档