串行输入输出端口的使用10_第1页
串行输入输出端口的使用10_第2页
串行输入输出端口的使用10_第3页
串行输入输出端口的使用10_第4页
串行输入输出端口的使用10_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第10章 串行输入/输出端口的使用 微控制器芯片之间通信的实现目标通过本章的学习,应掌握以下知识 MSP430系列微控制器内部的串行数据传输模块 通用串行接口(Universal Serial Interface,USI)的使用 串行外围接口(Serial Peripheral Interface,SPI)工作模式 I2C接口(Inter Integrated Circuit,I2C)工作模式 I2C总线的组成结构和技术术语 I2C总线上数据传送的时序引言在第5章,利用软件的方法实现了同步串行方式的数据传输,驱动同步移位寄存器74164芯片,最后实现数码管的数据显示。MSP430系列微控制器内

2、部具有多种串行数据传输模块,使用这些模块可以降低软件开发的要求,同时还可以提高数据传输的速率。MSP430x2xx芯片内部串行数据传输模块的基本组成单元是一个移位寄存器。第5章中介绍的74164芯片也是一种移位寄存器,该芯片用来将串行格式的数据转换为并行数据格式。当时钟上跳边沿到来时,74164芯片串行输入数据将被送到并行输出管脚Q0对应的触发器、同时并行输出管脚Q0对应触发器原有的数据移到并行输出管脚Q1对应的触发器、并行输出管脚Q1对应触发器原有的数据移到并行输出管脚Q2对应的触发器、并行输出管脚Q6对应触发器原有的数据移到并行输出管脚Q7对应的触发器。并行输出管脚Q7对应触发器的数据将被

3、移出,或者丢弃。在数据接收时,MSP430x2xx芯片内部串行数据传输模块的移位寄存器工作与74164芯片类似,当数据全部移入移位寄存器就能够读这个数据;在数据发送时,先以并行输入的方式向移位寄存器写数据,然后将它逐位移出。尽管基于微控制器进行电路功能的实现是通过编写程序完成的,但是硬件功能是编写程序的基础。充分地了解芯片的硬件组成和工作原理将对它的完美使用提供扎实的支持。描述数字系统和数字电路的方法和用来实现这些方法的技术不断变化,但是作为理论基础的基本原理并没有改变,理解74164移位寄存器芯片的工作将对本章涉及的MSP430x2xx微控制器内部串行数据传输模块的工作带来方便。10.1 M

4、SP430x2xx微控制器的串行接口数字技术已经渗透到人类生活的众多领域,其中数字计算机是最著名和应用最广泛的。尽管数字计算机影响,并改变了我们生活的许多方面,不过许多人并不能准确地说出它的主要特点。简单地说,计算机就是一个能够完成数字信号的算术运算、逻辑运算、比较判断等处理功能的数字系统。计算机要处理数字信号,这就需要设法将数字信号输入计算机,完成处理的信号还需要从计算机中输出。常用的数字信号的传送方式分并行方式和串行方式。数字信号的并行传送方式的优点为数据传送速率快,但是这种方式需要占用较多的器件管脚,同时也不适用进行远距离的数据传送。数字信号的串行传送方式虽然数据传送速率慢,不过这种方式

5、占用器件的管脚数量较少,同时也适用进行远距离的数据传送。本书就是采用同步串行传送方式从MSP430微控制器芯片向数码管显示电路传送信息。串行传送方式使用较少数量传输线的特点也使得对放大器、调制器等硬件电路的需求小,因此适用进行远距离的数据传送。MSP430x2xx微控制器提供串行接口支持芯片之间的数据传送。为满足不同的应用需要,这里的串行接口具有多种类型:通用串行接口(Universal Serial Interface,USI)、通用串行通信接口(Universal Serial Communication Interface,USCI)以及通用的同步/异步、接收/发送串行接口(Univer

6、sal Synchronous/Asynchronous Receive/Transmit Peripheral Interface,USART)。并不是每种芯片内部存在所有这些接口,通常是一种芯片只具有一种类型的串行接口。了解这些接口的工作原理和使用特点将支持选择合适的芯片类型,更方便地完成应用系统的开发。TI公司提供的MSP430微控制器芯片选型手册给出了所有型号芯片包含的接口类型和接口数量。通用串行接口(USI)模块存在于部分MSP430G2xx1和全部MSP430G2xx2芯片之中,MSP430G2231芯片之中具有USI接口模块。这是一种同步串行通信接口模块,它具有2种工作模式,串行

7、外围接口(Serial Peripheral Interface,SPI)和I2C接口(Inter Integrated Circuit,I2C)。鉴于篇幅关系,本章只以USI接口模块的串行外围接口(SPI)工作模式和I2C接口工作模式为例,分别介绍这两种接口模式下的电路组成、工作过程、相关寄存器,并给出演示程序等内容。串行外围接口(SPI)适合在2个芯片之间进行数据通信;I2C接口适合在多个芯片之间进行数据通信,当然它也能够在2个芯片之间进行数据通信。包括MSP430F2619芯片在内的其它大部分MSP430x2xx微控制器芯片内部具有通用串行通信接口(USCI)模块。这种模块也支持串行外围

8、接口(SPI)和I2C接口这两种工作模式,因此本章所介绍的内容也会对这部分电路的工作提供支持。不过需要注意,不同型号芯片的具体使用存在一些差别。对通用串行通信接口(USCI)模块中所包含的其它工作模式相关内容有兴趣的读者可以参考TI公司的数据手册,MSP430x2xx Family Users Guide。10.2 通用串行接口(Universal Serial Interface,USI)MSP430微控制器的通用串行接口(USI)模块能够支持数字电路芯片之间的同步串行通信。通用串行接口模块具有2种工作模式,串行外围接口(Serial Peripheral Interface,SPI)模式和

9、I2C接口(Inter Integrated Circuit,I2C)模式。两种工作模式由寄存器位“USII2C”选择。无论工作在哪种模式,移位寄存器,USISR(USI Shift Register),都是该外围模块的最基本组成单元。移位寄存器可以利用软件写入数据,再进行数据的串行发送;接收的串行传输数据也将进入这个寄存器,然后由软件进行读取。10.2.1 串行外围接口(SPI)通用串行接口(USI)模块工作在串行外围接口(SPI)模式下的方框图如图10.1所示。图10.1 USI工作在SPI模式下的方框图串行外围接口(SPI)是一种3线同步串行通信接口。图10.1中的管脚“SDO”为串行数

10、据输出管脚、管脚“SDI”为串行数据输入管脚、管脚“SCLK”为串行时钟管脚。串行时钟管脚“SCLK”是一个双向管脚。当工作在主模式状态,管脚“SCLK”为输出管脚,它输出串行外围模块产生的时钟信号;当工作在从模式状态,管脚“SCLK”为输入管脚,它接收外部电路提供的时钟信号。图10.1中的“USISR”方框就是通用串行接口的移位寄存器。在完成相关配置,向移位寄存器写入数据就可以完成数据的串行同步发送,接收过程结束以后从该移位寄存器可以读取数据。利用控制信号“USI16B”,移位寄存器可以配置为8位,或者16位;利用控制信号“USILSB”,移位寄存器中的内容可以配置为数据的高位在前,或者低位

11、在前。移位寄存器的数据移位工作由移位时钟信号“Shift Clock”和“Bit Counter”位计数器方框的输出信号“USICNTx”联合进行控制。位计数器是一个减法计数器,它对移位寄存器移入,或者移出,的数据位进行计数。每完成一次移位,计数器内容减1。当计数器的内容减到0的时候,它将停止计数,并置位计数器中断标志“USIIFG”。置位的计数器中断标志“USIIFG”将停止串行时钟信号,进而停止移位寄存器的移位工作。当清零控制信号“USIIFGCC”,向计数器“Bit Counter”写入大于0的“USICNTx”数值能自动清除计数器中断标志“USIIFG”。移位时钟信号“Shift Cl

12、ock”同时控制移位寄存器和计数器的工作。在该信号上升边沿的驱动下,计数器内容减1,移位寄存器中的数据移动1位。当工作在主模式下,信号“USIMST”使得串行时钟信号“USICLK”能够输出。该信号可以用来产生移位时钟信号“Shift Clock”,同时通过管脚“SCLK”输出。当工作在从模式下,管脚“SCLK”作为输入管脚使用,接收外部的时钟信号来产生移位时钟信号“Shift Clock”。串行时钟信号“USICLK”的驱动源可以在多个信号源之中选择。在信号“USISSELx”的控制下,在管脚“SCLK”输入信号;MSP430的系统时钟信号ACLK或者SMCLK;定时器Timer_A捕捉/比

