MSP430系列嵌入式实验教程---中断

发布者:BlissfulMoon最新更新时间:2020-02-28 来源: eefocus关键字:MSP430系列  嵌入式实验  中断 手机看文章 扫描二维码
随时随地手机看文章

中断是用以提高计算机工作效率、增强计算机功能的一项重要技术。简单来说就是CPU停止执行正在执行的任务,去处理突发事件,然后再回来继续执行当前任务。中断在单片机中可以起到定时,外部信号检测等作用。


预备知识

把引起中断的原因或者能够发出中断请求的信号源统称为中断源。中断首先需要由中断源发出中断请求,并征得系统允许后才会发生。在转去执行中断服务程序前,程序需保护中断现场;在执行完中断服务程序后,应恢复中断现场。


中断源一般分成两类:外部硬件中断源和内部软件中断源。外部硬件中断源包括可屏蔽中断和不可屏蔽中断。内部软件中断源产生于单片机内部,主要有以下3种:①由CPU运行结果产生;②执行中断指令INT3;③使用DEBUG中单步或断点设置引起。


多个中断同时等待时优先响应高优先级的中断。

中断向量表

不可屏蔽中断通常是系统产生的,不受通用中断使能位(GIE)位影响,如时钟中断。可屏蔽的中断由外围模块产生,每个中断源都有单独的中断位控制,同时也受全局状态寄存器的GIE位控制。


当发生中断后,如果外围模块独立的使能位打开,并且全局总中断位(GIE)允许,将执行中断服务程序。


从接收中断请求到执行中断服务程序的第一条指令需要延迟六个周期,在此期间完成了以下操作:


完成当前所有的指令

指向下一条指令的PC被压入堆栈

SR压入堆栈

选择最高优先级的中断

复位单源中断标志,多源标志需要后手动清除

清除除SCG0之外的所有SR,终止低功耗模式。清除GIE位,不再响应其他中断

加载中断向量中的内容到PC中,开始执行中断服务程序。

中断响应过程

烣复中断需要5个周期。SR将会从从堆栈中拉出,以前的各种GIE、CPUOFF等设置参数将会烣复,但在中断服务程序里边配置的将会被忽略。


从上边进栈过程可能看出,MSP430单片机在进入中断服务程序后复位了SR寄存器,会自动清除GIE位,也就是说此时不允许响应其他中断,如果需要实现中断嵌套,则需在中数服务函数里使能GIE位即可。


注意:避免在EINT全局中断使能和DINT紧临着使用,可能会导致CPU运行异常

端口中断寄存器

MSP430单片机的P1和P2端口具有中断功能(有些系列可能其他端口也具有中断功能),包含了PxIFG、PxIE、PxIEX等寄存器。


PxIFG表示对应位的IO的中断标志,在中断允许位PxIE置位并且总中断位GIE允许的情况下,输入口出现触发信号后会将PxIFG置位.当进入中断服务程序,访问PxIV寄存器后,最高优先级的PxIFG会自动复位.修改IO端口的其他寄存器可能会导致PxIFG位改变.


PxIES定义了触发边沿:


PxIES 触发方式

0 上升沿触发

1 下降沿触发

当对PxIES写操作时,可能会使PxIFG置位:


PxIES PxIN PxIFG

0–>1 0 set

0–>1 1 unchanged

1–>0 0 unchanged

1–>0 1 set


下边是一个示例,在P2.0端口出现边沿信号时会中断正常执行的程序,进入中断服务程序,闪烁一次LED:


P2IE |= BIT0; //P2.0中断

P2DIR &= ~BIT0;//P2.0 输入

P2REN |= BIT0;//使能上下拉电阻

P2OUT |= BIT0;//选择使用上拉电阻

P2IES |= 1; //下降沿触发

#pragma vector=PORT2_VECTOR

__interrupt void p2Interrupt() 

{

  P2IES ^= BIT0; //翻转边沿方向

  blinkLED();//闪烁LED

  P2IFG = 0; //清除中断标志

}


使能对应的中断允许位后,一定要指定中断向量的入口函数地址,否则系统会找不到中断服务函数。


输入端口在使用时不要悬空,不然会造成误触发,在接入外部按键等输入信号时应设计上下拉电阻,也可以使用内部的上下拉电阻,确保有一个非零即一的稳定电平.


PxREN定义了是否引入内部上下拉电阻。默认值PxREN.y=0时不接入内部电阻。


当配置PxREN.y=1时内部电阻被接入电路。电阻一端固定接在了IO输入端,至于另一端是接在VCC还是GND则由PxOUT.y决定。

当PxIN.y=0,PxREN.y=1时:


PxOUT 内部电阻

1 上拉输入

0 下拉输入


注意:

外部如果连接有机械类的传感器(如机械按键,光电检测)时,在触发时可以出现很多边沿信号,需要用一些手段进行滤波消抖.

关键字:MSP430系列  嵌入式实验  中断 引用地址:MSP430系列嵌入式实验教程---中断

上一篇:MSP430 一种低功耗设计
下一篇:MSP430教程6:MSP430寄存器中文注释

推荐阅读最新更新时间:2024-11-06 05:13

定时器T1中断实验
定时器T1中断实验。 1、定时器中断实验。定时器产生10mS周期中断,通过计数让PB1电平产生周期变化。 2、内部1 M晶振。 3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)短路块。 */ #include "iom16v.h" #include macros.h /*初始化定时器,产生10mS周期中断*/ void T1_Init(void) { OCR1A = 1250; /*计数周期为10mS,F=1M*/ TIMSK |= (1 OCIE1A); /*比较中断A允许*/ SREG = 0x80; TCCR1A = 0x00; TCCR1B = 0x08; /*定时器工作在CTC计数器模式*/ TC
[单片机]
STM32 UART常用的3种中断接收
#include sys.h #include usart.h #include main.h //如果使用ucos,则包括下面的头文件即可. #if SYSTEM_SUPPORT_OS #include includes.h //ucos 使用 #endif //注意,读取USARTx- SR能避免莫名其妙的错误 u8 USART1_RX_BUF ; //接收缓冲,最USART_RX_LEN个字节 u8 USART2_RX_BUF ; //接收缓冲,最USART_RX_LEN个字节 u8 USART1_TX_BUF ; //发送缓冲,最大USART_TX_LEN个字节 u8 USART2_TX_BUF ; //
[单片机]
关于STM32串口调试RS485时自动进入接收中断
先说一下软硬件: 硬件:主控stm32c8t6、485芯片为隔离型芯片ADM2483,调试工具是usb转485接到PC端。 软件:采用库函数开发,开发工具为IAR 7.10,485接的是stm32的串口1(收发都是用中断方式),半双工模式, 协议是MODBUS RTU。 先说明本人是菜鸟,在不断得学习中,欢迎指出错误。 最近在调试RS485时发现一个问题,如果在串口初始化时就使能了发送中断和接收的话,那么在发送一个字节后就会自动进入接收中断。可能是收发的机制没有定好,所以后面采用的方式是在初始化时使能了接收中断,关闭发送中断,在需要发送数据的时候再开启发送中断,发送的时候关闭接收中断,发送完一帧再使能接收中断。这样就可以完整地发送
[单片机]
89c51中断系统及中断控制
现代的计算机都具有实时处理功能,当外界有突发事件时,cpu能够及时的做出处理,这就是靠中断来实现的。 当CPU正在处理某一命令时,这时外部发生了某一事件(如电平的变化,或者定时器/计数器溢出时)请求CPU去处理该事件,于是CPU停止处理当前的事件,并保存当前停止时的地址,转去处理所发生的事件,处理完毕后,CPU返回原先保存的停止时的地址,继续处理原先的事件,这样的过程被称为中断。 上图即为中断过程示意图,产生中断的请求源被称为中断源,中断源向CPU提出的处理请求被称为中断请求或中断申请。CPU暂时中止当前的事件,转去处理中断请求所对应的事件称为CPU的中断响应过程,对事件的整个处理过程称为中断服务(中断处理)。处理完毕后,
[单片机]
89c51<font color='red'>中断</font>系统及<font color='red'>中断</font>控制
单片机编程技巧-功能强大的时钟中断
功能强大的时钟中断   在单片机 程序设计中,设置一个好的时钟中断,将能使一个CPU发挥两个CPU的功效,大大方便和简化程序的编制,提高系统的效率与可操作性。我们可以把一些例行的及需要定时执行的程序放在时钟中断中,还可以利用时钟中断协助主程序完成定时、延时等操作。   下面以6MHz时钟的AT89C51系统为例,说明时钟中断的应用。   定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设
[单片机]
STM32使用CubeMAX配置的串口中断接收方法
STM32使用cubeMAX可以快速建立工程模板,但是默认使用的是Hal库构成的工程,对于习惯使用了ST标准库的同学来说,灵活调用HAL库可能会比较生疏,我也是这么觉得的,但是还是要逐步去接触学习它,毕竟这个hal库的封装还是相当好的,有好多先进的思想和用法。 在学习过程中,我遇到了一个问题,之前也遇到过,但是没时间去研究,就是串口在CUBUMAX上配置好后,如何实现串口中断接收,接下来就来记录一下我学习到的知识: 1.定位串口中断发生的地方 HAL库的中断处理还是和标准库一样的,在stm32xxxx_it.c中定义我们定位到如下函数: HAL_UART_IRQHandler(&huart1); 再往下定位,我们找
[单片机]
单片机时钟中断的应用
本文以6MHz时钟的单片机AT89C51系统为例,说明时钟中断的应用: 定时器初值与中断周期 时钟中断无需过于频繁,一般取20mS(50Hz)即可。如需要百分之一秒的时基信号,可取10mS(100Hz)。这里取20mS,用定时器T0工作于16位定时器方式(方式1)。T0的工作方式为:每过一个机器周期自动加1,当计满0FFFFh,要溢出时,便会产生中断,并由硬件设置相应的标志位供软件查询。即中断时比启动时经过了N+1个机器周期。所以,我们只要在T0中预先存入一个比满值0FFFFh小N的数,然后启动定时器,便会在N个机器周期后产生中断。这个值便是所谓的“初值”。下面计算我们需要的初值:时钟为6MHz,12个时钟周期为一个机器周期,2
[单片机]
MSP430F5529学习笔记(三)——外部中断
中断是单片机中一个很实用的经典操作,在各项项目中使用有事半功倍的效果。通过对中断服务函数的相关设置和中断触发方式的调整可以使程序更加高效简洁,本文针对MSP430中中断进行简单概述。 中断的基本思想和原理简单来说就是在执行某指令时突然被打断执行新的操作,在执行完后退回被打断的指令继续执行。通俗的说可以理解为:“你在房间写作业突然有人敲门,你开门后继续回去写作业”这一过程,敲门即可以理解为中断触发信号,开门可以理解为中断事件。今天使用简单的按键出发中断控制LED灯亮灭来进行演示,首先依然是对应引脚的配置: WDTCTL=WDTPW+WDTHOLD;//关闭看门狗 P1DIR |=BIT0;//将P1.0设置为输出
[单片机]
<font color='red'>MSP430</font>F5529学习笔记(三)——外部<font color='red'>中断</font>
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved