/******************************************************************************
* Copyright (C) 2017, Huada Semiconductor Co.,Ltd All rights reserved.
*
* This software is owned and published by:
* Huada Semiconductor Co.,Ltd ("HDSC").
*
* BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND
* BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT.
*
* This software contains source code for use with HDSC
* components. This software is licensed by HDSC to be adapted only
* for use in systems utilizing HDSC components. HDSC shall not be
* responsible for misuse or illegal use of this software for devices not
* supported herein. HDSC is providing this software "AS IS" and will
* not be responsible for issues arising from incorrect user implementation
* of the software.
*
* Disclaimer:
* HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE,
* REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS),
* ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING,
* WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED
* WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED
* WARRANTY OF NONINFRINGEMENT.
* HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT,
* NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT
* LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION,
* LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR
* INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA,
* SAVINGS OR PROFITS,
* EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR
* INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED
* FROM, THE SOFTWARE.
*
* This software may be replicated in part or whole for the licensed use,
* with the restriction that this Disclaimer and Copyright notice must be
* included with each copy of this software, whether used in part or whole,
* at all times.
*/
/******************************************************************************/
/** \file adt.c
**
** Low Voltage Detect driver API.
** @link Lvd Group Some description @endlink
**
** - 2017-07-16 LiuHL First Version
**
******************************************************************************/
/******************************************************************************
* Include files
******************************************************************************/
#include "adt.h"
/**
******************************************************************************
** \addtogroup AdtGroup
******************************************************************************/
//@{
/******************************************************************************
* Local pre-processor symbols/macros ('#define')
******************************************************************************/
/******************************************************************************
* Global variable definitions (declared in header file with 'extern') *
******************************************************************************/
/******************************************************************************
* Local type definitions ('typedef')
******************************************************************************/
/******************************************************************************
* Local function prototypes ('static')
******************************************************************************/
/******************************************************************************
* Local variable definitions ('static')
******************************************************************************/
static func_ptr_t pfnAdtIrqCbk[3][16];
/*****************************************************************************
* Function implementation - global ('extern') and local ('static')
*****************************************************************************/
/**
* \brief
* 使能NVIC中ADT中断
*
* \param [in] enIrqn 中断号
*
* \retval 无
*/
#if 0
static void AdtEnableNvic(IRQn_Type enIrqn)
{
NVIC_ClearPendingIRQ(enIrqn);
NVIC_EnableIRQ(enIrqn);
NVIC_SetPriority(enIrqn, DDL_IRQ_LEVEL_DEFAULT);
}
#endif
/**
* \brief
* 除能NVIC中ADT中断
*
* \param [in] enIrqn 中断号
*
* \retval 无
*/
static void AdtDisableNvic(IRQn_Type enIrqn)
{
NVIC_ClearPendingIRQ(enIrqn);
NVIC_DisableIRQ(enIrqn);
NVIC_SetPriority(enIrqn, DDL_IRQ_LEVEL_DEFAULT);
}
/**
* \brief
* ADC中断服务程序
*
* \param [in] u8Param 未使用
*
* \retval 无
*/
void Adt_IRQHandler(uint8_t u8Param)
{
uint8_t u8Adt = u8Param - 4;
volatile M0P_ADT_TypeDef *pstcM0PAdt = (M0P_ADT_TypeDef *)((uint32_t)M0P_ADT0+0x400*u8Adt);
if (TRUE == pstcM0PAdt->IFR_f.CMAF)
{
if (NULL != pfnAdtIrqCbk[u8Adt][AdtCMAIrq])
{
pfnAdtIrqCbk[u8Adt][AdtCMAIrq]();
}
pstcM0PAdt->ICLR = ~(1<<AdtCMAIrq);
}
if (TRUE == pstcM0PAdt->IFR_f.CMBF)
{
if (NULL != pfnAdtIrqCbk[u8Adt][AdtCMBIrq])
{
pfnAdtIrqCbk[u8Adt][AdtCMBIrq]();
}
pstcM0PAdt->ICLR = ~(1<<AdtCMBIrq);
}
if (TRUE == pstcM0PAdt->IFR_f.CMCF)
{
if (NULL != pfnAdtIrqCbk[u8Adt][AdtCMCIrq])
{
pfnAdtIrqCbk[u8Adt][AdtCMCIrq]();
}
pstcM0PAdt->ICLR = ~(1<<AdtCMCIrq);
}
if (TRUE == pstcM0PAdt->IFR_f.CMDF)
{
if (NULL != pfnAdtIrqCbk[u8Adt][AdtCMDIrq])
{
pfnAdtIrqCbk[u8Adt][AdtCMDIrq]();
}
pstcM0PAdt->ICLR = ~(1<<AdtCMDIrq);
}
if (TRUE == pstcM0PAdt->IFR_f.OVFF)
{
if (NULL != pfnAdtIrqCbk[u8Adt][AdtOVFIrq])
{
pfnAdtIrqCbk[u8Adt][AdtOVFIrq]();
}
pstcM0PAdt->ICLR = ~(1<<AdtOVFIrq);
}
if (TRUE == pstcM0PAdt->IFR_f.UDFF)
{
if (NULL != pfnAdtIrqCbk[u8Adt][AdtUDFIrq])
{
pfnAdtIrqCbk[u8Adt][AdtUDFIrq]();
}
pstcM0PAdt->ICLR = ~(1<<AdtUDFIrq);
}
if (TRUE == pstcM0PAdt->IFR_f.DTEF)
{
if (NULL != pfnAdtIrqCbk[u8Adt][AdtDTEIrq])
{
pfnAdtIrqCbk[u8Adt][AdtDTEIrq]();
}
pstcM0PAdt->ICLR = ~(1<<AdtDTEIrq);
}
if (TRUE == pstcM0PAdt->IFR_f.SAMLF)
{
if (NULL != pfnAdtIrqCbk[u8Adt][AdtSAMLIrq])
{
pfnAdtIrqCbk[u8Adt][AdtSAMLIrq]();
}
pstcM0PAdt->ICLR = ~(1<<AdtSAMLIrq);
}
if (TRUE == pstcM0PAdt->IFR_f.SAMHF)
{
if (NULL != pfnAdtIrqCbk[u8Adt][AdtSAMHIrq])
{
pfnAdtIrqCbk[u8Adt][AdtSAMHIrq]();
}
pstcM0PAdt->ICLR = ~(1<<AdtSAMHIrq);
}
}
/**
* \brief
* 配置中断
*
* \param [in] enAdtUnit ADV Timer通道选择(TIM4、TIM5、TIM6)
* \param [in] enAdtIrq 中断类型
* \param [in] bEn 中断使能
* \param [in] pfnIrqCalbak 回调函数指针
*
* \retval en_result_t Ok: 配置成功
* \retval en_result_t ErrorInvalidParameter: 无效参数
*/
en_result_t Adt_ConfigIrq(en_adt_unit_t enAdtUnit,
en_adt_irq_type_t enAdtIrq,
boolean_t bEn)
{
uint32_t u32Val;
volatile M0P_ADT_TypeDef *pstcM0PAdt = (M0P_ADT_TypeDef *)((uint32_t)M0P_ADT0+0x400*enAdtUnit);
if (AdTIM6 < enAdtUnit)
{
return ErrorInvalidParameter;
}
//pfnAdtIrqCbk[enAdtUnit][enAdtIrq] =
- 1
- 2
- 3
- 4
- 5
- 6
前往页