0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

CW32L083系列MCU中断系统介绍

武汉芯源半导体有限公司 2022-12-01 11:36 次阅读

本文针对CW32L083系列MCU,同系列产品亦可参考。

ARM® Cortex®-M0+ 内核的嵌套向量中断控制器 (NVIC),用于管理中断和异常。NVIC和处理器内核紧密相连,可以实现低延迟的异常和中断处理。处理器支持最多32个中断请求 (IRQ)输入,支持多个内部异常。

主要特性

• 16个内部异常

• 32个可屏蔽外部中断

• 4个可编程的优先级

• 低延时的异常和中断处理

• 支持中断嵌套

• 中断向量表重映射

本文介绍了处理器的 32 个外部中断请求(IRQ0 ~ IRQ31),处理器内部异常的具体情况请参考“ARM® Cortex®-M0+Technical Reference Manual”与“ARM® v6-M Architecture Reference Manual”。

中断优先级

外部中断可设置 4 级优先级,最高优先级为“0”,最低优先级为“3”,默认值为“0”。当处理器正在执行一个中断处理程序时,如果出现一个更高优先级的中断,那么这个中断就被抢占。如果出现的中断的优先级和正在处理的中断的优先级相同或更低,这个中断就不会被抢占,但是新中断的状态就变为挂起。如果多个挂起的中断具有相同的优先级,中断编号越小的挂起中断优先处理。例如,如果IRQ[0]和IRQ[1]均挂起时,并且两者的优先级相同,那么先处理 IRQ[0]。

中断向量表

ARM® Cortex®-M0+ 响应中断时,处理器自动从存储器的中断向量表中取出中断服务程序 ( ISR )的起始地址。中断向量表包括主栈指针(MSP)的初始值,内部异常和外部中断的服务程序入口地址。每个中断向量占用1个字(4 字节),中断向量的存储地址为向量编号乘以4,下面的是CW32L083的中断向量表。

poYBAGOIEV2AK-UNAAQzkx5eI0c521.jpg

poYBAGOIEV2AUzSpAAN5f_QXg4g519.jpg

CW32L083由于部分外设的中断复用一个IRQ中断源,在中断服务程序中应先检查中断标志位,以确定产生中断的外设。NMI在CW32L083中未使用。HSE 、LSE 时钟信号起振失败和 LSI、LSE、HSIOSC、HSE、PLL 时钟信号稳定对应 RCC 全局中断。HSE 或 LSE 时钟信号在运行中失效对应 FAULT 中断。

中断寄存器的相关配置

1.中断的使能、挂起、清除挂起

ARM® Cortex-M0+处理器支持最多32个外部中断源,分别对应中断使能设置寄存器NIVC_ISER的32个使能位,和中断使能清除寄存器NVIC_ICER的32个禁止位。将使能位置1,允许中断;将禁止位置1,禁止中断。上文中NVIC中断使能仅针对处理器 NVIC而言,外设的中断是否使能,还受相应外设的中断控制寄存器控制。

而在中断发生的时候,如果系统正在处理相同优先级的或者更高优先级的中断,系统将不会立马的处理这个中断,而是将这个中断的状态设置为挂起,保存在中断挂起状态寄存器中,在处理器未进去此中断处理之前,如果没有手动清除挂起状态,这个状态会一直有效,等处理器进入中断处理的时候,硬件会自动清除相应的中断挂起状态。也可以通过设置中断挂起设置寄存器NVIC_ISPR的对应位,将此中断的状态设置为挂起状态,如果系统没有正在处理与之相同优先级或更高优先级的中断,此中断将被立即响应并处理。可以通过设置中断挂起清除寄存器NVIC_ICPR的对应位,将此中断的状态设置为挂起清除状态。

2.中断的优先级、中断屏蔽

中断优先级控制寄存器NVIC_IPR0 ~ NVIC_IPR7,用于设置IRQ0~IRQ31 的中断优先级,每个中断源使用8位,在CW32L083中仅使用了高两位,最多可设置4个中断优先级。

在某些特殊场合,需要禁止所有中断,可以使用中断屏蔽寄存器PRIMASK实现。PRIMASK只有最低1位有效,将此位置1,除了NMI和硬件错误异常之外的所有外部中断和异常都被禁止;清0后,允许响应中断和异常。该位复位后默认为0。

按键中断检测实验分析

以CW32L083评估板为例,按键连接至CW32L083的PA4、PA5端口LED连接至PC2、PC3接口。按键按下将产生中断,在中断服务程序中进行LED翻转。

int32_t main(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; __RCC_GPIOA_CLK_ENABLE(); // 使能GPIOA的配置时钟 __RCC_GPIOC_CLK_ENABLE(); // 使能GPIOC的配置时钟 //按键GPIO初始化 GPIO_InitStruct.IT = GPIO_IT_RISING | GPIO_IT_FALLING; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pins =GPIO_PIN_4 | GPIO_PIN_5; GPIO_Init(CW_GPIOA, &GPIO_InitStruct); //LED的GPIO初始化 GPIO_InitStruct.IT = GPIO_IT_NONE; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pins =GPIO_PIN_2 | GPIO_PIN_3; GPIO_Init(CW_GPIOC, &GPIO_InitStruct); //配置中断滤波 GPIO_ConfigFilter(CW_GPIOA, bv4, GPIO_FLTCLK_RC150K); //清除PA4、PA5中断标志并使能NVIC GPIOA_INTFLAG_CLR(bv4| bv5); NVIC_EnableIRQ(GPIOA_IRQn); __enable_irq(); //---------------------------------------------------------------------- //相关程序在中断服务GPIOA_IRQHandler中进行处理 while (1) { } } //GPIOA的中断服务函数 void GPIOA_IRQHandlerCallback(void) { if (CW_GPIOA->ISR_f.PIN4) { GPIOA_INTFLAG_CLR(bv4);清除PA04的中断标志位 PC03_TOG(); } if (CW_GPIOA->ISR_f.PIN5) { GPIOA_INTFLAG_CLR(bv5);//清除PA05的中断标志位 PC02_TOG(); } }

由上面代码可以看到,如果按下KEY1(PA04),LED1(PC03)的状态会翻转,如果松开按键,LED1又会翻转一次。在每次执行中断函数的时候,需要清除中断标志位即GPIOA_INTFLAG_CLR(bv4)。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7454

    浏览量

    150855
  • 单片机
    +关注

    关注

    6030

    文章

    44489

    浏览量

    631990
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16885

    浏览量

    349922
收藏 人收藏

    评论

    相关推荐

    CW32L010安全低功耗MCU,树立M0+产品行业新标杆!

    2024年9月26日,武汉芯源半导体CW32L010系列产品正式官方发布。这款产品以其卓越的产品性能,迅速在业界引起了广泛关注,并成功树立M0+产品行业的新标杆。CW32L010系列
    的头像 发表于 10-09 10:12 389次阅读
    <b class='flag-5'>CW32L</b>010安全低功耗<b class='flag-5'>MCU</b>,树立M0+产品行业新标杆!

    CW32L010安全低功耗MCU,树立M0+产品行业新标杆!

    MCU)的众多特性中,eFlash存储容量是最主要的关键参数之一。CW32L010系列产品存储容量最大 64K 字节 FLASH,数据保持 25 年 @-40℃ ~ +85℃,支持擦写保护、读保护
    发表于 10-09 10:08

    MSPM0 L 系列 MCU硬件开发指南

    电子发烧友网站提供《MSPM0 L 系列 MCU硬件开发指南.pdf》资料免费下载
    发表于 09-09 10:36 0次下载
    MSPM0 <b class='flag-5'>L</b> <b class='flag-5'>系列</b> <b class='flag-5'>MCU</b>硬件开发指南

    MSPM0 L系列MCU硬件开发指南

    电子发烧友网站提供《MSPM0 L系列MCU硬件开发指南.pdf》资料免费下载
    发表于 09-07 11:12 1次下载
    MSPM0 <b class='flag-5'>L</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>硬件开发指南

    MSPM0 L系列MCU功耗优化指南

    电子发烧友网站提供《MSPM0 L系列MCU功耗优化指南.pdf》资料免费下载
    发表于 09-02 11:36 1次下载
    MSPM0 <b class='flag-5'>L</b><b class='flag-5'>系列</b><b class='flag-5'>MCU</b>功耗优化指南

    CW32L083 IAP跳转后中断无响应是怎么回事?

    只说支持向量偏移,没有其它介绍。请问哪位大神做过IAP中断处理的,指点一下,是不是还需要设置哪里。我用仿真器测试,只要是带中断的,跳转后,中断全部无响应。
    发表于 07-26 07:17

    CKS32F107xx系列MCU中断和事件

    本章节首先将以MCU开发人员常接触到的“中断”、“事件”和“中断事件”三个名词的概念展开,然后去阐述彼此的主要区别,最后借助MCU的GPIO外部中断
    的头像 发表于 07-22 09:29 483次阅读
    CKS32F107xx<b class='flag-5'>系列</b><b class='flag-5'>MCU</b>的<b class='flag-5'>中断</b>和事件

    STM8L外部中断跟普通MCU的外部中断不一致,为什么?

    最近公司一个案子需要用到超低功耗MCU,在TI和ST的片子中纠结了一段时间,最后选了ST的STM8L151G2U6。 在使用外部中断的时候迷糊了,发现这个的外部中断跟普通
    发表于 05-15 06:23

    请问STM32L083的唯一ID为什么有重复啊?

    ID的读取代码如下: for(i=0; i<3; i++) {//STM32L083 ID CODE STM32L083_ID[i] = *(uint32_t
    发表于 04-17 06:29

    GD32 MCU是如何进入中断函数的

    用过GD32 MCU的小伙伴们都知道,程序是顺序执行的,但当有中断来的时候程序会跳转到中断函数,执行完中断函数后程序又继续回到原来的位置继续执行,那么你们知道
    的头像 发表于 01-30 09:45 955次阅读
    GD32 <b class='flag-5'>MCU</b>是如何进入<b class='flag-5'>中断</b>函数的

    请问如何优化CW32L083微控制器的功耗?

    在进行低功耗设计时,如何优化CW32L083系列微控制器的功耗?
    发表于 01-17 07:16

    CW32L083系列微控制器的ADC和DAC模块要如何使用?怎么配置?

    如何配置和使用CW32L083系列微控制器的ADC和DAC模块?
    发表于 01-17 06:08

    CW32单片机在智能马桶的应用介绍

    24KBRAM、最多87路GPIO,以及一系列增强型外设。 CW32L083系列产品优势介绍 1、系统特性 ● ARM^®^ Cortex
    发表于 12-20 10:06

    MCU中断处理过程,MCU如何处理中断

    MCU接收到一个中断信号时,它会暂停当前正在执行的任务,保存现场,然后跳转到预设的中断处理程序(Interrupt Service Routine, ISR)去处理这个中断
    的头像 发表于 12-13 11:48 1475次阅读

    51单片机中断系统介绍

    51单片机中断系统介绍与运用外部中断系统触发数码管显示数字的代码实验
    发表于 12-05 09:10 2次下载