本章所述为I/O设置与中断的要点总结与注意事项。 中断控制器:中断发生时有一个硬件装置将信号输入单片机,该硬件部件叫中断控制器,它负责把引起中断的信号编号,并按照事先约定的优先级排队,并发信号给单片机的cpu。 冷复位:上电复位; 热复位:外部引脚或看门狗复位 端口P1 和P2 有中断功能。每个针对P1 和P2 I/O 线路的中断可被单独启用并被配置成在一个输入信号的上升或者下降边沿上提供一个中断。所有P1 I/O 线路提供一个单一中断矢量,并且所有P2 I/O 线路提供一个不同的,单中断矢量。 PxDIR 方向:0输入 1输出 PxOUT PxIN PxREN 每个PxREN 寄存器中的每个位启用或者禁用相应I/O 引脚的上拉/下拉电阻器。 PxOUT寄存器中的相应位选择上拉或下拉引脚。 PxSEL&PxSEL2 功能选择,默认是I/O功能,可以根据手册配置选择其他功能 端口P1 和P2 中的每个引脚都有中断功能,此功能由PxIFG, PxIE,和PxIES 寄存器配置。所有P1 引脚提供一个单一中断矢量,而所有P2 引脚提供一个不同的单一中断矢量。在中断程序中,可测试PxIFG 寄存器来确定一个P1或P2 中断的源。 P1IES&P2IES :中断边沿选择 0上升沿;1下降沿。 P1IE&P2IE : 中断使能 P1DIR为0(输入);P1OUT为1(高电平);P1RNE为0(禁用)。 中断服务函数
另外我所上传资源全部免费,不要积分下载,我所上传的文章也会以WORD形式放到我上传的资源内,如果有需要的话可以自行免费下载,关于MSP430G2553学习的文章会继续上传,定时更新,希望可以帮到大家。1、中断
中断的编号叫中断号,对应处理程序叫中断服务程序,服务程序的地址叫中断向量。中断向量按照中断编号排列成表,叫中断向量表。
cpu检测到中断控制器的信号后,获得当前中断发生信号的编号,由中断向量表找到中断向量,转而去执行这个编号对应的中断处理程序。
中断向量表见文章末。2、复位
3、通用I/O及其中断:
I/O寄存器
0:上拉/下拉电阻器被禁用 1:上拉/下拉电阻器被启用I/O中断寄存器
P1IFG&P2IFG :中断标志位,需软件置位,也可软件置位产生软件控制的中断。
可导致设置相应的P1IFG 或者P2IFG 标志。)
所以根据分析可知,在设置完引脚功能寄存器后务必将中断标志位清零,然后再开中断。默认状态
例程
P1OUT |= BIT0; //选择上下拉,1上拉;0下拉 P1REN |= BITO; //启用上下拉电阻
#include <msp430g2553.h> void main(void) { WDTCTL = WDTPW + WDTHOLD; P1DIR = BIT0; P1OUT = BIT3; P1REN |= BIT3; P1IE |= BIT3; //(1)中断使能 P1IES |= BIT3; //(2)下降沿触发 P1IFG &= ~BIT3; //(3)清零标志位 __enable_interrupt (); //(4)开总中断 while(1); } #pragma vector=PORT1_VECTOR //固定格式 __interrupt void Port_1(void) { P1OUT ^= 0x01; P1IFG &= ~0x08; //每次软件复位 }
表中第一列是中断事件来源的名称;第二列是对应的中断标志位;第三列表示中断的性质,其中 non-maskable 是无法关掉的中断,即不受 GIE 控制的中断, maskable 是可以被 GIE 关掉的中断;第四列是中断向量在存储器中的位置;最后一列就是***中断优先级***。
中断向量表中大多数中断属于“grouped interrupt”,即多个中断源共用一个中断向量入口。例如 P1.0-P1.7 中断都使用 P1 中断这一个入口。要识别中断具体来自哪一个 I/O 口,需要查看P1IFG 寄存器, P1IFG 共 8 位,分别对应 P1.0-P1.7,当某个引脚出现中断事件时对应的P1IFG.x 就会被置位,在退出中断之前一定不要忘记手动将 P1IFG.x 复位。另外 P1IE 是 P1 口的中断使能寄存器,也有 8 位,可以分别控制每个 I/O 口的中断使能如何写一个中断函数总结
要写一个带有中断的程序,需要做下面几件事情:
#pragma vector=PORT1_VECTOR __interrupt void Port_1(void) { P1OUT ^= 0x01; // P1.0 = toggle P1IFG &= ~0x08; // Clear P1.3 IFG }
#Pragma 是编译器指令,是告诉编译器将函数与中断向量连接起来。 “vector=”后面是中断向量地址的宏定义,例如 P1 口中断就是 PORT1_VECTOR,定时器中断就是TIMER0_A1_VECTOR。
不同外设的中断向量名在哪里找呢?打开 CCS 的安装文件夹,例如C:ticcsv7ccs_basemsp430include,在这个文件夹中搜索芯片的具体型号,如msp430g2553,可以找到一个名为 msp430g2553.h 的头文件。这个头文件中包含了所有寄存器位的宏定义,包括中断向量的宏定义。 在 msp430g2553.h 中找到“Interrupt Vectors”这个部分(如下图),其中包含了所有中断向量的名称。 例如 P1 端口的中断向量名就是PORT1_VECTOR。
__interrupt 关键字表明这是一个中断服务函数,CPU 见到这个关键字以后就会去做中断之前的准备工作。 Port_1 是用户自己取的函数名称,这个名称可以任意命名。
中断服务函数的内容依据中断的不同种类有所差别。退出中断前一定不要忘记将中断标志位复位。
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算