公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

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 值之后溢出时进行中断。 我做了:C

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



作为中断处理程序和主函数:Encoder_Start ();en
coder_ int_Startex (overflowenC);

但不幸的是没有发生中断,我在原理图 中检查了终端计数中断。设计时肯定附带了 Encoder_Int 中断块。

我错过了什么? 😞

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 点赞
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 点赞