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

    文章

    8249

    浏览量

    162266
  • 单片机
    +关注

    关注

    6074

    文章

    45334

    浏览量

    663301
  • mcu
    mcu
    +关注

    关注

    147

    文章

    18604

    浏览量

    386563
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    CW32 MCU在高频率运行下的系统稳定性的提升方案

    问题,并提出一系列应对措施,包括硬件设计改进和软件优化策略,以确保系统在高频工作环境中的可靠性和持续稳定运行。 具体内容包括: 高频运行对MCU的影响分析: 探讨CW32
    发表于 12-04 08:04

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

    64MHz的ARM® Cortex®-M0+ 内核、最多256KB FLASH 、最多 24KBRAM、最多87路GPIO,以及一系列增强型外设。 CW32L083系列产品优势介绍 1
    发表于 12-04 08:01

    请问一下,CW32L083VCT6的DeepSleep模式下,功耗一般在多少?

    请问一下,CW32L083VCT6的DeepSleep模式下,功耗一般在多少?
    发表于 12-03 06:14

    CW32定时器及中断介绍

    可以由硬件自 动执行触发信号的滤波操作,还能令触发事件产生中断和 DMA 请求。 低功耗定时器:CW32L083 内部集成 1 个 16 位低功耗定时器(LPTIM),可以以很低的功耗实现定时或对外
    发表于 12-01 07:08

    GCC开发工程的模版

    1、拷贝一份工程,另存为cw32l083_gcc,并用vscode打开。 2、到官网下载cw32l083的固件库。 3、把cw32l083-stdperiph-lib/Libraries下面的固件
    发表于 11-28 08:15

    CW32L系列MCU的应用领域

    CW32L系列MCU凭借其低功耗、高性能、丰富的外设接口以及强大的安全性能,广泛应用于以下领域: 消费电子:如智能手机、平板电脑、智能手表等便携式设备。 智能家居:如智能插座、智能灯泡、智能门锁等
    发表于 11-25 07:22

    CW32L083有哪些应用场景?

    CW32L083有哪些应用场景
    发表于 11-24 07:37

    CW32单片机UART低功耗模式的介绍

    介绍 1.CW32L083工作模式 CW32L083 支持三种工作模式,由内嵌的电源管理模块自动完成电源的统一管理。三种工作模式是: • 运行模式(Active mode) • 休眠模式
    发表于 11-19 06:08

    CW32 MCU有哪些系列

    目前CW32 MCU有通用高性能MCU、安全低功耗MCU、无线射频MCU等3个系列。其中射频
    发表于 11-12 07:34

    CW32 UART低功耗模式详解

    介绍 1.CW32L083工作模式 CW32L083 支持三种工作模式,由内嵌的电源管理模块自动完成电源的统一管理。三种工作模式是: • 运行模式(Active mode) • 休眠模式
    发表于 11-12 07:24

    CW32L010系列的特点

    CW32L010系列MCU采用了独特的工艺制程,使其待机电流降低至仅3uA,这在高温环境下也表现得尤为出色,漏电仅为竞品平均水平的四分之一到八分之一。此外,我们还全新设计了高级定时器,不仅兼容G4
    发表于 11-12 06:51

    CW32 MCU的工作电压、工作温度是多少?

    32F003、CW32F002等,其工作温度为-40℃~105℃,其余系列,比如:CW32L083CW32L031等低功耗系列,以及
    发表于 11-12 06:49

    CW32 MCU最低功耗能做到多少?

    CW32L系列,比如:CW32L083CW32L031在深度休眠模式下,电流可低至600nA以下,CW32L010则可低至0.3uA;其它
    发表于 11-12 06:24

    CW32L系列低功耗MCU的Vcore管脚如何使用?

    CW32L系列低功耗MCU的Vcore管脚,是MCU内部集成的稳压器供电输出,必须外接 1μF电容到地,且仅限内部电路使用。Vcore的典型电压值为1.5V,注意:千万不能将其连接到
    发表于 11-12 06:21

    CW32L01x系列MCU驱动TFT屏的应用方案

    CW32L01x系列MCU应用广泛,本文将详细介绍CW32L01x系列
    的头像 发表于 10-14 10:18 833次阅读
    <b class='flag-5'>CW32L</b>01x<b class='flag-5'>系列</b><b class='flag-5'>MCU</b>驱动TFT屏的应用方案