lpc2000中断设置函数

[复制链接]
2092|0
 楼主| machunshui 发表于 2008-12-18 22:50 | 显示全部楼层 |阅读模式
lpc2000&nbsp;arm7的中断设定如果每次都写比较讨厌,如下的方法,可以使设置多个中断时候,比较简化<br /><br />/////interrupt.h//////////////<br /><br />#ifndef&nbsp;_INTERRUPT_H<br />#define&nbsp;_INTERRUPT_H<br /><br />#include&nbsp;&ltlpc2103.h&gt<br /><br />#define&nbsp;WDT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0<br />#define&nbsp;T0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4<br />#define&nbsp;T1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;5<br />#define&nbsp;UART0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;6<br />#define&nbsp;UART1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;7<br />#define&nbsp;I2C0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;9<br />#define&nbsp;SPI0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;10<br />#define&nbsp;SSP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;11<br />#define&nbsp;PLL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;12<br />#define&nbsp;RTC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;13<br />#define&nbsp;EINT0&nbsp;&nbsp;&nbsp;&nbsp;14<br />#define&nbsp;EINT1&nbsp;&nbsp;&nbsp;&nbsp;15<br />#define&nbsp;EINT2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;16<br />#define&nbsp;ADC&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;18<br />#define&nbsp;I2C1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;19<br />#define&nbsp;T2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;26<br />#define&nbsp;T3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;27<br /><br /><br />#define&nbsp;BASE_VIC_VECT_ADDR&nbsp;0xFFFFF100<br />#define&nbsp;BASE_VIC_VECT_CNTL&nbsp;0xFFFFF200<br /><br /><br />void&nbsp;InitInterrupt(void);<br />void&nbsp;SetInterrupt(unsigned&nbsp;char&nbsp;intSource,unsigned&nbsp;long&nbsp;irqAddr,unsigned&nbsp;char&nbsp;intPRI);<br /><br />#endif<br /><br /><br />///////////////interrupt.c////////////////<br /><br />#include&nbsp;&quot;interrupt.h&quot;<br /><br /><br />void&nbsp;InitInterrupt()<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntSelect&nbsp;=&nbsp;0;//全部为IRQ,无FRQ<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;=&nbsp;0;<br />}<br /><br />//参数为中断源,中断处理函数地址,中断优先级<br />void&nbsp;SetInterrupt(unsigned&nbsp;char&nbsp;intSource,unsigned&nbsp;long&nbsp;irqAddr,unsigned&nbsp;char&nbsp;intPRI)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;(*((volatile&nbsp;unsigned&nbsp;long&nbsp;*)&nbsp;(BASE_VIC_VECT_ADDR+(intPRI&lt&lt2))))&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(unsigned&nbsp;long)irqAddr;//VICVectAddrn&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;(*((volatile&nbsp;unsigned&nbsp;long&nbsp;*)&nbsp;(BASE_VIC_VECT_CNTL+(intPRI&lt&lt2))))&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;(0x00000020|intSource);//VICVectCntln&nbsp;=<br />&nbsp;&nbsp;&nbsp;&nbsp;VICIntEnable&nbsp;|=&nbsp;(0x01&lt&ltintSource);<br />}<br /><br /><br /><br /><br />要使用T0中断<br />SetInterrupt(T0,(unsigned&nbsp;long)T0IRQ,0);<br />即可<br /><br />要使用ADC中断<br />SetInterrupt(ADC,(unsigned&nbsp;long)ADCIRQ,1);<br />即可<br /><br />一次预定义好,不必都去查中断号,使用起来比较方便<br /><br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

153

主题

3224

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部