/**
|
******************************************************************************
|
* @file fm33a0xxev_svd.c
|
* @author FM33A0XXEV Application Team
|
* @version V1.0.0
|
* @date 16-April-2020
|
* @brief This file provides firmware functions to manage the following
|
* functionalities of....:
|
*
|
*/
|
|
/* Includes ------------------------------------------------------------------*/
|
|
#include "fm33a0xxev_svd.h"
|
|
/** @addtogroup fm33a0xxev_StdPeriph_Driver
|
* @{
|
*/
|
|
/** @defgroup SVD
|
* @brief SVD driver modules
|
* @{
|
*/
|
|
/* SVD±¨¾¯ãÐÖµµµÎ»ÉèÖ㬲μû11.3.3¼ì²âãÐÖµ
|
(SVD threshold level) Ïà¹Øº¯Êý */
|
void SVD_CFGR_LVL_Set(uint32_t SetValue)
|
{
|
uint32_t tmpreg;
|
tmpreg = SVD->CFGR;
|
tmpreg &= ~(SVD_CFGR_LVL_Msk);
|
tmpreg |= (SetValue & SVD_CFGR_LVL_Msk);
|
SVD->CFGR = tmpreg;
|
}
|
|
uint32_t SVD_CFGR_LVL_Get(void)
|
{
|
return (SVD->CFGR & SVD_CFGR_LVL_Msk);
|
}
|
|
/* Êý×ÖÂ˲¨Ê¹ÄÜ£¨MOD=1ʱ±ØÐëÖÃ1£©
|
(Digital Filter Enable)
|
1£ºÆô¶¯SVDÊä³öµÄÊý×ÖÂ˲¨
|
0£º¹Ø±ÕSVDÊä³öµÄÊý×ÖÂ˲¨ Ïà¹Øº¯Êý */
|
void SVD_CFGR_DFEN_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
SVD->CFGR |= (SVD_CFGR_DFEN_Msk);
|
}
|
else
|
{
|
SVD->CFGR &= ~(SVD_CFGR_DFEN_Msk);
|
}
|
}
|
|
FunState SVD_CFGR_DFEN_Getable(void)
|
{
|
if (SVD->CFGR & (SVD_CFGR_DFEN_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
/* SVD¹¤×÷ģʽѡÔñ£¬ÅäÖÃģʽºó»¹ÒªÖÃλSVD_CR.EN²Å»áÆô¶¯SVD
|
(SVD Mode)
|
1£º¼äЪʹÄÜģʽ
|
0£º³£Ê¹ÄÜģʽ
|
×¢Ò⣺¼äЪʹÄÜģʽϱØÐ뿪ÆôÊý×ÖÂ˲¨ Ïà¹Øº¯Êý */
|
void SVD_CFGR_MOD_Set(uint32_t SetValue)
|
{
|
uint32_t tmpreg;
|
tmpreg = SVD->CFGR;
|
tmpreg &= ~(SVD_CFGR_MOD_Msk);
|
tmpreg |= (SetValue & SVD_CFGR_MOD_Msk);
|
SVD->CFGR = tmpreg;
|
}
|
|
uint32_t SVD_CFGR_MOD_Get(void)
|
{
|
return (SVD->CFGR & SVD_CFGR_MOD_Msk);
|
}
|
|
/* SVD Interval£¬SVD¼äЪʹÄܼä¸ô (SVD periodic interval)
|
00£º62.5ms
|
01£º256ms
|
10£º1s
|
11£º4s Ïà¹Øº¯Êý */
|
void SVD_CFGR_ITVL_Set(uint32_t SetValue)
|
{
|
uint32_t tmpreg;
|
tmpreg = SVD->CFGR;
|
tmpreg &= ~(SVD_CFGR_ITVL_Msk);
|
tmpreg |= (SetValue & SVD_CFGR_ITVL_Msk);
|
SVD->CFGR = tmpreg;
|
}
|
|
uint32_t SVD_CFGR_ITVL_Get(void)
|
{
|
return (SVD->CFGR & SVD_CFGR_ITVL_Msk);
|
}
|
|
/* SVD²âÊÔʹÄÜ£¬±ÜÃâд1 (SVD test enable) Ïà¹Øº¯Êý */
|
void SVD_CR_TE_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
SVD->CR |= (SVD_CR_TE_Msk);
|
}
|
else
|
{
|
SVD->CR &= ~(SVD_CR_TE_Msk);
|
}
|
}
|
|
FunState SVD_CR_TE_Getable(void)
|
{
|
if (SVD->CR & (SVD_CR_TE_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
|
/* SVSÍⲿµçÔ´¼ì²âͨµÀ¿ØÖÆÐźÅ
|
(SVS external monitor channel enable)
|
0£ºSVSͨµÀ¹Ø±Õ
|
1£ºSVSͨµÀʹÄÜ
|
µ±EN=1ʱ£¬¸ù¾ÝSVDLVL¼Ä´æÆ÷¿ÉÒÔÉèÖÃSVSÊäÈëºóÊÇ·ñ¾¹ýÄÚ²¿µç×è·Öѹ£»Èç¹ûLVL=1111£¬ÔòSVSÊäÈë²»×ö·Öѹ£¬Èç¹ûLVL != 1111£¬ÔòSVSÊäÈë¾¹ýÄÚ²¿µç×è·Öѹ¡£ Ïà¹Øº¯Êý */
|
void SVD_CR_SVSEN_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
SVD->CR |= (SVD_CR_SVSEN_Msk);
|
}
|
else
|
{
|
SVD->CR &= ~(SVD_CR_SVSEN_Msk);
|
}
|
}
|
|
FunState SVD_CR_SVSEN_Getable(void)
|
{
|
if (SVD->CR & (SVD_CR_SVSEN_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
void SVD_CR_SVDEN_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
SVD->CR |= (SVD_CR_SVDEN_Msk);
|
}
|
else
|
{
|
SVD->CR &= ~(SVD_CR_SVDEN_Msk);
|
}
|
}
|
|
FunState SVD_CR_SVDEN_Getable(void)
|
{
|
if (SVD->CR & (SVD_CR_SVDEN_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
/* µçÔ´µøÂäÖжÏʹÄܼĴæÆ÷£¬1ÓÐЧ (Power Fall interrupt enable) Ïà¹Øº¯Êý */
|
void SVD_IER_PFIE_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
SVD->IER |= (SVD_IER_PFIE_Msk);
|
}
|
else
|
{
|
SVD->IER &= ~(SVD_IER_PFIE_Msk);
|
}
|
}
|
|
FunState SVD_IER_PFIE_Getable(void)
|
{
|
if (SVD->IER & (SVD_IER_PFIE_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
/* µçÔ´»Ö¸´ÖжÏʹÄܼĴæÆ÷£¬1ÓÐЧ (Power Rise interrupt enable) Ïà¹Øº¯Êý */
|
void SVD_IER_PRIE_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
SVD->IER |= (SVD_IER_PRIE_Msk);
|
}
|
else
|
{
|
SVD->IER &= ~(SVD_IER_PRIE_Msk);
|
}
|
}
|
|
FunState SVD_IER_PRIE_Getable(void)
|
{
|
if (SVD->IER & (SVD_IER_PRIE_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
/* SVDµçÔ´¼ì²âÊä³ö (SVD output)
|
1£ºµçÔ´µçѹ¸ßÓÚSVDµ±Ç°ãÐÖµ
|
0£ºµçÔ´µçѹµÍÓÚSVDµ±Ç°ãÐÖµ Ïà¹Øº¯Êý */
|
FlagStatus SVD_ISR_SVDO_Chk(void)
|
{
|
if (SVD->ISR & SVD_ISR_SVDO_Msk)
|
{
|
return SET;
|
}
|
else
|
{
|
return RESET;
|
}
|
}
|
|
/* SVDÊä³öËø´æÐźţ¬Êý×ÖµçÂ·Ëø´æµÄSVD״̬
|
(SVD registered output) Ïà¹Øº¯Êý */
|
FlagStatus SVD_ISR_SVDR_Chk(void)
|
{
|
if (SVD->ISR & SVD_ISR_SVDR_Msk)
|
{
|
return SET;
|
}
|
else
|
{
|
return RESET;
|
}
|
}
|
|
/* µçÔ´µøÂäÖжϱêÖ¾¼Ä´æÆ÷£¬µçÔ´µçѹµøÂäµ½SVDãÐÖµÖ®ÏÂʱÖÃ룬Èí¼þд1ÇåÁã (Power fall flag) Ïà¹Øº¯Êý */
|
void SVD_ISR_PFF_Clr(void)
|
{
|
SVD->ISR = SVD_ISR_PFF_Msk;
|
}
|
|
FlagStatus SVD_ISR_PFF_Chk(void)
|
{
|
if (SVD->ISR & SVD_ISR_PFF_Msk)
|
{
|
return SET;
|
}
|
else
|
{
|
return RESET;
|
}
|
}
|
|
/* µçÔ´»Ö¸´ÖжϱêÖ¾¼Ä´æÆ÷£¬µçÔ´µçѹÉÏÉýµ½SVDãÐÖµÖ®ÉÏʱÖÃ룬Èí¼þд1ÇåÁã (Power rise flag) Ïà¹Øº¯Êý */
|
void SVD_ISR_PRF_Clr(void)
|
{
|
SVD->ISR = SVD_ISR_PRF_Msk;
|
}
|
|
FlagStatus SVD_ISR_PRF_Chk(void)
|
{
|
if (SVD->ISR & SVD_ISR_PRF_Msk)
|
{
|
return SET;
|
}
|
else
|
{
|
return RESET;
|
}
|
}
|
|
/* 1.0V»ù×¼ÊäÈëʹÄÜÐźŠ(1.0V reference enable)
|
1£ºÊ¹ÄÜ1.0V»ù×¼ÊäÈë
|
0£º¹Ø±Õ1.0V»ù×¼ÊäÈë Ïà¹Øº¯Êý */
|
void SVD_VSR_V1P0EN_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
SVD->VSR |= (SVD_VSR_V1P0EN_Msk);
|
}
|
else
|
{
|
SVD->VSR &= ~(SVD_VSR_V1P0EN_Msk);
|
}
|
}
|
|
FunState SVD_VSR_V1P0EN_Getable(void)
|
{
|
if (SVD->VSR & (SVD_VSR_V1P0EN_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
/* 0.95V»ù×¼ÊäÈëʹÄÜÐźŠ(0.95V reference enable)
|
1£ºÊ¹ÄÜ0.95V»ù×¼ÊäÈë
|
0£º¹Ø±Õ0.95V»ù×¼ÊäÈë Ïà¹Øº¯Êý */
|
void SVD_VSR_V0P95EN_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
SVD->VSR |= (SVD_VSR_V0P95EN_Msk);
|
}
|
else
|
{
|
SVD->VSR &= ~(SVD_VSR_V0P95EN_Msk);
|
}
|
}
|
|
FunState SVD_VSR_V0P95EN_Getable(void)
|
{
|
if (SVD->VSR & (SVD_VSR_V0P95EN_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
/* 0.9V»ù×¼ÊäÈëʹÄÜÐźŠ(0.9V reference enable)
|
1£ºÊ¹ÄÜ0.9V»ù×¼ÊäÈë
|
0£º¹Ø±Õ0.9V»ù×¼ÊäÈë Ïà¹Øº¯Êý */
|
void SVD_VSR_V0P9EN_Setable(FunState NewState)
|
{
|
if (NewState == ENABLE)
|
{
|
SVD->VSR |= (SVD_VSR_V0P9EN_Msk);
|
}
|
else
|
{
|
SVD->VSR &= ~(SVD_VSR_V0P9EN_Msk);
|
}
|
}
|
|
FunState SVD_VSR_V0P9EN_Getable(void)
|
{
|
if (SVD->VSR & (SVD_VSR_V0P9EN_Msk))
|
{
|
return ENABLE;
|
}
|
else
|
{
|
return DISABLE;
|
}
|
}
|
|
|
void SVD_Deinit(void)
|
{
|
//SVD->CFGR = 0x00000008;
|
//SVD->CR = 0x00000000;
|
//SVD->IER = 0x00000000;
|
//SVD->ISR = 0x00000000;
|
//SVD->VSR = 0x00000000;
|
}
|
|
/*********************************
|
SVD³õʼ»¯ÅäÖú¯Êý
|
¹¦ÄÜ£ºSVD³õʼ»¯ÅäÖÃ
|
ÊäÈë: ANAC_SVD_InitTypeDef* para£¬½á¹¹Ì庯ÊýÖÐÅäÖù¤×÷ģʽ¡¢ãÐÖµ¡¢Êý×ÖÂ˲¨µÈ¹¦ÄÜ
|
Êä³ö: ÎÞ
|
*********************************/
|
void SVD_Init(SVD_InitTypeDef* para)
|
{
|
SVD_CFGR_MOD_Set(para->SVDMOD); //SVD¹¤×÷ģʽѡÔñ
|
SVD_CFGR_ITVL_Set(para->SVDITVL); //SVD¼äЪʹÄܼä¸ôÉèÖÃ
|
SVD_CFGR_LVL_Set(para->SVDLVL); //SVD±¨¾¯ãÐÖµÉèÖÃ
|
SVD_CFGR_DFEN_Setable(para->DFEN); //SVDÊý×ÖÂ˲¨ÉèÖã¨SVDMODE=1ʱ±ØÐëÖÃ1£©
|
SVD_IER_PFIE_Setable(para->PFIE); //SVDµçÔ´µøÂäÖжÏÉèÖÃ
|
SVD_IER_PRIE_Setable(para->PRIE); //SVDµçÔ´»Ö¸´ÖжÏÉèÖÃ
|
SVD_CR_TE_Setable(DISABLE); //¹Ø±Õ²âÊÔ¹¦ÄÜ
|
}
|
|
/******END OF FILE****/
|