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

📄 power_ctrl.c

📁 NXP LPC系列AMR7的开发程序源码(LCD
💻 C
字号:
/*************************************************************************
 *
 *    Used with ICCARM and AARM.
 *
 *    (c) Copyright IAR Systems 2007
 *
 *    File name   : power_ctrl.h
 *    Description :Power control low level functions
 *
 *    History :
 *    1. Date        : January 18, 2006
 *       Author      : Stanimir Bonev
 *       Description : Create
 *
 *    $Revision: 1.0 $
 **************************************************************************/
#include <NXP/iolpc2119.h>
#include "power_ctrl.h"

/*************************************************************************
 * Function Name: EXTIT_Handler
 * Parameters: none
 * Return: none
 *
 * Description: External interrupt handler. Enable JTAG interface and
 * release JLink controller reset and turn off battery supply
 *
 *************************************************************************/
__fiq __arm void FIQ_Handler(void)
{
  PINSEL2 |= 4;
  IO0SET = _P0_BATT_CTRL_MASK | _P0_JATG_RST_MASK;
  // disable interrupt
  VICIntEnClear = 1UL << VIC_EINT3;
}

/*************************************************************************
 * Function Name: PowerCrltInit
 * Parameters: none
 * Return: none
 *
 * Description: Init power type detection and turn off/on J-Link controller
 *
 *************************************************************************/
void PowerCrltInit(void)
{
unsigned int VPBDIV_temp;
  // Set all unused pins to GIO outputs
  PINSEL0 &= ~0x300000FF;
  PINSEL1 &= ~0x30C003FC;
  IO0SET   =  0x081E400F;
  IO0DIR  |=  0x081E400F;
  IO1CLR   =  0xFC000000;
  IO0DIR  |=  0xFC000000;
  // Init external interrupt
  PINSEL1_bit.P0_30 = 2;      // assign P0.30 to EXTINT3
  // Errata EXTINT.2 Incorrect setting of EXTMODE and/or EXTPOLAR
  // register while trying to set them to desired value
  // Don't steeping over this sequence
  VPBDIV_temp = VPBDIV;
  EXTMODE  = 0;      // level sensitivity
  VPBDIV   = 0;
  EXTPOLAR = 1 << 3; // high level trigger
  VPBDIV   = 1 << 3;
  VPBDIV = VPBDIV_temp;

  EXTINT_bit.EINT3 = 1;
  // assign EXTINR3 to fast interrupt
  VICIntSelect |= 1UL << VIC_EINT3;
  VICIntEnable  = 1UL << VIC_EINT3;
  // enable fast interrupt

  if(GetSupplyType() == BATT_SUPPLY)
  {
#if NDEBUG
    // turn off jtag interface
    PINSEL2 &= ~4;
    // Reset the jlink controller
    IO0CLR = _P0_JATG_RST_MASK;
#endif // NDEBUG
    // Turn on battery supply
    IO0CLR = _P0_BATT_CTRL_MASK;
  }
}

/*************************************************************************
 * Function Name: GetSupplyType
 * Parameters: none
 * Return: SupplyType_t
 *
 * Description: Return current supply type (external / battery)
 *
 *************************************************************************/
SupplyType_t GetSupplyType(void)
{
  return((EXTINT_bit.EINT3)?EXT_SUPPLY:BATT_SUPPLY);
}

/*************************************************************************
 * Function Name: BattSuppOff
 * Parameters: none
 * Return: none
 *
 * Description: Turn off battery supply
 *
 *************************************************************************/
void BattSuppOff(void)
{
  IO0SET = _P0_BATT_CTRL_MASK;
}

/*************************************************************************
 * Function Name: BattSuppOn
 * Parameters: none
 * Return: none
 *
 * Description: Turn on battery supply
 *
 *************************************************************************/
void BattSuppOn(void)
{
  IO0CLR = _P0_BATT_CTRL_MASK;
}
/*************************************************************************
 * Function Name: Discharge
 * Parameters: none
 * Return: none
 *
 * Description: Discharge 3.3 volts supply capacitors
 *
 *************************************************************************/
void Discharge(void)
{
  IO0CLR = 1<<14; // discharge power supply capacitors
}

/*************************************************************************
 * Function Name: StandBy
 * Parameters: none
 * Return: none
 *
 * Description: Turn off board's supply
 *
 *************************************************************************/
void StandBy (void)
{
  if(GetSupplyType() == BATT_SUPPLY)
  {
    OS_DeleteTimer(&PowerOffTimer);
    BattSuppOff();
    Discharge();
  }
  else
  {
    OS_RetriggerTimer(&PowerOffTimer);
  }
}

⌨️ 快捷键说明

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