📄 ictrl.c
字号:
/* * mpc505/509 external interrupt controller management. */#include "ictrl.h"#include <rtems.h>#include <rtems/score/ppc.h>/* * Internal routines. */static unsigned long volatile *const IRQAND = (unsigned long volatile *const)0x8007EFA4;static void nullHandler(){}/* Interrupt dispatch table. */static ExtIsrHandler extIrqHandlers[NUM_IRQS] ={ nullHandler, nullHandler, nullHandler, nullHandler, nullHandler, nullHandler, nullHandler};/* RTEMS external interrupt handler. Calls installed external interrupt handlers for every pending external interrupt in turn. */static rtems_isr extIsr_( rtems_vector_number i ){#define BIT_NUMBER(val, bit) \ asm volatile ( "cntlzw %0, %1; srawi %0, %0, 1": "=r" (bit) : "r" (val) ); int bit; (void)i; BIT_NUMBER(*IRQAND & IMASK_ALL, bit); while ( bit < NUM_IRQS ) { extIrqHandlers[bit](); BIT_NUMBER(*IRQAND & IMASK_ALL, bit); }}/* * Public routines */void extIrqSetHandler(ExtInt interrupt,ExtIsrHandler handler){ extIrqHandlers[interrupt] = handler;}void extIsrInit( void ){ int i = 0; extIrqDisable(IMASK_ALL); for( i = 0; i < NUM_IRQS; i++) extIrqHandlers[i] = nullHandler; set_vector(extIsr_,PPC_IRQ_EXTERNAL,1);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -