新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 深入理解ARM體系架構S3C6410外部中斷控制實例

        深入理解ARM體系架構S3C6410外部中斷控制實例

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

        我用的是mini6410 的k1鍵實現外部中斷。

        本文引用地址:http://www.104case.com/article/201611/318687.htm

        按鍵初始化:

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

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

        按鍵中斷程序:

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

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


        中斷初始化函數:

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

        使能中斷函數:

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

        指定中斷程序函數:

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

        編寫main函數:

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



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 邢台市| 勃利县| 成安县| 尤溪县| 中阳县| 峨眉山市| 贵溪市| 遂平县| 丰都县| 乌鲁木齐市| 周口市| 临桂县| 岳阳县| 阳山县| 即墨市| 泰顺县| 新巴尔虎右旗| 长葛市| 禹州市| 洪洞县| 民丰县| 思南县| 绥宁县| 石家庄市| 恭城| 广东省| 时尚| 江川县| 白山市| 惠州市| 青龙| 富阳市| 昂仁县| 山阴县| 丹江口市| 江孜县| 金坛市| 集安市| 建德市| 太康县| 磐安县|