📄 at91_aic.c
字号:
/* * at91_aic.c * this file implement aic driver on AT91X40 * for Atmel AT91 advanced interrupt controller * * Bugs report: li ming ( lmcs00@mails.tsinghua.edu.cn ) * */#include "at91_aic.h"#include "at91_init.h" /* Internal Sources */#define LevelSensitive (0<<5)#define EdgeTriggered (1<<5) /* External Sources */#define LowLevel (0<<5)#define NegativeEdge (1<<5)#define HighLevel (2<<5)#define PositiveEdge (3<<5)static unsigned char eb01_irq_prtable[32] = { 7 << 5, /* FIQ */ 0 << 5, /* SWIRQ */ 1 << 5, /* US0IRQ */ 1 << 5, /* US1IRQ */ 1 << 5, /* TC0IRQ */ 1 << 5, /* TC1IRQ */ 1 << 5, /* TC2IRQ */ 0 << 5, /* WDIRQ */ 0 << 5, /* PIOAIRQ */ 0 << 5, /* reserved */ 0 << 5, /* reserved */ 0 << 5, /* reserved */ 0 << 5, /* reserved */ 0 << 5, /* reserved */ 0 << 5, /* reserved */ 0 << 5, /* reserved */ 1 << 5, /* IRQ0 */ 0 << 5, /* IRQ1 */ 0 << 5, /* IRQ2 */};static unsigned char eb01_irq_type[32] = { EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, /* IRQ0 = neg. edge */ EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered, EdgeTriggered,};#define __arch_putb(v,a) (*(volatile unsigned char *)(a) = (v))#define __arch_putl(v,a) (*(volatile unsigned int *)(a) = (v))void at91_init_aic(void){ int irqno; /* Disable all interrupts */ __arch_putl(0xFFFFFFFF, AIC_IDCR); /* Clear all interrupts */ __arch_putl(0xFFFFFFFF, AIC_ICCR); for ( irqno = 0 ; irqno < 32 ; irqno++ ) { __arch_putl(irqno, AIC_EOICR); } for ( irqno = 0 ; irqno < 32 ; irqno++ ) { __arch_putl((eb01_irq_prtable[irqno] >> 5) | eb01_irq_type[irqno],AIC_SMR(irqno)); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -