中断时中断寄存器的处理流程

发布者:静逸闲云最新更新时间:2016-11-21 来源: eefocus关键字:中断  中断寄存器  处理流程 手机看文章 扫描二维码
随时随地手机看文章

a.         外部子中断

外部子中断的屏蔽位主要有两个寄存器(即屏蔽寄存器),EINTMASK和INTMSK,所以要产生中断,必须将这两个寄存器中对应的屏蔽位中断使能即可。这两个寄存器一般只在初始化的时候使用。

中断暂存寄存器,EINTPEND和SRCPND,中断产生后将会使这两个寄存器对应的位置1,所以中断服务函数必须将这两个寄存器中的对应的中断标志位清除(写1清除),否则会一直产生中断。注意:需要先清除EINTPEND,然后在清除SRCPND的中断标志位。这两个寄存器一般只在中断产生后中断标志的清除,用于中断服务函数中。

INTPND是中断最高优先级寄存器,也需要在中断服务函数中进行清除。

INTMOD是设置中断是FIQ还是IRQ,默认值为0x00000000,即默认值是IRQ。

PRIORITY是中断以何种优先级进行选择。

此外,外部中断是的设置还涉及到ARM的引脚设置,像GPxCON(引脚设置寄存器), EXTINT0-EXTINT2:分别设置EINT0—EINT7、EINT8—EINT15、EINT16—EINT23的触发方式(高电平触发、低电平触发、下降沿触发、上升沿触发)。EINTFLT0-EINTFLT3:控制滤波时钟和滤波宽度。

 

初始化处理步骤:

1)  引脚的配置,GPxCON、EXTINT0、EXTINT1、EXTINT2的配置。

2)  清除对应的中断屏蔽位,EINTMASK和INTMSK的设置。

3)  将中断函数安装在软中断向量表中。

外部中断后的处理:

1)  用户中断程序

2)  中断暂存寄存器的处理,EINTPEND和SRCPND。注意先清除EINTPEND。

3)  最高优先级的寄存器(INTPND)的清除。

b.        外部中断

外部中断主要是EINT0~EINT3,相对于外部子中断的处理没有寄存器EINTPEND和EINTMASK,即子中断暂存寄存器和子中断屏蔽寄存器。如上图所示。

c.         内部子中断

内部子中断和外部子中断主要是不用配置外部引脚,但是需要对其对应的模块寄存器进行设置,以及将EINTMASK和EINTPEND换成SUBSRCPND和INTSUBMSK即可。像UARTx中断中的子中断等。

d.        内部中断

内部中断相对于外部子中断主要是没有SUBSRCPND和INTSUBMSK。像Timer0中断。


事例:

//****************外部子中断*****************

void __irq Led_Isr(void)

