lpc2000 arm7的中断设定如果每次都写比较讨厌,如下的方法,可以使设置多个中断时候,比较简化<br /><br />/////interrupt.h//////////////<br /><br />#ifndef _INTERRUPT_H<br />#define _INTERRUPT_H<br /><br />#include <lpc2103.h><br /><br />#define WDT 0<br />#define T0 4<br />#define T1 5<br />#define UART0 6<br />#define UART1 7<br />#define I2C0 9<br />#define SPI0 10<br />#define SSP 11<br />#define PLL 12<br />#define RTC 13<br />#define EINT0 14<br />#define EINT1 15<br />#define EINT2 16<br />#define ADC 18<br />#define I2C1 19<br />#define T2 26<br />#define T3 27<br /><br /><br />#define BASE_VIC_VECT_ADDR 0xFFFFF100<br />#define BASE_VIC_VECT_CNTL 0xFFFFF200<br /><br /><br />void InitInterrupt(void);<br />void SetInterrupt(unsigned char intSource,unsigned long irqAddr,unsigned char intPRI);<br /><br />#endif<br /><br /><br />///////////////interrupt.c////////////////<br /><br />#include "interrupt.h"<br /><br /><br />void InitInterrupt()<br />{<br /> VICIntSelect = 0;//全部为IRQ,无FRQ<br /> VICIntEnable = 0;<br />}<br /><br />//参数为中断源,中断处理函数地址,中断优先级<br />void SetInterrupt(unsigned char intSource,unsigned long irqAddr,unsigned char intPRI)<br />{<br /> (*((volatile unsigned long *) (BASE_VIC_VECT_ADDR+(intPRI<<2)))) = (unsigned long)irqAddr;//VICVectAddrn =<br /> (*((volatile unsigned long *) (BASE_VIC_VECT_CNTL+(intPRI<<2)))) = (0x00000020|intSource);//VICVectCntln =<br /> VICIntEnable |= (0x01<<intSource);<br />}<br /><br /><br /><br /><br />要使用T0中断<br />SetInterrupt(T0,(unsigned long)T0IRQ,0);<br />即可<br /><br />要使用ADC中断<br />SetInterrupt(ADC,(unsigned long)ADCIRQ,1);<br />即可<br /><br />一次预定义好,不必都去查中断号,使用起来比较方便<br /><br /> |
|