STM8->EXTI

来源:互联网 发布:网一网络加速器官网 编辑:程序博客网 时间:2024/05/21 12:46

中断,特别是外部中断,是MCU实现复杂功能的重要手段。


中断源和向量:

    所有I/O引脚都具有外部中断能力,每一个端口都有独立的中断向量以及独立的标志

    各功能外设的中断

    最多32个中断向量(入口地址已由硬件固定),最多40个外部中断源(4级可编程的软件嵌套优先级),其中的11个中断向量被分配为外部中断。


优先级及响应逻辑:

    复位具有最高优先级,复位期间所有中断被禁止。

同一时间可以有几个中断排队等待处理时:
1. 最高软件优先级的中断被响应;(通过ITC->SPRx寄存器I1和I0配置每一个中断的软件优先级)

2. 如果几个排队的中断具有相同的软件优先级,那么最高硬件优先级的中断先响应。//中断的硬件优先级是唯一且互斥的

    硬件中断优先级低->高:MAIN、IT4、IT3、IT2、IT1、IT0、TRAP和RESET。中断屏蔽可通过CC寄存器的位I1和位I0以及设置软件优先级的ITC->SPRx实现。PD7是最高优先级的硬件中断源TLI入口。


中断的管理

1、并发中断管理模式所有优先级都是3级,除响应RESET、TRAP、TLI中断,不可以被打断;

2、嵌套中断管理模式允许在中断程序中响应中断;一旦有中断的优先级低于3级该模式立即有效;

使用中断控制器ITC对各中断进行管理:

    不可屏蔽的事件: RESET, TRAP;不可屏蔽的最高优先级的硬件中断TLI

    不可屏蔽的中断: RESET,TLI和TRAP拥有最高的软件优先级来处理,不考虑CC寄存器的I1和I0的状态。

    在TLI中断服务子程序中禁止使用TRAP指令,TLI中断可中断(除TRAP及RESET之外)3级软件中断,软件中断TRAP不能使处理器从停机Halt模式退出。



简单中断的配置和使用(以STM8L151为例):

    GPIO_Init(KEY_PORT, KEY_Pin, GPIO_Mode_In_FL_IT);

    EXTI_DeInit (); 

    EXTI_SetPinSensitivity(EXTI_Pin_4,EXTI_Trigger_Falling);

如果使用寄存器来配置中断:

寄存器EXTI->CR1功能定义


寄存器EXTI->CR2功能定义


使能中断

    {asm("rim"); }== {enableInterrupts();}

其在stm8l15x.h文件中对中断的定义如下:

 #define enableInterrupts()    __enable_interrupt()   /* enable interrupts */
 #define disableInterrupts()   __disable_interrupt()  /* disable interrupts */
 #define rim()                 __enable_interrupt()   /* enable interrupts */
 #define sim()                 __disable_interrupt()  /* disable interrupts */


详细的32个中断向量定义:

#define FLASH_EOP_vector                     0x03
#define FLASH_WR_PG_DIS_vector               0x03
#define DMA1_CH0_HT_vector                   0x04
#define DMA1_CH0_TC_vector                   0x04
#define DMA1_CH1_HT_vector                   0x04
#define DMA1_CH1_TC_vector                   0x04
#define DMA1_CH2_HT_vector                   0x05
#define DMA1_CH2_TC_vector                   0x05
#define DMA1_CH3_HT_vector                   0x05
#define DMA1_CH3_TC_vector                   0x05
#define RTC_ALARM_vector                     0x06
#define RTC_WAKEUP_vector                    0x06
#define EXTIE_vector                         0x07
#define EXTIF_vector                         0x07
#define EXTIPVD_vector                       0x07
#define EXTIB_vector                         0x08
#define EXTID_vector                         0x09
#define EXTI0_vector                         0x0A
#define EXTI1_vector                         0x0B
#define EXTI2_vector                         0x0C
#define EXTI3_vector                         0x0D
#define EXTI4_vector                         0x0E
#define EXTI5_vector                         0x0F
#define EXTI6_vector                         0x10
#define EXTI7_vector                         0x11
#define CLK_CSS_vector                       0x13
#define CLK_SWITCH_vector                    0x13
#define TIM1_BIF_vector                      0x13
#define COMP_EF1_vector                      0x14
#define COMP_EF2_vector                      0x14
#define TIM2_OVR_UIF_vector                  0x15
#define TIM2_CAPCOM_BIF_vector               0x16
#define TIM2_CAPCOM_CC1IF_vector             0x16
#define TIM2_CAPCOM_CC2IF_vector             0x16
#define TIM2_CAPCOM_TIF_vector               0x16
#define TIM3_OVR_UIF_vector                  0x17
#define TIM3_CAPCOM_BIF_vector               0x18
#define TIM3_CAPCOM_CC1IF_vector             0x18
#define TIM3_CAPCOM_CC2IF_vector             0x18
#define TIM3_CAPCOM_TIF_vector               0x18
#define TIM1_OVR_UIF_vector                  0x19
#define TIM1_CAPCOM_CC1IF_vector             0x1A
#define TIM1_CAPCOM_CC2IF_vector             0x1A
#define TIM1_CAPCOM_CC3IF_vector             0x1A
#define TIM1_CAPCOM_CC4IF_vector             0x1A
#define TIM1_CAPCOM_COMIF_vector             0x1A
#define TIM1_CAPCOM_TIF_vector               0x1A
#define TIM4_TIF_vector                      0x1B
#define TIM4_UIF_vector                      0x1B
#define SPI_MODF_vector                      0x1C
#define SPI_OVR_vector                       0x1C
#define SPI_RXNE_vector                      0x1C
#define SPI_TXE_vector                       0x1C
#define SPI_WKUP_vector                      0x1C
#define USART_T_TC_vector                    0x1D
#define USART_T_TXE_vector                   0x1D
#define USART_R_IDLE_vector                  0x1E
#define USART_R_OR_vector                    0x1E
#define USART_R_PE_vector                    0x1E
#define USART_R_RXNE_vector                  0x1E
#define I2C_ADD10_vector                     0x1F
#define I2C_ADDR_vector                      0x1F
#define I2C_AF_vector                        0x1F
#define I2C_ARLO_vector                      0x1F
#define I2C_BERR_vector                      0x1F
#define I2C_BTF_vector                       0x1F
#define I2C_OVR_vector                       0x1F
#define I2C_RXNE_vector                      0x1F
#define I2C_SB_vector                        0x1F
#define I2C_STOPF_vector                     0x1F
#define I2C_TXE_vector                       0x1F
#define I2C_WUFH_vector                      0x1F

原创粉丝点击