第2讲MSP430单片机的GPIO与中断系统_第1页
第2讲MSP430单片机的GPIO与中断系统_第2页
第2讲MSP430单片机的GPIO与中断系统_第3页
第2讲MSP430单片机的GPIO与中断系统_第4页
第2讲MSP430单片机的GPIO与中断系统_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

3.1通用IO端口3.1.1MSP430端口概述通用I/O端口是MSP430单片机最重要也是最常用的外设模块。通用I/O端口不仅可以直接用于输入/输出,而且可以为MSP430单片机应用系统提供必要的逻辑控制信号。MSP430F5xx/6xx系列单片机最多可以提供12个通用I/O端口(P1~P11和PJ),大部分端口有8个引脚,少数端口引脚数少于8个。每个I/O引脚都可以被独立地设置为输入或者输出引脚,并且每个I/O引脚都可以被独立地读取或者写入,所有的端口寄存器都可以被独立地置位或者清零。P1~P4引脚具有中断能力。从P1和P2端口的各个I/O引脚引入的中断可以独立地被使能,并且被设置为上升沿或者下降沿触发中断。所有P1端口的I/O引脚的中断都来源于同一个中断向量P1IV。同理,P2端口的中断源都来源于另一个中断向量P2IV。可以对每个独立的端口进行字节访问,或者将两个结合起来进行字访问。端口组合P1和P2、P3和P4、P5和P6、P7和P8可结合起来称为PA、PB、PC和PD端口。当进行字操作写入PA口时,所有的16位数据都被写入这个端口;利用字节操作写入PA端口低字节时,高字节保持不变;利用字节指令写入PA端口的高字节时,低字节保持不变。其他端口也是一样。当写入的数据长度小于端口的最大长度时,那些没有用到的位保持不变。应用这个规则来访问所有端口,除了中断向量寄存器P1IV和P2IV,它们只能进行字节操作。13.1通用IO端口3.1.1MSP430端口概述GPIO基本都是用于芯片与片外器件或设备的交互。检测数字输入,如键盘或开关信号;驱动LED,蜂鸣器或LCD等其他指示器;控制片外器件,较高级的使用可以用它们(通过程序)模拟很多器件的时序达到控制相应器件的目的,比如模拟SPI和模拟总线等。GPIO(GeneralPurposeI/O),通用输入输出端口。2MSP430的GPIO特点(1/4)2024/2/263

有端口P1、P2、P3、P4、P5、P6、P7、P8、P9、P10、P11、S和COM。产品因型号不同可包含上述所有或部分端口。如下表所示:MSP430的GPIO特点(2/4)2024/2/264具有中断能力的端口:P1~P4。端口P1~P4具有输入输出、中断和外部模块功能。这些功能可以通过它们各自9个控制寄存器的设置来实现。所有P1端口的I/O引脚的中断都来源于同一个中断向量P1IV。同理,P2端口的中断源都来源于另一个中断向量P2IV。不具有中断能力的端口:其他端口

P5和其他端口没有中断能力,其余功能同P1~P4,可以实现输入/输出功能和外围模块功能。端口COM和S

这些端口实现与液晶片的直接接口。COM端口为液晶片的公共端,S口为液晶片的段码端。MSP430的GPIO特点(3/4)功能丰富2024/2/265MSP430各端口和功能,如下表所示:端口引脚还可以独立的配置成特殊功能,例如:USART–通用串行同步/异步通信模块;模拟信号比较器;模拟—数字转换器;其他功能(请参见具体芯片的数据手册)。MSP430的GPIO特点(4/4)寄存器丰富2024/2/266MSP430各种端口有大量的控制寄存器供用户操作。最大限度提供了输入/输出的灵活性。每个I/O口都可以独立编程。输入或输出可任意组合。P1和P2所有I/O口都具有边沿可选的输入中断功能。可以按字节输入输出,也可按位进行操作。可设置I/O口的上拉或下拉功能。可配置I/O驱动能力(高驱动强度或低驱动强度)。GPIO寄存器(1/9)2024/2/267PxDIR输入/输出方向寄存器相互独立的8位分别定义了8个引脚的输入/输出方向。使用输入和输出功能时,应该先定义端口的方向。PxDIR配置:

Bit=1:将端口引脚设置为输出模式;

