MSP430中断服务函数的定义

合集下载

C语言的中断服务函数

C语言的中断服务函数

C语言的中断服务函数中断服务函数是一种特殊的函数,用于处理系统或外设发生的中断事件。

在C语言中,中断服务函数常用于嵌入式系统的开发中,用于实现硬件的响应和处理。

下面是关于C语言中断服务函数的详细介绍,包括定义、注册、实现和应用等方面。

一、中断服务函数的定义中断服务函数(Interrupt Service Routine,ISR)是一段特殊的代码,用于响应和处理中断事件。

它与普通的函数不同,不是由程序主动调用的,而是由系统或硬件触发的。

中断事件一般包括硬件的输入、定时器的溢出、软件触发等。

在C语言中,中断服务函数的定义方式与普通的函数类似,但需要使用特殊的关键字和参数。

如下是一个C语言中断服务函数的定义示例:```void interrupt_service_functio//中断处理代码```在上述示例中,`void`表示中断服务函数不返回值,`interrupt_service_function`是函数的名称。

根据不同的开发平台和编译器,中断服务函数的定义可能有所不同。

二、中断服务函数的注册要使用一个中断服务函数,需要将其注册到相应的中断源中。

中断源可以是系统的中断控制器,也可以是外设的中断引脚。

注册中断服务函数的目的是告诉系统,在相应中断事件发生时调用该函数。

以8051单片机为例,注册中断服务函数的方式如下所示:```void mairegister_interrupt_service_function(interrupt_service_functi on);//其他代码```在上述示例中,`register_interrupt_service_function`是用于将中断服务函数`interrupt_service_function`注册到系统中断控制器的函数。

在实际开发中,不同平台和配置会有不同的注册方式。

三、中断服务函数的实现中断服务函数的实现主要包括对中断事件的处理和相应操作。

中断服务函数的实现需要了解特定硬件的中断机制和相关的寄存器操作。

MSP430

MSP430

MSP430MSP430一、上电复位POR 和上电清除PUC二、低功耗控制但系统时钟发生器基本功能建立之后,CPU内的状态寄存器SR中的SCG1、SCG2、OscOff、CpuOff是低功耗的重要控制位;系统工作模式一共有6种,1种活动模式和5种低功耗模式;可以通过设置控制位使MSP430进入低功耗模式,由中断唤醒CPU,在执行完中断服务程序之后再回到低功耗模式,也可以在执行中断程序的时候间接访问堆栈修改状态寄存器的值,这样中断程序执行完之后就会进入另外一种低功耗模式或者处于活动模式。

三、时钟模块(一)、MSP430F149有三个时钟输入源:1、LFXT1CLK:如果LFXTCLK没有作用于SMCLK、MCLK信号,可以用OscOff置位以禁止LFXT1CLK工作;2、XT2CLK:若XT2CLK没有作用于SMCLK、MCLK信号,可以用控制位XT2OFF 关闭XT2;3、DCO振荡器:MSP430F149的两个外部振荡器产生的时钟信号都可以经过1、2、4、8分频后用作系统主时钟MCLK;当外部振荡器失效后,DCO 振荡器会自动被选作MCLK 的时钟源;(二)、MSP430F149提供3三种时钟信号:1、ACLK----辅助时钟,一般用于低速外设,由LFXT1CLK信号分频而得;2、MCLK----系统通过主时钟,一般用于CPU和系统,由以上三个时钟源任意一个分频而得;3、SMCLK---主要用于高速外设,由XT2CLK+XT2CLK 或LFXT1CLK+DCO分频而得。

(三)、如何控制MSP430的DCOCLK频率?——时钟模块的控制由5个寄存器来完成1、DCOCTL:定义8总频率之一2、BCSCTL1:控制XT2CLK的开启与关闭;控制LFXT1CLK的工作模式(低频或高频,高频下需要接高频时钟源);控制ACLK分频。

3、BCSCTL2选择MCLK时钟源;选择MCLK分频;选择SMCLK时钟源;选择SMCLK时钟源分频。

msp430按键中断_V1.01

msp430按键中断_V1.01
中断分类
• 软件中断(内中断) • 硬件中断(外中断)
• 非屏蔽中断 • 可屏蔽中断
4
开启总中断
5
中断响应和中断处理流程
当CPU收到中断或者异常的 信号时,它会暂停执行当前的程 序或任务,通过一定的机制跳转 到负责处理这个信号的相关处理 程序中,在完成对这个信号的处 理后再跳回到刚才被打断的程序 或任务中。
14
I/O中断实列
这是一个利用中断控制LED的亮灭实验,初始时LED常亮,按下按键,LED亮灭切换
15
IO 外部中断使用方法
高级单片机的全部 IO 口都带外部中断功能,MSP430 单片机要使用外部中断,遵 循以下步骤:
1) 通过 PxDIR 将 IO 方向设为输入。 2) 通过写 PxIES,决定中断的边沿是上升沿、下降沿或两种情况均中断。 3) 如果是机械按键输入,可以通过 PxREN 启用内部上下拉电阻,根据按键 的接法,设
7
MSP430中的中断系统
这是一个用户手册
8
MSP430F6638的P1到 P4都具有中断的功能
翻到msp430f6 638_Datasheet 第6章表6.3
9
中断嵌套
如果在中断服务子程中置位GIE(开全局中断),则允许 中断嵌套。 在允许中断嵌套的情况下,任何中断请求均将中断正在 执行的中断服务子程序,而不管中断的优先级如何。 (中断优先级仅用于裁决同时产生的中断请求)
CPU执行流程 中断申请
set GIE
中断子程序1
中断子程序2
10
I/O寄存器
使用实列:
P2DIR |= BIT7; //设P2.7为输出 P2DIR为方向寄存器,输出为1,输入为0. P2OUT |= BIT7; //初始化P2.7为高电平 P2OUT是输出数据寄存器,可控制管脚输出电平的高低,输出为

msp430g2553的P1中断

msp430g2553的P1中断

P1口中断#include <msp430x16x.h>unsigned char flag=0; //任务标志void Iint_Port1(void); //函数声明void main(void){ WDTCTL=WDTPW+WDTHOLD; //关闭看门狗Iint_Port1(); //初始化p1.0_EINT(); //开总中断允许while(1){LPM3; //进入低功耗模式3,I/O口中断可将其唤醒if(!flag) {P1OUT=BIT0;} //中断服务程序else if(flag) {P1OUT=BIT6;} //其他任务}}#include <msp430x16x.h>unsigned char flag=0; //任务标志void Iint_Port1(void); //函数声明void main(void){ WDTCTL=WDTPW+WDTHOLD; //关闭看门狗Iint_Port1(); //初始化p1.0_EINT(); //开总中断允许while(1){LPM3; //进入低功耗模式3,I/O口中断可将其唤醒if(!flag) {P1OUT=BIT0;} //中断服务程序else if(flag) {P1OUT=BIT6;} //其他任务}}#pragma vector=PORT1_VECTOR__interrupt void Port_1(void){ P1IFG=0; //多源中断,需靠软件清除P1IFGflag=1; //置任务标志_BIC_SR_IRQ(LPM3_bits); //将CPU从睡眠模式唤醒}void Iint_Port1(void){ P1DIR|=BIT0+BIT6;P1OUT=BIT0;P1DIR&=~BIT3; //设置为输入方向P1SEL&=~BIT3; //设置为普通I/O 口功能P1IES|=BIT3; //选择下降沿触发P1IE|=BIT3; //打开中断允许P1IFG=0; //P1IES的切换可能使P1IFG置位,需清除}{ P1IFG=0; //多源中断,需靠软件清除P1IFGflag=1; //置任务标志_BIC_SR_IRQ(LPM3_bits); //将CPU从睡眠模式唤醒}void Iint_Port1(void){P1DIR|=BIT0+BIT6;P1OUT=BIT0;P1DIR&=~BIT3; //设置为输入方向P1SEL&=~BIT3; //设置为普通I/O口功能P1IES|=BIT3; //选择下降沿触发P1IE|=BIT3; //打开中断允许P1IFG=0; //P1IES的切换可能使P1IFG置位,需清除}// 端口1的中断服务历程#pragma vector=PORT1_VECTOR__interrupt void Port_1(void){P2OUT ^= 0x01; // P1.0 状态翻转P1IFG &= ~0x10; // P1.4 中断标志清零}。

MSP430几种常用内置函数解释

MSP430几种常用内置函数解释

几个重要的内联函数(内联函数定义在intrinsics.h中,但是这几个函数使用的时候不需要事先声明该文件头)①__bic_SR_register();将CPU中SR寄存器中的某些位清零。

即将括号内的位清零。

例:__bic_SR_register(GIE);//将GIE位清零,即关闭总中断②__bis_SR_register();将CPU中SR寄存器中的某些位置1。

即将括号内的位置1。

③__interrupt放在函数前面,标志中断函数。

下面这段程序是看门狗WDT的中断服务函数。

WDT_VECTOR为看门狗的中断向量。

举例:#pragma vector=WDT_VECTOR__interrupt void WatchDog(void){…}④__monitor放在函数前面,功能是声明当这一函数执行的时候自动关闭中断。

应该尽量缩短这样的函数,否则,中断事件无法得到及时的响应。

