• “龙江二号”微卫星传回地月合影 2019-04-18
  • 中国驻泰国大使考察合艾国光中学孔子课堂 2019-04-18
  • 【清园20年】感恩大回馈!半价!半价! 2019-04-18
  • 中央纪委紧盯节点 4年来通报曝光问题近4000起 2019-04-13
  • 2013环球企业领袖宁夏圆桌会议嘉宾云集 2019-04-13
  • 《魔兽世界》未解之谜 那些仍不能被玩家们踏足的领地 2019-04-11
  • 钱江潮评 让高质量发展插上人才的翅膀 2019-04-10
  • 习近平两会期间谈社会主义核心价值观 2019-04-02
  • 文脉颂中华——黄河新闻网 2019-04-02
  • 陈小林的专栏作者中国国家地理网 2019-03-29
  • 中英航母大战谁能赢歼151枚炸弹就能炸瘫女王 2019-03-22
  • 独特“光捕捉器”可控制分子生化性质 2019-03-22
  • 女性之声——全国妇联 2019-03-19
  • 【理上网来·辉煌十九大】德国北威州经济部长:十九大报告表明中国有能力为世界做出更多贡献 2019-03-11
  • 全国小麦收获进度过八成 2019-03-07
  • 打印

    广东11选5走势图360: [技术问答] GPIO中断问题:采用边沿触发使能去防抖功能 修改了采样...

    [复制链接]
    278|10
    跳转到指定楼层
    楼主
    M051 GPIO中断 采用边沿触发使能去防抖功能 修改了采样周期  依然出现多次中断触发有什么好办法解决
    沙发
    | 2019-3-13 16:05 | 只看该作者
    你的电路是不是有问题。
    板凳
    | 2019-3-13 16:07 | 只看该作者
    我用例子里那种设置就很稳定。
    地板
    | 2019-3-13 21:37 | 只看该作者
    进入中断后关闭中断,完成任务后,推出时候恢复中断。
    5
    | 2019-3-13 21:42 | 只看该作者
    你用的什么按键,是不是按键抖动严重。不过不应该啊。
    6
    | 2019-3-13 21:42 | 只看该作者
    1. /**************************************************************************//**
    2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
    3. * [url=home.php?mod=space&uid=895143]@version[/url]  V3.00
    4. * $Revision: 2 $
    5. * $Date: 14/01/28 11:44a $
    6. * [url=home.php?mod=space&uid=247401]@brief[/url]    M051 Series GPIO Driver Sample Code
    7. *
    8. * @note
    9. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
    10. ******************************************************************************/
    11. #include <stdio.h>
    12. #include "M051Series.h"


    13. #define PLL_CLOCK           50000000


    14. /**
    15. * @brief       Port0/Port1 IRQ
    16. *
    17. * @param       None
    18. *
    19. * [url=home.php?mod=space&uid=266161]@return[/url]      None
    20. *
    21. * [url=home.php?mod=space&uid=1543424]@Details[/url]     The Port0/Port1 default IRQ, declared in startup_M051Series.s.
    22. */
    23. void GPIOP0P1_IRQHandler(void)
    24. {
    25.     /* To check if P1.3 interrupt occurred */
    26.     if(GPIO_GET_INT_FLAG(P1, BIT3))
    27.     {
    28.         GPIO_CLR_INT_FLAG(P1, BIT3);
    29.         printf("P1.3 INT occurred.\n");
    30.     }
    31.     else
    32.     {
    33.         /* Un-expected interrupt. Just clear all PORT0, PORT1 interrupts */
    34.         P0->ISRC = P0->ISRC;
    35.         P1->ISRC = P1->ISRC;
    36.         printf("Un-expected interrupts.\n");
    37.     }
    38. }

    39. /**
    40. * @brief       Port2/Port3/Port4 IRQ
    41. *
    42. * @param       None
    43. *
    44. * @return      None
    45. *
    46. * @details     The Port2/Port3/Port4 default IRQ, declared in startup_M051Series.s.
    47. */
    48. void GPIOP2P3P4_IRQHandler(void)
    49. {
    50.     /* To check if P4.5 interrupt occurred */
    51.     if(GPIO_GET_INT_FLAG(P4, BIT5))
    52.     {
    53.         GPIO_CLR_INT_FLAG(P4, BIT5);
    54.         printf("P4.5 INT occurred.\n");
    55.     }
    56.     else
    57.     {
    58.         /* Un-expected interrupt. Just clear all PORT2, PORT3 and PORT4 interrupts */
    59.         P2->ISRC = P2->ISRC;
    60.         P3->ISRC = P3->ISRC;
    61.         P4->ISRC = P4->ISRC;
    62.         printf("Un-expected interrupts.\n");
    63.     }
    64. }

    65. void SYS_Init(void)
    66. {
    67.     /*---------------------------------------------------------------------------------------------------------*/
    68.     /* Init System Clock                                                                                       */
    69.     /*---------------------------------------------------------------------------------------------------------*/
    70.     /* Enable Internal RC 22.1184MHz clock */
    71.     CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);

    72.     /* Waiting for Internal RC clock ready */
    73.     CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);

    74.     /* Switch HCLK clock source to Internal RC and HCLK source divide 1 */
    75.     CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));

    76.     /* Enable external XTAL 12MHz clock */
    77.     CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);

    78.     /* Waiting for external XTAL clock ready */
    79.     CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);

    80.     /* Set core clock as PLL_CLOCK from PLL */
    81.     CLK_SetCoreClock(PLL_CLOCK);

    82.     /* Enable UART module clock */
    83.     CLK_EnableModuleClock(UART0_MODULE);

    84.     /* Select UART module clock source */
    85.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_PLL, CLK_CLKDIV_UART(1));

    86.     /*---------------------------------------------------------------------------------------------------------*/
    87.     /* Init I/O Multi-function                                                                                 */
    88.     /*---------------------------------------------------------------------------------------------------------*/

    89.     /* Set P3 multi-function pins for UART0 RXD and TXD */
    90.     SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk);
    91.     SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0);

    92. }

    93. void UART0_Init(void)
    94. {
    95.     /*---------------------------------------------------------------------------------------------------------*/
    96.     /* Init UART                                                                                               */
    97.     /*---------------------------------------------------------------------------------------------------------*/
    98.     /* Reset UART */
    99.     SYS_ResetModule(UART0_RST);

    100.     /* Configure UART0 and set UART0 Baudrate */
    101.     UART_Open(UART0, 115200);
    102. }

    103. /*---------------------------------------------------------------------------------------------------------*/
    104. /* MAIN function                                                                                           */
    105. /*---------------------------------------------------------------------------------------------------------*/
    106. int main(void)
    107. {
    108.     /* Unlock protected registers */
    109.     SYS_UnlockReg();

    110.     /* Init System, peripheral clock and multi-function I/O */
    111.     SYS_Init();

    112.     /* Lock protected registers */
    113.     SYS_LockReg();

    114.     /* Init UART0 for printf */
    115.     UART0_Init();

    116.     printf("\n\nCPU [url=home.php?mod=space&uid=72445]@[/url] %d Hz\n", SystemCoreClock);
    117.     printf("+------------------------------------------------+\n");
    118.     printf("|    GPIO P1.3 and P4.5 Interrupt Sample Code    |\n");
    119.     printf("+------------------------------------------------+\n\n");

    120.     /*-----------------------------------------------------------------------------------------------------*/
    121.     /* GPIO Interrupt Function Test                                                                        */
    122.     /*-----------------------------------------------------------------------------------------------------*/
    123.     printf("P1.3 and P4.5 are used to test interrupt ......\n");

    124.     /* Configure P1.3 as Input mode and enable interrupt by rising edge trigger */
    125.     GPIO_SetMode(P1, BIT3, GPIO_PMD_INPUT);
    126.     GPIO_EnableInt(P1, 3, GPIO_INT_RISING);
    127.     NVIC_EnableIRQ(GPIO_P0P1_IRQn);

    128.     /*  Configure P4.5 as Quasi-bidirection mode and enable interrupt by falling edge trigger */
    129.     GPIO_SetMode(P4, BIT5, GPIO_PMD_QUASI);
    130.     GPIO_EnableInt(P4, 5, GPIO_INT_FALLING);
    131.     NVIC_EnableIRQ(GPIO_P2P3P4_IRQn);

    132.     /* Waiting for interrupts */
    133.     while(1);
    134. }

    135. /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/
    复制代码
    7
    | 2019-3-13 21:43 | 只看该作者
    试试上面这个例子。
    8
    | 2019-3-13 21:47 | 只看该作者
    1. /**************************************************************************//**
    2. * @file     main.c
    3. * @version  V3.00
    4. * $Revision: 3 $
    5. * $Date: 14/01/28 11:44a $
    6. * @brief    M051 Series GPIO Driver Sample Code
    7. *
    8. * @note
    9. * Copyright (C) 2013 Nuvoton Technology Corp. All rights reserved.
    10. ******************************************************************************/
    11. #include <stdio.h>
    12. #include "M051Series.h"


    13. #define PLL_CLOCK           50000000


    14. /**
    15. * @brief       External INT0 IRQ
    16. *
    17. * @param       None
    18. *
    19. * @return      None
    20. *
    21. * @details     The External INT0(P3.2) default IRQ, declared in startup_M051Series.s.
    22. */
    23. void EINT0_IRQHandler(void)
    24. {
    25.     /* For P3.2, clear the INT flag */
    26.     GPIO_CLR_INT_FLAG(P3, BIT2);

    27.     printf("P3.2 EINT0 occurred.\n");
    28. }

    29. /**
    30. * @brief       External INT1 IRQ
    31. *
    32. * @param       None
    33. *
    34. * @return      None
    35. *
    36. * @details     The External INT1(P3.3) default IRQ, declared in startup_M051Series.s.
    37. */
    38. void EINT1_IRQHandler(void)
    39. {
    40.     /* For P3.3, clear the INT flag */
    41.     GPIO_CLR_INT_FLAG(P3, BIT3);

    42.     printf("P3.3 EINT1 occurred.\n");
    43. }

    44. void SYS_Init(void)
    45. {
    46.     /*---------------------------------------------------------------------------------------------------------*/
    47.     /* Init System Clock                                                                                       */
    48.     /*---------------------------------------------------------------------------------------------------------*/
    49.     /* Enable Internal RC 22.1184MHz clock */
    50.     CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);

    51.     /* Waiting for Internal RC clock ready */
    52.     CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);

    53.     /* Switch HCLK clock source to Internal RC and HCLK source divide 1 */
    54.     CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_HIRC, CLK_CLKDIV_HCLK(1));

    55.     /* Enable external XTAL 12MHz clock */
    56.     CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);

    57.     /* Waiting for external XTAL clock ready */
    58.     CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);

    59.     /* Set core clock as PLL_CLOCK from PLL */
    60.     CLK_SetCoreClock(PLL_CLOCK);

    61.     /* Enable UART module clock */
    62.     CLK_EnableModuleClock(UART0_MODULE);

    63.     /* Select UART module clock source */
    64.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_PLL, CLK_CLKDIV_UART(1));

    65.     /*---------------------------------------------------------------------------------------------------------*/
    66.     /* Init I/O Multi-function                                                                                 */
    67.     /*---------------------------------------------------------------------------------------------------------*/

    68.     /* Set P3 multi-function pins for UART0 RXD, TXD, EINT0 and EINT1 */
    69.     SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk | SYS_MFP_P32_Msk | SYS_MFP_P33_Msk);
    70.     SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0 | SYS_MFP_P32_INT0 | SYS_MFP_P33_INT1);

    71. }

    72. void UART0_Init(void)
    73. {
    74.     /*---------------------------------------------------------------------------------------------------------*/
    75.     /* Init UART                                                                                               */
    76.     /*---------------------------------------------------------------------------------------------------------*/
    77.     /* Reset UART */
    78.     SYS_ResetModule(UART0_RST);

    79.     /* Configure UART0 and set UART0 Baudrate */
    80.     UART_Open(UART0, 115200);
    81. }

    82. /*---------------------------------------------------------------------------------------------------------*/
    83. /* MAIN function                                                                                           */
    84. /*---------------------------------------------------------------------------------------------------------*/
    85. int main(void)
    86. {
    87.     /* Unlock protected registers */
    88.     SYS_UnlockReg();

    89.     /* Init System, peripheral clock and multi-function I/O */
    90.     SYS_Init();

    91.     /* Lock protected registers */
    92.     SYS_LockReg();

    93.     /* Init UART0 for printf */
    94.     UART0_Init();

    95.     printf("\n\nCPU @ %d Hz\n", SystemCoreClock);
    96.     printf("+------------------------------------------------------------+\n");
    97.     printf("|    GPIO EINT0/EINT1 Interrupt and De-bounce Sample Code    |\n");
    98.     printf("+------------------------------------------------------------+\n\n");

    99.     /*-----------------------------------------------------------------------------------------------------*/
    100.     /* GPIO External Interrupt Function Test                                                               */
    101.     /*-----------------------------------------------------------------------------------------------------*/
    102.     printf("EINT0(P3.2) and EINT1(P3.3) are used to test interrupt \n");

    103.     /* Configure P3.2 as EINT0 pin and enable interrupt by falling edge trigger */
    104.     GPIO_SetMode(P3, BIT2, GPIO_PMD_INPUT);
    105.     GPIO_EnableEINT0(P3, 2, GPIO_INT_FALLING);
    106.     NVIC_EnableIRQ(EINT0_IRQn);

    107.     /* Configure P3.3 as EINT1 pin and enable interrupt by rising and falling edge trigger */
    108.     GPIO_SetMode(P3, BIT3, GPIO_PMD_INPUT);
    109.     GPIO_EnableEINT1(P3, 3, GPIO_INT_BOTH_EDGE);
    110.     NVIC_EnableIRQ(EINT1_IRQn);

    111.     /* Enable interrupt de-bounce function and select de-bounce sampling cycle time is 1024 * 10 KHz clock */
    112.     GPIO_SET_DEBOUNCE_TIME(GPIO_DBCLKSRC_LIRC, GPIO_DBCLKSEL_1024);
    113.     GPIO_ENABLE_DEBOUNCE(P3, BIT2 | BIT3);

    114.     /* Waiting for interrupts */
    115.     while(1);
    116. }

    117. /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/
    复制代码
    9
    | 2019-3-13 21:47 | 只看该作者
    上面这个是去抖动的中断参考。
    10
    | 2019-3-17 16:53 | 只看该作者
    启用去抖动没有效果?
    11
    | 2019-3-18 23:40 | 只看该作者
    修改之后没有一点用?
    扫描二维码,随时随地手机跟帖
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    我要发帖 投诉建议 创建版块 申请版主

    快速回复

    您需要登录后才可以回帖
    登录 | 注册
    高级模式

    论坛热帖

    快速回复 广东快乐十分走势图 返回列表
  • “龙江二号”微卫星传回地月合影 2019-04-18
  • 中国驻泰国大使考察合艾国光中学孔子课堂 2019-04-18
  • 【清园20年】感恩大回馈!半价!半价! 2019-04-18
  • 中央纪委紧盯节点 4年来通报曝光问题近4000起 2019-04-13
  • 2013环球企业领袖宁夏圆桌会议嘉宾云集 2019-04-13
  • 《魔兽世界》未解之谜 那些仍不能被玩家们踏足的领地 2019-04-11
  • 钱江潮评 让高质量发展插上人才的翅膀 2019-04-10
  • 习近平两会期间谈社会主义核心价值观 2019-04-02
  • 文脉颂中华——黄河新闻网 2019-04-02
  • 陈小林的专栏作者中国国家地理网 2019-03-29
  • 中英航母大战谁能赢歼151枚炸弹就能炸瘫女王 2019-03-22
  • 独特“光捕捉器”可控制分子生化性质 2019-03-22
  • 女性之声——全国妇联 2019-03-19
  • 【理上网来·辉煌十九大】德国北威州经济部长:十九大报告表明中国有能力为世界做出更多贡献 2019-03-11
  • 全国小麦收获进度过八成 2019-03-07