Bit=0:将端口引脚设置为输入模式。例,设置P1端口的P1.0引脚为输出方向,其余引脚(P1.1~P1.7)设置为输入方向。 P1DIR=0x01;//设置P1端口P1.0引脚为输出方向GPIO寄存器(2/9)2024/2/268PxIN输入寄存器该寄存器是只读寄存器,即用户不能对它写入。这个寄存器是只读的,其中的每一位都反映了其对应的I/O引脚的输入信号(引脚配置为通用I/O)。PxIN配置: Bit=1:输入为高电平; Bit=0:输入为低电平;GPIO寄存器(3/9)2024/2/269PxOUT输出寄存器输出寄存器是可读可写的。这个寄存器的每个位都反映了写入相应输出引脚的值。将需要的值写入该寄存器,控制输出引脚的电平状态。PxOUT配置: Bit=1:输出为高电平; Bit=0:输出为低电平;PxREN寄存器中的每一位可使能或禁用相应I/O引脚的上拉/下拉电阻。PxREN配置: Bit=1:使能上拉/下拉电阻; Bit=0:禁用上拉/下拉电阻。当使能引脚上拉或下拉功能时,通过设置PxOUT相应位来选择。GPIO寄存器(4/9)2024/2/2610PxREN上拉或下拉电阻使能寄存器Bit=1:引脚选择上拉;上拉电阻简单来说就是把电平拉高,通常用4.7-10K的电阻接到Vcc电源。VCC引脚Px.xRR引脚上拉PxREN寄存器中的每一位可使能或禁用相应I/O引脚的上拉/下拉电阻。PxREN配置: Bit=1:使能上拉/下拉电阻; Bit=0:禁用上拉/下拉电阻。当使能引脚上拉或下拉功能时,通过设置PxOUT相应位来选择。GPIO寄存器(4/9)2024/2/2611PxREN上拉或下拉电阻使能寄存器Bit=1:引脚选择上拉上拉电阻简单来说就是把电平拉高,通常用4.7-10K的电阻接到Vcc电源。Bit=0:引脚选择下拉;下拉电阻则是把电平拉低,电阻接到GND地线上。VCC引脚Px.xRR引脚下拉GPIO寄存器(5/9)2024/2/2612PxSEL功能选择寄存器I/O端口还具有其他片内外设功能,为减少引脚,将这些外设功能与I/O端口引脚复用来实现。PxSEL来选择引脚的I/O端口功能与外围模块功能。PxSEL的配置: Bit=0:选择引脚为I/O端口; Bit=1:选择引脚为外设功能。GPIO寄存器(6/9)2024/2/2613PxDS输出驱动强度寄存器PxDS寄存器的每个位,设置引脚的输出强度为高驱动强度或低驱动强度。默认值为低驱动强度。PxDS的配置: Bit=0:低驱动强度;

Bit=1:高驱动强度。GPIO寄存器(7/9)2024/2/2614PxIE中断使能寄存器(仅中断端口P1和P2)该寄存器的8位与端口的8个引脚一一对应,其中某一位置位表示允许对应的引脚在电平变化(上升沿或下降沿)时产生中断,否则,表示禁止该位的中断。每个PxIE位使能的中断请求都与相应的PxIFG中断标志相关联,可通过写PxOUT和PxDIR来设置PxIFG。PxIE的配置: Bit=1:允许中断;

Bit=0:禁止中断。GPIO寄存器(8/9)2024/2/2615PxIES中断触发沿选择寄存器(仅中断端口P1和P2)如果允许Px口的某个引脚中断(即PxIE和GIE已设置),还需定义该引脚的中断触发方式。该寄存器可读可写,寄存器的8位分别对应Px口8个引脚PxIES的配置: Bit=1:下降沿使相应中断标志置位;

Bit=0:上升沿使相应中断标志置位。GPIO寄存器(9/9)2024/2/2616PxIFG中断标志寄存器(仅中断端口P1和P2)该寄存器用来表示对应引脚是否产生了由PxIES设定的电平跳变。如果在GIE置位,引脚对应的中断使能寄存器PxIE位置位,则会向CPU请求中断处理。中断标志PxIFG.0~PxIFG.7共用一个中断向量,PxIFG.0~PxIFG.7不会自动复位。必须用软件来判定是对哪一个事件服务,并将相应的标志复位。PxIFG的配置: Bit=0:没有中断请求;

Bit=1:有中断请求。4.1中断的基本概念1.中断定义

中断是暂停CPU正在运行的程序,转去执行相应的中断服务程序,完毕后返回被中断的程序继续运行的现象和技术。2.中断源

把引起中断的原因或者能够发出中断请求的信号源统称为中断源。中断首先需要由中断源发出中断请求,并征得系统允许后才会发生。在转去执行中断服务程序前,程序需保护中断现场;在执行完中断服务程序后,应恢复中断现场。中断源一般分成两类:外部硬件中断源和内部软件中断源。外部硬件中断源包括可屏蔽中断和不可屏蔽中断。内部软件中断源产生于单片机内部,主要有以下3种:①由CPU运行结果产生;②执行中断指令INT3;③使用DEBUG中单步或断点设置引起。173.中断向量表4.1中断的基本概念

中断向量是指中断服务程序的入口地址,每个中断向量被分配给4个连续的字节单元,两个高字节单元存放入口的段地址CS,两个低字节单元存放入口的偏移量IP。为了让CPU方便地查找到对应的中断向量,就需要在内存中建立一张查询表,即中断向量表。4.中断优先级

凡事都有轻重缓急之分,不同的中断请求表示不同的中断事件,因此,CPU对不同中断请求相应地也有轻重缓急之分。在单片机中,给每个中断源指定一个优先级,称为中断优先级。5.断点和中断现场

断点是指CPU执行现行程序被中断时的下一条指令的地址,又称断点地址。

中断现场是指CPU在转去执行中断服务程序前的运行状态,包括CPU状态寄存器和断点地址等。4.2MSP430单片机中断源MSP430单片机的中断源结构如图4.2.1所示。MSP430单片机的中断优先级是固定的,由硬件确定,用户不能更改。当多个中断同时发生中断请求时,CPU按照中断优先级的高低顺序依次响应。MSP430单片机包含3类中断源:系统复位中断源、不可屏蔽中断源和可屏蔽中断源。图4.2.1MSP430单片机的中断源结构MSP430单片机的中断向量表被安排在0FFFFH~0FF80H空间,具有最大64个中断源。表4.2.1为MSP430单片机的中断向量表。4.2MSP430单片机中断源中断源中断标志位中断类型中断向量地址优先级系统复位WDTIFG,KEYV(SYSRSTIV)系统复位中断0FFFEh63(最高)系统不可屏蔽中断SVMLIFG,SVMHIFG,DLYLIFG,DLYHIFG,VLRLIFG,VLRHIFG,VMAIFG,JMBNIFG,JMBOUTIFG(SYSSNIV)不可屏蔽中断0FFFCh62用户不可屏蔽中断NMIIFG,OFIFG,ACCVIFG,BUSIFG(SYSUNIV)不可屏蔽中断0FFFAh61比较器BCBIV可屏蔽中断0FFF8h60TB0TB0CCR0CCIFG0可屏蔽中断0FFF6h59TB0TB0CCR1CCIFG1到TB0CCR6CCIFG6,TB0IFG(TB0IV)可屏蔽中断0FFF4h58看门狗定时器WDTIFG可屏蔽中断0FFF2h57USCIA0接收/发送UCA0RXIFG,UCA0TXIFG(UCA0IV)可屏蔽中断0FFF0h56USCIB0接收/发送UCB0RXIFG,UCB0TXIFG(UCB0IV)可屏蔽中断0FFEEh55ADC12_AADC12IFG0toADC12IFG15(ADC12IV)可屏蔽中断0FFECh54TA0TA0CCR0CCIFG0可屏蔽中断0FFEAh53TA0TA0CCR1CCIFG1到TA0CCR4CCIFG4,TA0IFG(TA0IV)可屏蔽中断0FFE8h52USB_UBMUSBIV可屏蔽中断0FFE6h51DMADMA0IFG,DMA1IFG,DMA2IFG(DMAIV)可屏蔽中断0FFE4h50TA1TA1CCR0CCIFG0可屏蔽中断0FFE2h49TA1TA1CCR1CCIFG1到TA1CCR2CCIFG2,TA1IFG(TA1IV)可屏蔽中断0FFE0h48P1端口P1IFG.0toP1IFG.7(P1IV)可屏蔽中断0FFDEh47USCI_A1接收/发送UCA1RXIFG,UCA1TXIFG(UCA1IV)可屏蔽中断0FFDCh46USCI_B1接收/发送UCB1RXIFG,UCB1TXIFG(UCB1IV)可屏蔽中断0FFDAh45TA2TA2CCR0CCIFG0可屏蔽中断0FFD8h44TA2TA2CCR1CCIFG1到TA2CCR2CCIFG2,TA2IFG(TA2IV)可屏蔽中断0FFD6h43P2端口P2IFG.0到P2IFG.7(P2IV)可屏蔽中断0FFD4h42RTC_ARTCRDYIFG,RTCTEVIFG,RTCAIFG,RT0PSIFG,RT1PSIFG(RTCIV)可屏蔽中断0FFD2h41保留保留0FFD0h40……0FF80h0(最低)表4.2.1MSP430中断向量表4.3中断响应过程

中断响应过程为从CPU接收一个中断请求开始至执行第一条中断服务程序指令结束,共需要6个时钟周期。中断响应过程如下:①执行完当前正在执行的指令;②将程序计数器(PC)压入堆栈,程序计数器指向下一条指令;③将状态寄存器(SR)压入堆栈,状态寄存器保存了当前程序执行的状态;④如果有多个中断源请求中断,选择最高优先级,并挂起当前的程序;⑤清除中断标志位,如果有多个中断请求源,则予以保留等待下一步处理;⑥清除状态寄存器SR,保留SCG0,因而CPU可从任何低功耗模式下唤醒;⑦将中断服务程序入口地址加载给程序计数器(PC),转向执行中断服务子程序。中断响应过程示例图如图4.3.1所示。图4.3.1中断响应过程示例图4.4中断返回过程

