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

发布者:Meiren520最新更新时间:2016-05-30 来源: eefocus关键字:STM8  中断系统  外部中断 手机看文章 扫描二维码
随时随地手机看文章
STM8具有最多32的中断系统,在中断的处理上类似于cortexm系列的芯片,首先是每个中断的向量都是固化在系统内部的,用户需要向相应的中断向量flash位置写入中断处理函数,其二,每个中断向量都具有可编程的优先级,共有两位优先级,两个BIT的优先级可以催化出4个优先级,具体如下

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

 

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

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

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

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

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

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

 

 

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

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

 

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

 

 

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

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

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

 

 

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

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

 

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

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

 

使用外部中断的过程

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

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

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

 

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

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

从而进行正确的处理

 

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

 

 

具体操作请查看一下代码

 

 

#include "exti.h"


void ExtiInit(void)
{
    //首先禁用中断
    disableInterrupts();
    //配置IO口为输入中断模式
     //D7初始化
    GPIOD->DDR &= ~(1<<7);//设置为输入
    GPIOD->CR1 =  (1<<7);
    GPIOD->CR2 =  (1<<7);//中断上拉输入
    
    //E3初始化
    GPIOE->DDR &= ~(1<<3);//设置为输入
    GPIOE->CR1 =  (1<<3);
    GPIOE->CR2 =  (1<<3);//中断上拉输入
    
    //设定中断优先级,TLI是最高的不可屏蔽中断优先级,所以不需要设置软件优先级,只
    //需要设置E3也就是端口E的优先级即可,中断向量号为7 对应寄存器ITC_SPR2
    ITC->ISPR2 &= (3<<6);//清楚中断优先级
    ITC->ISPR2 = (1<<6);//中断优先级01
    
    //设置中断触发模式
    EXTI->CR2 &= ~(1<<2);//TLI下降沿触发
    EXTI->CR2 &= ~(3<<0);//清除PORTE
    EXTI->CR2 = (2<<0);//Porte仅仅下降沿触发
    
    enableInterrupts();//打开中断
}

//TLI中断处理函数
INTERRUPT_HANDLER(TLI_IRQHandler, 0)
{
    keyValue = KEY_VALUE1;
}
//PORT E中断处理函数
INTERRUPT_HANDLER(EXTI_PORTE_IRQHandler, 7)
{
  //保险起见,这里进行一次电平
    if((GPIOE->IDR&0X08) == 0)//检测是不是低电平
    {
        keyValue = KEY_VALUE2;
    }
}

#ifndef __EXTI_H_
#define __EXTI_H_

#include "stm8s.h"
#include "key.h"
//我们是用两个按键作为中断触发,其中,D7是TLI中断,E3是portE中断


void ExtiInit(void);


#endif

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

上一篇:基于GP32的直流电机控制器测试系统
下一篇:使用单片机普通IO口模拟串口的三种方法

推荐阅读最新更新时间:2024-03-16 14:55

