新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 深入理解ARM體系架構(gòu)S3C6410外部中斷控制實例

深入理解ARM體系架構(gòu)S3C6410外部中斷控制實例

作者: 時間:2016-11-20 來源:網(wǎng)絡 收藏
關于S3C6410的中斷問題,網(wǎng)上有很多高手已經(jīng)分析過了,在這里我主要分析S3C6410實現(xiàn)過程,和自己已經(jīng)編寫好的簡單程序。

我用的是mini6410 的k1鍵實現(xiàn)外部中斷。

本文引用地址:http://butianyuan.cn/article/201611/318687.htm

按鍵初始化:

void Key_Init(){rGPNCON|=(1<<1);  //將GPN0設置為中斷模式rGPNPUD&=~(1<<0);//上拉電阻rEINT0CON0|=(3<<0); //下降沿觸發(fā)rEINT0MASK&=~(1<<0);  //取消屏蔽rEINT0FLTCON0|=(1<<7);  //延時濾波}

注意:我在這只初始化了一個引腳,即GPNCON0

按鍵中斷程序:

void Key_ISR() __irq  //按鍵中斷函數(shù){i++;if(i%2==0)Led_Display(0x0);//在這里用戶可添加其他的處理操作else Led_Display(0xf);rEINT0PEND|=(1<<0);//寫1清除中斷INTC_ClearVectAddr();//這個函數(shù)下面我們再介紹}

/*清除中斷指示,防止干擾下一次中斷發(fā)生*/void INTC_ClearVectAddr(void){rVIC0ADDR = 0x0;rVIC1ADDR = 0x0;}


中斷初始化函數(shù):

void INTC_Init(void) {//關閉所有中斷rVIC0INTENCLEAR = 0xffffffff; rVIC1INTENCLEAR = 0xffffffff; //都設置為IRQrVIC0INTSELECT = 0x0;rVIC1INTSELECT = 0x0;INTC_ClearVectAddr();}

使能中斷函數(shù):

//打開某一個中斷int INTC_Enable(unsigned int intNum){if(intNum > INT_LIMIT)//數(shù)值檢測{return -1;}if(intNum<32)//如果是vic0組{rVIC0INTENABLE |= (1<

指定中斷程序函數(shù):

void INTC_SetIntISR(unsigned int intNum, void (*isr)(void) __irq){if(intNum > INT_LIMIT)//數(shù)值檢測{return ;}if(intNum < 32)//如果是vic0組{VIC0VECTADDR[intNum] = (unsigned )isr;}else//如果是vic1組{VIC1VECTADDR[intNum-32] = (unsigned )isr;}}

編寫main函數(shù):

Led_Init();//led初始化Led_Display(0x0);//控制ledKey_Init();//按鍵初始化INTC_Init();//中斷初始化INTC_Enable(INT_EINT0);//中斷使能INTC_SetIntISR(INT_EINT0,Key_ISR);//指定中斷處理函數(shù)while(1);//等待



評論


技術專區(qū)

關閉