晟矽微LVD低电压检测案例分析
/******************************************************************************
; * @型号 : MC32F7361
; * @创建日期 : 2021.12.21
; * @公司/作者 : SINOMCU-FAE
; * @晟矽微技术支持 : 2048615934
; * @晟矽微官网 : http://www.sinomcu.com/
; * @版权 : 2021 SINOMCU公司版权所有.
; *----------------------摘要描述---------------------------------
; * LVD(需外部供电)
; * VDD电压低于4V,P10输出低,反之输出高
******************************************************************************/
#include "user.h"
/************************************************
; * @函数名 : CLR_RAM
; * @说明 : 清RAM
; * @输入参数 :
; * @返回参数 :
; ***********************************************/
void CLR_RAM(void)
{
for (FSR0 = 0; FSR0 < 0xff; FSR0++)
{
INDF0 = 0x00;
}
FSR0 = 0xFF;
INDF0 = 0x00;
}
/************************************************
; * @函数名 : IO_Init
; * @说明 : IO初始化
; * @输入参数 :
; * @返回参数 :
; ***********************************************/
void IO_Init(void)
{
IOP0 = 0x00; //io口数据位
OEP0 = 0x3F; //io口方向 1:out 0:in
PUP0 = 0x00; //io口上拉电阻 1:enable 0:disable
PDP0 = 0x00; //io口下拉电阻 1:enable 0:disable
P0ADCR = 0x00; //io类型选择 1:模拟输入 0:通用io
IOP1 = 0x00; //io口数据位
OEP1 = 0xFF; //io口方向 1:out 0:in
PUP1 = 0x00; //io口上拉电阻 1:enable 0:disable
PDP1 = 0x00; //io口下拉电阻 1:enable 0:disable
P1ADCR = 0x00; //io类型选择 1:模拟输入 0:通用io
IOP2 = 0x00; //io口数据位
OEP2 = 0x0F; //io口方向 1:out 0:in
PUP2 = 0x00; //io口上拉电阻 1:enable 0:disable
PDP2 = 0x00; //io口下拉电阻 1:enable 0:disablea
PMOD = 0x00; //P00、P01、P13 io端口值从寄存器读,推挽输出
DRVCR = 0x80; //普通驱动
}
/************************************************
; * @函数名 : LVD_Init
; * @说明 : LVD初始化
; * @输入参数 :
; * @返回参数 :
; ***********************************************/
void LVD_Init(void)
{
LVDCR = 0x70;//4V
LVDEN=1;
}
/************************************************
; * @函数名 : Sys_Init
; * @说明 : 系统初始化
; * @输入参数 :
; * @返回参数 :
; ***********************************************/
void Sys_Init(void)
{
GIE = 0;
CLR_RAM();
IO_Init();
LVD_Init();
GIE = 1;
}
/************************************************
; * @函数名 : main
; * @说明 : 主程序
; * @输入参数 :
; * @返回参数 :
; ***********************************************/
void main(void)
{
Sys_Init();
while (1)
{
if(LVDF == 1) //电压过低
{
P10D = 0;
}else
{
P10D = 1;
}
}
}
/************************************************
; * @函数名 : interrupt
; * @说明 : 中断函数
; * @输入参数 :
; * @返回参数 :
; ***********************************************/
void int_isr(void) __interrupt
{
__asm
movra _abuf
swapar _PFLAG
movra _statusbuf
__endasm;
__asm
swapar _statusbuf
movra _PFLAG
swapr _abuf
swapar _abuf
__endasm;
}
/**************************** end of file *********************************************/
知识点:
低电压检测 LVD
芯片内置低电压检测模块 LVD,可通过寄存器位 LVDEN 开启,通过 LVDVS 选择电压检测阀值。当
VDD 电压降至电压检测阀值以下时检测状态标志位 LVDF 将被置 1;因 LVD 电路的回滞特性(回滞电压
典型值为 6%),VDD 电压需恢复至电压检测阀值+6%后 LVDF 才被清 0。
注:开启 LVD 或切换电压检测阀值等操作,需待电路稳定(时间>2ms)后 LVD 输出才有效。