Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

您好,

我正在嘗試將編碼器添加到我的項目中。 我可以讀取 0 到 65536 之間的編碼器值作為 32.768 起始中點,並且我想在 65536 值後的計數器溢出時進行中斷。 我將:

CY_ISR(OverflowENC){ // Encoder Overflow
ER_Write(1); //Turn on LED
CyDelay(100);
Encoder_ClearInterrupt(Encoder_INTR_MASK_TC);
Encoder_Int_ClearPending();
}

做為中斷處理程序,並在主功能上做 為:

編碼器 _Start ();
編碼器 _ INT_StartEx(OverflowENC) ;但不幸的是沒有發生中斷,我在示意圖中檢查

終端計數中斷。設計時確定附加的編碼器 _Int 中斷塊。

我錯過了什麼? 😞

1 解決方案
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

你可能錯過的一件事是... 你在打電話

    CyGlobalIntEnable; /* Enable global interrupts. */

同時,我不建議你擁有

CyDelay(100) ;

在 ISR 中。

我更喜歡做這樣的事情...

volatile int tc_flag = 0 ;

CY_ISR(OverflowEnc) {
    tc_flag = 1 ;
    Encoder_ClearInterrupt(Encoder_INT_MASK_TC) ;
    Encoder_Int_ClearPending() ;
}

// in the main loop
    if (tc_flag) {
        tc_flag = 0 ;
        ER_Write(1) ;
        CyDelay(100) ;
     }

 

摩托車

在原始文章中檢視解決方案

0
1 回應
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

你可能錯過的一件事是... 你在打電話

    CyGlobalIntEnable; /* Enable global interrupts. */

同時,我不建議你擁有

CyDelay(100) ;

在 ISR 中。

我更喜歡做這樣的事情...

volatile int tc_flag = 0 ;

CY_ISR(OverflowEnc) {
    tc_flag = 1 ;
    Encoder_ClearInterrupt(Encoder_INT_MASK_TC) ;
    Encoder_Int_ClearPending() ;
}

// in the main loop
    if (tc_flag) {
        tc_flag = 0 ;
        ER_Write(1) ;
        CyDelay(100) ;
     }

 

摩托車

0