/****************************************************************************** * * [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](); /*调用回调函数*/ } }
举报
本版积分规则 发表回复 回帖并转播 回帖后跳转到最后一页
20
113
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注电源系统设计
扫码关注21ic项目外包
扫码浏览21ic手机版
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才
京公网安备 11010802024343号