通过执行中断服务程序终止指令(RETI)开始中断的返回,中断返回过程需要5个时钟周期,主要包含以下过程:①从堆栈中弹出之前保存的状态寄存器给SR;②从堆栈中弹出之前保存的程序计数器给PC;③继续执行中断时的下一条指令。中断返回过程示意图如图4.4.1所示。图4.4.1中断返回过程示意图4.5中断嵌套

由中断响应过程可知,当进入中断入口后,MSP430单片机会自动清除总中断允许标志位GIE,也就是说,MSP430单片机的中断默认是不能发生嵌套的,即使高级中断也不能打断低级中断的执行,这就避免了当前中断未完成时进入另一个中断的可能。如图4.5.1(a)所示,如果在执行中断服务程序A时,发生了中断请求B,B的中断标志位置1,但不会立即响应B的中断,需自动等待A执行完成返回后(GIE自动恢复),才进入B的中断服务程序。如图4.5.1(b)所示,如果在执行中断服务程序A时,有多个中断发生,会在A中断执行完毕后,依照中断优先级由高至低的顺序依次执行各个待执行的中断服务程序。图4.5.1多种中断发生情况示意图4.5中断嵌套

由以上两种情况可知,先发生的中断将会导致后发生的中断处理延迟。为了避免这种情况,要求所有的中断都尽快执行完毕,则需允许中断的嵌套,如图4.5.1(c)所示。这种情况需要在所有的中断入口处都加一句开中断的语句:_EINT(),恢复总的中断允许。中断嵌套被允许后,所有中断能够立即被执行,因此,能够保证事件的严格实时性要求。以ADC中断为例:#pragmavector=ADC12_VECTOR__interruptvoidADC12_ISR(void){_EINT();……}中断函数的写法:

#pragmavector=PORT1_VECTOR__interruptvoid

port_1(void)语法:interruptvoid函数名()参数:中断函数没有参数。中断函数需要指定中断向量。返回:中断返回一般是void,没有返回值。4.5中断函数的写法【例4.1.1】在MSP430单片机系统中,P1.5、P1.6、P1.7发生中断后执行不同的代码。#pragmavector=PORT1_VECTOR //P1口中断源__interruptvoidPort_1(void)//声明一个中断服务程序,名为Port_1(){ if(P1IFG&BIT5) //判断P1中断标志第5位

{

…… //在这里写P1.5中断服务程序

} if(P1IFG&BIT5) //判断P1中断标志第6位

{

…… //在这里写P1.6中断服务程序

} if(P1IFG&BIT5) //判断P1中断标志第7位

{

…… //在这里写P1.7中断服务程序

} P1IFG=0; //清除P1所有中断标志位}4.2

按键查询【例4.1.2】利用软件循环查询P4.2引脚的输入状态,若P4.2输入为高电平,则使P4.4输出高电平;若P4.2输入为低电平,则使P4.4输出低电平。#include<msp430f6638.h>voidmain(void){WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P4DIR|=BIT4;//设P4.4为输出方向

P4DIR&=~BIT2;

//设P4.2为输入方向

while(1)//循环查询P4.2引脚输入状态

{if((P4IN&BIT2)==0)P4OUT|=BIT4;//如果P4.2输入为高,则使P4.4输出高

elseP4OUT&=~BIT4;//否则,使P4.4输出低电平

}}4.6按键中断【例4.1.3】利用按键外部中断方式,实现反转P4.4引脚输出状态。P4.2选择GPIO功能,内部上拉电阻使能,且使能中断。当P4.2引脚上产生下降沿时,触发P4端口外部中断,在中断服务程序中,反转P4.4端口输出状态。#include<msp430f6638.h>voidmain(void){WDTCTL=WDTPW+WDTHOLD;//关闭看门狗

P4DIR|=BIT4;//设置P4.4引脚为输出P4DIR&=~BIT2;//设P4.2为输入方向

P4REN|=BIT2;P4OUT|=BIT2;//以上两句组合功能为使能P4.2引脚上拉电阻

P4IES|=BIT2;//P4.2中断下降沿触发

P4IFG&=~BIT2;//清除P4.2中断标志位

P4IE|=BIT2;//P4.2中断使能

__bis_SR_register(LPM4_bits+GIE);//进入LPM4,并使能全局中断}#pragm

温馨提示

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

评论

0/150

提交评论