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

    文章

    7542

    浏览量

    151316
  • 单片机
    +关注

    关注

    6035

    文章

    44554

    浏览量

    634637
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17123

    浏览量

    350986
收藏 人收藏

    评论

    相关推荐

    方案介绍|CW32L010安全低功耗MCU:驱动高速风筒新力量

    芯源半导体CW32L010系列MCU可支持低成本、高性能、低功耗、高度集成的高速风筒方案,以满足市场对高效、安全、智能的高速风筒需求。 本文将介绍武汉芯源半导体
    发表于 12-10 09:57

    CW32L010 Mini Board 测评】简介、点灯

    Board 是基于 CW32L010F8U6 的 QFN 封装设计的最小系统核心板,产品规格与 CW32L010 芯片规格一致。便于客户灵活快速的评估芯片性能和产应用。 1.0mm的板厚、单面元器件
    发表于 11-17 06:39

    CW32L010学习笔记

    记录CW32L010学习过程
    的头像 发表于 11-15 17:40 1533次阅读
    <b class='flag-5'>CW32L</b>010学习笔记

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

    2024年9月26日,武汉芯源半导体CW32L010系列产品正式官方发布。这款产品以其卓越的产品性能,迅速在业界引起了广泛关注,并成功树立M0+产品行业的新标杆。CW32L010系列
    的头像 发表于 10-09 10:12 508次阅读
    <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 2次下载
    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 551次阅读
    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 1069次阅读
    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