13、较模块的输出信号TA0、TA1或者TA2;由软件置位和清零寄存器位“USISWCLK”产生的信号之中选择一个。选择的信号能够通过“Clock Divider”方框在信号“USIDIVx”的控制下实现分频。计数器中断标志“USIIFG”能够停止串行时钟信号“USICLK”的输出。串行外围接口(SPI)的数据与时钟之间能够选择多种时间关系,选择由信号“USICKPH”和“USICKPL”进行控制。数据与时钟之间的所有时间关系如图10.2所示。这里移位寄存器的宽度选择8位,数据的MSB位在先。图10.2 SPI模式数据与时钟之间的时间关系图MSP430微控制器的串行外围接口(SPI)提供多种数据与时

14、钟的时间关系使得它能与许多种类的数字芯片进行数据交换。例如选择USICKPH=1和USICKPL=0,这时串行时钟波形如图10.2所示的第3行波形;串行数据波形如第6行波形。这样的时钟与数据之间的时间关系将满足8位移位寄存器(串行输入,并行输出)74164所需要的时间关系。程序示例10.1将利用这种工作状态完成对1位数码管的显示驱动。图10.2也给出串行外围接口在主模式下的工作过程。数据发送时,首先由软件向移位寄存器写入待传送的数据;接着向移位计数器装入移位个数数据来启动串行数据输出的工作过程;移位计数器内容减到0将置位中断标志“USIIFG”,该标志停止时钟“USICLK”输出,停止串行传输

15、过程。数据接收时,首先向移位计数器装入移位个数数据来启动串行数据输入的工作过程;移位计数器内容减到0将置位中断标志“USIIFG”,停止串行传输过程;当中断标志“USIIFG”置位,这时就能够从移位计数器中读取数据。 使用MSP430芯片管脚传输串行信号还需要用信号“USIPEx”使能相关管脚。这些相关管脚可以配置为并行数据输入/输出管脚,这并不影响串行外围接口信号的传输,同时还可以将并行数据输入/输出管脚的中断功能用在串行数据的接收时应用。信号“USIGE”和“USIOE”用于使能串行数据的输出。串行外围接口(SPI)的软件复位控制位“USISWRST”置位能够清零计数器中断标志“USIIF

16、G”,但同时阻止时钟信号进入移位寄存器和计数器,不过这时不影响移位寄存器和计数器中的内容。10.2.2 I2C接口(Inter Integrated Circuit,I2C)I2C接口,也称为I2C总线,是一种专门设计来支持数字集成电路芯片之间通信的接口协议。这是一种2线同步串行通信接口,包括串行数据线,SDA,和串行时钟线,SCL。这种接口能够支持多个芯片之间的通信,即可以由所连接的多个器件控制总线。表10.1给出了一些相关的技术术语。表10.1 I2C总线技术术语的定义技术术语说明发送器件把数据发送到总线的器件接收器件从总线上接收数据的器件主器件启动数据传送、产生时钟信号以及终止数据传送的

17、器件,即控制总线工作的器件从器件被主器件寻址的器件多主器件多个主器件可以同时企图控制总线而不破坏总线信息仲裁多个主器件可以同时企图控制总线时只允许一个主器件控制总线并不破坏总线信息同步2个以上器件时钟信号同步过程图10.3给出连接到I2C总线上多个器件的连接示意图。连接到I2C总线上的这些器件能够显示表10.1列出技术术语的特征,例如主器件和从器件、发送和接收关系的特征。需要注意,这些关系不是永久的,器件所扮演的角色取决总线当时数据的传送状态。图10.3 I2C总线结构图以微控制器A与微控制器B之间的通信为例,这里设定微控制器A为主器件。当微控制器A要把信息传送到微控制器B时,微控制器A(主器

18、件)寻址微控制器B(从器件);微控制器A(主发送)发送数据到微控制器B(从接收);微控制器A(主器件)终止传送过程。当微控制器A要从微控制器B接收时,微控制器A(主器件)寻址微控制器B(从器件);微控制器A(主接收)接收微控制器B(从发送)发送的数据;微控制器A(主器件)终止传送过程。I2C总线属于多主机总线,也就是说可能同时有多个主器件企图控制总线的数据传送过程。为了避免出现这种情况而引起的混乱,需要进行总线仲裁,也就是将总线的控制权赋予某1个主器件。只能存在1个主器件控制总线的数据传送过程。串行时钟线,SCL,上的时钟信号由主器件产生,主器件每传送1位数据产生1个时钟。时钟同步是由连接在串

19、行时钟线上的所有器件的“线与”完成的。一旦1个器件的时钟变为低电平,将使串行时钟线的状态保持为低电平,只有全部器件的时钟都达到高电平,串行时钟线的状态才能成为高电平。只要有1个器件的时钟状态处于低电平,其它器件时钟从低到高的变化将不会影响串行时钟线的状态。只有全部器件时钟处于高电平状态,串行时钟线的状态才能为高电平。这样就实现了时钟同步。同步时钟控制所有器件,无论速度快慢,之间的协调工作。串行数据线,SDA,上的数据仅在串行时钟线处于高电平期间有效,并且在时钟的高电平期间数据还必须保持稳定。只有串行时钟线的状态为低电平时,串行数据线上的数据才允许发生改变。串行数据线上的所有器件的连接关系也为“

20、线与”方式。I2C总线进行数据传送的过程具有专门的开始信号和结束信号。这个开始信号和结束信号由主器件产生。当串行时钟线处于高电平状态,串行数据线发生从高电平到低电平的跳变,即为数据传输过程的开始信号;当串行时钟线处于高电平状态,串行数据线发生从低电平到高电平的跳变,即为数据传输过程的结束信号。I2C总线上数据传送的时序图如图10.4所示。图10.4 I2C总线上数据传送的时序图图10.4所示的时序图为I2C总线处于主发送/从接收状态。图中第1行波形为主发送器件输出的时钟波形,也为I2C总线的时钟线SCL上的信号波形;第2行波形为主发送器件输出的数据波形;第3行波形为从接收器件输出的数据波形;第

21、4行波形为I2C总线的数据线SDA上的信号波形。按照时间关系,首先主发送器件的数据管脚输出一个下降边沿。由于I2C总线的所有器件的数据管脚采用“线与”方式连接,这时从接收器件的数据管脚应处于高电平状态,I2C总线的数据线SDA上信号波形将与主发送器件的数据管脚输出信号一致。在I2C总线的时钟线SCL处于高电平状态,数据线SDA上的下降边沿为数据传输过程的开始信号。数据传送以字节为单位,每个字节具有8位,数据传送时首先传送数据的最高位。每次传输过程传输的字节数量是不受限制的。在主发送数据过程中,从接收器件的数据管脚仍应处于高电平状态,这样I2C总线的数据线SDA上信号波形将与主发送器件的数据管脚

22、输出信号一致。发送数据的器件每完成1个字节8位数据的发送以后,它将释放数据线,即它的数据输出管脚维持高电平状态。接收器件将使它的数据管脚处于低电平。主器件这时还将产生1个时钟,即第9个时钟,接收器件在这个时钟的高电平期间将维持低电平状态。接收器件输出的这个低电平为它接收1个字节以后产生的认可信号(响应)。每个字节后面必须跟这样1个响应位。完成所有数据字节的传送以后,主器件停止输出时钟信号,并使时钟线SCL维持在高电平状态。主器件的数据输出管脚产生一个上升边沿。数据线SDA上的上升边沿为数据传输过程的结束信号。通用串行接口(USI)工作在I2C模式下的方框图如图10.5所示。图10.5 USI工

23、作在I2C模式下的方框图通用串行接口(USI)工作在I2C模式不仅要置位“USII2C”,还必须完成一些别的设置,如图10.5左上角的配置要求所示。位“USICKPL”置位和位“USICKPH”清零是由于这时数据位与时钟只能保持这种时间关系;位“USILSB”清零是由于这时数据传送只能是高位在前;位“USI16B”清零是由于这时数据只能包含8位。I2C接口是一种2线同步串行通信接口。图10.5中的管脚“SDA”为串行数据输入/输出管脚,管脚“SCL”为串行时钟管脚。串行时钟管脚“SCL”是一个双向管脚。当工作在主模式状态,管脚“SCL”为输出管脚,它输出串行时钟信号;当工作在从模式状态,管脚“

24、SCL”为输入管脚,它接收外部电路提供的时钟信号。I2C接口可以工作在主模式,或者从模式。当位“USIMST”置位,I2C接口将工作在主模式,这时的串行时钟信号“USICLK”能够通过管脚“SCL”输出,它同时也被用作移位寄存器的移位时钟信号“Shift Clock”。当位“USIMST”清零,I2C接口将工作在从模式,这时的串行时钟信号“USICLK”由管脚“SCL”输入,被用作移位寄存器的移位时钟信号“Shift Clock”。在进行数据发送时,首先需要向通用串行接口低字节移位寄存器(USISRL)写入待传送的数据,然后置位“USIOE”并向通用串行接口数位计数寄存器(USICNT)的位“

25、USICNTx”写入数据“8”来启动数据发送过程。位“USICNTx”中数据不等于0将清除中断标志“USIIFG”。在完成8位数据的发送以后,中断标志“USIIFG”将置位。在主模式情况下,中断标志“USIIFG”的置位将停止产生串行时钟信号“USICLK”;在从模式情况下,中断标志“USIIFG”的置位将使管脚“SCL”处于低电平状态,阻止其它器件产生串行时钟信号“USICLK”。在接收数据接收器件的认可信号(响应)时,需要清零“USIOE”,并向通用串行接口数位计数寄存器(USICNT)的位“USICNTx”写入数据“1”来启动接收过程。完成1位数据的接收以后,中断标志“USIIFG”将再

26、次置位。这时通用串行接口低字节移位寄存器(USISRL)最低位(LSB)的数据就是接收器件的认可信号(响应)。在数据接收时,需要清零“USIOE”并向通用串行接口数位计数寄存器(USICNT)的位“USICNTx”写入数据“8”来启动数据接收过程。在主模式情况下,产生串行时钟信号“USICLK”;在从模式情况下,将使管脚“SCL”处于高电平状态,接收其它器件产生串行时钟信号“USICLK”。完成8位数据的接收以后,中断标志“USIIFG”将再次置位。产生认可信号(响应),需要置位“USIOE”,并置位通用串行接口低字节移位寄存器(USISRL)最高位(MSB),然后通用串行接口数位计数寄存器(

27、USICNT)的位“USICNTx”写入数据“1”来启动这个过程。在I2C总线的时钟线SCL处于高电平状态,数据线SDA上的下降边沿为数据传输过程的开始信号。开始信号能够以下过程实现,向通用串行接口低字节移位寄存器(USISRL)写入数据0x00;置位“USIGE”和“USIOE”使得时钟线SCL处于高电平状态,数据线SDA从高变低;清零“USIGE”准备输出时钟信号。数据传送的结束信号能够以类似过程实现,即在I2C总线的时钟线SCL处于高电平状态,数据线SDA上产生上升边沿。10.2.3 通用串行接口(USI)的寄存器通用串行接口(USI)的相关寄存器包括以下6个。通用串行接口控制寄存器0和

28、1,USICTL0和USICTL1;通用串行接口时钟控制寄存器,USICKCTL;通用串行接口数位计数寄存器,USICNT;通用串行接口低字节移位寄存器,USISRL;通用串行接口高字节移位寄存器,USISRH。 通用串行接口控制寄存器0(USICTL0)位76543210位名称USIPE7USIPE6USIPE5USILSBUSIMSTUSIGEUSIOEUSISWRST操作方式rwrwrwrwrwrwrwrw复位值00000001USIPE7:USI SDI/SDA管脚功能使能控制位0USI SDI/SDA管脚功能不使能1USI SDI/SDA管脚功能使能USI模块工作在SPI模式下,使能

29、管脚SDI为数据输入管脚;工作在I2C模式下,使能管脚SDA为数据输入/输出管脚。USIPE6:USI SDO/SCL管脚功能使能控制位0USI SDO/SCL管脚功能不使能1USI SDO/SCL管脚功能使能USI模块工作在SPI模式下,使能管脚SDO为数据输出管脚;工作在I2C模式下,使能管脚SCL为时钟信号输入/输出管脚。USIPE5:USI SCLK管脚功能使能控制位0USI SCLK管脚功能不使能1USI SCLK管脚功能使能USI模块工作在SPI的从模式,管脚SCLK为时钟输入管脚。工作在SPI的主模式,管脚SCLK为时钟输出管脚,工作在SPI的从模式,管脚SCLK为时钟输入管脚。

30、USILSB:移位寄存器内部数据排列顺序选择控制位0MSB为最高位1LSB为最高位USIMST:主/从模式选择控制位0从模式1主模式USIGE:输出锁存使能控制位0移位时钟使能输出锁存1输出锁存一直使能USIOE:数据输出使能控制位0输出不使能1输出使能USISWRST:软件复位控制位0USI模块处于工作状态1USI模块处于复位状态 通用串行接口控制寄存器1(USICTL1)位76543210位名称USICKPHUSII2CUSISTTIEUSIIEUSIALUSISTPUSISTTIFGUSIIFG操作方式rwrwrwrwrwrwrwrw复位值00000001USICKPH:时钟相位选择控制

