现在流行的架构是 AMBA system,是 APB和AHB 两个bus的组合,APB(advance peripheral bus), AHB(advance high speed bus).
高速的设备会挂到AHB上,比如: USB,memory,ethernet,dmac... 而低速的设备会挂到APB上,比如:uart,rtc,gpio,timer。。。
AHB和APB都可以有中断控制器,都设计的差不多,现在我们的系统是选择在AHB上有一个中断控制器。
中断控制器的设计有下面几个部分:
1. irq 是高还是低触发,一般叫irq interrupt polarity;
2. force interrupt from software, 通过软件置位register,发出一个中断,我现在还想不出来这个功能要用来干嘛,ASIC就是喜欢弄些怪东西;
3.中断 enable, mask,status, 这些是很平常的设置了;
4. priority filter: 就是可以设置中断优先级,中断号0为最低优先级,这是通过2个register来达到目的的,
一个是irq system priority level register:
看看他的解释:The default state can be configured so that after reset the interrupt controller will
accept only interrupts that are enabled and have a priority the same or
greater than the system level priority setting。
还有一个就是设哪个中断是哪个优先级的。也就是说,当中断2发生的时候,设置irq system priority level register 为2,那么中断0,和中断1,如果产生就会被忽略。
5. 中断向量 interrupt vector: 这个是很好玩的,就是每一个中断产生的时候,可以跳到vector 所在的地址,这里我们当然会填一个函数的地址了。
如果这个功能没有enable的话,就直接发出一个irq给arm,arm根据他的中断向量表来做处理。好像又不是,asic的人在看,哦。
当然一般都有fiq,fiq没有priority的部分,其他和irq是一样的。