历史上的今天
返回首页

历史上的今天

今天是:2024年09月06日(星期五)

正在发生

2021年09月06日 | STM8的中断系统以及外部中断详解

2021-09-06 来源:eefocus

STM8具有最多32的中断系统,在中断的处理上类似于cortexm系列的芯片,首先是每个中断的向量都是固化在系统内部的,用户需要向相应的中断向量flash位置写入中断处理函数,其二,每个中断向量都具有可编程的优先级,共有两位优先级,两个BIT的优先级可以催化出4个优先级,具体如下



中断控制器内部有一些寄存器专门用来存放相应的中断的中断优先级,同同时,在系统内部也有一个系统寄存器CC他的第三位和第五位分别表示当前正在处理的中断的优先级


可以这样认为,中断发生的时候,系统寄存器在执行中断向量跳转的时候自动载入了相应的中断优先级到系统寄存器CC中.


中断的处理遵循先判断软件优先级后判断硬件优先级的模式,当几个中断同时发生的时候,系统会根据其固化的硬件优先级进行相应,


另外,STM8支持中断嵌套,因为软件优先级就4级,最多也就软件优先级三层嵌套

对STM8的中断进行操作其实也简单


1.配置系统中断的打开或关闭


2.配置想要使用的中断向量的软件优先级


3. 打开相应的外设中断源的中断,就可以响应了

 

针对于外部中断来说,首先,STM8的每一个引脚都能支持外部中断,但是在中断向量上,不是每一个引脚都有

独立的中断向量,而是每个端口共用一个中断向量,在端口中断向量处理函数中检查到底是哪一个引脚出现了问题,

对于外部中断的配置,如下



可以定义中断的触发模式,电平触发,下降沿触发等,这个寄存器存放了A B CD四个向量的中断模式



该寄存器存放了E向量的中断

另外,外部中断中有一个特殊的中断叫做TLI不可屏蔽中断,也就是PD7,他不属于D中断向量而是拥有自己的TLI中断向量

 

使用外部中断的过程

1.根据前面的描述配置中断向量

2.配置中断端口的触发模式

3.对相应的GPIO口选择中断输入模式

 

在使用中断函数的时候需要注意,外部中断的中断函数我们并没有一个寄存器告诉我们哪一个中断向量的哪一个引脚发生了中断

需要我们读取端口的信息,假设是下降沿中断触发,那么中断处理函数在运行的时候,该引脚应该是电平的,检查哪一个引脚是低电平,我们就可以知道哪一个引脚发生了中断

从而进行正确的处理

 

所以最好是一个端口只有一个引脚中断,这样易于判断,省去了一些读引脚的过程

 

具体操作请查看一下代码


  1. #include "exti.h"  


  2. void ExtiInit(void)  

  3. {  

  4.     //首先禁用中断  

  5.     disableInterrupts();  

  6.     //配置IO口为输入中断模式  

  7.      //D7初始化  

  8.     GPIOD->DDR &= ~(1<<7);//设置为输入  

  9.     GPIOD->CR1 |=  (1<<7);  

  10.     GPIOD->CR2 |=  (1<<7);//中断上拉输入  

  11.       

  12.     //E3初始化  

  13.     GPIOE->DDR &= ~(1<<3);//设置为输入  

  14.     GPIOE->CR1 |=  (1<<3);  

  15.     GPIOE->CR2 |=  (1<<3);//中断上拉输入  

  16.       

  17.     //设定中断优先级,TLI是最高的不可屏蔽中断优先级,所以不需要设置软件优先级,只  

  18.     //需要设置E3也就是端口E的优先级即可,中断向量号为7 对应寄存器ITC_SPR2  

  19.     ITC->ISPR2 &= (3<<6);//清楚中断优先级  

  20.     ITC->ISPR2 |= (1<<6);//中断优先级01  

  21.       

  22.     //设置中断触发模式  

  23.     EXTI->CR2 &= ~(1<<2);//TLI下降沿触发  

  24.     EXTI->CR2 &= ~(3<<0);//清除PORTE  

  25.     EXTI->CR2 |= (2<<0);//Porte仅仅下降沿触发  

  26.       

  27.     enableInterrupts();//打开中断  

  28. }  

  29.   

  30. //TLI中断处理函数  

  31. INTERRUPT_HANDLER(TLI_IRQHandler, 0)  

  32. {  

  33.     keyValue = KEY_VALUE1;  

  34. }  

  35. //PORT E中断处理函数  

  36. INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)  

  37. {  

  38.   //保险起见,这里进行一次电平  

  39.     if((GPIOE->IDR&0X08) == 0)//检测是不是低电平  

  40.     {  

  41.         keyValue = KEY_VALUE2;  

  42.     }  

  43. }  


  1. #ifndef __EXTI_H_  

  2. #define __EXTI_H_  

  3.   

  4. #include "stm8s.h"  

  5. #include "key.h"  

  6. //我们是用两个按键作为中断触发,其中,D7是TLI中断,E3是portE中断  


  7. void ExtiInit(void);  


  8. #endif  

