串行输入输出端口的使用10课案.docx
《串行输入输出端口的使用10课案.docx》由会员分享,可在线阅读,更多相关《串行输入输出端口的使用10课案.docx(30页珍藏版)》请在冰点文库上搜索。
串行输入输出端口的使用10课案
第10章串行输入/输出端口的使用——微控制器芯片之间通信的实现
目标
通过本章的学习,应掌握以下知识
●MSP430系列微控制器内部的串行数据传输模块
●通用串行接口(UniversalSerialInterface,USI)的使用
●串行外围接口(SerialPeripheralInterface,SPI)工作模式
●I2C接口(InterIntegratedCircuit,I2C)工作模式
●I2C总线的组成结构和技术术语
●I2C总线上数据传送的时序
引言
在第5章,利用软件的方法实现了同步串行方式的数据传输,驱动同步移位寄存器74164芯片,最后实现数码管的数据显示。
MSP430系列微控制器内部具有多种串行数据传输模块,使用这些模块可以降低软件开发的要求,同时还可以提高数据传输的速率。
MSP430x2xx芯片内部串行数据传输模块的基本组成单元是一个移位寄存器。
第5章中介绍的74164芯片也是一种移位寄存器,该芯片用来将串行格式的数据转换为并行数据格式。
当时钟上跳边沿到来时,74164芯片串行输入数据将被送到并行输出管脚Q0对应的触发器、同时并行输出管脚Q0对应触发器原有的数据移到并行输出管脚Q1对应的触发器、并行输出管脚Q1对应触发器原有的数据移到并行输出管脚Q2对应的触发器、……并行输出管脚Q6对应触发器原有的数据移到并行输出管脚Q7对应的触发器。
并行输出管脚Q7对应触发器的数据将被移出,或者丢弃。
在数据接收时,MSP430x2xx芯片内部串行数据传输模块的移位寄存器工作与74164芯片类似,当数据全部移入移位寄存器就能够读这个数据;在数据发送时,先以并行输入的方式向移位寄存器写数据,然后将它逐位移出。
尽管基于微控制器进行电路功能的实现是通过编写程序完成的,但是硬件功能是编写程序的基础。
充分地了解芯片的硬件组成和工作原理将对它的完美使用提供扎实的支持。
描述数字系统和数字电路的方法和用来实现这些方法的技术不断变化,但是作为理论基础的基本原理并没有改变,理解74164移位寄存器芯片的工作将对本章涉及的MSP430x2xx微控制器内部串行数据传输模块的工作带来方便。
10.1MSP430x2xx微控制器的串行接口
数字技术已经渗透到人类生活的众多领域,其中数字计算机是最著名和应用最广泛的。
尽管数字计算机影响,并改变了我们生活的许多方面,不过许多人并不能准确地说出它的主要特点。
简单地说,计算机就是一个能够完成数字信号的算术运算、逻辑运算、比较判断等处理功能的数字系统。
计算机要处理数字信号,这就需要设法将数字信号输入计算机,完成处理的信号还需要从计算机中输出。
常用的数字信号的传送方式分并行方式和串行方式。
数字信号的并行传送方式的优点为数据传送速率快,但是这种方式需要占用较多的器件管脚,同时也不适用进行远距离的数据传送。
数字信号的串行传送方式虽然数据传送速率慢,不过这种方式占用器件的管脚数量较少,同时也适用进行远距离的数据传送。
本书就是采用同步串行传送方式从MSP430微控制器芯片向数码管显示电路传送信息。
串行传送方式使用较少数量传输线的特点也使得对放大器、调制器等硬件电路的需求小,因此适用进行远距离的数据传送。
MSP430x2xx微控制器提供串行接口支持芯片之间的数据传送。
为满足不同的应用需要,这里的串行接口具有多种类型:
通用串行接口(UniversalSerialInterface,USI)、通用串行通信接口(UniversalSerialCommunicationInterface,USCI)以及通用的同步/异步、接收/发送串行接口(UniversalSynchronous/AsynchronousReceive/TransmitPeripheralInterface,USART)。
并不是每种芯片内部存在所有这些接口,通常是一种芯片只具有一种类型的串行接口。
了解这些接口的工作原理和使用特点将支持选择合适的芯片类型,更方便地完成应用系统的开发。
TI公司提供的MSP430微控制器芯片选型手册给出了所有型号芯片包含的接口类型和接口数量。
通用串行接口(USI)模块存在于部分MSP430G2xx1和全部MSP430G2xx2芯片之中,MSP430G2231芯片之中具有USI接口模块。
这是一种同步串行通信接口模块,它具有2种工作模式,串行外围接口(SerialPeripheralInterface,SPI)和I2C接口(InterIntegratedCircuit,I2C)。
鉴于篇幅关系,本章只以USI接口模块的串行外围接口(SPI)工作模式和I2C接口工作模式为例,分别介绍这两种接口模式下的电路组成、工作过程、相关寄存器,并给出演示程序等内容。
串行外围接口(SPI)适合在2个芯片之间进行数据通信;I2C接口适合在多个芯片之间进行数据通信,当然它也能够在2个芯片之间进行数据通信。
包括MSP430F2619芯片在内的其它大部分MSP430x2xx微控制器芯片内部具有通用串行通信接口(USCI)模块。
这种模块也支持串行外围接口(SPI)和I2C接口这两种工作模式,因此本章所介绍的内容也会对这部分电路的工作提供支持。
不过需要注意,不同型号芯片的具体使用存在一些差别。
对通用串行通信接口(USCI)模块中所包含的其它工作模式相关内容有兴趣的读者可以参考TI公司的数据手册,MSP430x2xxFamilyUser’sGuide。
10.2通用串行接口(UniversalSerialInterface,USI)
MSP430微控制器的通用串行接口(USI)模块能够支持数字电路芯片之间的同步串行通信。
通用串行接口模块具有2种工作模式,串行外围接口(SerialPeripheralInterface,SPI)模式和I2C接口(InterIntegratedCircuit,I2C)模式。
两种工作模式由寄存器位“USII2C”选择。
无论工作在哪种模式,移位寄存器,USISR(USIShiftRegister),都是该外围模块的最基本组成单元。
移位寄存器可以利用软件写入数据,再进行数据的串行发送;接收的串行传输数据也将进入这个寄存器,然后由软件进行读取。
10.2.1串行外围接口(SPI)
通用串行接口(USI)模块工作在串行外围接口(SPI)模式下的方框图如图10.1所示。
图10.1USI工作在SPI模式下的方框图
串行外围接口(SPI)是一种3线同步串行通信接口。
图10.1中的管脚“SDO”为串行数据输出管脚、管脚“SDI”为串行数据输入管脚、管脚“SCLK”为串行时钟管脚。
串行时钟管脚“SCLK”是一个双向管脚。
当工作在主模式状态,管脚“SCLK”为输出管脚,它输出串行外围模块产生的时钟信号;当工作在从模式状态,管脚“SCLK”为输入管脚,它接收外部电路提供的时钟信号。
图10.1中的“USISR”方框就是通用串行接口的移位寄存器。
在完成相关配置,向移位寄存器写入数据就可以完成数据的串行同步发送,接收过程结束以后从该移位寄存器可以读取数据。
利用控制信号“USI16B”,移位寄存器可以配置为8位,或者16位;利用控制信号“USILSB”,移位寄存器中的内容可以配置为数据的高位在前,或者低位在前。
移位寄存器的数据移位工作由移位时钟信号“ShiftClock”和“BitCounter”位计数器方框的输出信号“USICNTx”联合进行控制。
位计数器是一个减法计数器,它对移位寄存器移入,或者移出,的数据位进行计数。
每完成一次移位,计数器内容减1。
当计数器的内容减到0的时候,它将停止计数,并置位计数器中断标志“USIIFG”。
置位的计数器中断标志“USIIFG”将停止串行时钟信号,进而停止移位寄存器的移位工作。
当清零控制信号“USIIFGCC”,向计数器“BitCounter”写入大于0的“USICNTx”数值能自动清除计数器中断标志“USIIFG”。
移位时钟信号“ShiftClock”同时控制移位寄存器和计数器的工作。
在该信号上升边沿的驱动下,计数器内容减1,移位寄存器中的数据移动1位。
当工作在主模式下,信号“USIMST”使得串行时钟信号“USICLK”能够输出。
该信号可以用来产生移位时钟信号“ShiftClock”,同时通过管脚“SCLK”输出。
当工作在从模式下,管脚“SCLK”作为输入管脚使用,接收外部的时钟信号来产生移位时钟信号“ShiftClock”。
串行时钟信号“USICLK”的驱动源可以在多个信号源之中选择。
在信号“USISSELx”的控制下,在管脚“SCLK”输入信号;MSP430的系统时钟信号ACLK或者SMCLK;定时器Timer_A捕捉/比较模块的输出信号TA0、TA1或者TA2;由软件置位和清零寄存器位“USISWCLK”产生的信号之中选择一个。
选择的信号能够通过“ClockDivider”方框在信号“USIDIVx”的控制下实现分频。
计数器中断标志“USIIFG”能够停止串行时钟信号“USICLK”的输出。
串行外围接口(SPI)的数据与时钟之间能够选择多种时间关系,选择由信号“USICKPH”和“USICKPL”进行控制。
数据与时钟之间的所有时间关系如图10.2所示。
这里移位寄存器的宽度选择8位,数据的MSB位在先。
图10.2SPI模式数据与时钟之间的时间关系图
MSP430微控制器的串行外围接口(SPI)提供多种数据与时钟的时间关系使得它能与许多种类的数字芯片进行数据交换。
例如选择USICKPH=1和USICKPL=0,这时串行时钟波形如图10.2所示的第3行波形;串行数据波形如第6行波形。
这样的时钟与数据之间的时间关系将满足8位移位寄存器(串行输入,并行输出)74164所需要的时间关系。
程序示例10.1将利用这种工作状态完成对1位数码管的显示驱动。
图10.2也给出串行外围接口在主模式下的工作过程。
数据发送时,首先由软件向移位寄存器写入待传送的数据;接着向移位计数器装入移位个数数据来启动串行数据输出的工作过程;移位计数器内容减到0将置位中断标志“USIIFG”,该标志停止时钟“USICLK”输出,停止串行传输过程。
数据接收时,首先向移位计数器装入移位个数数据来启动串行数据输入的工作过程;移位计数器内容减到0将置位中断标志“USIIFG”,停止串行传输过程;当中断标志“USIIFG”置位,这时就能够从移位计数器中读取数据。
使用MSP430芯片管脚传输串行信号还需要用信号“USIPEx”使能相关管脚。
这些相关管脚可以配置为并行数据输入/输出管脚,这并不影响串行外围接口信号的传输,同时还可以将并行数据输入/输出管脚的中断功能用在串行数据的接收时应用。
信号“USIGE”和“USIOE”用于使能串行数据的输出。
串行外围接口(SPI)的软件复位控制位“USISWRST”置位能够清零计数器中断标志“USIIFG”,但同时阻止时钟信号进入移位寄存器和计数器,不过这时不影响移位寄存器和计数器中的内容。
10.2.2I2C接口(InterIntegratedCircuit,I2C)
I2C接口,也称为I2C总线,是一种专门设计来支持数字集成电路芯片之间通信的接口协议。
这是一种2线同步串行通信接口,包括串行数据线,SDA,和串行时钟线,SCL。
这种接口能够支持多个芯片之间的通信,即可以由所连接的多个器件控制总线。
表10.1给出了一些相关的技术术语。
表10.1I2C总线技术术语的定义
技术术语
说明
发送器件
把数据发送到总线的器件
接收器件
从总线上接收数据的器件
主器件
启动数据传送、产生时钟信号以及终止数据传送的器件,即控制总线工作的器件
从器件
被主器件寻址的器件
多主器件
多个主器件可以同时企图控制总线而不破坏总线信息
仲裁
多个主器件可以同时企图控制总线时只允许一个主器件控制总线并不破坏总线信息
同步
2个以上器件时钟信号同步过程
图10.3给出连接到I2C总线上多个器件的连接示意图。
连接到I2C总线上的这些器件能够显示表10.1列出技术术语的特征,例如主器件和从器件、发送和接收关系的特征。
需要注意,这些关系不是永久的,器件所扮演的角色取决总线当时数据的传送状态。
图10.3I2C总线结构图
以微控制器A与微控制器B之间的通信为例,这里设定微控制器A为主器件。
当微控制器A要把信息传送到微控制器B时,微控制器A(主器件)寻址微控制器B(从器件);微控制器A(主发送)发送数据到微控制器B(从接收);微控制器A(主器件)终止传送过程。
当微控制器A要从微控制器B接收时,微控制器A(主器件)寻址微控制器B(从器件);微控制器A(主接收)接收微控制器B(从发送)发送的数据;微控制器A(主器件)终止传送过程。
I2C总线属于多主机总线,也就是说可能同时有多个主器件企图控制总线的数据传送过程。
为了避免出现这种情况而引起的混乱,需要进行总线仲裁,也就是将总线的控制权赋予某1个主器件。
只能存在1个主器件控制总线的数据传送过程。
串行时钟线,SCL,上的时钟信号由主器件产生,主器件每传送1位数据产生1个时钟。
时钟同步是由连接在串行时钟线上的所有器件的“线与”完成的。
一旦1个器件的时钟变为低电平,将使串行时钟线的状态保持为低电平,只有全部器件的时钟都达到高电平,串行时钟线的状态才能成为高电平。
只要有1个器件的时钟状态处于低电平,其它器件时钟从低到高的变化将不会影响串行时钟线的状态。
只有全部器件时钟处于高电平状态,串行时钟线的状态才能为高电平。
这样就实现了时钟同步。
同步时钟控制所有器件,无论速度快慢,之间的协调工作。
串行数据线,SDA,上的数据仅在串行时钟线处于高电平期间有效,并且在时钟的高电平期间数据还必须保持稳定。
只有串行时钟线的状态为低电平时,串行数据线上的数据才允许发生改变。
串行数据线上的所有器件的连接关系也为“线与”方式。
I2C总线进行数据传送的过程具有专门的开始信号和结束信号。
这个开始信号和结束信号由主器件产生。
当串行时钟线处于高电平状态,串行数据线发生从高电平到低电平的跳变,即为数据传输过程的开始信号;当串行时钟线处于高电平状态,串行数据线发生从低电平到高电平的跳变,即为数据传输过程的结束信号。
I2C总线上数据传送的时序图如图10.4所示。
图10.4I2C总线上数据传送的时序图
图10.4所示的时序图为I2C总线处于主发送/从接收状态。
图中第1行波形为主发送器件输出的时钟波形,也为I2C总线的时钟线SCL上的信号波形;第2行波形为主发送器件输出的数据波形;第3行波形为从接收器件输出的数据波形;第4行波形为I2C总线的数据线SDA上的信号波形。
按照时间关系,首先主发送器件的数据管脚输出一个下降边沿。
由于I2C总线的所有器件的数据管脚采用“线与”方式连接,这时从接收器件的数据管脚应处于高电平状态,I2C总线的数据线SDA上信号波形将与主发送器件的数据管脚输出信号一致。
在I2C总线的时钟线SCL处于高电平状态,数据线SDA上的下降边沿为数据传输过程的开始信号。
数据传送以字节为单位,每个字节具有8位,数据传送时首先传送数据的最高位。
每次传输过程传输的字节数量是不受限制的。
在主发送数据过程中,从接收器件的数据管脚仍应处于高电平状态,这样I2C总线的数据线SDA上信号波形将与主发送器件的数据管脚输出信号一致。
发送数据的器件每完成1个字节8位数据的发送以后,它将释放数据线,即它的数据输出管脚维持高电平状态。
接收器件将使它的数据管脚处于低电平。
主器件这时还将产生1个时钟,即第9个时钟,接收器件在这个时钟的高电平期间将维持低电平状态。
接收器件输出的这个低电平为它接收1个字节以后产生的认可信号(响应)。
每个字节后面必须跟这样1个响应位。
完成所有数据字节的传送以后,主器件停止输出时钟信号,并使时钟线SCL维持在高电平状态。
主器件的数据输出管脚产生一个上升边沿。
数据线SDA上的上升边沿为数据传输过程的结束信号。
通用串行接口(USI)工作在I2C模式下的方框图如图10.5所示。
图10.5USI工作在I2C模式下的方框图
通用串行接口(USI)工作在I2C模式不仅要置位“USII2C”,还必须完成一些别的设置,如图10.5左上角的配置要求所示。
位“USICKPL”置位和位“USICKPH”清零是由于这时数据位与时钟只能保持这种时间关系;位“USILSB”清零是由于这时数据传送只能是高位在前;位“USI16B”清零是由于这时数据只能包含8位。
I2C接口是一种2线同步串行通信接口。
图10.5中的管脚“SDA”为串行数据输入/输出管脚,管脚“SCL”为串行时钟管脚。
串行时钟管脚“SCL”是一个双向管脚。
当工作在主模式状态,管脚“SCL”为输出管脚,它输出串行时钟信号;当工作在从模式状态,管脚“SCL”为输入管脚,它接收外部电路提供的时钟信号。
I2C接口可以工作在主模式,或者从模式。
当位“USIMST”置位,I2C接口将工作在主模式,这时的串行时钟信号“USICLK”能够通过管脚“SCL”输出,它同时也被用作移位寄存器的移位时钟信号“ShiftClock”。
当位“USIMST”清零,I2C接口将工作在从模式,这时的串行时钟信号“USICLK”由管脚“SCL”输入,被用作移位寄存器的移位时钟信号“ShiftClock”。
在进行数据发送时,首先需要向通用串行接口低字节移位寄存器(USISRL)写入待传送的数据,然后置位“USIOE”并向通用串行接口数位计数寄存器(USICNT)的位“USICNTx”写入数据“8”来启动数据发送过程。
位“USICNTx”中数据不等于0将清除中断标志“USIIFG”。
在完成8位数据的发送以后,中断标志“USIIFG”将置位。
在主模式情况下,中断标志“USIIFG”的置位将停止产生串行时钟信号“USICLK”;在从模式情况下,中断标志“USIIFG”的置位将使管脚“SCL”处于低电平状态,阻止其它器件产生串行时钟信号“USICLK”。
在接收数据接收器件的认可信号(响应)时,需要清零“USIOE”,并向通用串行接口数位计数寄存器(USICNT)的位“USICNTx”写入数据“1”来启动接收过程。
完成1位数据的接收以后,中断标志“USIIFG”将再次置位。
这时通用串行接口低字节移位寄存器(USISRL)最低位(LSB)的数据就是接收器件的认可信号(响应)。
在数据接收时,需要清零“USIOE”并向通用串行接口数位计数寄存器(USICNT)的位“USICNTx”写入数据“8”来启动数据接收过程。
在主模式情况下,产生串行时钟信号“USICLK”;在从模式情况下,将使管脚“SCL”处于高电平状态,接收其它器件产生串行时钟信号“USICLK”。
完成8位数据的接收以后,中断标志“USIIFG”将再次置位。
产生认可信号(响应),需要置位“USIOE”,并置位通用串行接口低字节移位寄存器(USISRL)最高位(MSB),然后通用串行接口数位计数寄存器(USICNT)的位“USICNTx”写入数据“1”来启动这个过程。
在I2C总线的时钟线SCL处于高电平状态,数据线SDA上的下降边沿为数据传输过程的开始信号。
开始信号能够以下过程实现,向通用串行接口低字节移位寄存器(USISRL)写入数据0x00;置位“USIGE”和“USIOE”使得时钟线SCL处于高电平状态,数据线SDA从高变低;清零“USIGE”准备输出时钟信号。
数据传送的结束信号能够以类似过程实现,即在I2C总线的时钟线SCL处于高电平状态,数据线SDA上产生上升边沿。
10.2.3通用串行接口(USI)的寄存器
通用串行接口(USI)的相关寄存器包括以下6个。
通用串行接口控制寄存器0和1,USICTL0和USICTL1;通用串行接口时钟控制寄存器,USICKCTL;通用串行接口数位计数寄存器,USICNT;通用串行接口低字节移位寄存器,USISRL;通用串行接口高字节移位寄存器,USISRH。
■通用串行接口控制寄存器0(USICTL0)
位
7
6
5
4
3
2
1
0
位名称
USIPE7
USIPE6
USIPE5
USILSB
USIMST
USIGE
USIOE
USISWRST
操作方式
rw
rw
rw
rw
rw
rw
rw
rw
复位值
0
0
0
0
0
0
0
1
USIPE7:
USISDI/SDA管脚功能使能控制位
0USISDI/SDA管脚功能不使能
1USISDI/SDA管脚功能使能
USI模块工作在SPI模式下,使能管脚SDI为数据输入管脚;工作在I2C模式下,使能管脚SDA为数据输入/输出管脚。
USIPE6:
USISDO/SCL管脚功能使能控制位
0USISDO/SCL管脚功能不使能
1USISDO/SCL管脚功能使能
USI模块工作在SPI模式下,使能管脚SDO为数据输出管脚;工作在I2C模式下,使能管脚SCL为时钟信号输入/输出管脚。
USIPE5:
USISCLK管脚功能使能控制位
0USISCLK管脚功能不使能
1USISCLK管脚功能使能
USI模块工作在SPI的从模式,管脚SCLK为时钟输入管脚。
工作在SPI的主模式,管脚SCLK为时钟输出管脚,工作在SPI的从模式,管脚SCLK为时钟输入管脚。
USILSB:
移位寄存器内部数据排列顺序选择控制位
0MSB为最高位
1LSB为最高位
USIMST:
主/从模式选择控制位
0从模式
1主模式
USIGE:
输出锁存使能控制位
0移位时钟使能输出锁存
1输出锁存一直使能
USIOE:
数据输出使能控制位
0输出不使能
1输出使能
USISWRST:
软件复位控制位
0USI模块处于工作状态
1USI模块处于复位状态
■通用串行接口控制寄存器1(USICTL1)
位
7
6
5
4
3
2
1
0
位名称
USICKPH
USII2C
USISTTIE
USIIE
USIAL
USISTP
USISTTIFG
USIIFG
操作方式
rw
rw
rw
rw
rw
rw
rw
rw
复位值
0
0
0
0
0
0
0
1
USICKPH:
时钟相位选择控制位
0数据改变发生在第1个SCLK时钟边沿,捕捉发生在跟着的时钟边沿
1数据捕捉发生在第1个SCLK时钟边沿,改变发生在跟着的时钟边沿
USII2C:
I2C模式使能控制位
0I2C模式不使能,工作在SPI模式
1I2C模式使能
USISTTIE:
START条件中断使能控制位
0START条件中断不使能
1START条件中断使能
USIIE:
USI计数中断使能控制位
0USI计数中断不使能
1USI计数中断使能
USIAL:
仲裁丢失标志位
0无仲裁丢失
1仲裁丢失
USISTP:
STOP条件接收标志位
0无STOP条件接收
1STOP条件接收
在通用串行接口数位计数寄存器,USICNT,的数位USICNTx的内容大于0,且中断标志USIIFGCC为0的情况下,标志USISTP能够自动清零。
USISTTIFG:
START条件中断标志
0无START条件
1出现START条件
USIIFG:
USI计数中断标志