📄 power_ctrl.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 + -