會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





外部中斷 使用問題
中級會員
註冊日期:
2014/03/13 09:53
所屬群組:
註冊會員
文章: 44
等級: 5; EXP: 43
HP : 0 / 110
MP : 14 / 1197
離線
目前使用PIC32MX695F512H 外部中斷功能
中斷設置:
INTEnableSystemMultiVectoredInt();
// 使用INT4, Priotity level 5
INTSetVectorPriority(INT_EXTERNAL_4_VECTOR,INT_PRIORITY_LEVEL_5);
// interrupt sub-priority level 2
INTSetVectorSubPriority(INT_EXTERNAL_4_VECTOR,INT_SUB_PRIORITY_LEVEL_2);
// Rising Edge Polarity Control
INTCONbits.INT4EP = 1;
// Clear the interrupt source flag
INTClearFlag(INT_INT4);
// Enable the interrupt source
INTEnable(INT_INT4, INT_ENABLED);

中斷副程式:
void __ISR(_EXTERNAL_4_VECTOR, ipl5) _IntHandlerExternalInterrupt4(void)
{
INTClearFlag(INT_INT4);
c_left++;
}

以上程式發生如下問題:
1.我設定為上升緣觸發中斷,但是不管上升、下降都會進入中斷
2.中斷副程式中c_left是用來記數觸發次數,但是我給他一個上升緣,理論上c_left = 1,但有時候卻出現c_left = 2

目前程式只有單純測試這個中斷功能,無其他中斷設定
請問我有地方沒設定到?還是設定錯誤?

6月27日 13:39:13
轉換PDF檔 列印


Re: 外部中斷 使用問題
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1547
等級: 33; EXP: 44
HP : 162 / 811
MP : 515 / 17520
離線
"有時候", 示波器可以鉤一下訊號先.

另外可以考慮先將由優先權調高,
確認一下是不是其他的中斷影響到處理時間,
導致c_left的處理被延誤到.

6月27日 14:17:35
轉換PDF檔 列印


Re: 外部中斷 使用問題
中級會員
註冊日期:
2014/03/13 09:53
所屬群組:
註冊會員
文章: 44
等級: 5; EXP: 43
HP : 0 / 110
MP : 14 / 1197
離線
感謝Adam大回覆~~
修改後完整程式如下

void main(void)
{
TRISDbits.TRISD11=1; // 設定int4 pin 為 input

INTEnableSystemMultiVectoredInt();
// 使用INT4, Priotity level 5
INTSetVectorPriority(INT_EXTERNAL_4_VECTOR,INT_PRIORITY_LEVEL_7);
// interrupt sub-priority level 2
INTSetVectorSubPriority(INT_EXTERNAL_4_VECTOR,INT_SUB_PRIORITY_LEVEL_2);
// Rising Edge Polarity Control
INTCONbits.INT4EP = 1;
// Clear the interrupt source flag
INTClearFlag(INT_INT4);
// Enable the interrupt source
INTEnable(INT_INT4, INT_ENABLED);

while(1)
{

}
}

void __ISR(_EXTERNAL_4_VECTOR,ipl7) ExtInt4_ISR(void)
{
INTClearFlag(INT_INT4);
c_left++;
}


以上程式已將中斷優先權設定為7
並且搭配示波器觀察比對計算結果,如附件圖,仍然出現問題,能否給個解決方向...

6月27日 15:18:55
轉換PDF檔 列印


Re: 外部中斷 使用問題
中級會員
註冊日期:
2014/03/13 09:53
所屬群組:
註冊會員
文章: 44
等級: 5; EXP: 43
HP : 0 / 110
MP : 14 / 1197
離線
附件圖

附加檔案:



jpg  Q2.jpg (354.35 KB)
44096_5952075b0e45b.jpg 1024X768 px

jpg  Q1.jpg (357.84 KB)
44096_59520767113e9.jpg 1024X768 px

6月27日 15:21:26
轉換PDF檔 列印


Re: 外部中斷 使用問題
高級會員
註冊日期:
2014/12/02 11:55
所屬群組:
註冊會員
文章: 82
等級: 8; EXP: 0
HP : 0 / 175
MP : 27 / 1519
離線
引用:

urmgand35 寫道:
目前使用PIC32MX695F512H 外部中斷功能
中斷設置:
INTEnableSystemMultiVectoredInt();
// 使用INT4, Priotity level 5
INTSetVectorPriority(INT_EXTERNAL_4_VECTOR,INT_PRIORITY_LEVEL_5);
// interrupt sub-priority level 2
INTSetVectorSubPriority(INT_EXTERNAL_4_VECTOR,INT_SUB_PRIORITY_LEVEL_2);
// Rising Edge Polarity Control
INTCONbits.INT4EP = 1;
// Clear the interrupt source flag
INTClearFlag(INT_INT4);
// Enable the interrupt source
INTEnable(INT_INT4, INT_ENABLED);

中斷副程式:
void __ISR(_EXTERNAL_4_VECTOR, ipl5) _IntHandlerExternalInterrupt4(void)
{
INTClearFlag(INT_INT4);
c_left++;
}

以上程式發生如下問題:
1.我設定為上升緣觸發中斷,但是不管上升、下降都會進入中斷
2.中斷副程式中c_left是用來記數觸發次數,但是我給他一個上升緣,理論上c_left = 1,但有時候卻出現c_left = 2

目前程式只有單純測試這個中斷功能,無其他中斷設定
請問我有地方沒設定到?還是設定錯誤?


c_left沒宣告成volatile?

6月27日 15:37:45
轉換PDF檔 列印


Re: 外部中斷 使用問題
中級會員
註冊日期:
2014/03/13 09:53
所屬群組:
註冊會員
文章: 44
等級: 5; EXP: 43
HP : 0 / 110
MP : 14 / 1197
離線
感謝 嗚啦 回覆~
剛剛嘗試將變數宣告成volatile int c_left = 0,c_right = 0;
但是結果仍然沒有改善

6月27日 15:44:42
轉換PDF檔 列印


Re: 外部中斷 使用問題
高級會員
註冊日期:
2014/12/02 11:55
所屬群組:
註冊會員
文章: 82
等級: 8; EXP: 0
HP : 0 / 175
MP : 27 / 1519
離線
引用:

urmgand35 寫道:
感謝 嗚啦 回覆~
剛剛嘗試將變數宣告成volatile int c_left = 0,c_right = 0;
但是結果仍然沒有改善


多一行
進中斷時先檢查INT_INT4看看旗標是不是真的被設起來了?

看一下手冊會不會是中斷源有共用

6月27日 16:56:49
轉換PDF檔 列印


Re: 外部中斷 使用問題
中級會員
註冊日期:
2014/03/13 09:53
所屬群組:
註冊會員
文章: 44
等級: 5; EXP: 43
HP : 0 / 110
MP : 14 / 1197
離線
我有修改過中斷副程式先檢查其標是否有跳起
改成

if (IFS0bits.INT4IF) // interrupt flag for INT4
{
c_left++;
IFS0bits.INT4IF=0; // clear the interrupt flag
}


但是測試結果仍然有問題....我實在看不出來我程式哪裡有狀況....

6月27日 17:10:32
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
Microchip連結

網頁捷徑
2017 Summer Elite 報名
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project