31、位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,且中断标志

32、USIIFGCC为0的情况下,标志USISTP能够自动清零。USISTTIFG:START条件中断标志0无START条件1出现START条件USIIFG:USI计数中断标志0无中断申请1中断申请通用串行接口数位计数寄存器,USICNT,数位USICNTx内容为0时,该标志将置位;数位USICNTx内容不为0,且中断标志USIIFGCC为0的情况下,该标志能够自动清零。 通用串行接口时钟控制寄存器(USICKCTL)位754210位名称USIDIVxUSISSELxUSICKPLUSISWCLK操作方式rwrwrwrw复位值00000000USIDIVx:时钟分频系数选择控制位Bit7Bit6B

33、it5USIDIV2USIDIV1USIDIV00001001201040118100161013211064111128USISSELx:时钟信号源选择控制位Bit4Bit3Bit2USISSEL2USISSEL1USISSEL0000SCLK和工作在从模式001ACLK010SMCLK011SMCLK100USISWCLK位控制101TACCR0110TACCR1111TACCR2USICKPL:时钟极性选择控制位0低电平为不激活状态1高电平为不激活状态USISWCLK:软件时钟状态控制位0时钟低电平1时钟高电平 通用串行接口数位计数寄存器(USICNT)位76540位名称USISCLRE

34、LUSL16BUSIIFGCCUSICNTx操作方式rwrwrwrw复位值00000000USISCLREL:SCL释放控制位0在标志USIIFG置位时SCL线保持低1SCL线释放USI16B:16位移位寄存器使能控制位08位移位寄存器模式,仅低字节移位寄存器USISRL被使用116位移位寄存器模式USIIFGCC:USIIFG标志自动清除控制位0USIIFG标志当位USICNTx的内容不为0将自动清除1USIIFG标志不会自动清除USICNT40:Bit40,通用串行接口数位计数器 通用串行接口低字节移位寄存器(USISRL)位70位名称USISRLx操作方式rwUSISRLx:Bit70,

35、移位寄存器低字节。 通用串行接口高字节移位寄存器(USISRH)位70位名称USISRHx操作方式rwUSISRHx:Bit70,移位寄存器高字节。前面介绍的通用串行接口(USI)相关的6个寄存器都具有8位,可以采取字节访问。MSP430微控制器是一种16位器件,支持8位的字节形式访问,也支持16位的字形式访问。采用字形式的访问方式能够一次传输更多的信息。上述的6个8位寄存器可以组成3个16位寄存器,支持16位的字形式访问以加快访问速度。表10.1给出它们之间的组成关系。表10.1 16位寄存器与8位寄存器的关系表字寄存器名称字寄存器符号高字节寄存器低字节寄存器USI控制寄存器USICTLUS

36、ICTL1USICTL0USI时钟和计数控制寄存器USICCTLUSICNTUSICKCTLUSI移位寄存器USISRUSISRHUSISRL10.3 基于串行外围接口(SPI)的1位数码管显示如图10.2所示的工作在SPI模式下,串行数据与时钟之间的时间关系图,选择USICKPH=1和USICKPL=0,这时串行时钟波形为第3行波形;串行数据波形为第6行波形。这样的串行时钟与数据之间的时间关系能够满足驱动8位移位寄存器(串行输入,并行输出)74164所需要的时间关系。程序示例10.1为采用MSP430芯片内部串行外围接口(SPI)驱动1个数码管进行数据显示的演示程序。程序示例10.1/ 程序

37、名称:seg1_1spi/ 程序功能:通过 USI 的 SPI 模式控制 1 个 7 段共阴极数码管/ 目标芯片:MSP430G2231/ SDO(P1.6)串行数据输出管脚,SCLK(P1.5)串行时钟输出管脚/ 注意:使用片内时钟,时钟频率为默认值#include<msp430.h> / 包含名称定义和对应地址或数据的头函数void delay_1s(void); / 声明 1s 延迟函数const unsigned char decoder_seg710 / 声明显示代码 =0xee,0x82,0xdc,0xd6,0xb2,0x76,0x7e,0xc2,0xfe,0xf6;

38、/ 共阴极数码管显示代码void usi_spi_begin(void); / 声明 USI 模块的 SPI 模式配置函数int main(void) / 主函数 unsigned char data_seg7; / 声明显示数据变量 WDTCTL=WDTPW+WDTHOLD; / 关闭看门狗 usi_spi_begin( ); / USI 模块的 SPI 模式配置 while(1) / 重复执行 / 利用循环语句产生显示数据 for(data_seg7=0x00; data_seg7<0x9; data_seg7+) USISRL=decoder_seg7data_seg7; / 显示

