版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第6章计算机的中断系统第一节第二节第三节第四节CPU与外设间的数据传送方式中断的基本概念MSP430中断系统中断程序设计本章教学目标:1、了解CPU与外设间的数据传送方式2、了解中断基本概念3、掌握中断控制机制和中断响应过程4、掌握中断编程技术第一节CPU与外设间的数据传送方式1. 无条件传送:无条件传送:(实际应用中较少使用)2 查询方式:2.查询方式:常用方式。常用方式。传送前先查询外设状态,若发现外设已准备好发送/接收数据,则传送,否则CPU处于等待状态。因此CPU的效率较低。3. 中断方式:中断方式:中断技术是计算机发展史上里程碑式的技术,中断技术是计算机
2、发展史上里程碑式的技术,使用中断技术可以实现外设与CPU并行工作,提高CPU的效使用中断技术可以实现率,因此中断方式也是一种常用的方式。4.4 DMA方式:方式:(本课程对DMA方式不作要求)查询方式流程图从状态端口读入状态信息外设准备好否?N从数据端口传送一个数据查询方式输入举例:外设与MSP430F149的接线如下图所示,当状态信号为“1”时表示外设数据准备好。采用查询方式编程实现从外设读入50H个字节到内存缓冲区buffer中MSP430F149P1P2.0数据状态输入设备流程图:从状态端口(P2.0)()读入外设状态信息P2.0=1?(即外设准备好否?)Y从P1IN读入一个字
3、节数据,并送入缓冲区中50H个数据传送结束?Y查询方式输入程序段:MOV.B#00h,&P1SELMOVB#00h,&P2SELMOV.BMOV.B#00h,&P1DIRMOVB#00h,&P2DIRMOV.BMOV#buffer,R10MOV#50h,R9next:BIT.B#01h,&P2INJZnextMOVB&P1IN,0(R10)MOV.BINCDECJNZR10R9next;取缓冲区首地址;传送个数;检测状态信息(P2.0);P2.0=0,继续查询;从数据端口读入数据;送缓冲区;修改缓冲区指针;传送下一个查询方式输出举例:外设与MSP
4、430F149的接线如下图所示,当状态信号为“1”时表示外设已准备好接收数据。采用查询方式编程实现将内存缓冲区buffer中的50H个字节输出到外设MSP430F149P1P2.0数据状态输出设备流程图:从状态端口(P2.0)(P20)读入外设状态信息NP2.0=1?(即外设准备好否?)Y将缓冲区中的当前字节输出到P1OUT,并指向下一字节50H个数据传送结束?Y8查询方式输出程序段:MOV.B#00h,&P1SELMOV.B#00h,&P2SELMOV.B#0FFh,&P1DIRMOVB#00h,&P2DIRMOV.BMOV#buffer,R10MOV#50h
5、,R9next:BIT.B#01h,&P2INJZnextMOV.BR10+,&P1OUTDECJNZR9next;取缓冲区首地址;传送个数;检测状态信息(P2.0);P2.0=0,继续查询;输出数据;并修改缓冲区指针;传送下一个CPU与外设间的数据传送方式1. 无条件传送2. 查询方式3. 中断方式4. DMA方式第二节中断的基本概念á什么是中断á断点、中断现场和中断向量á中断源与中断分类á中断优先级á可屏蔽中断的控制什么是中断当CPU接收到有效的中断请求后,将暂停正在运行的程序,并自动转去执行相应的实现中断源请求功能的程序(
6、称为中断服务子程序,简称为中断子程),当CPU执行完中断子程中的返回指令后,CPU又返回到被中断的程序继续运行的技术。CPU执行流程无中断时有中断时非预料事件1中断服务程序1非预料事件22断点和中断现场断点:是指CPU执行的现行程序被中断时的下一条指令的地址,又称断点地址。中断现场:是指CPU转去执行中断服务子程序前的CPU的状态,主要包括CPU的状态寄存器的值和断点地址。中断现场非常重要,它是中断子程能够正确返回并能继续执行被中断的程序的先决条件,因此需要保护。在CPU转去执行中断子程前将自动入栈保护中断现场。当CPU执行到中断子程中的中断返回指令时,将自动出栈恢复中断现场,并自动返回到断点
7、地址处继续执行被中断的程序。注意:中断需要使用堆栈(用于保护中断现场).ADD R4,R4 R5断点地址:1200hMOV.b R5, &P1OUT.中断向量:CPU在执行ADD指令时,接收到一有效的中断请求;CPU在执行完ADD指令后,入栈保护中断现场,然后转去执行1400h处的中断子程1400hBIT.b #BIT0, &P1IFG.RETI.中断子程CPU执行RETI指令时,恢复中断现场,然后转去执行1200h处的程序
8、中断向量和中断向量表中断向量:中断子程的入口地址(即中断子程的第1条指令在存储器中的地址)。中断向量表:用于存放中断向量的一片专用的存储区(PC机中为位于存储空间的最低端1KBRAM;MSP430中为位于存储空间的最高端32BROM),并将其组织成表格的形式。根据系统所含中断源的数目(中断级数),将中断向量表划分成相应的表目,每个表目中存放一个中断向量,对应一种中断源的中断子程的入口地址。这样,表目的序号与中断源之间建立起一一对应的关系,表目的序号通常被称之为中断类型号。表目的长度:PC机=4字节,MSP430=2字节。中断向量表,0FFE0h0FFFFh,32字节,存放16个中断向量0FFF
9、Fh中断向量表0FFE0h0FFDFhcode memoryd(FLASH)程序01100h009FFh00200h001FFh00000hRAM堆栈和变量0FFFEh0FFFDh0FFFCh0FFFBh0FFFAh01100h0xxxxh0xxxxhRESET(NON)MASKABLETBCCR0 CCIFG0xxxxhP2IFG0P2IFG7中断向量=中断子程的入口地址中断寻址中断寻址:是指中断系统根据发出中断请求的中断源(中断类型号),到中断向量表的相应表目中取出其中断子程的入口地址(中断向量)的过程。该过程是由中断系统自动完成的。注意:中断向量的设置需由用户编程实现,以告知中断系统,各
10、中断源对应的中断子程在存储器中的存放位置。中断源与中断分类中断首先需要有中断源发出中断请求,并征得系统允许后才会发生。中断源是指能够产生中断请求的电路、设备、指令等,通常可按如下分类:软件中断(内中断)中断分类硬件中断(外中断)不可屏蔽中断可屏蔽中断硬件中断和软件中断早期中断概念的引入,是为解决CPU与外设间的速度匹配和并行工作问题,以提高CPU的利用率。此阶段,中断源主要是由外部硬件产生当今的中断技术,不再限于由外部硬件产生中断(称硬件中断或外中断),还可由CPU内部产生(如除零操作),或者由程序预先安排,即用指令调用中断服务程序(如DOS系统的中断功能调用),这种中断称为软件中断或内中断。
11、举例:80x86微机汇编语言中断调用指令.MOV AH, 01INT 21H用指令INT调用中断程序CMP AL, 0Dh与CALL调用指令类似.PUSH AX.由指令INT 21H 调用的.中断子程序IRET不可屏蔽中断和可屏蔽中断不可屏蔽中断:不能通过编程禁止(屏蔽)的中断。只要不可屏蔽中断源发出中断请求,CPU必须响应。在有些系统中,不可屏蔽中断又称之为非屏蔽中断。但在MSP430中,非屏蔽中断是有别于
12、不可屏蔽中断的另一种中断类型。可屏蔽中断:可通过编程控制(允许/禁止)的中断。只有当可屏蔽中断源被编程为允许时,该中断源发出的中断请求才有可能被CPU响应。中断优先级事有轻重缓急,不同的中断请求表示不同的事件,因此CPU对不同中断请求的响应也应有轻重缓急之分。 在计算机中,给每个中断源指定(固定的或可通过程序设置的)一个优先权,称为中断优先权(优先级) 当多个中断源同时发出中断请求时,CPU按照中断优先权的高低顺序依次响应。可屏蔽中断的控制maskable interrupt中断请求分控位总控位优先权裁决CPU中断响应1enable0disable1enable0disable总控位
13、通常位于CPU的状态寄存器中分控位位于中断控制器或相应的I/O接口中优先级裁决由CPU和/或中断控制器实施注意:总控位和分控位的控制需由用户编程实现;中断优先级是否可编程视具体系统而定,对于MSP430,中断优先级是固定的,不可编程的23第三节MSP430的中断系统MSP430的三大中断源系统复位(system reset,也称不可屏蔽中断,Nonmaskable interrupts)非屏蔽中断((Non)maskable NMI)可屏蔽中断(maskable)注:在MSP430 中:不可屏蔽中断,Nonmaskable interrupts
14、不能被总控位GIE和自己的分控位IE位屏蔽的中断非屏蔽中断,(Non)maskable interrupts不能被总控位GIE屏蔽,但能被自己的分控位IE位屏蔽的中断可屏蔽中断,maskable interrupts能被总控位GIE和自己的分控位IE位屏蔽的中断例:MSP430F149 的中断源、中断标志、向量地址和优先级中断源中断标志向量地址0FFFEh0FFFCh优先级15(highest)1427上电,外部复位,WDTIFG, KEYV看门狗复位,FLASH密码错NMI引脚,振荡器失效,NMIFG, OFIFG, &
15、#160;ACCVIFGFCTlx访问错定时器B定时器B比较器A看门狗定时器串口0接收中断串口0发送中断模/数转换器ADC12定时器A定时器ATACCR1 to TACCR2 CCIFGs, TAIFGP1.0P1.7的8个引脚串口1接收中断串口1发送中断P2.0P2.7P2.0P2.7的8个引脚中断向量表,0FFE0h0FFFFh,32字节,存放16个中断向量0FFFFh中断向量表0FFE0h0FFDFhcode memoryd(FLASH)程序01100h009FFh00200h001FFh00000hRAM堆栈和变量0FFFEh0FFFDh0FFF
16、Ch0FFFBh0FFFAh01100h0xxxxh0xxxxhRESET(NON)MASKABLETBCCR0 CCIFG0xxxxhP2IFG0P2IFG7中断向量=中断子程的入口地址例:用EW430 DEBUG查看各中断向量:P2的8个引脚串口0发送中断串口0接收P1的8中断个引脚定时器A定时器AAC12ADC12串口0发送中断串口0接收中断看门狗定时器上电复位,比较定时定时NMI引脚,器A器B器B振荡器失效,外部复位,FCTlx访问错看门狗复位,FLASH密码错高字节在高地址低字节在低地址例:复位向量= 1100h思考: 在EW430的DEBU
17、G如何查看到中断子程?View/disassambly, 查看中断向量相应的存储器单元中断标志(位)由于某些原因(如CPU正在执行中断子程,此时GIE=0、新中断的优先级不够高等),CPU并不一定能够马上响应中断源发出的中断请求,因此,需要一些寄存器来标志(保存)中断请求信号,直到被CPU响应。这些寄存器被称之为中断标志寄存器,其中的位称之为中断标志位,并与中断源一一对应。 MSP430F149共有16级中断源, 每一级对应1个中断向量 同一级中断源可包含多个子中断源,每个子中断源对应一位中断标志位,这些子中断源共享同一个中断向量(即共享同一个中断子程)在中断子程中,通过查
18、询中断标志位可确定本次中断请求到底是由哪一个子中断源发出的。MSP430F149的中断标志:中断源中断标志(数目)优先级(2)15上电,外部复位,WDTIFG, KEYV (highest)看门狗复位,FLASH密码错NMI引脚,振荡器失效,NMIFG, OFIFG, ACCVIFG (3)14FCTlx访问错定时器BTBCCR0 CCIFG (1)13定时器BTBCCR1CC1 to TBCCR6CC6 CCIFGs,CCIG TBIFGIG(7)
19、()12比较器A11看门狗定时器WDTIFG (1)()10串口0接收中断URXIFG0(1)9串口0发送中断UTXIFG0(1)8模/数转换器ADC12定时器A定时器AP1的8个引脚串口1接收中断串口1发送中断P2的8个引脚ADC12IFGTACCR0 CCIFGTACCR1 to TACCR2 CCIFGs, TAIFGP1IFG.0P1IFG.7URXIFG1UTXIFG1P2IFG.0P2IFG.7(1)(1)(3)(8)(1)(1)(8)7654321320(lowest)P1中断标志寄存器需由软件清零P1IFG.xP1IF
20、G.x=0: No interrupt pendingP1IFG.x=1: An interrupt pending70605040302010033P1IFG.7P1IFG.6P1IFG.5P1IFG.4P1IFG.3P1IFG.2P1IFG.1P1IFG.00MSP430F149的外中断和内中断外中断: 引脚RST/NMI、P1.0P1.7、P2.0P2.7产生的中断内中断:由MCU内部模块产生35MSP430 的中断控制机制非屏蔽中断的控制机制(non)()_maskable interrupt中
21、断请求0-disableindividual enable bitCPU优先权裁决CPU中断响应可屏蔽中断的控制机制(分控位、总控位)maskable interrupt中断请求0-disable0-disableindividual individualenable bitCPU优先权裁决CPU中断响应36总控位位于CPU 的状态寄存器SR 中分控位位于中断控制器或相应的I/O接口中优先级裁决由CPU和/或中断控制器实施159876543210保留VSCG1SCG0OSCoffCPUoffGIENZCGIE:GeneralInterruptEnableBit置位(=1):
22、允许(enable)复位(=0):禁止(disable)分控位位于相应的I/O 接口中P1中断分控寄存器P1IE.x=0: 禁止中断P1IE.x=1:PI.x: 允许中断7060504030201000P1IE.7P1IE.6P1IE.5P1IE.4P1IE.3P1IE.2P1IE.1P1IE.0MSP430 的优先级裁决由CPU 在其响应中断的过程中实现MSP430 的中断响应过程(不含上电和引脚复位过程)当有一中断源发出中断请求(即置位其中断标志位),并且满足响应条件(?),则CPU 在执行完当前指令后,由其中断系统硬件
23、自动完成下面的操作:1.入栈保护断点:相当于执行PUSH PC1PUSHPC;2.入栈保护SR:相当于执行PUSH SR;3优先级裁决:从高优先级至低优先级依次查询,找出当前3.中断请求中的最高优先级的中断源作为响应对象;4.清零响应对象的中断标志位:对于单一中断标志的中断源请求,则由CPU自动清零该中断标志位(注意:对于有多个中断标志的中断源请求,则中断标志位的清零处理交由中断服务子程完成);5.清零SR(关中断总控位,结束低功耗方式);6.装载响应对象的中断向量至PC,转去执行中断服务子程。MSP430F149 的优先级裁决原理优先级15(highest)141312111098
24、76543210(lowest)中断源看门狗复位,FLASH密码错NMI引脚,振荡器失效,FCTlx访问错定时器B定时器B看门狗定时器串口0接收中断串口0发送中断模/数转换器ADC12定时器A定时器AP1的8个引脚串口1接收中断串口1发送中断P2的8个引脚发现中断请求入栈保护中断现场从高至低依次查询找到了当前中断请求中的最高优先级的中断源当前有4 个中断请求(对应的中断标志位= 1)41 的上电和引脚复位过程?42MSP430中断返回在中断子程中执行RETI 指令,即可实现中断返回,实现恢复中断现场,并从断点处继续运行被中断的程序。中断子程返回指令RET
25、Ioperation SP SRSP+2 SPPOP SRSP PCSP+2 SPPOP PC0200h0A00h1100h1120h11C0h11E0h8FFE8hFFFEhRAM.堆栈.MOV #0A00h, SP.主ADD R4, R5程MOV R5, &P2OUT序.MOV &P
26、1IN, R6中.断.子程RETI11C0h中断向量表.1100hP1中断响应过程举例CPU在执行ADD指令时,P1中断源发出中断请求;若满足响应条件,则CPU在执行完该指令后,进入中断响应过程:响应前:SP=0A00hSR=0008hPC=1120h响应后:SP=09FChSR=0000hPC=11C0h堆栈09FCh 0080h09FEh1120h0A00hCPU转去执行11C0h处的中断子程0200h0A00h1100h1120h11C0h11E0h8FFE8hFFFEhRAM.堆栈.MOV #0A00h, SP.主ADD&
27、#160; R4, R5MOV R5, &P2OUT序.MOV R6中.子程RETI11C0h中断向量表.1100h中断返回过程举例执行RETI前:堆栈SP=09FChSR=0007h(假定)PC=11E0h0008hSR09FCh执行RETI后:1120hPC09FEhSP=0A00h0A00hSR=0008hPC=1120hCPU返回到断点1120h处,继续执行被中断的程序45注意:若有多个中断同时请求,CPU响应优先级最高的中断请求;MSP430内部通过检测中断标志位是否被置位来感知是否有中断请
28、求的。因此,对于在CPU响应过程中不能被自动清零的中断标志位,须由用户在使用完后编程清零。否则又会被当成一次新的中断请求;对于有多个中断标志的中断源请求,用户在中断子程中利用这些中断标志位判断发出中断请求的具体中断源,这些中断标志位的清零须由用户在使用完后编程清零。中断源.定时器AP1的8个引脚.P22的8个引脚中断标志.TACCR1 to TACCR2 CCIFGs, TAIFG (3)P1IFG.0P1IFG.7
29、; (8).P1IFG0P1IFG7 &
30、#160; (8)P1IFG.0P1IFG.7向量地址.0FFEAh0FFE8h.0FFE2h优先级.54.147第四节中断程序设计中断程序结构主程序设置中断向量堆栈定义与SP初始化关中断总控位保护现场设置所涉及的I/O接口中与中断相关的寄存器如清零中断标志位、置位中断分控位等有关量的初始化开中断总控位完成中断源请求的任务清零中断标志恢复现场RETI中断返回48中断子程开始随机的突发的主循环设置中断向量根据中断源(例如I/OportP1),将其中断向量设置在中断向量表的该中断源的向量地址处(例如0FFE8h)中断源上电,外部复位看门狗复位FLASH密码错.I/
31、O port P1.I/O port P2中断标志WDTIFG, KEYV向量地址0FFFEh优先级15.4.149.P1IFG.0P1IFG.7 0FFE8h.P2IFG.0P2IFG.70FFE2h头文件io430x14x.h和msp430x14x.h中定义了各中断源在中断向量表中相对0xFFE0的偏移符号名(INT_VECTOR)/ Interrupt Vectors (offset from 0xFFE0)#define PORT2_VECTOR
32、; (1 * 2u) /* 0xFFE2 Port 2 */#define USART1TX_VECTOR (2 * 2u) /* 0xFFE4 USART 1 Transmit */#dfi USART1RX_VECTOR#defineUSART1RXVECTOR
33、 (3 * 22u) /* 00xFFE6FFE6 USART 1 RReceivei */#define PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */#define TIMERA1_VECTOR
34、0; (5 * 2u) /* 0xFFEA Timer A CC12, TA */#define TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */#define ADC12_VECTOR
35、 (7 * 2u) /* 0xFFEE ADC */#define USART0TX_VECTOR_ (8 * 2u)() /*/ 0xFFF0 USART 0 Transmit */#define USART0RX_VECTOR (9 *
36、160;2u) /* 0xFFF2 USART 0 Receive */#define WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */#define COMPARATORA_VECTORCOMPARATORAVECTOR (11
37、0;* 2u) /* 0xFFF6 Comparator A */#define TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC16, TB */#define TIMERB0_VECTOR (13 * 2u) /*
38、 0xFFFA Timer B CC0 */#define NMI_VECTORNMIVECTOR (14 * 2u) /* 0xFFFC Nonmaskable */#define RESET_VECTOR (15 * 2u) /* 0xFFFE Reset High
39、est Priority50 */汇编语言程序设置中断向量方法:#include “msp430.h”“msp430h” ORG 0FFE0h+RESET_VECTORDC16 init ORG 0FFE0h+PORT1_VECTOR0FFE0h+PORT1VECTORDC16 P1_intRSEGCSTACKRSEG CODE MOV #SFE
40、(CSTACK),(), SP .;包含msp430.hmsp430h文件;设置复位中断向量; RESET程序入口地址;设置P1的中断向量;P1中断子程入口地址;定义堆栈段;定义代码段;初始化堆栈指针init:P1_int: RETIEND; P1中断子程;中断返回; 程序结束51中断总控位(GIE)控制指令EINT operarion 1 > GIEDINT operarion 0 > GIEEnable &
41、#160;general interruptDisable general interrupt对SR 其它位的影响:Status Bits: are not affectedMode Bits: OSCOFF and CPUOFF are not affectedreservedVSCG1SCG0OSCOFFCPUOFFGIENZC含中断子程的汇编语言程序简单框架#include “msp430.h&
42、quot; ORG 0FFE0h+RESET_VECTORDC16 init ORG 0FFE0h+INT_VECTORDC16 intsub;包含msp430.h文件;设置复位中断向量;主程入口地址;设置中断向量;中断子程入口地址RSEGCSTACK;定义堆栈段RSEG CODE 定义代码段iiinit:MOV #SFE(CSTACK),#SFE(CSTACK)
43、SP 初始化堆栈指针MOV #WDTPW+WDTHOLD,&WDTCTL 关闭看门狗DINT;关闭总控位 I/O接口相关设置.;打开分控位等EINT;打开总控位intsub: 中断程序RETI;中断返回END; 程序结束53含中断子程、普通子程、数据段的汇编语言程序框架#include “msp430.h” 包含msp430.h文件NAME main
44、60; 模块名称定义PUBLIC main 全局符号声明ORG 0FFF0h+RESET_VECTOR;设置复位中断向量DC16 init 主程入口地址ORG 0FFE0h+INT_VECTOR;设置中断向量DC16 intsub;中断子程入口地址;根据需要设置数据段RSEG DATA16_C 定义常量数据段(在Flash ROM中)tabA: DB 1,2,
45、3,4,5,6,7,8,9,0RSEGDATA16_NDATA16N 定义未初始化变量数据段buffer: DS2054含中断子程、普通子程、数据段的汇编语言程序框架(续) RSEG CSTACK 定义堆栈段,必须有RSEGCODE;定义代码段init: MOV #SFE(CSTACK), SP 初始化堆栈指针MOV #WDTPW+WDTHOLD, &WDTCTL 关闭看门
46、狗DINT;关闭总控位 .;打开分控位等EINT;打开总控位CALL #subrM;普通子程调用subrM:;子程M开始RET;子程M结束intsub: 中断子程开始RETI;中断返回END; 程序结束55主程序设置中断向量堆栈定义与SP初始化关中断总控位硬件相关编程?中断子程开始保护现场设置所涉及的I/O接口中与中断相关的寄存器如清零中断标志位、置位中断分控位等完成中断源请求的任务清零中断标志恢复现场RETI中断返回56有关量的初始化开中断总控位随机的突发的非预料的主循
47、环I/O port P1 中断硬件相关编程举例P1 和P2 中断外部输入可屏蔽中断P1和P2端口的任一引脚均具有中断功能,即具有16个外部输入可屏蔽中断源;P1端口的8个引脚中断源共享同一个中断向量(对于MSP430F149,该中断向量存放在0FFE8h0FFE9h中),P1中断的配置通过编程P1IE,P1IFG和P1IES三个寄存器实现(尚需set GIE);P2端口的8个引脚中断源共享同一个中断向量(对于MSP430F149,该中断向量存放在0FFE2h0FFE3h中),P2中断的配置通过编程P2IE,P2IFG和P2IES三个寄
48、存器和其它相关寄存器实现(尚需set GIE);I/O port P1 的电路原理图P1中断(触发)沿选择寄存器P1IES.x=0:P1IESx=0: 上升沿触发P1IES.x=1: 下降沿触发706050403020100610P1IES7P1IES.6P1IES.7P1IES6P1IES.5P1IES5P1IES.4P1IES4P1IES.3P1IES3P1IES.2P1IES2P1IES.1P1IES1P1IES.0P1IES0P1中断标志寄存器需由软件清零P1IFG.xP1IFG.x=0: No inter
49、rupt pendingP1IFG.x=1: An interrupt pending70605040302010062P1IFG.7P1IFG.6P1IFG.5P1IFG.4P1IFG.3P1IFG.2P1IFG.1P1IFG.00P1中断分控寄存器P1IE.x=0:P1IEx=0: 禁止中断P1IE.x=1: 允许中断706050403020100063P1IE7P1IE.6P1IE.7P1IE6P1IE.5P1IE5P1IE.4P1IE4P1IE.3P1IE3P1IE.2P1IE2P1IE.1P1IE1P1IE.0P1IE0P1
50、SEL , P1DIR 对P1 中断的影响P1DIR.x=0 : digital input以符合互斥原则高阻高阻中断请求低电平有效P1SEL.x=1:P1SELx=1: 禁止中断P1SEL.x=0: 允许中断digitalg I/O/P1中断编程要点P1SEL.x=0P1IE.x=1P1DIR.x=0P1IES?P1IES.x=?P1IFG.xGIE=1 ;digital I/O;分控允许中断;输入;沿选择;软件清零;总控允许中断P1.0中断编程以中
51、断方式响应P1.0上的下降沿,每来一个下降沿, 使P3.6P36 的输出翻转一次MSP430F149P3.6P1.0中断请求66例:P1.0中断汇编语言程序清单(Chap5p_P1int.s43)#include "msp430.h"NAME mainPUBLIC main;ORG0FFE0h+RESET_VECTOR;DC16DC16 initii;set reset vector to init lab
52、elORG 0FFFEhDC16 init set reset vector to 'init'init labelORG 0FFE0h+PORT1_VECTOR DC16 intP1 &
53、#160; set port1 vector to intP1 labelRSEG CSTACK 定义堆栈段RSEG CODE 代码段init:MOV &
54、#160; #SFE(CSTACK),#SFE(CSTACK) SP 初始化SPmain:NOPMOV #WDTPW+WDTHOLD,#WDTPW+WDTHOLD &WDTCTL; 关闭看门狗;DINT;BIC.b BIC.b BIS.b BICb BIC.bBIC.b BIC.b BIS.b BIC.b BISb BIS.bEINTJMP intP1: BIT.b JZ&
55、#160; XORb XOR.bBIC.b exit: RETIEND#BIT0, &P1IE #BIT6, &P3SEL #BIT6, &P3DIR #BIT6 &P3OUT#BIT6,#BIT0,&P1SEL ,&P1DIR
56、 #BIT0,#BIT0,&P1IES #BIT0,&P1IFG #BIT0&P1IE #BIT0,$ #BIT0, &P1IFGexit #BIT6
57、&P3OUT #BIT6,#BIT0, &P1IFG 复位值GIE=0;关闭P1.0中断分控位;设置P3.6为基本I/O功能;设置P3.6为输出;置P3.6P36输出初值为0;置P1.0作为基本I/O端口;置P1.0为输入;置P1.0下降沿作中断源;清P1.0中断标志;打开P1.0P10中断分控位;打开中断总控位GIE=1;主程循环;判断是否P1IFG.0中断;不是则跳转;对P3.6P36取反;清P1.0中断标志思考: 1.中断程序何时被执行?执行过程是怎样?2.若用查询方式实现
58、本例要求,如何修改程序?3.比较中断方式和查询方式有何不同?4.若中断源来自引脚P1.4,如何修改程序?5若中断源来自引脚P2.05.P20,如何修改程序?6.如果允许多个P1 引脚中断,则程序中应如何区分中断请求具体是由哪一个引脚发出的?P3.6P3.6P1.4P2.0中断嵌套pt nestinnesting70interrinterrupt嵌套的概念CPU正在执行某一中断子程,又被其它中断源中断,使CPU转去执行另一中断子程的现象叫中断嵌套。主程序1中断子程2中断请求12中断嵌套的条件如果在中断子程中(其中断标志位已被清零)置位GIE,则允许中断嵌套。在允许中断嵌套的情
59、况下,任何中断请求均将中断正在执行的中断子程,而不管中断的优先级如何。MSP430中的中断优先级仅用于裁决同时产生的中断请求。中断嵌套中的问题P1.0中断请求信号MSP430F149tP1.0中断子程P1.0中断子程P1.0允许嵌套P1.0中断子程允许嵌套思考:若P1.0P10中断子程运行时间>>t,则上图所示的中断嵌套结构将导致怎样的结果?中断应用中的互斥操作问题下图是某车流量自动检测系统的原理图局部及相应的核心程序段,实现对观测点的“车辆数/小时”的实时检测与打印功能,其定时与车辆计数均采用中断实现。方波P10P1.01小时定时MSP430F149P1.1车辆信号每一个正脉冲代
60、表检测到一辆车75车辆计数中断子程定时打印并清零中断子程;开中断;开中断INCCOUNTCALLPRINT_COUNTMOV#00h,COUNTRETIRETI思考:上述程序有无问题?若有,则将导致怎样的错误结果?车辆计数中断子程定时打印并清零中断子程;开中断;开中断MOVCOUNT,R4CALLPRINT_COUNTINCR4MOV#00h,COUNTMOVR4,COUNTR4COUNTRETIRETI思考:上述程序有无问题?若有,则将导致怎样的错误结果?中断子程与由CALL调用的子程非预料事件是指事件发生的时间无法预知,即中断源何时产生中断不确定,是随机的。但事件的性质及处理方法则是已知的
61、,确定的,即中断服务程序是事先编写好的,只是何时执行未知。中断源产生中断的随机性,使中断服务程序的执行也具有随机性,即何时执行中断服务程序不是在程序中安排好的。78C 语言编写中断程序79附:用C语言程序设置中断向量方法#pragma vector=PORT1_VECTOR_interrupt_p void P1intName(void).用C语言编写中断程序方法#include "io430.h"#include "in430.h"int main(
62、;void ) /Stop watchdog timer to prevent time out reset;WDTCTL = WDTPW + WDTHOLD;_DINT( ); /关中断总控位/主程序初始化准备工作_EINT( );/开中断总控位while(1) /主程序循环#pragma
63、60;vector=INT_VECTOR /中断向量设置_interruptitt voidid port_int(voidtit(id)/中断子程头文件io430.h_no_initvolatile union unsigned char P1IFG; structunsigned char P1IFG_0 : 1; unsigned
64、char P1IFGP1IFG_11 : 1; unsigned char P1IFG_2 : 1; unsigned char P1IFG_3 : 1; unsigned char P1IFGP1IFG_44 : 1; unsigned char P1IFG_5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026届河南省鹤壁市高一数学第一学期期末学业质量监测模拟试题含解析
- 医疗数据存储介质的抗量子加密方案
- 胃炎X线表现课件
- 医疗数据压缩效率与区块链存储平衡
- 医疗数据共享的知识产权战略
- 医疗数据共享的激励机制创新
- 文库发布:肾病课件
- 肾外科课件教学课件
- 医疗数据共享中的区块链加密算法
- 护理礼仪的现代意义
- 营养支持在ICU的应用课件
- +山东省烟台市芝罘区2023-2024学年七年级上学期期末数学试卷(五四制)+
- 课程设计DLP4-13型锅炉中硫烟煤烟气袋式除尘湿式脱硫系统设计
- 中科院生态学考博真题题汇总
- 企业质量管理体系及技术安全经营人事财务档案等方面管理制度
- 2月份无菌物品管理的常见问题及预防
- 初中毕业证怎么在网上查询
- LY/T 1814-2009自然保护区生物多样性调查规范
- GB/T 26289-2010高纯硒化学分析方法硼、铝、铁、锌、砷、银、锡、锑、碲、汞、镁、钛、镍、铜、镓、镉、铟、铅、铋量的测定电感耦合等离子体质谱法
- 羽毛球教学大纲
- 《居民投资理财问题研究8800字【论文】》
评论
0/150
提交评论