/******************************************************************************
*
* [url=home.php?mod=space&uid=247401]@brief[/url] providing APIs for configuring ACMP.
*
*******************************************************************************
*
* provide APIs for configuring ACMP
******************************************************************************/
#include "common.h"
#include "acmp.h"
/******************************************************************************
* Global variables
******************************************************************************/
/******************************************************************************
* Constants and macros
******************************************************************************/
/******************************************************************************
* Local types
******************************************************************************/
/******************************************************************************
* Local function prototypes
******************************************************************************/
/******************************************************************************
* Local variables
******************************************************************************/
ACMP_CallbackPtr ACMP_Callback[2] = {(ACMP_CallbackPtr)NULL};
/******************************************************************************
* Local functions
******************************************************************************/
/******************************************************************************
* Global functions
******************************************************************************/
void ACMP0_Isr(void);
void ACMP1_Isr(void);
/******************************************************************************
* ACMP api list.
*
*//*! @addtogroup acmp_api_list
* @{
*******************************************************************************/
/*****************************************************************************//*!
*
* [url=home.php?mod=space&uid=72445]@[/url] 按每个控制领域初始化ACMP
*
* @ 参数 pACMPx 指向其中一个ACMP寄存器的基地址
* @ 参数 pConfig 指向配置结构体.
*
* @ 无返回
*
*****************************************************************************/
void ACMP_Init(ACMP_Type *pACMPx, ACMP_ConfigType *pConfig)
{
if(ACMP0 == pACMPx)
{
/*使能APCM总线时钟*/
SIM->SCGC |= SIM_SCGC_ACMP0_MASK;
/* 使能APCM中断*/
if(pConfig->sCtrlStatus.bits.bIntEn)
NVIC_EnableIRQ(ACMP0_IRQn);
}
else
{
SIM->SCGC |= SIM_SCGC_ACMP1_MASK;
if(pConfig->sCtrlStatus.bits.bIntEn)
NVIC_EnableIRQ(ACMP1_IRQn);
}
/*ACMP正输入和负输入的选择不必相同*/
pACMPx->C0 = pConfig->sPinSelect.byte; /*选择ACMP的输入*/
ACMP_ConfigDAC(pACMPx, &pConfig->sDacSet ); /*设置ACMP内部DAC*/
//pACMPx->C1 = pConfig->sDacSet.byte;
pACMPx->C2 = pConfig->sPinEnable.byte; /*ACMP输入引脚使能*/
pACMPx->CS = pConfig->sCtrlStatus.byte; /*配置ACMP控制和状态寄存器*/
}
/*****************************************************************************//*!
*
* @ 向ACMPx_C1寄存器写数据,配置ACMP内部DAC.
*
* @ 参数 pACMPx 指向其中一个ACMP寄存器基地址.
* @ 参数 pDACConfig 指向 ACMP DAC 控制结构体.
*
* @ 无返回.
*
*
*****************************************************************************/
void ACMP_ConfigDAC(ACMP_Type *pACMPx, ACMP_DACType *pDACConfig)
{
pACMPx->C1 = pDACConfig->byte;
}
/*****************************************************************************//*!
*
* @ 复位ACMP模块,使其恢复到默认状态
*
* @ 参数 pACMPx 指向其中一个ACMP寄存器基地址.
*
* @ 无返回
*
*
*****************************************************************************/
void ACMP_DeInit(ACMP_Type *pACMPx)
{
if(ACMP0 == pACMPx)
{
if(pACMPx->CS & ACMP_CS_ACIE_MASK)
NVIC_DisableIRQ(ACMP0_IRQn); /*禁用ACMP中断*/
}
else
{
if(pACMPx->CS & ACMP_CS_ACIE_MASK)
NVIC_DisableIRQ(ACMP1_IRQn);
}
/*寄存器恢复默认值*/
pACMPx->CS = 0;
pACMPx->C0 = 0;
pACMPx->C1 = 0;
pACMPx->C2 = 0;
/*禁用ACMP模块的总线时钟*/
if(ACMP0 == pACMPx)
{
SIM->SCGC &= ~SIM_SCGC_ACMP0_MASK;
}
else
{
SIM->SCGC &= ~SIM_SCGC_ACMP1_MASK;
}
}
/*****************************************************************************//*!
*
* @ 设置ACMP的回调函数,通过中断服务函数调用
*
* @ 参数 pACMPx 指向ACMP模块基地址
* @ 参数 pfnCallback 指向回调函数
*
* @ 无返回.
*
*
*****************************************************************************/
void ACMP_SetCallback(ACMP_Type *pACMPx, ACMP_CallbackPtr pfnCallback)
{
if(ACMP0 == pACMPx)
{
ACMP_Callback[0] = pfnCallback;
}
else
{
ACMP_Callback[1] = pfnCallback;
}
}
/*! @} End of acmp_api_list */
/*****************************************************************************//*!
*
* @ ACMP0 中断服务函数.
*
* @ 参数 无.
*
* @ 无返回.
*
*
*****************************************************************************/
void ACMP0_Isr(void)
{
if(ACMP_Callback[0])
{
ACMP_Callback[0](); /*调用回调函数*/
}
}
/*****************************************************************************//*!
*
* @ ACMP1 中断函数.
*
* @ 参数无
*
* @ 无返回
*
* @ Pass/ Fail criteria: none.
*
*****************************************************************************/
void ACMP1_Isr(void)
{
if(ACMP_Callback[1])
{
ACMP_Callback[1](); /*调用回调函数*/
}
}
|