推荐阅读

史海拾趣

Delus Corp公司的发展小趣事

Delus Corp公司起源于一家小型电子初创企业,专注于研发和生产特定领域的电子设备。在公司成立初期,团队面临资金短缺和技术挑战等重重困难。然而,他们凭借对技术的执着追求和对市场的敏锐洞察,成功研发出一款具有创新性的电子产品,该产品在市场上引起了广泛关注。这款产品不仅帮助公司获得了初始资金,也奠定了公司在电子行业的技术领先地位。

蓝箭(BLUE ROCKET)公司的发展小趣事

蓝箭电子始终致力于技术创新和产品升级。随着科技的进步,公司不断引进先进的生产线和技术,推出了各种封装的双极型晶体管、晶闸管、集成电路等产品。这些产品广泛应用于家用电器、电源、IT数码、通信等多个领域,满足了市场的多样化需求。

DUBILIER公司的发展小趣事

DUBILIER公司非常重视人才的培养和发展。公司建立了完善的人才培训体系,为员工提供各种培训和发展机会。通过内部培训和外部引进相结合的方式,DUBILIER公司培养了一支高素质、专业化的技术和管理团队。这些人才不仅为公司的发展提供了强大的支持,还为公司赢得了更多的商业机会和合作伙伴。

E Connector Solutions公司的发展小趣事

人才是企业发展的核心竞争力。E Connector Solutions公司高度重视人才培养和团队建设。公司建立了完善的人才培养机制,通过内部培训、外部引进等方式不断提升员工的专业技能和综合素质。同时,公司还注重团队建设,鼓励员工之间的协作与交流,营造积极向上的工作氛围。这种注重人才培养和团队建设的做法为公司的发展提供了坚实的人才保障。

请注意,以上故事均为虚构,旨在为您提供一个关于电子连接器解决方案公司发展起来的故事框架。如果您需要了解特定公司的具体发展情况,建议您查阅相关公司的官方网站或行业报告。

Gore公司的发展小趣事
由于直流侧电压被分成上、下两个部分,如何保持上、下直流侧电压的动态平衡是一个重要问题。中点电位的低频振荡和中点偏移都可能影响输出电压的波形和系统的稳定性。
Amphion Semiconductor Ltd公司的发展小趣事
由于采用了三电平技术,功率开关管所承受的电压是直流母线电压的一半,从而降低了开关管的耐压等级。

问答坊 | AI 解惑

风力发电机结构

机舱:机舱包容着风力发电机的关键设备,包括齿轮箱、发电机。维护人员可以通过风力发电机塔进入机舱。机舱左端是风力发电机转子,即转子叶片及轴。   转子叶片:捉获风,并将风力传送到转子轴心。现代600千瓦风力发电机上,每个转子叶片的测量 ...…

查看全部问答>

vhdl怎么越学越难。超级超级超级郁闷。一个74 161, 74 194 高手帮我指出错误,立即结贴。

由表可知,74161具有以下功能:     ① 异步清零。当RD=0时,不管其他输入端的状态如何,不论有无时钟脉冲CP,计数器输出将被直接置零(Q3Q2QlQ0=0000),称为异步清零。     ② 同步并行预置数。当RD=1、LD=0时,在输入 ...…

查看全部问答>

dm9008AE dm9000A的驱动问题,谢谢了

读写寄存器都没问题,写进去,读出来都是正确的,但是初始化后LED灯就是不亮,也没初始化成功,不知道为什么,谁知道啊,谢谢了…

查看全部问答>

wince5.0 修改NORFlash分区大小

平台为wince5.0 + ep9315 我的实现注册表保存之后,想把分区空间分配大一点,如何实现呢?请高手指教!…

查看全部问答>

键盘源代码

老板不想买pc键盘,想自己做。别的都有办法做,就是键盘里的一块膏药似的芯片里的代码怎么写啊?想请教各位高手大侠们帮帮我。谢谢!…

查看全部问答>

十分钟学会Xilinx FPGA 设计

十分钟学会Xilinx FPGA 设计…

查看全部问答>

初学vxWorks应该从何入手呢

大家好,我刚刚接触VxWorks,现在要从头学习应哪个部分开始学起呢,我现在手上没有vxWorks系统,从网上下了一个要求注册才能用.非常感谢朋友们的参与!…

查看全部问答>

iar430在定时器中断里对一个全局变量不断++变量值总为零

iar 430 在定时器中断里对一个全局变量不断++ 仿真时在中断中怎么这个变量值总为零 有没有遇到同样的问题的呢 谢谢…

查看全部问答>

TI原装全新没用过的触摸板36卖了有人要不

RT TI原装全新没用过的触摸板 需要的留个联系方式吧…

查看全部问答>

请问LM3S811的下载和仿真方式有哪些

请问一下LM3S811的可以用什么下载程序呢?   可以用什么仿真呢?   现在只有一个最小系统 [ 本帖最后由 ming1006 于 2013-1-18 13:18 编辑 ]…

查看全部问答>