历史上的今天
返回首页

历史上的今天

今天是: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


推荐阅读

史海拾趣

Anaheim Automation公司的发展小趣事

1994年,在韩国这片科技热土上,AMOTECH公司应运而生。创立之初,公司便立志于在电子行业中占据一席之地。创始团队凭借对技术的深刻理解和敏锐的市场洞察,决定专注于金属氧化物压敏电阻(MOV)的研发与生产。初期的发展并非一帆风顺,但团队凭借坚定的信念和不懈的努力,逐步在市场中建立了良好的口碑。

Anaren Ceramics公司的发展小趣事

为了确保产品质量的稳定性和可靠性,Anaren Ceramics公司建立了一套完善的质量管理体系。公司严格按照国际标准进行生产和管理,从原材料的采购到产品的出厂,每一个环节都经过严格的检测和把控。这种对质量的严格把控不仅赢得了客户的信任,也为公司在电子行业中树立了良好的口碑。

Elite Semiconductor Products Inc公司的发展小趣事

在电子产品领域,品质是赢得消费者信任的关键。Elite深知这一点,因此在生产过程中严格把控每一个环节,确保产品的品质达到最高标准。公司建立了完善的质量管理体系,从原材料采购到生产流程,再到产品检验,都严格遵循国际标准和行业规范。这种对品质的坚持,让Elite的产品在市场上赢得了良好的口碑,也为公司赢得了众多合作伙伴的信任。

Directed Energy Inc公司的发展小趣事

为了进一步扩大市场份额,Directed Energy Inc积极寻求与全球范围内的合作伙伴建立合作关系。通过与知名电子产品制造商、分销商和解决方案提供商的合作,公司成功将其产品推向了全球各地。这些合作伙伴不仅为Directed Energy Inc带来了更多的商业机会,还帮助公司更好地了解不同市场的需求和趋势,从而不断调整和优化产品策略。

台湾义隆电子(ELAN)公司的发展小趣事

义隆电子在多个技术领域保持领先地位,如数字模拟混合技术、高阶设计流程等。这些技术优势使得公司能够迅速掌握市场脉动,开发出具有实用性的新产品。同时,义隆电子还注重将先进技术应用于实际产品中,如高性能的触摸屏控制器、触摸板模块等,这些产品广泛应用于智能手机、平板电脑等消费电子产品中,赢得了市场的广泛认可。

HTSEMI( Jin Yu Semiconductor )公司的发展小趣事

为了进一步提升技术实力,金宇半导体积极与国内外知名高校和科研机构建立合作关系。2010年,公司与某顶尖大学联合成立了“先进半导体技术研究中心”,共同开展前沿技术的研发。通过产学研的紧密合作,金宇半导体在先进制程工艺、芯片封装测试等领域取得了重大突破,成功推出了多款具有自主知识产权的高端芯片产品,进一步巩固了其在行业内的领先地位。

问答坊 | AI 解惑

verilog串口问题

module my_232_rx(                                                  ...…

查看全部问答>

请教 华为 和 ST-Ericsson 这两个公司哪个好点啊?

请教各位前辈:     我刚刚走出校门,不清楚每个公司情况     请问做研发的话(底层驱动)     华为 和 ST-Ericsson(T3G) 这两个公司哪个好点啊?…

查看全部问答>

如何用端点0控制传输任意数据包

原来在CE5上作用做中断.批量传输一直没问题. 现在需要用端点0做控制传输数据包. 测试发现只能用端点0控制传输一个标准的set up数据包. 共8个自己. 我想用端点0控制传输任意数据包. 怎么做? …

查看全部问答>

PCB制板说明-2010

PCB厂 发过来的制板说明 ,里面是他们关注的参数,大家可参考下。…

查看全部问答>

DEC2812与凌华CAN接口卡7841的通信

我用两根线将DEC2812的CAN接口与凌华CAN接口卡相连。两者都设置成1M波特率。 但是2812总是信息发送不出去,相应的CANTA位总不能置位。 但是,单独DEC2812自测试模式下工作正常,单独凌华接口卡CAN自己通信(双口)也正常。 请问是什么原因,应该 ...…

查看全部问答>

鑫海金工实习报告

答应过大家的要把我的实习报告给大家看看,索性传上来了嘿嘿 下面是封皮 [ 本帖最后由 鑫海宝贝 于 2011-4-13 21:17 编辑 ]…

查看全部问答>

关于ADS1115在采样时输入电压接近0却输出值65535或65534

刚才在写ADS1115的程序的时候用硬件仿真发现在有电压的时候是正常的,但如果输入电压基本上为0的时候,仿真出来的值就为65535或65534,这是为什么呀???求指导!!!!…

查看全部问答>

Quartus直接调用modelsim仿真IP内核

新手,求教如何直接利用Quartus内部IP核,并生成仿真文件,直接调用modelsim仿真?谢谢了,配图更好,不甚感激 …

查看全部问答>

解决一下

光电传感器检测物体时:根据反射率的的不同,接收器检测出来的光信号转换成的电流也不同,后经放大器生成电流给后面的集成电路也会不同,由此可不可以判断物体是什么,在已知反射率的情况下 。   …

查看全部问答>