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口选择中断输入模式
在使用中断函数的时候需要注意,外部中断的中断函数我们并没有一个寄存器告诉我们哪一个中断向量的哪一个引脚发生了中断
需要我们读取端口的信息,假设是下降沿中断触发,那么中断处理函数在运行的时候,该引脚应该是电平的,检查哪一个引脚是低电平,我们就可以知道哪一个引脚发生了中断
从而进行正确的处理
所以最好是一个端口只有一个引脚中断,这样易于判断,省去了一些读引脚的过程
具体操作请查看一下代码
#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的反汇编工具
下一篇:STM8S独立看门狗配置及使用
推荐阅读
史海拾趣
随着通信网络的不断升级和转型,Cavium Networks 看到了市场的巨大潜力。在2008年,尽管全球经济风暴肆虐,但 Cavium Networks 依然保持着强劲的增长势头。同年11月,公司宣布收购 W&W Communications 公司,这一举措进一步拓展了 Cavium Networks 的业务范围,增强了其在网络通信领域的竞争力。通过收购,Cavium Networks 获得了更多的技术资源和市场份额,为其后续的发展提供了有力的支持。
在2002年,一群从海外归来的留学生和技术专家,怀揣着对通信技术的热情与梦想,在上海创立了明波通信技术股份有限公司。他们深知国内在通信领域的技术与海外相比还有较大差距,因此决心将自己在海外学到的先进知识和经验,应用到国内的市场和技术创新中。明波通信从创立之初就致力于数字电视芯片的研究与开发,并逐渐在行业中崭露头角。
随着汽车产业的快速发展,车载电子系统成为了新的增长点。明波通信凭借在通信领域的深厚积累,迅速拓展车载电子系统业务。公司成功开发了车载导航、车载音响系统等项目,并与多家知名汽车厂商建立了合作关系。这一举措不仅为明波通信带来了新的增长点,也进一步巩固了其在电子行业的地位。
3E SECURITY公司自创立之初,便以技术创新为核心竞争力。在电子安全领域,公司不断投入研发,推出了一系列具有自主知识产权的安全产品。其中,一款智能安全监控系统凭借其高度集成和智能化特点,迅速在市场上占据了一席之地。通过不断的技术革新,3E SECURITY逐渐在电子安全行业树立了技术领先的形象,吸引了大量合作伙伴和客户的关注。
屹晶微的创始人黄米龙,原本在发电厂从事电气运营工作长达八年。这段经历让他对电子领域有了深入的了解和浓厚的兴趣。然而,他并没有满足于现状,而是看到了中国芯片产业的巨大潜力和发展空间。于是,在2007年,他毅然决定从发电厂辞职,利用自己的积蓄和借来的资金,在台州创立了屹晶微电子有限公司。
在创立初期,屹晶微面临着资金短缺、技术落后和市场竞争激烈的困境。但黄米龙凭借对电子行业的深刻理解和坚定的信念,带领团队克服了种种困难。他们不断引进先进技术和设备,加强研发力量,提升产品质量。经过几年的努力,屹晶微逐渐在芯片设计领域崭露头角,并成功推出了多款具有自主知识产权的芯片产品。
在电子行业快速发展的背景下,Aromat Corp始终坚持创新引领的发展理念。公司不断投入研发资源,推出了一系列具有创新性的电子产品。这些产品不仅满足了市场的多样化需求,还为公司带来了可观的利润增长。同时,Aromat Corp还注重知识产权保护,积极申请专利,保护公司的创新成果。
这里介绍一个设计小巧、线路简单但性能不错的三管音频放大器。其电路见附图。也许你在一些袖珍晶体管收音机可以看到一些与此类似的电路。 原理分析: 电路如图所示,输入极(9014)的基极工作电压等于两输出极三极管的中点电压,一般为电源电 ...… 查看全部问答∨ |
|
我想买一台2440的GPS用来改装其他用途,要使用到几个IO和串口。大家觉得行得通吗? 还有,是不是把JTAG接口找出来,使用并口将win ce的bootLoader写入,然后用USB写入win ce系统就可以了。… 查看全部问答∨ |
|
寻找商业投资战略合作伙伴,目前有大量国际资本操作 ,已经在国内。拟项目:拟在广西南宁市建立国内外汇市场投资机构。模式是以核心固定交易模式技术与交通银进行合作,运用核心技术和私募国际资本独立进行全球金融-外汇市场投资,也涉及黄金 股指 ...… 查看全部问答∨ |
|