⑤__bic_SR_register_on_exit();功能:用于一个中断函数或者不可中断函数(标志为__monitor)返回时,将CPU内SR寄存器中的某些位清0.⑥__bis_SR_register_on_exit();功能:用于一个中断函数或者不可中断函数(标志为__monitor)返回时,将CPU内SR寄存器中的某些位置1.⑦__no_init放在全局变量前面,功能是使程序启动时不为变量赋初值⑧__disable_interrupt关闭总中断另外一个相同作用的表达为:_DINT()⑨__enable_interrupt开启总中断另外一个相同作用的表达为:_EINT()⑩__even_in_range(,);常被用在多源中断的查询中,如switch(__even_in_range(TAIV,1 0)意思是:只有在TAIV的值是在0--10内的偶数时才会执行switch函数内的语句。

其作用是提高switch语句的效率A._NOP()空操作,等价于__no_operation指令B.__get_SP_register(void)功能:返回堆栈指针寄存器SP的值。

msp430 按键控制LED 最基本程序

msp430 按键控制LED 最基本程序

按键篇经过一短时间的学习,下面,亲自动手编写一下程序吧。

程序的目的是:按下按键,控制LED的亮和灭。

短按键,则小灯亮1秒,然后灭;长按键,小灯常亮。

首先,完成键盘的扫描程序。

第一点:如果是扫描,就要用到定时器。

我想设计定时器每隔10ms扫描一次按键。

定时器,我选用定时器A。

它的定时中断函数如下:函数名称:TimerA_ISR功能:定时器A的中断服务函数参数:无返回值:无********************************************/#pragma vector = TIMERA0_VECTOR__interrupt void TimerA_ISR(void){GetKey();}上面这个定时中断函数的意思就是:每当定时时间到了以后,就调用GetKey()函数一次。

GetKey()函数就是扫描键盘按键的函数了。

在GetKey()函数中,会根据按键类型(长按/短按)返回不同的数值。

根据返回的数值,做小灯亮法的操作。

那么,返回的这个值,我们需要保存在一个变量中,在这里定义一个变量ucharFlagLcd ;来保存返回值。

这个变量在全局变量中定义,以保证它的作用域。

那么定时函数就变为#pragma vector = TIMERA0_VECTOR__interrupt void TimerA_ISR(void){FlagLcd =GetKey();}定时器中断的时间间隔,我在主函数中定义。

这样写:CCTL0 = CCIE; //使能CCR0中断CCR0 = 40; //设定周期0.01STACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK,增计数模式这样,定时器这块就算完工了。

那么,下面进行按键扫描程序。

按键的定义是这样的,根据我板子的按键原理图如下这是一个矩阵键盘。

其中KEY就是外部高电平3.3V。

我只想用其中的P1.0作为这次试验的按键。

第2讲MSP430单片机的GPIO与中断系统

第2讲MSP430单片机的GPIO与中断系统

4.2 MSP430单片机中断源
MSP430单片机的中断向量表被安排在0FFFFH~0FF80H空间,具有最大64个中断源。表4.2.1为MSP430单
片机的中断向量表。
中断源 系统复位 系统不可屏蔽中断 用户不可屏蔽中断 比较器B TB0 TB0 看门狗定时器 USCI A0 接收/发送 USCI B0 接收/发送 ADC12_A TA0 TA0 USB_UBM DMA TA1 TA1 P1端口 USCI_A1 接收/发送 USCI_B1 接收/发送 TA2 TA2 P2端口 RTC_A 保留
I/O端口还具有其他片内外设功能,为减少引脚,将这 些外设功能与I/O端口引脚复用来实现。 PxSEL来选择引脚的I/O端口功能与外围模块功能。 PxSEL的配置: Bit = 0: 选择引脚为I/O端口; Bit = 1: 选择引脚为外设功能。
2015/8/7
12
GPIO 寄存器(6/9)
1
3.1 通用IO端口
3.1.1 MSP430端口概述 GPIO (General Purpose I/O),通用输入输出端口。 GPIO基本都是用于芯片与片外器件或设备的交互。 检测数字输入,如键盘或开关信号; 驱动LED,蜂鸣器或LCD等其他指示器; 控制片外器件,较高级的使用可以用它们(通过 程序)模拟很多器件的时序达到控制相应器件的 目的,比如模拟SPI和模拟总线等。
2015/8/7
16
4.1 中断的基本概念
1.中断定义 中断是暂停CPU正在运行的程序,转去执行相应的中断服务程序,完毕后返回被中断 的程序继续运行的现象和技术。 2.中断源 把引起中断的原因或者能够发出中断请求的信号源统称为中断源。中断首先需要由中 断源发出中断请求,并征得系统允许后才会发生。在转去执行中断服务程序前,程序需 保护中断现场;在执行完中断服务程序后,应恢复中断现场。 中断源一般分成两类:外部硬件中断源和内部软件中断源。外部硬件中断源包括可屏蔽 中断和不可屏蔽中断。内部软件中断源产生于单片机内部,主要有以下3种:①由CPU运 行结果产生;②执行中断指令INT3;③使用DEBUG中单步或断点设置引起。

msp430中断定时器.概要

msp430中断定时器.概要

}
P1口的中断向量 #pragma vector = PORT1_VECTOR//定时器TA中 断服务函数 __interrupt void PORT1_ISR(void) { …… }
#define COMPARATORA_VECTOR #define TIMER1_A1_VECTOR #define TIMER1_A0_VECTOR #define NMI_VECTOR
(12 * 1u) (13 * 1u)
(14 * 1u)
#define RESET_VECTOR
(15 * 1u)
2019/1/21
中断优先级是固定的并且由图 2-3中显示的连接链中的 模块安排来定义。 距离 CPU/NMIRS 越近的模块, 其 优先级越高。中断优先级确定当多于一个中断在同时等 待时,采用哪一个中断。
中断有三个类型: • 系统复位 • 不可屏蔽 NMI
• 可屏蔽(我们重点学习)
2019/1/21
中断矢量和加电起动地址位于地址范围 0FFFFh 至 0FFC0h 内,与表 2-1中描述的相同。 一个矢量由用 户使用相应中断处理例程的 16 位地址进行编辑。 完 整中断矢量列表请参与器件专用数据表。
建议为每个分配给一个模块的中断矢量提供一个中断处 理例程。 包含 RETI指
令,并且几个中断矢量可指向它。
2019/1/21
中断
1、中断定义 CPU在执行一个程序时,对系统发生的某个事件(程序自身或外 界的原因)作出的一种反应:CPU暂停正在执行的程序,保留现 场后自动转去处理相应的事件,处理完该事件后,到适当的时候 返回断点,继续完成被打断的程序。(如有必要,被中断的程序 可以在后来某时间恢复,继续执行。) 事件:如读盘,盘有问题,无法读,产生中断,解决后,程序恢 复,软件错误也会中断。 特点: 1) 中断随机的 2) 中断是可恢复的 3) 中断是自动进行处理的 单片机中断的简单应用:按键中断控制小灯亮灭

430单片机之中断

430单片机之中断

MSP430单片机之中断服务430的中断是按照下图1的优先级顺序定义的,有三种中断:1.系统重置、2.不可屏蔽中断(NMI)、3.可屏蔽中断。

图1.中断优先级部分具体的中断优先级由高到低为:PORT2_VECTOR (1 * 2u) /* 0xFFE2 Port 2 */PORT1_VECTOR (4 * 2u) /* 0xFFE8 Port 1 */TIMERA1_VECTOR (5 * 2u) /* 0xFFEA Timer A CC1-2, TA */TIMERA0_VECTOR (6 * 2u) /* 0xFFEC Timer A CC0 */ADC_VECTOR (7 * 2u) /* 0xFFEE ADC */USART0TX_VECTOR (8 * 2u) /* 0xFFF0 USART 0 Transmit */USART0RX_VECTOR (9 * 2u) /* 0xFFF2 USART 0 Receive */WDT_VECTOR (10 * 2u) /* 0xFFF4 Watchdog Timer */COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6 Comparator A */TIMERB1_VECTOR (12 * 2u) /* 0xFFF8 Timer B CC1-2, TB */TIMERB0_VECTOR (13 * 2u) /* 0xFFFA Timer B CC0 */NMI_VECTOR (14 * 2u) /* 0xFFFC Non-maska××e */RESET_VECTOR (15 * 2u) /* 0xFFFE Reset [Highest Priority] */其中可屏蔽中断分为系统NMI(SNMI)和用户NMI(UNMI),一般来说,不可屏蔽中断不受GIE标志位的影响。

用户不可屏蔽中断的中断源为NMIIE、ACCIE和OFIE,当响应用户不可屏蔽中断后,其他不可屏蔽中断就自动被禁止,以防止同级别的中断发生产生中断嵌套。

Msp430f5529时钟系统与定时器以及中断

Msp430f5529时钟系统与定时器以及中断
在MCU中,无论是定时功能还是计数功能,实 际上都是由n位(8位、16位、32位等)的加法/减 法计数器实现,区别仅在于计数输入信号的不同 。
一般地讲,计数器的计数输入信号是外部事 件(脉冲信号),而定时器的计数输入信号则是 MCU中的时钟信号或经过分频后的时钟信号。
MSP430F5529定时器分为看门狗定时器、定时 器A和定时器B。
00: stop mode 01: up mode 10: continuous mode 11: up/down mode
1: interrupt pending
1: TA interrupt enabled
1: reset TAR ,clock divider and count direction for up/down mode. The TACLR bit is automatically reset and is always read as zero.
定时器 A 的四种计数方式(Count Mode)
MCx count mode
0 0: stop mode 0 1: up mode 1 0: continuous mode 1 1: up/down mode
Mode Control
Stop mode : the timer is halted
中断响应过程
1. 当前指令执行完毕,且满足响应条件; 2. 入栈保护断点:相当于执行 PUSH PC; 3. 入栈保护SR:相当于执行 PUSH SR; 4. 优先级裁决:若有多个中断同时请求,则CPU选
择优先级最高的中断请求进行响应; 5. 中断请求标志的处理:对于单一中断标志的中断
源请求,则由CPU自动清零该中断标志;对于有 多个中断标志的中断源请求,则中断标志的清零 处理交由中断服务子程完成(以便于中断服务子 程区分本次中断到底是由哪一个/哪些中断标志 请求的); 6. 清零SR(关中断,结束低功耗方式); 7. 装载中断向量至PC,转去执行中断服务子程。

第3讲 MSP430中断系统st_517705504

第3讲 MSP430中断系统st_517705504

第3讲MSP430中断系统一、MSP430的中断系统简介 二、MSP430的中断系统实验一、MSP430的中断系统1、中断的概念 2、MSP430的中断源类型 3、MSP430x169的中断向量表、中断优先级 4、可屏蔽中断响应过程 5、端口P1和P2外中断 6、可屏蔽中断程序设计1、中断的概念中断是暂停CPU正在运行的程序, 转去执行相应的中断服务程序,完 毕后返回被中断的程序继续运行的 现象和技术。

CPU执行流程无中断时 有中断时非预料 事件1中断服 务程序1非预料 事件 2中断服 务程序 22、 MSP430的中断源类型两种分类: 1) 按中断源的响应是否受控分类 2)按中断源来自MCU外部引脚还是内部分类1) 按中断源的响应是否受控分类 MSP430的中断源分为三大类型●系统复位中断 system reset(也称不可屏蔽中断,Nonmaskable interrupts) ——不能被总控位GIE和自己的分控位IE位屏蔽的中断●非屏蔽中断(Non)maskable interrupts——不能被总控位GIE屏蔽, 但能被自己的分控位IE位屏蔽的中断●可屏蔽中断maskable interrupts——能被总控位GIE和自己的分控位IE位屏蔽的中断状态寄存器SR (Status Register)15~9 保留 8 7 SCG1 6 SCG0 5 OSCOFF 4 CPUOFF 3 2 1 0VGIENZCGIE : 可屏蔽中断屏蔽位 (General Interrupt Enable Bit) 置位1: 允许所有可屏蔽中断 复位0: 禁止所有可屏蔽中断开/关总中断控制位指令(disable/enable general interrupt bit) 指令格式 _DINT( ); _EINT( ); 执行操作 V Z N C0→ GIE 1→ GIE* * * * #include "in430.h"#include “intrinsics.h”非屏蔽中断的控制机制(non)_maskable interruptindividual enable bitCPU 优先权裁决 CPU 中断响应中断请求 1--enable 0--disable 分控位可屏蔽中断的控制机制(分控位、总控位)maskable interruptindividual enable bitGIECPU 优先权裁决 CPU 中断响应中断请求 1--enable 0--disable 分控位 1--enable 0--disable 总控位2) 按中断源来自MCU外部引脚还是内部分类由外部引脚(如RST/NMI)产生的中断, 为外中断, 由MCU内部模块产生的中断,称内中断RST/NMI P1.0~P1.7外中断内 中断MSP430F169的外中断和内中断外中断:  引脚RST/NMI、P1.0~P1.7、P2.0~P2.7产生的中断 内中断:  由MCU内部模块产生外中断内中断3、MSP430x169中断源、中断标志、中断向量地址 、 中断优先级(中断类型号) (MSP430F169.pdf P11)Interrupt SourcePower up, External Reset Watchdog, Flash memory NMI , Oscillator Fault, Flash memory access violation Timer_B7 Timer_B7 Comparator_A Watchdog timer USART0 receive USART0 transmit I2C transmit/receive/others ADC12 Timer_A3 Timer_A3 I/O port 1(8 flags) USART1 receive USART1 transmit I/O port 2(8 flags) DAC12 DMAInterrupt FlagWDTIFG, KEYV NMIFG,OFIFG,ACCVIFG TBCCR0 CCIFG TBCCR1 to TBCCR6 CCIFGs, TBIFG CAIFG WDTIFG URXIFG0 UTXIFG0 ADC12IFG TACCR0 CCIFG TACCR1 and TACCR2 CCIFGs,  TAIFG P1IFG.0~P1IFG.7 URXIFG1 UTXIFG1 P2IFG.0~P2IFG.7 DAC12_0IFG, DAC12_1IFG, DMA0IFG~DMA2IFGSYSTEM InterruptReset (Non)maskable Maskable Maskable Maskable Maskable Maskable Maskable Maskable Maskable Maskable Maskable Maskable Maskable Maskable MaskableAddress0FFFEh 0FFFCh 0FFFAh 0FFF8h 0FFF6h 0FFF4h 0FFF2h 0FFF0h 0FFEEh 0FFECh 0FFEAh 0FFE8h 0FFE6h 0FFE4h 0FFE2h 0FFE0hPriority15(highest) 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0(lowest)作为中断申请的端口P1和P2引脚, 应设置下列相应寄存器:1)设置功能选择寄存器PxSEL.y对应位为0(基本I/O功能)2)设置方向选择寄存器PxDIR.y对应位为0(输入)3)设置PxIES.y选择中断源有效信号类型是上升还是下降沿4)设置PxIE.y打开分中断允许位5)设置GIE=1打开总中断允许位在中断程序中:1)由于端口的8个引脚共用一个中断向量,当有多个引脚做中断源时,需利用PxIFG判断产生中断的中断源引脚2) 在中断子程中应清除PxIFG相应的中断标志位206、 MSP430的可屏蔽中断程序设计1)  编程步骤 2) C语言中断程序举例1)编程步骤编程前应了解可屏蔽硬中断的响应过程, 了解有关的寄存器和引脚与中断响应过程的关系 a.  主程序 做好相关设置: 中断源发出中断申请时CPU能够响应的准备工作 b.  中断程序 处理与中断源有关的关键任务 c.   设置中断向量 根据中断源在中断向量表的相应位置,设置中断向量a.  主程序做好相关设置, 中断源发出中断申请时CPU能够响应的准备工作 开始 主 程 序 流 程 根据情况关闭分中断允 许或总中断允许 有关任务初始化 中断有关初始化 (中断源、边沿选择等) 清分中断标志 打开分中断允许 开总中断允许GIE=1 主程其它工作处理 (可用无限循环延时代替)b. 中断程序处理与中断源有关的关键任务 开始中 断 程 序 流 程C语言中断程序结构__interrupt  void intName(void) { ...... ...... ...... } 1.  定义了一个函数名为intName的中断程序 2. 结构上与普通函数的区别是? 使用了关键字__interrupt 使得反汇编中断程序时,  返回的语句是RETI, 而不是RETc. 设置中断向量确定根据中断源确定中断类型号N, 将中断程序的入口地址放在中断向量表0FFE0h+N*2处中断源 上电,外部复位 看门狗复位 FLASH密码错 ... 引脚P1.0~P1.7 ... 引脚P2.0~P2.7中断标志向量地址优先级 中断类型号 15 ... 4 ... 1WDTIFG, KEYV0FFFEh... ... P1IFG.0~P1IFG.7  0FFE8h ... ... P1IFG.0~P1IFG.7       0FFE2h¾ 头文件 io430x16x.h和 msp430x16x.h 用符号表示各中断源在中断向量表的偏移地址// Interrupt Vectors (offset from 0xFFE0) #define DACDMA_VECTOR        (0 * 2u)  /* 0xFFE0 DAC/DMA */ #define PORT2_VECTOR         (1 * 2u)  /* 0xFFE2 Port 2 */ #define USART1TX_VECTOR      (2 * 2u)  /* 0xFFE4 USART 1 Transmit */ #define USART1RX_VECTOR      (3 * 2u)  /* 0xFFE6 USART 1 Receive */ #define PORT1_VECTOR         (4 * 2u)  /* 0xFFE8 Port 1 */ #define TIMERA1_VECTOR       (5 * 2u)  /* 0xFFEA Timer A CC1‐2, TA */ #define TIMERA0_VECTOR       (6 * 2u)  /* 0xFFEC Timer A CC0 */ #define ADC12_VECTOR         (7 * 2u)  /* 0xFFEE ADC */ #define USART0TX_VECTOR      (8 * 2u)  /* 0xFFF0 USART 0 Transmit */ #define USART0RX_VECTOR      (9 * 2u)  /* 0xFFF2 USART 0 Receive */ #define WDT_VECTOR           (10 * 2u) /* 0xFFF4 Watchdog Timer */ #define COMPARATORA_VECTOR   (11 * 2u) /* 0xFFF6 Comparator A */ #define TIMERB1_VECTOR       (12 * 2u) /* 0xFFF8 Timer B CC1‐6, TB */ #define TIMERB0_VECTOR       (13 * 2u) /* 0xFFFA Timer B CC0 */ #define NMI_VECTOR           (14 * 2u) /* 0xFFFC Non‐maskable */ #define RESET_VECTOR   (15 * 2u) /* 0xFFFE Reset [Highest Priority] */C语言程序设置中断向量方法在中断程序前使用#pragma vector=偏址 语句, 将中断程序的入口地址放入到FFE0+偏址的中断向量表中 #pragma vector=N*2 //使用中断类型号计算偏址 __interrupt  void intName(void) { ...... } #pragma vector=PORT1_VECTOR //使用符号表示的中断偏址 __interrupt  void intName(void) { ...... }1. 主程序可 屏 蔽 中 断 程 序 设 计开始 据情况关闭分中断允许 或总中断允许 有关任务初始化 中断有关初始化 (中断源、边沿选择等) 清分中断标志 打开分中断允许 开总中断允许GIE=1 主程其它工作处理 (可用无限循环延时代替)开始3. 设置中断向量 根据中断源在 中断向量表相应位置 设置中断向量例: 中断编程举例 (以P1.0上的中断为例)用C语言编写程序,   以中断方式响应P1.0上的下降沿, 每来一个下降沿,  使 P3.6 的输出翻转一次 MSP430F169 P3.6P1.0中断请求C语言:   开/关总中断控制位函数(disable/enable  general  interrupt  bit)函数名称__disable_interrupt( ) __ensable_interrupt( )功能0→ GIE 1→ GIE包含在intrinsics.h intrinsics.hintrinsics.h 文件中:声明了一些包含在IAR 编译器的内部函数,方便用户使用 如: __intrinsic    void   __enable_interrupt(void); __intrinsic    void   __disable_interrupt(void);可通过查看EW430安装目录下\430\doc\Help430Compiler.chm 了解这些内部函数实现的功能利用安装目录\430\doc\Help430Compiler.chm 了解这些内部函数实现的功能用C语言编写中断程序方法11. 包含intrinsics.h文件中 2. 使用__disable_interrupt( )  和__enable_interrupt(  ) #include "io430.h" #include "intrinsics.h" int main( void ) {      //Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; __disable_interrupt();   //关总中断控制(非必要) …… //主程序初始化准备工作 …… __enable_interrupt(); //开总中断控制 while(1){     }; //主程序循环 } #pragma vector=数字或符号表示的偏址 //中断向量设置 __interrupt void port_int(void) //中断子程 { …… }头文件 in430.h(注意不是io430.h)…… #include   "intrinsics.h " …… /*Deprecated, please use "__disable_interrupt" instead. */ #define  _DINT( )   __disable_interrupt() /* Deprecated, please use "__enable_interrupt" instead. */ #define    _EINT( )    __enable_interrupt() /* Deprecated, please use "__no_operation" instead. */ #define    _NOP( )   __no_operation() ......用C语言编写中断程序方法21. 包含in430.h文件 2. 使用DINT(  )  和EINT ( ) #include "io430.h" #include "in430.h" int main( void ) {      //Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; _DINT( );   //关总中断控制(非必要) …… //主程序初始化准备工作 …… _EINT( ); //开总中断控制 while(1){     }; //主程序循环 } #pragma vector=数字或符号表示的偏址//中断向量设置 __interrupt void port_int(void) //中断子程 { …… }头文件io430.h__no_init volatile   union {  unsigned char P1IFG;   struct { unsigned char P1IFG_0    :  1 ;  unsigned char P1IFG_1    :  1 ;  unsigned char P1IFG_2    :  1 ;  unsigned char P1IFG_3    :  1 ;  unsigned char P1IFG_4    :  1 ;  unsigned char P1IFG_5    :  1 ;  unsigned char P1IFG_6    :  1 ;  unsigned char P1IFG_7    :  1 ;  } P1IFG_bit;   } @ 0x0023; __no_init volatile union {  unsigned char P1IES;    struct {unsigned char P1IES_0    :  1 ;  unsigned char P1IES_1    :  1 ;  unsigned char P1IES_2    :  1 ;  unsigned char P1IES_3    :  1 ;  unsigned char P1IES_4    :  1 ;  unsigned char P1IES_5    :  1 ;  unsigned char P1IES_6    :  1 ;  unsigned char P1IES_7    :  1 ;  } P1IES_bit;   } @ 0x0024;可用字节或位域方式对PxIFG和PxIE进行操作P1IFG_bit.P1IFG_0 = 0;  P1IE_bit.P1IE_0 = 1; //清P1.0中断标志 //打开P1.0中断允许#include  "io430.h" #include  "in430.h" int main( void ) {  WDTCTL = WDTPW + WDTHOLD;  //关闭看门狗 _DINT(); //禁止可屏蔽中断 GIE=0 P1IE_bit.P1IE_0=0; // 关闭P1.0中断允许 P3SEL_bit.P3SEL_6=0;  //设置P3.6为基本I/O功能 P3DIR_bit.P3DIR_6=1;    //设置P3.6为输出 P3OUT_bit.P3OUT_6=0;  //置P3.6输出初值为0 P1SEL_bit.P1SEL_0=0; //置P1.0作为基本I/O端口 P1DIR_bit.P1DIR_0=0; //置P1.0为输入 P1IES_bit.P1IES_0=1; //置P1.0下降沿作中断源 P1IFG_bit.P1IFG_0=0;  //清P1.0中断标志 P1IE_bit.P1IE_0=1; //打开P1.0中断允许 _EINT(); //允许可屏蔽中断 GIE=1 while(1)  {   };              //主程循环 } #pragma vector=PORT1_VECTOR //置P1中断向量 __interrupt void port_int(void)      //中断子程 {     if  (P1IFG_bit.P1IFG_0==1)      //判断是否是P1IFG.0中断标志 { P3OUT_bit.P3OUT_6=~P3OUT_bit.P3OUT_6; //对P3.6取反 P1IFG_bit.P1IFG_0=0; //清P1.0中断标志 } }在EW430下 反汇编C程序代码: P1IFG_bit.P1IFG_0=0;  → BIC.b #0x1, &P1IFG P1IE_bit.P1IE_0=1;  → BIS.b #0x1, &P1IE _EINT(); → EINT在EW430下反汇编C中断程序代码:子程结尾为 RETI注意:● 若有多个中断同时请求, CPU先响应优先级最高的中断请求 ● 当中断源产生时,   MSP430内部对应有一个标志被置位 中断程序之后, 应确保该标志的值已清零,  否则被当成又一次的中断申请 ● 对于单一中断标志的中断源请求, CPU会自动清零该中断标志 ● 对于有多个中断标志的中断源请求, 用户在中断子程用这些标志判断产生的具体子中断源, 中断标志的清零由用户在使用完后编程清零中断源 定时器A P1的8个引脚 ... P2的8个引脚 中断标志 TACCR1 to TACCR2 CCIFGs, TAIFG (3) P1IFG.0~P1IFG.7 (8) ... P1IFG.0~P1IFG.7 (8) 向量地址 优先级,类型号 0FFEAh 5 0FFE8h ... 0FFE2h 4 ... 1以中断方式响应P1端口上8个按键(上升沿)。

MSP430 中断服务

MSP430 中断服务

当系统时钟发生器基本功能建立之后,CPU内状态寄存器SR的SCG1,SCG0,CPUOFF,OSCOFF位是重要的低功耗控制位。

只要任意中断被响应,上述控制位就被压入堆栈保存,中断处理之后,又可恢复先前的工作方式。

在中断处理子程序执行期间,通过间接访问堆栈数据,可以操作这些控制位;这样允许程序在中断返回(RETI) 后,以另一种功耗方式继续运行。

各控制位的作用如下:SCG1:复位,使能SMCLK;置位,禁止SMCLK。

SCG0:复位,激活直流发生器,只有SCG0置位,并且DCOCLK没有被用作MCLK或SMCLK时,直流发生器才能被禁止。

OSCOFF:复位,激活LFXT1,只有当OSCOFF被置位并且LFXT1CLK不用于MCLK或SMCLK时,FLXT1才能被禁止;当使用晶体振荡器关闭选项OSCOFF时,需要考虑晶体振荡器的启动设置时间CPUOFF:复位,激活MCLK;置位,关闭MCLK。

控制位SCG1、SCG0、CPUOFF、OSCOFF可由软件配制成六种不同的工作模式:工作模式控制位 CPU状态、振荡器及时钟SCG1=0 CPU活动SCG0=0 MCLK活动AM CPUOFF=0 SMCLK活动OSCOFF=0 ACLK活动SCG1=0 CPU禁止LPM0 SCG0=0 MCLK禁止OSCOFF=0 SMCLK活动CPUOFF=1 ACLK活动SCG1=0 CPU禁止MCLK禁止LPM1 SCG0=1 如果DCOCLK位用作MCLK或SMCLK,则直流发生器禁止,否则,仍然活动OSCOFF=0 SMCLK活动CPUOFF=1 ACLK活动SCG1=1 CPU禁止如果DCO未被用作MCLK或SMCLK,自动禁止SCG0=0 MCLK禁止LPM2 OSCOFF=0 SMCLK禁止CPUOFF=1 ACLK活动SCG1=1 CPU禁止DCO被禁止,直流发生器被禁止SCG0=1 MCLK禁止LPM3 OSCOFF=0 SMCLK禁止CPUOFF=1 ACLK活动SCG1=1 CPU禁止SCG0=1 DCO被禁止,直流发生器被禁止LPM4 OSCOFF=1 所有振荡器停止工作MCLK、SMCLK禁止CPUOFF=1 ACLK禁止低功耗的设计技巧问题1.LPM4:在振荡器关闭模式期间,处理机的所有部件工作停止,此时的电流消耗最小。

msp430中断定时器

msp430中断定时器

#define VECTOR_NAME(name) #define EMIT_PRAGMA(x)
name##_ptr _Pragma(#x)
#define CREATE_VECTOR(name)
void (* const VECTOR_NAME(name))(void) = &name
#define PLACE_VECTOR(vector,section) EMIT_PRAGMA(DATA_SECTION(vector,section)) #define ISR_VECTOR(func,offset) CREATE_VECTOR(func); \
/* 0xFFFE Reset [Highest Priority] */
2015-5-24
MSP430单片机的IO输入中断
一些高级的单片机的全部IO口都带外部中断功能,比如 ARM系列。MSP430 单片机只有P1和P2口带外部中断功能。 输入中断一般为IO口给出高电平,通过外部动作使电平跳 变为低电平,并以此作为中断源 寄存器配置步骤: 1.通过PxDIR将IO方向设置为输 入 2.通过PxIES配置中断边沿 3.通过PxREN配置上下拉电阻 4.配置PxIE开启中断 最后还要注意开启总中断。
2015-5-24
PLACE_VECTOR(VECTOR_NAME(func), offset) #define PORT1_VECTOR #define PORT2_VECTOR #define ADC10_VECTOR #define USCIAB0TX_VECTOR #define USCIAB0RX_VECTOR #define TIMER0_A1_VECTOR #define TIMER0_A0_VECTOR #define WDT_VECTOR (2 * 1u) (3 * 1u) (5 * 1u) (6 * 1u) (7 * 1u) (8 * 1u) (9 * 1u) (10 * 1u) (11 * 1u) /* 0xFFE4 Port 1 */ /* 0xFFE6 Port 2 */ /* 0xFFEA ADC10 */ /* 0xFFEC USCI A0/B0 Transmit */ /* 0xFFEE USCI A0/B0 Receive */ /* 0xFFF0 Timer0)A CC1, TA0 */ /* 0xFFF2 Timer0_A CC0 */ /* 0xFFF4 Watchdog Timer */ /* 0xFFF6 Comparator A */ /* 0xFFF8 Timer1_A CC1-4, TA1 */ /* 0xFFFA Timer1_A CC0 */ /* 0xFFFC Non-maskable */

