新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > vxworks Arm 架構(gòu)下的中斷

        vxworks Arm 架構(gòu)下的中斷

        作者: 時間:2016-11-09 來源:網(wǎng)絡 收藏
        中斷的處理分為三個部分:
        1、中斷檢測:
        arm架構(gòu)下,中斷監(jiān)測部分的代碼是需要用戶自己開發(fā)的,可以參考ambaIntrCtl.c,需要實現(xiàn)函數(shù)xxxIntLvlVecChk、xxxIntLvlVecAck、xxxIntLvlChg、xxxIntLvlEnable、xxxIntLvlDisable和xxxIntDevInit,在函數(shù)xxxIntDevInit中把其他幾個函數(shù)分別掛載在sysIntLvlVecChkRtn、sysIntLvlVecAckRtn、sysIntLvlChgRtn、sysIntLvlEnableRtn和sysIntLvlDisableRtn這幾個鉤子函數(shù)上。xxxIntDevInit在sysLib.c中的sysHwInit2中調(diào)用,以初始化中斷。
        2、中斷管理:
        中斷管理部分,BSP中需要調(diào)用兩個函數(shù),一個是intLibInit,另一個是xxxIntDevInit。后者的作用就是前面講的掛接中斷處理鉤子函數(shù)。前者intLibInit是個比較關(guān)鍵的函數(shù),三個參數(shù)設置了中斷的個數(shù)和中斷模式。內(nèi)部處理中,根據(jù)中斷的個數(shù)申請intVecTable數(shù)組,用戶使用intConnect代碼掛接的中斷就是根據(jù)中斷向量到表中查找位置然后賦以中斷處理函數(shù)。中斷模式分可搶占和不可搶占兩種,分別對應INT_PREEMPT_MODEL和INT_NON_PREEMPT_MODEL。
        3、中斷處理:
        根據(jù)vxWorks的實現(xiàn)代碼,在excArchLib.c中有一張表:
        LOCAL EXC_TBL excEnterTbl[NUM_EXC_VECS] =
        {
        /* no entry for branch through zero */
        { EXC_OFF_UNDEF, excEnterUndef},/* undefined instr */
        { EXC_OFF_SWI,excEnterSwi},/* software interrupt */
        { EXC_OFF_PREFETCH,excEnterPrefetchAbort}, /* prefetch abort */
        { EXC_OFF_DATA,excEnterDataAbort}, /* data abort */
        /* no entry for old address exception */
        { EXC_OFF_IRQ,intEnt},/* interrupt request */
        /* no entry for FIQ */
        };
        其中EXC_OFF_IRQ對應的即外部中斷,缺省情況下,調(diào)用的是intEnt,但是正常運行的時候,BSP代碼在intLibInit中會使用intIntRtnPreempt或者intIntRtnNonPreempt把intEnt替換掉,具體使用哪個由中斷處理模式?jīng)Q定。
        中斷發(fā)生后,先產(chǎn)生外部中斷異常,即IRQ,進入excExcHandle,excExcHandle查找列表excEnterTbl找到EXC_OFF_IRQ對應的處理函數(shù)intIntRtnPreempt或者intIntRtnNonPreempt,在intIntRtnPreempt或者intIntRtnNonPreempt里面,調(diào)用intVecTable里相應中斷向量對應的中斷處理函數(shù)。


        關(guān)鍵詞: vxworksArm架構(gòu)中

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 砀山县| 洞口县| 余庆县| 建昌县| 吉隆县| 郴州市| 吴旗县| 彰武县| 铜鼓县| 岳阳市| 隆回县| 平乐县| 郯城县| 枣庄市| 顺昌县| 松溪县| 长宁区| 通渭县| 新邵县| 闽侯县| 吉木萨尔县| 海城市| 富源县| 西平县| 焉耆| 沂南县| 清苑县| 清丰县| 沿河| 资兴市| 长白| 瑞金市| 中江县| 朝阳区| 长丰县| 濮阳县| 项城市| 沙洋县| 沂南县| 沛县| 大石桥市|