5、中断

一、中断

1、ARM Coetex-M3内核共支持256个中断,其中16个内部中断,240个外部中断和可编程的256级中断优先级的设置。

STM32目前支持的中断共84个(16个内部+68个外部),还有16级可编程的中断优先级 的设置,仅使用中断优先级设置8bit中的高4位。

2、STM32可支持68个中断通道,已经固定分配给相应的外部设备,每个中断通道都具备自己的中断优先级控制字节(8位,但是STM32中只使用4位,高4位有效),

每4个通道的8位中断优先级控制字构成一个32位的优先级寄存器。68个通道的优先级控制字至少构成17个32位的优先级寄存器。

3、中断优先级    STM32(Cortex-M3)中有两个优先级的概念:抢占式优先级和响应优先级,也把响应优先级称作“亚优先级”或“副优先级”, 每个中断源都需要被指定这两种优先级。

(1)抢占式优先级(pre-emption priority)

高抢占式优先级的中断事件会打断当前的主程序/中断程序运行,俗称中断嵌套。

(2) 响应优先级(subpriority)

在抢占式优先级相同的情况下,高响应优先级的中断优先被响应;

在抢占式优先级相同的情况下,如果有低响应优先级中断正在执行,高响应优先级的中断要等待已被响应的低响应优先级中断执行结束后才能得到响应—(不能嵌套)。

4、判断中断是否会被响应的依据

首先是抢占式优先级,其次是响应优先级;

抢占式优先级决定是否会有中断嵌套;

5、优先级冲突的处理

(1)具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断的嵌套, 或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。

(2)当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,

如果正在处理另一个中断, 这个后到来的中断就要等到前一个中断处理完之后才能被处理。

如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;

如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。

6、STM32中对中断优先级的定义

STM32中指定中断优先级的寄存器位有4位,这4个寄存器位的分组方式如下:

第0组:所有4位用于指定响应优先级

第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级

第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先级

第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级

第4组:所有4位用于指定抢占式优先级

二、外部中断

1、外部中断初始化函数函数 EXTI_Init

2、优先级初始化函数NVIC_InitTypeDef