{

unsigned long irqOffSet;

send_str((unsigned char *)"EXINT is started!\r\n");

Led_off(0); dely(50);

Led_on(0); dely(50);

irqOffSet = rINTOFFSET; // 取得中断号

rEINTPEND &= (1<<8)|(1<<11)|(1<<13)|(1<<14)|(1<<15)|(1<<19);

rSRCPND &= (1<

rINTPND = rINTPND; // 清除中断结果

send_str((unsigned char *)"EXINT is end!\r\n");

}


extern void EINT_Init(void)

{

// 设置K1,K2,K3,K4,K5,K6对应控制寄存器为中断模式

rGPGCON = (2<<0) | (2<<6) | (2<<10) | (2<<12) | (2<<14) | (2<<22);

/*

 01x falling edge triggered下降沿触发

 10x Rising edge triggered上升沿触发

 11x Both edge triggered双沿触发

*/

//  设置K1,K2,K3,K4,K5按键中断触发方式为上升沿触发

rEXTINT1 = (3<<0) | (3<<12) | (3<<20) | (3<<24) | (3<<28);

rEXTINT2 = (3<<12); //  设置K6按键中断触发方式为上升沿触

// 打开KEY1~KEY6的屏蔽位

rINTMSK &= ~(1<<5);

rEINTMASK &= ~((1<<8) | (1<<11) | (1<<13) | (1<<14) | (1<<15) | (1<<19));


pISR_EINT8_23 = (unsigned int)Led_Isr;

}

//****************定时器*****************

void __irq Timer0_isr()

{

send_str((unsigned char *)"Timer0 interrupt is started!\r\n");

Led_on(0);Led_off(1);Led_off(2);Led_off(3);

dely(350);

Led_off(0);Led_on(1);Led_off(2);Led_off(3);

dely(350);

Led_off(0);Led_off(1);Led_on(2);Led_off(3);

dely(350);

Led_off(0);Led_off(1);Led_off(2);Led_on(3);

dely(350);

rSRCPND |= 1<<10;

rINTPND |= 1<<10;

send_str((unsigned char *)"Timer0 interrupt is end!\r\n");

}

void Init_timer0()

{

rTCFG0 &= ~(0xff);

rTCFG0 |= 99;

rTCFG1 &= ~(0xf);

rTCFG1 |= 0x02;

rTCNTB0 =62500;//1s中断一次

rTCON |= 1<<1;

rTCON = 0x09;

//使能定时器中断

rINTMSK = ~(1<<10);

pISR_TIMER0= (unsigned int)Timer0_isr;

}


void Init_PWM0()

{

rGPBCON &= ~(0x03);

rGPBCON |= 1<<1;

rTCFG0 &= ~(0xff);

rTCFG0 |= 99;

rTCFG1 &= ~(0xf);

rTCFG1 |= 0x02;

rTCNTB0 =162;//1s中断一次

rTCMPB0 = rTCNTB0/2;

rTCON |= 1<<1;

rTCON = 0x0d;

}


关键字:中断  中断寄存器  处理流程 引用地址:中断时中断寄存器的处理流程

上一篇:S3C2440定时器0 的初始化程序
下一篇:stm32 SWD模式 下载

推荐阅读最新更新时间:2024-03-16 15:21

STM32 关于外部中断线、中断源和中断服务函数的问题
中断线问题: 上图可以看出,PA0、PB0...PG0共用的EXTI0中断线,PA1、PB2...PG1共用的EXTI1中断线,也就是 编程里面的(如下图库文件),对应16个中断线,后面三个是专用的中断线,不做讨论。 有人要问,假设:我设置的引脚是PB9和PE9都开启外部中断怎么办?小编告诉你,这还真办不了,我实测过。配置函数的时候后覆盖之前的函数的(如下图所示) 如果这样配置的话,会出现出货光电1的初始化覆盖掉编码盘的初始化,说白了就是编码盘的设置被覆盖掉了,结果是外部中断 出货光电1管脚会触发而编码盘就不起作用了,这也是STM32其中一个问题所在吧! 反过来,结果是外部中断 编码盘 管脚会触发
[单片机]
STM32 关于外部<font color='red'>中断</font>线、<font color='red'>中断</font>源和<font color='red'>中断</font>服务函数的问题
KST-STM32学习之中断优先级与中断嵌套
1、NIVC ARM Cortex-M3 内核搭载了一个强大而方便的中断系统,称之为 NVIC(嵌套向量中断控制器)。 Cortex-M3 支持 256 个“中断通道”(16 个异常+240 个中断)以及对应的可编程 256 级中断优先级设置。 STM32 虽然采用 Cortex-M3 内核,但是只使用了其中的 84 个“中断通道”(16 个异常+68 个中断)以及 16 级中断优先级设置。 同时也记录下自己当时的一个插曲。 这个TIM6_IRQn在《STM32固件库手册》中查NVIC_IRQChannel的取值是没有的,然后咨询下老师,如下回复 再拐回头看下教程,着实一不一样 看来要不看最新的手册,要不就
[单片机]
KST-STM32学习之<font color='red'>中断</font>优先级与<font color='red'>中断</font>嵌套
LPC1788外部中断的例子,基于Keil MDK
网上LPC1700外部中断的例子都是ADS的,我来贡献个Keil MDK的吧 以外部中断0(EINT0)为例,低电平触发中断 关键代码如下: //头文件为MDK 4.23带的 LPC177x_8x.h ,代码中所用宏均在其中可以找到定义 #include LPC177x_8x.h LPC_IOCON- P2_10 = (LPC_IOCON- P2_10 & ~0x07) | 1; //把P2.10设为EINT0 LPC_SC- EXTMODE &= ~0x01; //中断为电平触发 LPC_SC- EXTPOLAR &- ~0x01; //低电平触发中断 LPC_SC- EXTINT |=
[单片机]
51单片机各中断初始化及子程序模板
/************************************************************ *51单片机各中断初始化及子程序模板,几乎包括了传统51单片机的全部中断 *1、外部中断0 *2、定时器中断0 *3、外部中断1 *4、定时器中断1 *5、串行中断 *6、定时器中断2---本中断在52时才有 *以上所有中断已经在Keil软件环境上经过测试,工作正常 *在使用定时中断的时候需要根据实际需要重设定时器的初值和工作方式 *在串行通讯中,使用11.0592M晶振,通讯波特率为9600bps *为了保证文件的单一和方便保存,本项目只用了一个文件, 没有进
[单片机]
使用Msp430的串口中断接收一包数据
假设有一数据包,数据格式如表所示: 数据包总长度为: Data_len + 5 字节,最长不能超过512字节。 #include msp430x22x4.h typedef struct newStruct { unsigned char startFlag; unsigned char finishFlag; unsigned char lenHighFlag; unsigned char lenLowFlag; unsigned char dataFlag; unsigned char lrcFlag; unsigned char buf ; unsigned
[单片机]
使用Msp430的串口<font color='red'>中断</font>接收一包数据
对ARM异常中断的集中情况进行总结,并给出了一些解决方法
ARM单片机是大多数新手选择的入门切入点,但由于知识的不足,在设计过程中新手们经常会遇到这样或那样的问题,ARM异常中断返回就是这样一种令人头疼的问题。在ARM的使用问题中异常中断返回是新手们较为苦恼的问题,本文就将对ARM异常中断的集中情况进行总结,并给出了一些解决方法。 在正式介绍之前,要为大家补充一些较为重要的基础知识。首先R15(PC)总是指向“正在取指”的指令,而不是指向“正在执行”的指令或正在“译码”的指令。一般来说,人们习惯性约定将“正在执行的指令作为参考点”,称之为当前第一条指令,因此PC总是指向第三条指令。当ARM状态时,每条指令为4字节长,所以PC始终指向该指令地址加8字节的地址,即:PC值=当前程序执行位
[单片机]
对ARM异常<font color='red'>中断</font>的集中情况进行总结,并给出了一些解决方法
关于STM32中断库函数写法
在STM32中中断的使用非常的频繁,其中EXTI 线 0~15:对应外部 IO 口的输入中断。 STM32F4 的 IO 口外部中断函数只有 7 个,分别为: EXPORT EXTI0_IRQHandler EXPORT EXTI1_IRQHandler EXPORT EXTI2_IRQHandler EXPORT EXTI3_IRQHandler EXPORT EXTI4_IRQHandler EXPORT EXTI9_5_IRQHandler EXPORT EXTI15_10_IRQHandler 中断线 0-4 每个中断线对应一个中断函数,中断线 5-9 共用中断函数 EXTI9_5_IRQHandler,中 断
[单片机]
PIC单片机中断模块介绍
  PIC单片机中断模块介绍:    PIC 16F87X系列单片机可以接收多达14个中断源。中断控制器寄存器INTCON标记着各个中断源的请求,对各个中断设置屏蔽位,对全部中断设置全局屏蔽位。   PIC16F87X系列的中断包含:TMR0溢出中断(TOIF)、外部中断(INTF)、端口B变化中断(RBIF)、并行从动端口中断(PSPIF)、A/D变换中断、USART异步接收中断(RCIF)和异步发送中断(TXIF)、同步串行端口中断(SSPIF)、CCP1中断(CCPIIF)、TMR2中断(TMR2IF)、TMR1中断、CCP1中断(CCP2)、E2PROM写中断(EEIF)、总线碰撞中断(BCLIF)。   各个中断采
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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