唤醒中断控制器WIC(Wake-up Interrupt Controller)

#VibeCoding·九月创作之星挑战赛#

唤醒中断控制器WIC(Wake-up Interrupt Controller)

WIC 的全称是 Wake-up Interrupt Controller,中文翻译为 唤醒中断控制器

它是ARM Cortex-M处理器中一个专门为超低功耗应用而设计的辅助性硬件模块。它的核心使命是:在CPU内核深度睡眠时接管中断监控工作,从而实现“功耗无限接近于零”的待机,同时又不丢失任何中断事件。


1. 核心定义与要解决的问题

在传统的低功耗模式下,虽然CPU核心可以停止时钟以节省功耗,但嵌套向量中断控制器(NVIC) 必须保持供电和活动状态,以便持续监控中断信号。因为NVIC本身也是一块数字电路,它仍然会消耗一定的功耗,这就构成了深度睡眠模式下的功耗下限

WIC的出现就是为了突破这个下限。它的设计思路是:
让功耗极高的NVIC和CPU核心一起彻底休眠(断电),而由一个极其简单、功耗极低的“门卫”——WIC,来代替它们监视中断线。


2. 主要功能和工作原理

WIC的工作流程可以概括为以下几个阶段,其核心在于作为“低功耗门卫”的角色:

// --------------------------------------------------------------------------- // WIC instantiation // --------------------------------------------------------------------------- // Remove filler bits from WicMask to fit WIC port assign wic_mask = {wic_mask_isr, wic_mask_mon, wic_mask_nmi, wic_mask_rxev}; assign int_wic_mask = wic_mask[WIC_LINES-1:0]; // Select incoming IRQs/EDBGRQ/NMI/RXEV used by WIC assign int_wic_int = {INTISR, EDBGRQ, INTNMI, RXEV}; assign wic_int = int_wic_int[WIC_LINES-1:0]; cm4_wic #(WIC_PRESENT, WIC_LINES) u_cm4_wic (// Inputs .FCLK (FCLK), .RESETn (int_sysreset_n), .WICLOAD (wic_load), .WICCLEAR (wic_clear), .WICINT (wic_int), .WICMASK (int_wic_mask), .WICENREQ (WICENREQ), .WICDSACKn (wic_ds_ack_n), // Outputs .WAKEUP (int_wake_up), .WICSENSE (wic_sense), .WICPEND (wic_pend), .WICDSREQn (wic_ds_req_n), .WICENACK (int_wic_en_ack) ); // add dummy MSB to WicPend to facilitate indexing assign int_wic_pend = {1'b0, wic_pend}; assign int_wic_sense = {1'b0, wic_sense}; // Split WicPend into component IRQs/NMI/RXEV assign int_wic_irq_pend = {{244-WIC_LINES{1'b0}},int_wic_pend[WIC_LINES:3]}; assign wic_irq_pend = mst_wic_en ? int_wic_irq_pend[239:0] : {240{1'b0}}; assign wic_mon_pend = mst_wic_en ? int_wic_pend[2] : 1'b0; assign wic_nmi_pend = mst_wic_en ? int_wic_pend[1] : 1'b0; assign wic_rxev_pend = mst_wic_en ? int_wic_pend[0] : 1'b0; assign int_int_isr = INTISR | wic_irq_pend; assign int_int_nmi = INTNMI | wic_nmi_pend; assign int_rxev = (RXEV & ~wic_sense[0]) | wic_rxev_pend; assign int_ext_dbg_req = EDBGRQ | wic_mon_pend; assign combined_dbg_req = int_ext_dbg_req | etm_dbg_req; //---------------------------------------------------------------------------- // WIC not present logic removal terms //---------------------------------------------------------------------------- assign WAKEUP = (WIC_PRESENT != 0) ? int_wake_up : 1'b0; assign WICENACK = (WIC_PRESENT != 0) ? int_wic_en_ack : 1'b0; assign mst_wic_en = (WIC_PRESENT != 0) ? 1'b1 : 1'b0; 想我解释这段代码 详细解释
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yashar Qian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值