3、外部中断处理示例:

  1 /*************************************************************************************************************************************
  2 *
  3 *  文件名称:main.c
  4 *  文件功能:主函数文件
  5 *
  6 ***************************************************************************************************************************************/
  7
  8 #include"pbdata.h"//调用自定义公共函数库
  9
 10
 11 /*********************************************************************************
 12 *
 13 * 初始化操作
 14 *
 15 *********************************************************************************/
 16 void RCC_Configuration(void);//系统时钟初始化函数声明
 17 void GPIO_Configuration(void);//GPIO初始化函数声明
 18 void  EXTI_Configuration(void);//中断初始化配置声明
 19 void NVIC_Configuration(void);//中断优先级配置声明
 20
 21
 22
 23 /********************************************************************************
 24 *
 25 *  函数名称:main(void)
 26 *  函数功能:主函数
 27 *  函数说明:不能用void定义主函数
 28 *
 29 ********************************************************************************/
 30 int main(void)//void不能void定义主函数
 31 {
 32
 33     RCC_Configuration();    //系统时钟初始化
 34
 35     GPIO_Configuration();//端口初始化
 36
 37     EXTI_Configuration();//中断配置
 38     NVIC_Configuration();//中断优先级配置
 39
 40   while(1);//主函数不做任何处理,等待进入中断函数
 41
 42 }
 43
 44
 45
 46
 47 /********************************************************************************
 48 *
 49 *  函数名称:RCC_Configuration(void)
 50 *  函数功能:系统时钟高初始化函数
 51 *
 52 ********************************************************************************/
 53     void RCC_Configuration(void)//系统时钟高初始化函数
 54   {
 55
 56     SystemInit();//系统初始化
 57     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);//对应GPIO时钟使能
 58         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//对应GPIO时钟使能
 59         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//对应GPIO外部中断时钟使能
 60     }
 61
 62
 63
 64 /*******************************************************************************
 65 *
 66 * 函数名称:GPIO_Configuration(void)
 67 * 函数功能:GPIO初始化函数
 68 *
 69 ********************************************************************************/
 70
 71     void GPIO_Configuration(void)//GPIO初始化函数
 72   {
 73     GPIO_InitTypeDef GPIO_InitStructure;//定义一个GPIO设置的结构体变量
 74
 75 /*对LED引脚初始化*/
 76         /*结构体变量赋值*/
 77       GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;////引脚配置
 78       GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//配置频率
 79       GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;//推挽输出
 80          /*对应的GPIO初始化*/
 81       GPIO_Init(GPIOB,&GPIO_InitStructure);
 82
 83 /*对key的引脚初始化*/
 84         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;////引脚配置
 85       GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;//上拉输入
 86          /*对应的GPIO初始化*/
 87       GPIO_Init(GPIOC,&GPIO_InitStructure);
 88
 89   }
 90
 91
 92 /*********************************************************************************
 93 *
 94 *  外部中断相关子函数部分
 95 *
 96 *********************************************************************************/
 97
 98
 99 /**********************************************
100 *
101 *  函数名称:EXTI_Configuration(void)
102 *  函数功能:外部中断配置
103 *
104 **********************************************/
105
106 void  EXTI_Configuration(void)
107 {
108      EXTI_InitTypeDef  EXTI_InitStructure;//定义一个中断配置的结构体变量
109
110      EXTI_ClearITPendingBit(EXTI_Line5);//使用前清除中断
111
112      GPIO_EXTILineConfig(GPIO_PortSourceGPIOC, GPIO_PinSource5);//选择GPIO管脚作为外部中断线路
113
114
115      EXTI_InitStructure.EXTI_Line = EXTI_Line5;
116    EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;//中断模式
117    EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling;//触发方式
118      EXTI_InitStructure.EXTI_LineCmd = ENABLE;//中断使能
119
120
121      EXTI_Init(&EXTI_InitStructure);//初始化进行配置
122 }
123
124
125 /**********************************************
126 *
127 *  函数名称:NVIC_Configuration(void)
128 *  函数功能:配置中断优先级
129 *
130 ***********************************************/
131
132 void NVIC_Configuration(void)
133 {
134     NVIC_InitTypeDef NVIC_InitStructure; //定义一个优先级配置结构体变量
135
136   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);//分组
137
138   NVIC_InitStructure.NVIC_IRQChannel = EXTI9_5_IRQn;
139   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//抢断优先级
140   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;//响应优先级
141   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能
142
143   NVIC_Init(&NVIC_InitStructure);//初始化
144
145 }
146
147
148
149
150     

 1 /****************************************************************************************************************
 2 *
 3 * 文件名称:pbdata.c
 4 * 文件功能:自定义函数或者全局变量的初始化
 5 *
 6 ****************************************************************************************************************/
 7
 8 /*头文件声明*/
 9 #include"pbdata.h"
