利用ARM外部中斷控制流水燈的閃爍速度(基于LPC2134)
本文引用地址:http://m.butianyuan.cn/article/201611/318925.htm
- #include"config.h"
- void__irqEint0_IRQ(void);//INT0中斷函數(shù)聲明
- voiddelay(intdly);//delay延時函數(shù)聲明
- //流水燈數(shù)值表
- intLed_Table[]={
- 0x00fe0000,0x00fd0000,0x00fb0000,0x00f70000,0x00ef0000,
- 0x00df0000,0x00bf0000,0x007f0000};
- intDelaytime=70;
- //主函數(shù)
- intmain(void)
- {
- inti=0;
- PINSEL0=0X000CC0CC;//使能p0.1p0.3p0.7p0.8分別為外部中斷0.1.2.3
- PINSEL1=0X00000000;//使能p1.16~23為IO功能
- IO1DIR=0XFF<<16;//這個寫法很清楚,推薦
- IRQEnable();
- VICIntSelect=0x00000000;//設(shè)置所有的終端都為IRQ中斷
- VICVectCntl0=0x20|14;//設(shè)置INT0為IRQ中斷,使用slot0
- VICVectAddr0=(uint32)Eint0_IRQ;//設(shè)置終端服務(wù)程序地址
- VICIntEnable=0x00004000;//使能INT0
- EXTMODE=0x00;//INT0電平觸發(fā)
- EXTPOLAR=0x00;//觸發(fā)電平為低電平
- EXTINT=0x0f;//清除所有中斷標(biāo)志
- while(1)
- {
- IO1SET=Led_Table[i];//設(shè)置高電平引腳
- IO1CLR=~Led_Table[i];//設(shè)置低電平引腳
- delay(Delaytime);
- i+=1;
- if(i==8)
- {
- i=0;
- }
- }
- return0;
- }
- /****************************************************************************
- #*名稱:delay
- #*功能:延時函數(shù)
- #*入口參數(shù):延時時間
- #*出口參數(shù):無
- #****************************************************************************/
- voiddelay(intdly)
- {
- inti,j;
- for(i=0;i
- for(j=0;j<25000;j++);
- }
- /****************************************************************************
- #*名稱:Eint0_IRQ()
- #*功能:外部中斷1中斷處理程序。
- #*入口參數(shù):無
- #*出口參數(shù):無
- #****************************************************************************/
- void__irqEint0_IRQ(void)
- {
- if(Delaytime>20)
- {
- Delaytime-=20;//加快流水燈的閃爍速度
- }
- while((EXTINT&0x01)!=0)//不斷被清除標(biāo)志位,直到外部恢復(fù)高電平,此時EXTINT的最低位位0
- {
- EXTINT=0x01;
- }
- VICVectAddr=0;//必須操作
- }
評論