热度 10| ||
SoC设计中,常常会遇到中断资源紧张的场景,常常采用设置pending的方法节省资源。比如对于按键的输入需要占用中断资源,而按键又分为多种方式:短按、双击、长按等。为了节省中断资源,常见做法就是,对于每种按键模式都会产生pending,共用一个中断接口,这样发生中断后,cpu去读取对应的pending寄存器就可以知道发生了哪种具体的按键中断,同时中断程序里不要忘记将pending位清“0”,通常硬件都会设计为pending写“1”清“0”。
譬如,按键的中断信号产生为:
assign int_key = short_pend && short_en && irq_global_en |
short2_pend && short2_en && irq_global_en |
long_pend && long_en && irq_global_en ;
short_pend、 short2_pend 、long_pend 组成状态位寄存器,注意pending位需要有清“0”的逻辑电路。
short_en 、short2_en 、long_en 组成按键中断使能寄存器。
irq_global_en 为中断全局使能位。
不管中断的开启与否,pending位都是会产生的。只有在开启了对应的中断且产生了pending后,才会通知CPU发生了中断。