MSP430中断

MSP430中断

MSP430中断中断源(中断分类)中断首先需要有中断源发出中断请求,并征得系统允许(屏蔽,优先权)后才会发生。

转去执行中断服务程序前需保护中断现场,执行完中断服务程序后应恢复中断现场。

MSP430有三种中断类型:系统中断,可屏蔽中断,不可屏蔽中断NMI。

不可屏蔽中断NMI不能被总中断使能位GIE控制,而是由特殊的标志位(NMIIE , ACCVIE , OFIE)来控制的。

NMI中断可由以下三种中断源产生:(1)当RST/NMI引脚配置为NMI模式,引脚上出现上升沿下降沿。

(2)Flash访问错误。

当Flash访问出错时,ACCVIFG被置位,当ACCVE被置位时,Flash;访问出错产生一个NMI事件。

(3)发生晶振失效。

当OFIE被置位时,晶振失效产生一个NMI事件。

中断处理从接受中断请求开始到开始执行中断服务程序的第一条指令,中断的准备过程需要6个周期。

(1)若CPU处于AM状态,则完成正在执行的指令;若CPU处于处于低功耗状态,则退出低功耗状态。

(2)把PC寄存器内容入栈。

(3)把SR寄存器内容入栈。

(4)如果同时有多个中断,则选择优先级最高的中断。

(5)如果中断是单源中断,则中断标志位自动复位;如果中断是多中断源,则需要中断服务程序复位。

(6)SR清零,结束低功耗模式。

由于GIE被清除,其他的中断被屏蔽。

因此,中断不能被嵌套。

(7)中断向量表被装入PC寄存器,并从该地址开始执行中断服务程序。

中断返回过程中断由RETI指令结束,从中返回需要消耗5个是种周期。

(1)将SR寄存器的值从堆栈弹出,恢复中断前的设置。

(2)将PC寄存器的值从堆栈弹出,程序从PC的地址执行。

中断标志位中断产生的时候,CPU会自动进入相应的中断服务程序。

当多种中断对应了一个中断源时,需要判断到底是哪个中断发生的时候就要用到IFG标识位。

通过读取IFG标识来确定是哪一种中断。

第2讲MSP430单片机的GPIO与中断系统

第2讲MSP430单片机的GPIO与中断系统
该寄存器的8位与端口的8个引脚一一对应,其中某一位 置位表示允许对应的引脚在电平变化(上升沿或下降沿) 时产生中断,否则,表示禁止该位的中断。
每个PxIE位使能的中断请求都与相应的PxIFG中断标志 相关联,可通过写PxOUT和PxDIR来设置PxIFG。
PxIE的配置: Bit = 1: 允许中断; Bit = 0: 禁止中断。
17
4.1 中断的基本概念
3.中断向量表 中断向量是指中断服务程序的入口地址,每个中断向量被分配给 4个连续的字节单元, 两个高字节单元存放入口的段地址CS,两个低字节单元存放入口的偏移量IP。为了让CPU 方便地查找到对应的中断向量,就需要在内存中建立一张查询表,即中断向量表。 4.中断优先级 凡事都有轻重缓急之分,不同的中断请求表示不同的中断事件,因此,CPU对不同中

PxDS 输出驱动强度寄存器
PxDS寄存器的每个位,设置引脚的输出强度为高驱动 强度或低驱动强度。
默认值为低驱动强度。 PxDS的配置: Bit = 0: 低驱动强度; Bit = 1: 高驱动强度。
2015/8/7
13
GPIO 寄存器(7/9)

PxIE 中断使能寄存器(仅中断端口P1和P2)
1
3.1 通用IO端口
3.1.1 MSP430端口概述 GPIO (General Purpose I/O),通用输入输出端口。 GPIO基本都是用于芯片与片外器件或设备的交互。 检测数字输入,如键盘或开关信号; 驱动LED,蜂鸣器或LCD等其他指示器; 控制片外器件,较高级的使用可以用它们(通过 程序)模拟很多器件的时序达到控制相应器件的 目的,比如模拟SPI和模拟总线等。

引脚下拉 V脚选择上拉 上拉电阻简单来说就是把电平拉高, 通常用 4.7-10K的电阻接到Vcc电源。 Bit = 0: 引脚选择下拉; 下拉电阻则是把电平拉低,电阻接到GND地线上。

msp430中断(不可屏蔽中断NMI)

msp430中断(不可屏蔽中断NMI)

中断系统中断的优先级是固定的。

中断优先级的是以模块的在链接所处的位置决定的。

越靠近CPU/NMIRS,模块的优先级越高。

中断优先级决定了,当系统有多个中断等待处理时,先处理哪一个中断。

有三种中断类型:系统中断不可屏蔽中断可屏蔽中断不可屏蔽中断(NMI)不可屏蔽中断不能被总中断使能位(GIE)所屏蔽,而由单独的中断使能位(NMIIE, ACCVIE,OFIE)来控制的。

当接收到不可屏蔽中断中断时,所有的不可屏蔽中断使能位会被自动复位。

程序从不可屏蔽中断的中断向量0FFFCH存储的地址开始运行。

用户软件必须设置所需的不可屏蔽的中断使能位,以便不可屏蔽中断能够再次响应。

不可屏蔽的中断源有以下三种:1. 当配置为NMI模式时,RST/NMI引脚的一个边沿2. 振荡器失效3. 错误使用FLASHRST/NMI引脚上电时,RST/NMI引脚配置为复位模式。

在看门狗控制寄存器WDTCTL中选择RST/NMI引脚的功能。

如果RST/NMI引脚被设置为复位功能,RST/NMI引脚处于低电平时CPU将一直保持复位状态。

当转为高电平时,CPU从存储在复位向量OFFFEH中的地址开始运行,RSTIFG将被置位。

如果RST/NMI引脚被用户软件配置为不可屏蔽中断时,如果NMIIE位被置位时,由WDTNMIES选择的信号边沿到来产生NMI中断。

RST/NMI的标志位NMIIFG将会被置1。

注释1:RST/NMI保持低电平在配置为NMI模式时,产生一个NMI事件的信号不会拉低RST/NMI引脚的电平。

如果其他的信号源产生一个PUC时,NMI信号是低电平,设备将处于复位状态,因为一个PUC 信号使RST/NMI引脚变为复位模式。

注释2:修改WDTNMIES当选择了NMI模式,WDTNMIES位改变了,NMI是否产生将依据于实际的RST/NMI 引脚的电平。

在系统被设置为NMI模式前,如果NMI的边沿选择位改变早于选择NMI模式,不产生NMI。

msp430中断

msp430中断

msp430中断(不可屏蔽中断NMI)中断系统中断的优先级是固定的。

中断优先级的是以模块的在链接所处的位置决定的。

越靠近CPU/NMIRS,模块的优先级越高。

中断优先级决定了,当系统有多个中断等待处理时,先处理哪一个中断。

有三种中断类型:系统中断不可屏蔽中断可屏蔽中断不可屏蔽中断(NMI)不可屏蔽中断不能被总中断使能位(GIE)所屏蔽,而由单独的中断使能位(NMIIE, ACCVIE,OFIE)来控制的。

当接收到不可屏蔽中断中断时,所有的不可屏蔽中断使能位会被自动复位。

程序从不可屏蔽中断的中断向量0FFFCH存储的地址开始运行。

用户软件必须设置所需的不可屏蔽的中断使能位,以便不可屏蔽中断能够再次响应。

不可屏蔽的中断源有以下三种:1. 当配置为NMI模式时,RST/NMI引脚的一个边沿2. 振荡器失效3. 错误使用FLASHRST/NMI引脚上电时,RST/NMI引脚配置为复位模式。

在看门狗控制寄存器WDTCTL中选择RST/NMI引脚的功能。

如果RST/NMI引脚被设置为复位功能,RST/NMI引脚处于低电平时CPU将一直保持复位状态。

当转为高电平时,CPU从存储在复位向量OFFFEH中的地址开始运行,RSTIFG将被置位。

如果RST/NMI引脚被用户软件配置为不可屏蔽中断时,如果NMIIE位被置位时,由WDTNMIES选择的信号边沿到来产生NMI中断。

RST/NMI的标志位NMIIFG将会被置1。

注释1:RST/NMI保持低电平在配置为NMI模式时,产生一个NMI事件的信号不会拉低RST/NMI引脚的电平。

如果其他的信号源产生一个PUC时,NMI信号是低电平,设备将处于复位状态,因为一个PUC 信号使RST/NMI引脚变为复位模式。

注释2:修改WDTNMIES当选择了NMI模式,WDTNMIES位改变了,NMI是否产生将依据于实际的RST/NMI 引脚的电平。

在系统被设置为NMI模式前,如果NMI的边沿选择位改变早于选择NMI模式,不产生NMI。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

__interrupt void SPI0_rx (void)
#else //在IAR2.0以下中断函数声明。
interrupt[USART0RX_VECTOR] void SPI0_rx (void)
#endif //IAR中断函数声明结束。
//为了保证代码可以在IAR编译器的任何版本中都能正确得到编译,所以作以下的条件编译。
#ifdef __IAR_SYSTEMS_ICC__ //如果编译器是IAR, 那么以下将被编译。
#if __VER__ >= 200
#pragma vector=USART0RX_VECTOR //在IAR2.0以上中断函数声明。
//例程描述:利用定时器定时功能,实现P1.0方波输出。
#include <msp430x14x.h>
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗WDT,不使用内部看门狗定时器。
P1DIR |= 0x01; //设置P1.0口方向为输出。
{ }
----------------------------------------------------------------------------是定义中断地址宏,其实就是一个中断矢量值,例如,地址, 0xffe0 。
这个中断矢量有芯片型号决定,一旦信号确定,那么所有的终端矢量也就确定了。
_BIS_SR(LPM0_bits + GIE); //进入低功耗模式LPM0和开中断
}
//定时器A 中断服务程序区
//当IAR编译器版本大于或等于2.0以上时,则中断写法格式如下。
#pragma vector=TIMERA0_VECTOR //定时器A0中断向量
__interrupt void Timer_A (void) //中断函数
{
P1OUT ^= 0x01; //P1.0取反输出
CCR0 += 50000;
//重新载入CCR0捕获/比较数据寄存器数据
}
//程序结束
//**************************************************************************
CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1,CCR0捕获/比较功能中断为允许。
CCR0 = 50000; //捕获/比较控制寄存器CCR0初值为5000。
TACTL = TASSEL_2 + MC_2; //设置定时器A控制寄存器TACTL,使时钟源选择为SMCLK辅助时钟。
SPI0_rx 是中断函数名称,使用者可以根据自己的喜好来编写这个函数名。
600)this.style.width='600px';" border="0" /> 实际例程
//**************************************************************************
相关文档
最新文档