39、数据译码,串行同步输出 USICNT|=0x08; / 启动串行数据传送 delay_1s( ); / 调用 1s 延迟函数 void usi_spi_begin(void) / USI 模块的 SPI 模式配置函数/ 使用芯片管脚的配置 P1SEL|=BIT7; / 设置 P1.7 端口为外围模块输入 / 输出口 P1DIR&=BIT7; / 设置 P1.7 端口为输入口 P1SEL|=BIT6; / 设置 P1.6 端口为外围模块输入 / 输出口 P1DIR|=BIT6; / 设置 P1.6 端口为输出口 P1SEL|=BIT5; / 设置 P1.5 端口为外围模块输入 / 输出口

40、 P1DIR|=BIT5; / 设置 P1.5 端口为输出口/ USI 模块相关寄存器配置 USICTL0&=USISWRST; / 清除软件 PCI 复位功能 USICTL0|=USIPE7; / 使能 SDI/SDA 管脚功能 USICTL0|=USIPE6; / 使能 SDO/SCL 管脚功能 USICTL0|=USIPE5; / 使能 SCLK 管脚功能 USICTL0&=USILSB; / 串行输出数据 MSB 位在先 USICTL0|=USIMST; / USI 工作在主模式 USICTL0|=USIGE; / 输出锁存使能 USICTL0|=USIOE; / 串行

41、输出使能 USICTL1|=USICKPH; / 时钟出现在数据之后 USICTL1&=USII2C; / 使能 SPI 模式 USICTL1&=USIIE; / 不使能移位计数中断 USICKCTL|=USIDIV_0; / 时钟分频系数选择:1 USICKCTL|=USISSEL_2; / 时钟信号源选择:SMCLK USICKCTL&=USICKPL; / 时钟首先出现上升边沿 USICNT&=USI16B; / 选择 8 位数据宽度 USICNT&=USIIFGCC; / USIIFG 标志当USICNTx不为0将自动清除程序示例10.1可以直接

42、用于前面图5.2所示的74164芯片驱动1位数码管的应用电路。对比语句USISRL=decoder_seg7data_seg7; / 显示数据译码,串行同步输出 USICNT|=0x08; / 启动串行数据传送和1位7段数码管的同步串行数据接口驱动函数,现在的程序结构变得非常简单,同时对程序存储器的占用也小得多。由串行外围接口模式配置函数可以看出,现在的串行同步时钟频率与MSP430微控制器的系统时钟频率SMCLK一样,因此数据传输也比使用软件的方法实现同步串行数据传输快得多。这再次证明了经常所说的一句话,利用硬件处理信号的速度比使用软件快得多。使用串行外围接口驱动多个数码管时需要注意,2次输

43、出显示代码之间的时间间隔必须大于利用串行方式完成1个显示代码传输所需要的时间。向移位寄存器写入显示代码采用的是并行传输方式,一次可以完成1个字节共计8位的数据传输,但是串行方式一次只能输出1位,需要分8次才能完成。在程序示例10.1中,串行外围接口(SPI)的配置采用函数的形式。这样既简化了主函数的结构,也方便其它应用程序对这部分内容的引用。10.4 基于串行外围接口(SPI)的芯片间通信本节使用1个MSP430微控制器芯片,使用程序示例10.1实现数码管显示代码的同步串行发送;再使用另外1个MSP430微控制器芯片接收这个显示代码,然后使用数码管显示接收到的这个显示代码。图10.6为演示芯片

44、间数据通信的电路连线示意图。图10.6 芯片间数据通信的电路连线示意图MSP430微控制器的串行外围接口(SPI)具有独立的串行数据发送管脚“SDO”(P1.6)和串行数据接收管脚“SDI”(P1.7),“MSP430数据发送芯片”使用前者发送数据;“MSP430数据接收芯片”使用后者接收数据。“MSP430数据发送芯片”选择运行程序示例10.1。在程序示例10.1中,串行外围接口(SPI)配置为主模式,这样“MSP430数据接收芯片”应该配置为从模式,它所需要的串行时钟信号“USICLK”由“MSP430数据发送芯片”产生。时钟信号“USICLK”通过两个芯片的管脚“SCLK” (P1.5)

45、实现连接。由于两个芯片间的数据通信占用了它们的串行外围接口(SPI)以及相关管脚,数码管的显示驱动只能采用软件形式实现模拟同步串行接口,同时使用1位7段数码管的同步串行数据接口驱动函数时涉及的管脚也需要更换为没有被占用的管脚。“MSP430数据接收芯片”判断是否完成1个完整数据字节的接收可以采用查询的方法,或者中断的方法。下面分别给出这两种方法的验证程序。10.4.1 基于查询方法实现串行数据的接收通过查询USI计数中断标志,USIIFG,能够判断1个完整的数据是否已经被接收。程序示例10.2为采用这种方法的“MSP430数据接收芯片”控制程序。程序示例10.2/ 程序名称:com_spi/

46、程序功能:通过 USI 的 SPI 模式实现 2 个 MSP430 芯片之间通信的接收功能/ 目标芯片:MSP430G2231/ 数据发送采用程序示例10.1传输数码管的显示代码/ SDO(P1.6)串行数据输出管脚,SCLK(P1.5)串行时钟输出管脚/ 本程序接收数码管的显示代码/ SDI(P1.7)串行数据输入管脚,SCLK(P1.5)串行时钟输入管脚/ 接收的显示代码使用数码管显示/ 显示代码采用模拟同步串行接口送到 74164 芯片/ P1.0 为模拟串行数据管脚;P1.1 为模拟串行时钟管脚/ 注意:使用片内时钟,时钟频率为默认值#include<msp430.h> /

47、 包含名称定义和对应地址或数据的头函数void seg7_begin(void); / 声明数码管显示电路配置函数void seg7_1ms(unsigned char seg7_data);/ 声明驱动 1 位数码管的同步串行接口驱动函数void usi_spi_begin(void); / 声明 USI 模块的 SPI 模式配置函数int main(void) / 主函数 WDTCTL=WDTPW+WDTHOLD; / 关闭看门狗 seg7_begin( ); / 数码管显示电路配置 usi_spi_begin( ); / USI 模块的 SPI 模式配置 while(1) / 重复执行

48、USICNT|=0x08; / 启动串行数据接收 while(USICTL1&USIIFG)=0) / 等待 1 个字节数据接收完毕 ; seg7_1ms(USISRL); / 显示接收的数据 程序示例10.2同样为了节约篇幅也没有给出所使用的函数原型。需要注意,这些函数原型不能直接使用前面出现的类似函数,但是可以由它们改写而成。数码管显示电路配置函数中需要将管脚P1.0和P1.1配置为并行数字输入 / 输出管脚、输出方向。1位数码管的同步串行接口驱动函数中现在需要使用管脚P1.0作为串行数据管脚,管脚P1.1作为串行时钟管脚。由于“MSP430数据发送芯片”运行程序示例10.1,发送

49、的为数码管的显示代码,因此这里不需要再进行显示数据到显示代码的译码。USI模块的配置函数只需要对程序示例10.1的对应函数中语句USICTL0|=USIMST; / USI 工作在主模式进行修改为USICTL0&=USIMST; / USI 工作在从模式从选择工作在主模式修改为从模式。在主函数的重复执行语句块中,首先向通用串行接口数位计数器,USICNT,写入需要接收的数据位数,同时启动接收过程。由于“MSP430数据接收芯片”工作在从模式,移位时钟来自于“MSP430数据发送芯片”,因此只能在发送芯片的发送过程中,接收芯片才能工作。当接收芯片移入所需要的数据位数,通用串行接口数位计数

50、器的内容减到0,置位USI计数中断标志,USIIFG。计数中断标志的置位使得程序退出循环语句,将通用串行接口低字节移位寄存器,USISRL,的内容送到数码管显示电路。一个循环完成,再次向通用串行接口数位计数器的赋值,清零USI计数中断标志,USIIFG。准备接收下一个字节的信息。10.4.2 基于中断方法实现串行数据的接收类似于按键动作的识别,使用查询的方法判断数据是否已经被接收需要进行查询,这对程序的工作效率将产生很大的影响。使用中断的方法也可以来判断1个完整的数据是否已经被接收,程序示例10.3为采用中断方法的“MSP430数据接收芯片”控制程序。程序示例10.3/ 程序名称:com_spi_rupt/ 程序功能:通过 USI 的 SPI 模式实现 2 个 MSP430 芯片之间通信的接收功能/ 目标芯片:MSP430G2231/ 数据发送采用程序示例10.1传输数码管的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论