STM8头文件路径的设置
这个文件如果是IAR自带的,不需要设置。 如果不是IAR自带的,最简单的办法:和.c文件放在一个目录下,也不需要设置。 如果不在同一个目录下,就需要设置, 举个例子 工程上单击右键,选择Option,打开工程设置窗口 选择C/C++ compiler,然后再选择Preprocessor,最后在下面的空格处写上相应的路径,路径的格式在后面有专门介绍。如下图: 我的设置:工程文件在 E:S3C2440YS2440_IAR 头文件在 E:S3C2440YS2440_IARlib 则在设置窗口填入:$PROJ_DIR$lib ================================================== 如
[单片机]
stm8s跳出中断程序c语言,STM8 UART接收中断程序
软件设计 /*---------------------------------------------------------------------- 实验内容: USART自发自收,使用PB口的LED指示接收到的数据,观察是否与发送的数据一致。 ---------------------------------------------------------------------- 硬件连接: 将MCU.RXD与MCU.TXD使用短路帽短接,将PB口的LED指示灯使能开关切换到 ON 状态。 ----------------------------------------------------------------
[单片机]
stm8 pwm实现核心代码
void TIM2_Config(void) { CLK_PCKENR1 |= 0x20;//TIM2 CLK Enable! asm( nop ); while(!(CLK_PCKENR1 & 0x01)); TIM2_CR1 = 0x00; TIM2_PSCR = 0x00;//16/2^4 TIM2_ARRH = 0x00; TIM2_ARRL = 0xFF;// TIM2_CCR1H = 0x01; TIM2_CCR1L = 0xf4; TIM2_CCR2H = 0x1; TIM2_CCR2L = 0xf4;
[单片机]
微雪电子STM8 QFP44测试座介绍
STM8专用编程座 烧写座 QFP44 0.8mm 原装进口座子 仅针对STM8的QFP44封装0.8mm的引脚间距的单片机进行烧写、测试,支持型号详见介绍 型号 STM8-QFP44 产品简介 产品用途 对STM8的QFP44封装0.8mm的引脚间距的单片机进行烧写、测试 适用型号 STM8的QFP44封装及引脚兼容的相关型号,如: STM8S105SxTxC / STM8S207SxTxC / STM8S208SxTxC 特点 1. 通过SWIM接口,可直接对相关型号进行测试、烧写 2. 晶振可更换 3. 以排针方式引出所有引脚,引脚间距为2.54mm(100mil) 规格尺寸 STM8 QFP4
[单片机]
微雪电子<font color='red'>STM8</font> QFP44测试座介绍
一 ARM9(S3C2440)的中断系统——程序实例讲解
下面的程序讲解是基于FL2440开发板的程序讲解,有不对的地方希望大家能够指教 中断控制程序编写步骤 主程序 1.先清除中断源挂起寄存器( SRCPND SRCPND)和中断挂起寄存器( INTPND),可用 rSRCPND= rSRCPND 和rINTPND=rINTPND =来完成; 2.设中断模式,这里使用通用中断,rINTMOD=0x00000000因上电或复位时rINTMOD是清 0的,这步也可以不做。 3.I/O 口初始化,有些中断源要通过 I/O 口向 CPU 申请中断,如外部中断 0(EXTINT0通过 )F口的 GPF0 、外部中断11(EXTINT11)通过G口的 GPG3 向CPU 申请中断,此时两个口的控
[单片机]
STM8 内/外部时钟寄存器
STM8内部时钟寄存器(CLK_ICKR) 地址偏移值:0x00 复位值:0x01 位7:6 保留位,始终为0 位5 REGAH:活跃停机(Active Halt)模式下电压调节器关闭 由软件置位或清除。为1时,一旦MCU进入活跃停机(Active Halt)模式,主电压调节器将关 闭,从而唤醒时间将比较长。 0:活跃停机(Active Halt)模式下主电压调节器处于开 1:活跃停机(Active Halt)模式下主电压调节器处于关 位4 LSIRDY:低速内部振荡器准备就绪 由硬件置位或清除 0:LSI时钟未准备就绪 1:LSI时钟准备就绪 位3 LSIEN:低速内部振荡器使能 由软件置位或清除。如果LSI为必
[单片机]
<font color='red'>STM8</font> 内/外部时钟寄存器
开发工具之IAR新建STM8工程
熟能生巧,按照规则多创建几次! 说在前面的话:一直以来想使用IAR开发个项目,这次机会来了,公司要做个测试工装,选的MCU是意法半导体的STM8S105系列芯片 第一个想法就是放弃用烂的KEIL,尝试使用IAR开发这个项目 开发环境:Windows 7 专业版、IAR EW for STM8 3.11.1 准备工作:下载安装EWSTM8,在我另一个随笔已经详细写了      下载STM8S标准外设库 https://pan.baidu.com/s/1uVVyOgmWc7D2dQR0nShUDQ 提取码: vaqr 文件夹准备:建立项目驱动文件夹,名称为项目名“01 Drv”,建立项目应用文件夹“02 App”;
[单片机]
开发工具之IAR新建<font color='red'>STM8</font>工程
从LCD电极读数的单片机接口技术
   摘要 以测量仪表中常见的时分割驱动法驱动的段式LCD显示器为例,分析LCD显示器的电极连接结构和驱动信号波形;介绍单片机读取仪表LCD读数的接口电路。此接口电路应用于笔者开发的自动血压监控仪的研制及临床应用项目中,由8031单片机读取血压计的收缩压、舒张压、心率以及充气和放气时瞬时压强。实验证明,此接口电路工作稳定、可靠。   通过测量仪表拾取被测信号是单片机前向通道设计中常用的数据采集方式。通常,接口电路从仪表电路中取得相关的模拟信号,经过A/D转换或V/F 转换送入单片机;或者取得一个频率信号,经整形后送入单片机 。然而,有些测量仪表电路中可能找不到这样的信号。以电容式压力传感器血压计为例,尽管从其振荡电路中可以取得一
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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