10
11
12
13
14 /********************************************************************************************
15 *
16 * 自定义全局变量
17 *
18 ********************************************************************************************/
19 u8 dt=0;
20
21
22
23
24
25 /******************************************************************************************
26 *
27 * 自定义函数
28 *
29 ******************************************************************************************/
30
31
32
33 /**************************************************
34 *
35 *  函数名称:delay_us(u32 nus)
36 *  函数功能:微秒延时函数
37 *  输入参数:输入值为延时us
38 *
39 ***************************************************/
40 void delay_us(u32 nus)
41 {
42     u32 temp;
43     SysTick->LOAD = 9*nus;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9次
44     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
45     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
46
47     do
48     {
49           temp=SysTick->CTRL;//标志位,等到一直减到0
50          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
51
52     SysTick->CTRL=0x00; //关闭计数器
53     SysTick->VAL =0X00; //清空计数器
54 }
55
56
57
58
59
60
61
62 /***************************************************
63 *
64 * 函数名称:delay_ms(u16 nms)
65 * 函数功能:毫秒级延时
66 * 输入参数:输入值位延时ms
67 *
68 ****************************************************/
69 void delay_ms(u16 nms)
70 {
71     u32 temp;
72     SysTick->LOAD = 9000*nms;//载入初值,72M/8=9M,也就是1/9us,9*1/9us,所以是执行9000次
73     SysTick->VAL=0X00;//清空计数器,清空后,就自动设置自己设定的计数器的值
74     SysTick->CTRL=0X01;//使能,减到零动作(不发生中断),采用外部时钟
75
76     do
77     {
78           temp=SysTick->CTRL;//标志位,等到一直减到0
79          }while((temp&0x01)&&(!(temp&(1<<16))));//等待时间到达
80
81     SysTick->CTRL=0x00; //关闭计数器
82     SysTick->VAL =0X00; //清空计数器
83 }

 1 /*pbdata.h*/
 2 /***************************************************************************************************
 3 *
 4 * 文件名称:pbdata.h
 5 * 文件功能:自定义的函数和全局变量的声明头文件
 6 *
 7 ***************************************************************************************************/
 8
 9 #ifndef _pbdata_H
10 #define _pbdata_H
11
12 #include"stm32f10x.h"
13 #include"misc.h"
14 #include"stm32f10x_exti.h"
15
16
17
18 /********************************************************************
19 *
20 *  自定义全局变量声明
21 *
22 ********************************************************************/
23 extern u8 dt;
24
25
26
27
28
29 /********************************************************************
30 *
31 *  自定义全函数声明
32 *
33 ********************************************************************/
34 void delay(u32 nCount);
35 void delay_us(u32 nus);
36 void delay_ms(u16 nms);
37
38
39
40
41 #endif

  1 /**
  2   ******************************************************************************
  3   * @file GPIO/IOToggle/stm32f10x_it.c
  4   * @author  MCD Application Team
  5   * @version  V3.0.0
  6   * @date  04/06/2009
  7   * @brief  Main Interrupt Service Routines.
  8   *         This file provides template for all exceptions handler and
  9   *         peripherals interrupt service routine.
 10   ******************************************************************************
 11   * @copy
 12   *
 13   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 14   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 15   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 16   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 17   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 18   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 19   *
 20   * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
 21   */
 22
 23 /* Includes ------------------------------------------------------------------*/
 24 #include "stm32f10x_it.h"
 25 #include "stm32f10x_exti.h"
 26 #include "stm32f10x_rcc.h"
 27 #include "misc.h"
 28 #include "pbdata.h"
 29
 30 void NMI_Handler(void)
 31 {
 32 }
 33
 34 void USART1_IRQHandler(void){
 35    while(1);
 36 }
 37
 38
 39 /**
 40   * @brief  This function handles Hard Fault exception.
 41   * @param  None
 42   * @retval : None
 43   */
 44 void HardFault_Handler(void)
 45 {
 46   /* Go to infinite loop when Hard Fault exception occurs */
 47   while (1)
 48   {
 49   }
 50 }
 51
 52 /**
 53   * @brief  This function handles Memory Manage exception.
 54   * @param  None
 55   * @retval : None
 56   */
 57 void MemManage_Handler(void)
 58 {
 59   /* Go to infinite loop when Memory Manage exception occurs */
 60   while (1)
 61   {
 62   }
 63 }
 64
 65 /**
 66   * @brief  This function handles Bus Fault exception.
 67   * @param  None
 68   * @retval : None
 69   */
 70 void BusFault_Handler(void)
 71 {
 72   /* Go to infinite loop when Bus Fault exception occurs */
 73   while (1)
 74   {
 75   }
 76 }
 77
 78 /**
 79   * @brief  This function handles Usage Fault exception.
 80   * @param  None
 81   * @retval : None
 82   */
 83 void UsageFault_Handler(void)
 84 {
 85   /* Go to infinite loop when Usage Fault exception occurs */
 86   while (1)
 87   {
 88   }
 89 }
 90
 91 /**
 92   * @brief  This function handles SVCall exception.
 93   * @param  None
 94   * @retval : None
 95   */
 96 void SVC_Handler(void)
 97 {
 98 }
 99
100 /**
101   * @brief  This function handles Debug Monitor exception.
102   * @param  None
103   * @retval : None
104   */
105 void DebugMon_Handler(void)
106 {
107 }
108
109 /**
110   * @brief  This function handles PendSV_Handler exception.
111   * @param  None
112   * @retval : None
113   */
114 void PendSV_Handler(void)
115 {
116 }
117
118 /**
119   * @brief  This function handles SysTick Handler.
120   * @param  None
121   * @retval : None
122   */
123 void SysTick_Handler(void)
124 {
125 }
126
127
128
129
130
131 /****************************************************************************
132 *
133 * 函数名称:void EXTI9_5_IRQHandler(void)
134 * 外部中断处理函数
135 *
136 ****************************************************************************/
137 void EXTI9_5_IRQHandler(void)
138 {
139   if(EXTI_GetITStatus(EXTI_Line5)==SET)  //判断是否产生了中断
140   {
141        EXTI_ClearITPendingBit(EXTI_Line5);//中断清除
142
143       delay_ms(10);//延时消抖
144
145       if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_5)==Bit_RESET) //再次判断,消抖
146       {
147           if(GPIO_ReadOutputDataBit(GPIOB,GPIO_Pin_5)==Bit_RESET)//如果LED是亮
148           {
149            GPIO_SetBits(GPIOB,GPIO_Pin_5);    //则熄灭
150           }
151           else
152           {
153               GPIO_ResetBits(GPIOB,GPIO_Pin_5);//如果是熄灭的,就亮
154           }
155       }
156   }
157 }
158
159
160
161
162
163
164
165
166
167 /****************************************************************************
168 * ?    ?úvoid EXTI1_IRQHandler(void)
169 * ?    ?úEXTI2???m??
170 * ????ú?
171 * ????ú?
172 * ?    ?ú
173 * ????ú?
174 ****************************************************************************/
175 void EXTI1_IRQHandler(void)
176 {
177
178 }
179
180 /****************************************************************************
181 * ?    ?úvoid EXTI2_IRQHandler(void)
182 * ?    ?úEXTI2???m??
183 * ????ú?
184 * ????ú?
185 * ?    ?ú
186 * ????ú?
187 ****************************************************************************/
188 void EXTI2_IRQHandler(void)
189 {
190
191 }
192
193 /****************************************************************************
194 * ?    ?úvoid EXTI3_IRQHandler(void)
195 * ?    ?úEXTI3???m??
196 * ????ú?
197 * ????ú?
198 * ?    ?ú
199 * ????ú?
200 ****************************************************************************/
201 void EXTI3_IRQHandler(void)
202 {
203
204 }

  1 /**
  2   ******************************************************************************
  3   * @file GPIO/IOToggle/stm32f10x_it.h
  4   * @author  MCD Application Team
  5   * @version  V3.0.0
  6   * @date  04/06/2009
  7   * @brief  This file contains the headers of the interrupt handlers.
  8   ******************************************************************************
  9   * @copy
 10   *
 11   * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
 12   * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
 13   * TIME. AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY
 14   * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
 15   * FROM THE CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
 16   * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
 17   *
 18   * <h2><center>&copy; COPYRIGHT 2009 STMicroelectronics</center></h2>
 19   */
 20
 21 /* Define to prevent recursive inclusion -------------------------------------*/
 22 #ifndef __STM32F10x_IT_H
 23 #define __STM32F10x_IT_H
 24
 25 /* Includes ------------------------------------------------------------------*/
 26 #include "stm32f10x.h"
 27 //#include "stm32f10x_nvic.h"
 28 //#include "stm32f10x_lib.h"
 29 /* Exported types ------------------------------------------------------------*/
 30 /* Exported constants --------------------------------------------------------*/
 31 /* Exported macro ------------------------------------------------------------*/
 32 /* Exported functions ------------------------------------------------------- */
 33
 34 void NMIException(void);
 35 void HardFaultException(void);
 36 void MemManageException(void);
 37 void BusFaultException(void);
 38 void UsageFaultException(void);
 39 void DebugMonitor(void);
 40 void SVCHandler(void);
 41 void PendSVC(void);
 42 void SysTickHandler(void);
 43 void WWDG_IRQHandler(void);
 44 void PVD_IRQHandler(void);
 45 void TAMPER_IRQHandler(void);
 46 void RTC_IRQHandler(void);
 47 void FLASH_IRQHandler(void);
 48 void RCC_IRQHandler(void);
 49 void EXTI0_IRQHandler(void);
 50 void EXTI1_IRQHandler(void);
 51 void EXTI2_IRQHandler(void);
 52 void EXTI3_IRQHandler(void);
 53 void EXTI4_IRQHandler(void);
 54 void DMA1_Channel1_IRQHandler(void);
 55 void DMA1_Channel2_IRQHandler(void);
 56 void DMA1_Channel3_IRQHandler(void);
 57 void DMA1_Channel4_IRQHandler(void);
 58 void DMA1_Channel5_IRQHandler(void);
 59 void DMA1_Channel6_IRQHandler(void);
 60 void DMA1_Channel7_IRQHandler(void);
 61 void ADC1_2_IRQHandler(void);
 62 void USB_HP_CAN_TX_IRQHandler(void);
 63 void USB_LP_CAN_RX0_IRQHandler(void);
 64 void CAN_RX1_IRQHandler(void);
 65 void CAN_SCE_IRQHandler(void);
 66 void EXTI9_5_IRQHandler(void);
 67 void TIM1_BRK_IRQHandler(void);
 68 void TIM1_UP_IRQHandler(void);
 69 void TIM1_TRG_COM_IRQHandler(void);
 70 void TIM1_CC_IRQHandler(void);
 71 void TIM2_IRQHandler(void);
 72 void TIM3_IRQHandler(void);
 73 void TIM4_IRQHandler(void);
 74 void I2C1_EV_IRQHandler(void);
 75 void I2C1_ER_IRQHandler(void);
 76 void I2C2_EV_IRQHandler(void);
 77 void I2C2_ER_IRQHandler(void);
 78 void SPI1_IRQHandler(void);
 79 void SPI2_IRQHandler(void);
 80 void USART1_IRQHandler(void);
 81 void USART2_IRQHandler(void);
 82 void USART3_IRQHandler(void);
 83 void EXTI15_10_IRQHandler(void);
 84 void RTCAlarm_IRQHandler(void);
 85 void USBWakeUp_IRQHandler(void);
 86 void TIM8_BRK_IRQHandler(void);
 87 void TIM8_UP_IRQHandler(void);
 88 void TIM8_TRG_COM_IRQHandler(void);
 89 void TIM8_CC_IRQHandler(void);
 90 void ADC3_IRQHandler(void);
 91 void FSMC_IRQHandler(void);
 92 void SDIO_IRQHandler(void);
 93 void TIM5_IRQHandler(void);
 94 void SPI3_IRQHandler(void);
 95 void UART4_IRQHandler(void);
 96 void UART5_IRQHandler(void);
 97 void TIM6_IRQHandler(void);
 98 void TIM7_IRQHandler(void);
 99 void DMA2_Channel1_IRQHandler(void);
100 void DMA2_Channel2_IRQHandler(void);
101 void DMA2_Channel3_IRQHandler(void);
102 void DMA2_Channel4_5_IRQHandler(void);
103 #endif /* __STM32F10x_IT_H */
104
105 /******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/

4、例程下载:

http://download.csdn.net/detail/a1181803348/8740245

时间: 2024-10-11 06:07:43

5、中断的相关文章

LCD实验学习笔记(八):中断控制器

s3c2440有60个中断源(其中15个为子中断源). 程序状态寄存器(PSR)的F位设为1,禁用快速中断(FRQ). 程序状态寄存器(PSR)的I位设为1,禁用普通中断(IRQ). 相反,PSR寄存器F位为0开FRQ中断,I位为0开IRQ中断. s3c2440中断控制器中有五个控制寄存器:中断源等待寄存器(SRCPND),中断模式寄存器(INTMOD),屏蔽寄存器(INTMSK),优先级寄存器(PRIORITY),中断等待寄存器(INTPND). SRCPND寄存器各位对应不同的中断,其中外部

Java阻塞中断和LockSupport

在介绍之前,先抛几个问题. Thread.interrupt()方法和InterruptedException异常的关系?是由interrupt触发产生了InterruptedException异常? Thread.interrupt()会中断线程什么状态的工作? RUNNING or BLOCKING? 一般Thread编程需要关注interrupt中断不?一般怎么处理?可以用来做什么? LockSupport.park()和unpark(),与object.wait()和notify()的区

一种Linux下共享中断的处理方法

前段时间调试一款芯片的时候,碰到一个奇怪的问题:只要在板卡上插入一个PS2键盘,启动内核时系统就可能会进入串口中断函数去执行,过一会系统就panic不往下继续执行.后来经过分析出现问题时的panic的堆栈,借助EJTAG工具,读到这个时候的串口的中断状态位,竟然发现串口并没有真正产生中断.那么,串口本身没有中断,内核怎么又会跑到串口的中断服务函数去执行呢? 我们知道Linux的中断可以分为I/O 中断 .时钟中断和处理器核间中断.其中I/O中断是Linux 系统响应外部IO事件的重要方式.尽管不

线程的中断

如果一个Java程序有不止一个执行线程,当所有线程都运行结束的时候,这个Java程序才能运行结束:更确切地说应该是所有的非守护线程运行结束时,或者其中一个线程调用了System.exit()方法时,这个Java程序才运行结束. Java提供了中断机制,我们可以使用它来结束一个线程.这种机制要求线程检查它是否被中断了,然后决定是不是响应这个中断请求.线程允许忽略中断请求并且继续执行. package concurrency; public class Generator2 extends Thre

20150218【改进】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 一.使用struct pin_desc 管理按键的值 1.定义结构体 2.将前面我们申请中断时写的(void *)1修改为 &pins_desc[n] 在ioctl中,设置中断中修改 在key_release中释放中修改 3.在中断程序中利用我们定义的struc pins_desc判断并得到按键的值 4.得到按键键值后,唤醒程序,在read函数中返回键值 附上驱动源程序: 1 /***********

20150218【改进信号量】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进信号量]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 前面我们使用POLL查询方式来实现GPIO-IRQ按键中断程序 这里我们来使用信号量,让我们的驱动同时只能有一个应用程序打开. 一.首先在前面代码的基础上来一个简单的信号 1.定义一个全局的整形变量 2.在打开函数中,每次进入打开函数canopen都自减1, 3.当我们不使用时,在realease 中canopen自加1 4.这样就实现了一个简单的信号量,我们编译,测试 当我们使用两个应用程序来

20150218【改进Poll定时查询】IMX257实现GPIO-IRQ中断按键获取键值驱动程序

[改进Poll定时查询]IMX257实现GPIO-IRQ中断按键获取键值驱动程序 2015-02-18 李海沿 按键驱动程序中,如果不使用read函数中使程序休眠的,而是还是使用查询方式的话,可以使用Poll函数,来控制一定时间内,如果有按键发生,则立即返回键值. 同时,poll也可以同时监控多个(比如说按键,鼠标,等)一旦发生事件则立即返回. 我们在linux查看帮助: 从帮助中的说明得知, poll, ppoll - wait for some event on a file descrip

开关中断与cpsid/cpsie指令

在汇编代码中,CPSID   CPSIE  用于快速的开关中断. CPSID I ;PRIMASK=1, ;关中断 CPSIE I ;PRIMASK=0, ;开中断 CPSID CPSIE F F ;FAULTMASK=1, ;FAULTMASK=0 ;关异常 ;开异常 I:IRQ中断;    F:FIQ中断 最常见的这两个命令的使用处是在关中断.开中断的实现中,我们经常用的local_irq_save和local_irq_restore最终都是调用了以下两个实现,即关/开中断只是操作了CP

mysql主从中断

Mysql主从复制中断一例 收到mysql主从中断报警,马上登上服务器查看,发现是中继日志损坏. Show slave status\G,提示中继日志损坏.  Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master's binary log is corrupted (you can check this by running 'mysqlbinlog'

存储、中断、总线及输入输出系统

存储系统的基本要求: 大容量,高速度和低价格. 访问时间: 存储器从接到访存读申请,到信息被读到数据总线上所用的时间 存储周期: 连续启动一个存储体所需的时间间隔 频宽: 每秒传输的信息位数 并行主存系统: 能并行读取多个CPU字的单体多字.多体单字或多体多字的交出存储主存系统 并行主存频宽: 主存频宽与分体数m.转移概率λ的关系 中断分类: 机器校验中断 访管中断 程序性中断 外部中断 I/O中断 重新启动中断 总线: 总线是用于互连计算机.CPU.存储器.I/O端口及外部设备.远程通信设备间