[DemoCode下载] POWER DOWN WAKEUP INTERRUPT

[复制链接]
1056|5
 楼主| a_ziliu 发表于 2016-12-26 10:46 | 显示全部楼层 |阅读模式
基於POWER DOWN WAKEUP INTERRUPT的例子
EC_NUC230_240_PDWK_INT.zip (936.95 KB, 下载次数: 14)
643757107 发表于 2016-12-26 15:04 | 显示全部楼层
电源掉电,中断唤醒?
598330983 发表于 2016-12-26 16:15 | 显示全部楼层
断电唤醒中断的例程,看看跟M051有啥区别没
捉虫天师 发表于 2016-12-27 23:53 | 显示全部楼层
不如直接贴代码
  1. /**************************************************************************//**
  2. * [url=home.php?mod=space&uid=288409]@file[/url]     main.c
  3. * [url=home.php?mod=space&uid=895143]@version[/url]  V2.00
  4. * $Revision: 2 $
  5. * $Date: 15/04/10 10:28a $
  6. * [url=home.php?mod=space&uid=247401]@brief[/url]    NUC230_240 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 "NUC230_240.h"


  13. #define PLL_CLOCK           72000000


  14. void GPAB_IRQHandler(void)
  15. {
  16.           PA0^=1;
  17.     /* To check if PB.3 interrupt occurred */
  18.     if(GPIO_GET_INT_FLAG(PB, BIT3)) {
  19.         GPIO_CLR_INT_FLAG(PB, BIT3);
  20.         printf("PB.3 INT occurred.\n");
  21.     } else {
  22.         /* Un-expected interrupt. Just clear all PA, PB interrupts */
  23.         PA->ISRC = PA->ISRC;
  24.         PB->ISRC = PB->ISRC;
  25.         printf("Un-expected interrupts.\n");
  26.     }
  27. }

  28. void PWRWU_IRQHandler(void)
  29. {
  30.                 PA1^=1;
  31.    printf("PDWU_IRQHandler running...\n");

  32.     CLK->PWRCON  |= CLK_PWRCON_PD_WU_STS_Msk; /* clear interrupt */
  33. }


  34. void SYS_Init(void)
  35. {
  36.     /*---------------------------------------------------------------------------------------------------------*/
  37.     /* Init System Clock                                                                                       */
  38.     /*---------------------------------------------------------------------------------------------------------*/

  39.     /* Enable Internal RC 22.1184MHz clock */
  40.     CLK_EnableXtalRC(CLK_PWRCON_OSC22M_EN_Msk);

  41.     /* Waiting for Internal RC clock ready */
  42.     CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk);

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

  45.     /* Enable external XTAL 12MHz clock */
  46.     CLK_EnableXtalRC(CLK_PWRCON_XTL12M_EN_Msk);

  47.     /* Waiting for external XTAL clock ready */
  48.     CLK_WaitClockReady(CLK_CLKSTATUS_XTL12M_STB_Msk);

  49.     /* Set core clock as PLL_CLOCK from PLL */
  50.     CLK_SetCoreClock(PLL_CLOCK);

  51.     /* Enable UART module clock */
  52.     CLK_EnableModuleClock(UART0_MODULE);

  53.     /* Select UART module clock source */
  54.     CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_HXT, CLK_CLKDIV_UART(1));

  55.     /*---------------------------------------------------------------------------------------------------------*/
  56.     /* Init I/O Multi-function                                                                                 */
  57.     /*---------------------------------------------------------------------------------------------------------*/

  58.     /* Set GPB multi-function pins for UART0 RXD and TXD */
  59.     SYS->GPB_MFP &= ~(SYS_GPB_MFP_PB0_Msk | SYS_GPB_MFP_PB1_Msk);
  60.     SYS->GPB_MFP |= (SYS_GPB_MFP_PB0_UART0_RXD | SYS_GPB_MFP_PB1_UART0_TXD);

  61. }

  62. void UART0_Init()
  63. {
  64.     /*---------------------------------------------------------------------------------------------------------*/
  65.     /* Init UART                                                                                               */
  66.     /*---------------------------------------------------------------------------------------------------------*/
  67.     /* Reset UART0 */
  68.     SYS_ResetModule(UART0_RST);

  69.     /* Configure UART0 and set UART0 Baudrate */
  70.     UART_Open(UART0, 115200);
  71. }

  72. /*---------------------------------------------------------------------------------------------------------*/
  73. /* MAIN function                                                                                           */
  74. /*---------------------------------------------------------------------------------------------------------*/
  75. int main(void)
  76. {
  77.     /* Unlock protected registers */
  78.     SYS_UnlockReg();

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

  81.     /* Init UART0 for printf */
  82.     UART0_Init();

  83.     /* Configure PB.3 as Input mode and enable interrupt by rising edge trigger */
  84.     GPIO_EnableInt(PB, 3, GPIO_INT_FALLING);
  85.     NVIC_EnableIRQ(GPAB_IRQn);

  86.           CLK->PWRCON |= CLK_PWRCON_PD_WU_INT_EN_Msk;  /* Enable wake up interrupt source */
  87.     NVIC_EnableIRQ(PWRWU_IRQn);   /* Enable IRQ request for PDWU interrupt */

  88.         NVIC_SetPriority(PWRWU_IRQn,0);
  89.         NVIC_SetPriority(GPAB_IRQn,3);
  90.     /* Waiting for PB.3 rising-edge interrupt event */
  91.     while(1) {
  92.                          UART_WAIT_TX_EMPTY(UART0);
  93.                          CLK_PowerDown();

  94.     }

  95. }

  96. /*** (C) COPYRIGHT 2013 Nuvoton Technology Corp. ***/


huangcunxiake 发表于 2016-12-28 21:07 | 显示全部楼层
GPIO_EnableInt(PB, 3, GPIO_INT_FALLING);
    NVIC_EnableIRQ(GPAB_IRQn);

          CLK->PWRCON |= CLK_PWRCON_PD_WU_INT_EN_Msk;  /* Enable wake up interrupt source */
    NVIC_EnableIRQ(PWRWU_IRQn);   /* Enable IRQ request for PDWU interrupt */

        NVIC_SetPriority(PWRWU_IRQn,0);
        NVIC_SetPriority(GPAB_IRQn,3);
这个例子给力,还有设置优先级。
643757107 发表于 2016-12-29 00:04 | 显示全部楼层
中断优先级也是可以配置的,不过如果不配置就是默认的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

100

主题

310

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部