⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pwrman.c

📁 NXP LPC系列AMR7的开发程序源码(LCD
💻 C
字号:
/*****************************************************************************
 *   pwrman.c:  Power Management module file for NXP LPC23xx/24xx Family Microprocessors
 *
 *   Copyright(C) 2006, NXP Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2006.07.20  ver 1.00    Prelimnary version, first Release
 *
******************************************************************************/
#include "LPC230x.h"                        /* LPC23xx/24xx definitions */
#include "type.h"
#include "irq.h"
#include "target.h"
#include "pwrman.h"

#include <intrinsics.h>

volatile DWORD eint0_counter;
volatile DWORD eint3_counter;
/*****************************************************************************
** Function name:   EINT0_Handler
**
** Descriptions:    external INT handler
**
** parameters:      None
** Returned value:    None
** 
*****************************************************************************/
__irq __nested __arm void EINT0_Handler (void)
{
  EXTINT = EINT0;   /* clear interrupt */
  
  __enable_interrupt(); /* handles nested interrupt */
  
  eint0_counter++;
  
  VICVectAddr = 0;    /* Acknowledge Interrupt */
}

/*****************************************************************************
** Function name: EINT3_Handler
**
** Descriptions:  external INT3 handler, shared with GPIO0 and GPIO2 port
**          pins as interrupt source.
**
** parameters:    None
** Returned value:  None
** 
*****************************************************************************/
__irq __nested __arm void EINT3_Handler (void)
{
  EXTINT = EINT3;   /* clear interrupt */
    
  __enable_interrupt(); /* handles nested interrupt */
  eint3_counter++;
  if ( IO0_INT_STAT_F & (1 << 8))
  {
    IO0_INT_CLR |= (1 << 8); 
  }
  if ( IO2_INT_STAT_F & (1 << 8))
  {
    IO2_INT_CLR |= (1 << 8);
  }
  VICVectAddr = 0;    /* Acknowledge Interrupt */
  return;
}

/*****************************************************************************
** Function name: EINT0Init
**
** Descriptions:  Initialize external interrupt pin and
**          install interrupt handler
**
** parameters:    None
** Returned value:  true or false, return false if the interrupt
**          handler can't be installed to the VIC table.
** 
*****************************************************************************/
DWORD EINT0Init( void )
{
  PINSEL4 |= 0x00100000;  /* set P2.10 as EINT0 */
            
  IO2_INT_EN_F = 0x200; /* Port2.10 is falling edge. */
  EXTMODE = EINT0_EDGE; /* INT0 edge trigger */
  EXTPOLAR = 0;     /* INT0 is falling edge by default */
     
  if ( install_irq( EINT0_INT, (void *)EINT0_Handler, HIGHEST_PRIORITY ) == FALSE )
  {
    return (FALSE);
  }
        
  return( TRUE );
}

/*****************************************************************************
** Function name: EINT3Init
**
** Descriptions:  Initialize GPIO0 and GPIO2 pins as 
**          interrupt and used as GPIO wakeup source.
**
** parameters:    None
** Returned value:  true or false, return false if the interrupt
**          handler can't be installed to the VIC table.
** 
*****************************************************************************/
DWORD EINT3Init( void )
{
  IO2_INT_EN_F = 1 << 8;  /* Port2.8 is falling edge using EINT3. */
  IO0_INT_EN_F = 1 << 8;  /* Port0.8 is falling edge using EINT3. */
     
  if ( install_irq( EINT3_INT, (void *)EINT3_Handler, HIGHEST_PRIORITY ) == FALSE )
  {
    return (FALSE);
  }
        
  return( TRUE );
}

/******************************************************************************
** Function name:   PM_Init
**
** Descriptions:    Set up wakeup source before powering down
**            Use EXTINT0 as wakeup source    
**
** parameters:      
** Returned value:    true or fase, if VIC table is full, return false
** 
******************************************************************************/
DWORD PM_Init( void )
{
  FIO2DIR = 0x000000FF; /* port 2, bit 0~7 only, GPIO output */
  FIO2CLR = 0x000000FF; /* turn off LEDs */

  if ( EINT0Init() != TRUE )  /* Enable external interrupt 0 */
  {
    return ( FALSE );
  }
  if ( EINT3Init() != TRUE )  /* Enable external interrupt 0 */
  {
    return ( FALSE );
  }

  /* Set EXTINT0 and GPIO0 and GPIO2 as wakeup source */
  /* Note: there is a documentation error, that INTWAKE bit 7
  GPIOWAKE should be GPIO0WAKE, bit 8 should be GPIO2WAKE. */
  INTWAKE |= ((0x01<<0)|(0x01<<7)|(0x01<<8)); 
  return ( TRUE );    
}

/******************************************************************************
**                            End Of File
******************************************************************************/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -