历史上的今天
今天是:2025年01月26日(星期日)
2019年01月26日 | STM8->EXTI
2019-01-26 来源:eefocus
中断,特别是外部中断,是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
上一篇:STM8->GPIO
下一篇:STM8L15x系列DAC的使用
史海拾趣
|
请教 华为 和 ST-Ericsson 这两个公司哪个好点啊? 请教各位前辈: 我刚刚走出校门,不清楚每个公司情况 请问做研发的话(底层驱动) 华为 和 ST-Ericsson(T3G) 这两个公司哪个好点啊?… 查看全部问答> |
|
原来在CE5上作用做中断.批量传输一直没问题. 现在需要用端点0做控制传输数据包. 测试发现只能用端点0控制传输一个标准的set up数据包. 共8个自己. 我想用端点0控制传输任意数据包. 怎么做? … 查看全部问答> |
|
我用两根线将DEC2812的CAN接口与凌华CAN接口卡相连。两者都设置成1M波特率。 但是2812总是信息发送不出去,相应的CANTA位总不能置位。 但是,单独DEC2812自测试模式下工作正常,单独凌华接口卡CAN自己通信(双口)也正常。 请问是什么原因,应该 ...… 查看全部问答> |
|
关于ADS1115在采样时输入电压接近0却输出值65535或65534 刚才在写ADS1115的程序的时候用硬件仿真发现在有电压的时候是正常的,但如果输入电压基本上为0的时候,仿真出来的值就为65535或65534,这是为什么呀???求指导!!!!… 查看全部问答> |




