STM8的中断系统以及外部中断详解

发布者:名字太长了吗最新更新时间:2021-09-06 来源: eefocus关键字:STM8  中断系统  外部中断 手机看文章 扫描二维码
随时随地手机看文章

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  

关键字:STM8  中断系统  外部中断 引用地址:STM8的中断系统以及外部中断详解

上一篇:徒手编写了一个STM8的反汇编工具
下一篇:STM8S独立看门狗配置及使用

推荐阅读最新更新时间:2024-11-17 11:07

S3C6410中断以及外部中断
6410的中断系统: 嵌入式软件里的中断处理,除了中断初始化,主要工作就是编写ISR. 在嵌入式的SOC的CPU里,在CPU里内部会带一些设备模块,它们产生的中断称为内部中断。因为联线比较固定,因此编程比较简单。而且在物理上CPU分离的芯片产生的中断,称为外部中断,外部中断可以联接不同的中断脚上,因此需要对中断IO进行较复杂的配置。 轮询模式是否一无是处?轮询的优点是在重负荷的情况下,轮询比中断效率会高很多。比如一个教室很多学生不断的问问题,这样与其不断被中断,老师还不如起身在教室走动,随机处理学生问题会高很多。 异常(Exception) -----------------------------------
[单片机]
实验5 PWM
在讲PWM之前,大家先做以下5个实验。 1、LED1循环亮300ms,灭700ms; 2、LED1循环亮30ms,灭70ms; 3、LED1循环亮3ms,灭7ms; 4、循环以下步骤 1)LED1循环亮3ms,灭7ms;执行一百次; 2)LED1循环亮8ms,灭2ms;执行一百次; 5、循环以下步骤 1)LED1循环亮1ms,灭9ms;LED2循环亮3ms,灭7ms;LED3循环亮5ms,灭5ms;以上3灯闪烁动作共用同个10ms周期,执行一百次; 2)LED1循环亮5ms,灭5ms;LED2循环亮7ms,灭3ms;LED3循环亮9ms,灭1ms;以上3灯闪烁动作共用同个10ms周期,执行一百次; 第1、2个实验,可以明显看出LE
[单片机]
实验5 PWM
MSP430单片机外部中断
MSP430F149的外部中断资源丰富,P1口和P2口共16个IO口都可以作为外部中断源。我们着重讲怎么用。 要想让一个IO口作为外部中断的中断源必须有三个设置。第一,必须将该IO口的方向设置为输入;第二,选择外部中断的触发方式,即选择是上升沿触发还是下降沿触发;第三,使能该IO口的中断。 比如,如果我们想设置P1.0口作为外部中断源就可以这样设置: P1DIR&= ~BIT0;//方向设置为输入 P1IES |= BIT0;//触发方式设置 P1IE |=BIT0;//使能中断 其中触发方式设置中0为上升沿触发、1为下降沿触发。设置完成之后就可以使用P1.0端口的下降沿或者上升沿触发的外部中断了。 需要特别说明的是如果
[单片机]
stm32专题七:EXTI(二) 外部中断
EXTI外部中断的配置过程: 开启GPIO时钟,初始化要连接的GPIO端口为浮空输入(参考手册); 开启AFIO时钟; 设置IO口与中断线的映射关系,调用函数GPIO_EXTILineConfig(GPIO_PortSourceGPIOA, GPIO_PinSource0); 初始化EXTI,设置触发条件等; 初始化NVIC(注意,有几个中断就要写几次中断源); 编写中断服务函数; 常见的中断服务函数写法: void EXTI3_IRQHandler(void) { if(EXTI_GetITStatus(EXTI_Line3)!=RESET) //判断某个线上的中断是否发生 { // 中断逻辑…
[单片机]
STM32外部中断及定时器编程示例
#include stm32f10x.h #include 12864.h ErrorStatus HSEStartUpStatus; //等待时钟的稳定 u8 count=0; u8 d; void SYS_Configuration(void); /* //ms延时函数 void delayms(unsigned int nValue) //delay 1ms at 8M { unsigned int nCount; unsigned int ii; unsigned int jj; nCount = 1980; for(ii = nValue;ii 0;ii--) { for(jj = nCount
[单片机]
STM8,STVD,Cosmic开发环境下,是大端模式还是小端模式?
因为需要把32位的序列号烧录到内部EEPROM中,所以需要知道烧录器烧录的格式是大端还是小端,因为程序需要用到序列号,所以也需要知道具体的开发环境下,是大端模式还是小端模式。 经过测试,STM8S,在STVD,COSMIC开发环境下,是大端模式,即数据的高位字节存储在低字节中。
[单片机]
STM8单片机的中断控制和中断功能
内部中断:一般是由硬件错误或者运算过程中出错引起的,一般是不可避免的; 外部中断:是处理器的外设发出的中断请求,如定时器中断,UART 接收中断,外部中断一般都可以通过中断控制器进行屏蔽; 1.ITC 功能概述: ……所有 IO 引脚都具有外部中断能力,每个端口都有独立的中断向量以及独立的标志;外设中断能力; ……软件中断能力(TRAP) ……具有灵活的优先级和中断等级管理,支持可嵌套和同级中断管理: ——多达 4 个软件可编程的嵌套等级;——最多有 32 个中断向量,其入口地址由硬件固定;——2 个不可避免的中断:RESET,TRAP;——1 个不可避免的最高优先级硬件中断 TL1; 2. 中断的主要功能 1.
[单片机]
STM8 I2C的学习
STM8的I2C接口 1、I2C模式选择 接口有4种模式:从设备发送模式;从设备接收模式;主设备发送模式;主设备接收模式。 默认条件下,I2C模块工作于从模式。接口在产生起始条件后自动地从从模式切换到主模式;当仲裁失败或发送STOP信号时,则从模式切换到从模式。 2、通信过程 主模式时,I2C接口启动数据传输并产生时钟信号。串行数据传输总是以起始条件开始并以停止条件结束。起始条件和停止条件都是在主模式下由软件控制产生。 相关功能寄存器 1、I2C控制寄存器1(I2C_CR1) 2、I2C控制寄存器2(I2C_CR2) 3、I2C频率寄存器(I2C_FREQR) 允许的时钟范围在 1-24MHz 4、I2C自身地址寄存器LSB
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved