/******************************************************************************** **** Copyright (C), 2019, Fortior Technology Co., Ltd. **** ******************************************************************************** File Name : CMP.c Author : Bruce HW&RD Date : 2019-09-11 Description : .C file function description Version : 1.0 Function List : Record : 1.Date : 2019-09-11 Author : Bruce HW&RD Modification: Created file ********************************************************************************/ #include "CMP.h" #include "FU68xx_5_MCU.h" #include "Customer.h" #include "Parameter.h" void CMP0_Init(void) { /******CMP0/1/2 端口模拟功能设置*******/ SetBit(P1_AN, PIN4); //CMP0 Pin设置为模拟模式 + SetBit(P1_AN, PIN6); //CMP1 Pin设置为模拟模式 + SetBit(P2_AN, PIN1); //CMP2 Pin设置为模拟模式 + ClrBit(P1_PU, PIN4); //P14上拉关闭 ClrBit(CMP_CR0, CMP2IM1); //CMP2中断模式 ClrBit(CMP_CR0, CMP2IM0); //00-->No Interrupt 01-->Rising 10-->Falling 11-->Rising/Falling ClrBit(CMP_CR0, CMP1IM1); //CMP1中断模式 ClrBit(CMP_CR0, CMP1IM0); //00-->No Interrupt 01-->Rising 10-->Falling 11-->Rising/Falling ClrBit(CMP_CR0, CMP0IM1); //CMP0中断模式 ClrBit(CMP_CR0, CMP0IM0); //00-->No Interrupt 01-->Rising 10-->Falling 11-->Rising/Falling SetBit(CMP_CR1, CMP0HYS2); //CMP0迟滞电压配置 ClrBit(CMP_CR1, CMP0HYS1); //111-->±12mV 110-->+12mV 101-->-12mV 100-->±6mV ClrBit(CMP_CR1, CMP0HYS0); //011-->+6mV 010-->-6mV 001-->±3mV 000-->No HYS ClrBit(CMP_CR2, CMP0MOD1); //00-->无内置电阻3比较器 01-->有内置电阻3比较器模式 SetBit(CMP_CR2, CMP0MOD0); //10-->3差分比较器 11-->2比较器 ClrBit(CMP_CR2, CMP0SEL1); //00-->3比较器轮询 01-->P14+固定选择CMP0OUT ClrBit(CMP_CR2, CMP0SEL0); //10-->P16+固定选择CMP1OUT 11-->P21+固定选择CMP2OUT ClrBit(CMP_CR2, CMP0CSEL1); //00-->正常轮询(0.66us) 01-->快速轮询(0.33us) ClrBit(CMP_CR2, CMP0CSEL0); //10-->低速轮询(2.67us) 11-->偏低速轮询(1.33us) ClrBit(CMP_CR3, CMPSEL2); //011-->P07作为CMP2输出 SetBit(CMP_CR3, CMPSEL1); //010-->P07作为CMP1输出 SetBit(CMP_CR3, CMPSEL0); //001-->P07作为CMP0输出 ClrBit(CMP_CR4, CMP0_FS); //CMP1/2功能转移 仅CMP0_MOD=01时有效 SetBit(CMP_CR2, CMP0EN); //CMP0 Enable /****************************************************************/ ClrBit(IP1, PCMP1); ClrBit(IP1, PCMP0); /***********************比较器采样设置***************************/ CMP_SAMR = 0x42; //延迟开启采样时间[7:4]&关闭采样时间[3:0] //延迟时间= CSOND x 41.67 x 8ns CSOND 必须>= CSOFFD SetBit(CMP_CR3, SAMSEL1); //CMP0/1/2 & ADC 采样时机配置 ClrBit(CMP_CR3, SAMSEL0); //00-->0N&0FF采样,无延迟 01-->0FF采样,延迟CMP_SAMR //10-->0N采样,延迟CMP_SAMR 11-->0N&0FF采样,延迟CMP_SAMR ClrBit(CMP_CR3, CMPDTEN); //比较器死区采样使能 0-->Disable 1-->Enable ClrBit(CMP_CR3, DBGSEL1); //DEBUG信号选择-->输出至P01 SetBit(CMP_CR3, DBGSEL0); //00-->Disable 01-->方波屏蔽续流结束和检测到过零点信号 //10-->ADC trigger信号 11-->比较器采样区间 /****************************************************************/ } /***************************************************************************** Function : CMP3_Init Description : CMP3_INIT Input : void Output : None Return : Others : Record 1.Date : 20190320 Author : Bruce HW&RD Modification: Created function *****************************************************************************/ void CMP3_Init(void) { /******CMP3 端口模拟功能设置*******/ #if (Shunt_Resistor_Mode == Single_Resistor) { SetBit(P2_AN, P27); //CMP3 Pin设置为模拟模式 + ClrBit(CMP_CR1, CMP3MOD1); //00-->P27-单比较器模式 01-->P20/P23-双比较器模式 ClrBit(CMP_CR1, CMP3MOD0); //1X-->P20/P23/P27-三比较器模式 } #elif (Shunt_Resistor_Mode == Double_Resistor) { SetBit(P2_AN, P27); //CMP3 Pin设置为模拟模式 + ClrBit(CMP_CR1, CMP3MOD1); //00-->P27-单比较器模式 01-->P20/P23-双比较器模式 ClrBit(CMP_CR1, CMP3MOD0); //1X-->P20/P23/P27-三比较器模式 } #elif (Shunt_Resistor_Mode == Three_Resistor) { SetBit(P2_AN, P27 | P23 | P20); //CMP3 Pin设置为模拟模式 + SetBit(CMP_CR1, CMP3MOD1); //00-->P27-单比较器模式 01-->P20/P23-双比较器模式 ClrBit(CMP_CR1, CMP3MOD0); //1X-->P20/P23/P27-三比较器模式 } #endif //end Shunt_Resistor_Mode #if (Compare_Mode == Compare_Hardware) { /**P2.6使能其模拟功能,使能数字输出**/ SetBit(P2_AN, P26); ClrBit(P2_OE, P26); ClrBit(DAC_CR, DAC0_1EN); } #else { /**P2.6使能其模拟功能,使能数字输出**/ ClrBit(P2_AN, P26); ClrBit(P2_OE, P26); /****************************** 0: 正常模式,DAC输出电压范围为0到VREF 1: 半电压转换模式,DAC输出电压范围为VHALF到VREF ****************************/ ClrBit(DAC_CR, DACMOD); /**********设置DAC过流值*****************/ if (DAC_OvercurrentValue < 255) { DAC0_DR = (uint8)DAC_OvercurrentValue; } else { DAC0_DR = 255; } /**********DAC0 Enable******************/ SetBit(DAC_CR, DAC0_1EN); } #endif //end Compare_Mode SetBit(CMP_CR1, CMP3HYS); // CMP3 Hysteresis voltage Disable /* --------------------------------------------------------------------------------- 触发硬件保护后硬件关闭驱动输出MOE配置 00--MOE不自动清零 01--MOE自动清零 ----------------------------------------------------------------------------------*/ ClrBit(EVT_FILT, MOEMD1); SetBit(EVT_FILT, MOEMD0); /* ---------------------------------------------------------------------------------- 母线电流保护时间滤波宽度 00-不滤波 01-6cpu clock 10-12cpu clock 11-24cpu clock -----------------------------------------------------------------------------------*/ SetBit(EVT_FILT, EFDIV1); SetBit(EVT_FILT, EFDIV0); SetBit(CMP_CR1, CMP3EN); //CMP3 Enable } /***************************************************************************** Function : CMP3_Interrupt_Init Description : CMP3中断配置 Input : void Output : None Return : Others : Record 1.Date : 20190320 Author : Bruce HW&RD Modification: Created function *****************************************************************************/ void CMP3_Interrupt_Init(void) { ClrBit(CMP_SR, CMP3IF); /* ------------------------------------------------------------------------ 比较器中断模式配置 00: 不产生中断 01: 上升沿产生中断 10: 下降沿产生中断 11: 上升/下降沿产生中断 ------------------------------------------------------------------------*/ ClrBit(CMP_CR0, CMP3IM1); SetBit(CMP_CR0, CMP3IM0); SetBit(IP3, PCMP31); SetBit(IP3, PCMP30); // 中断优先级别3 } void CMP5_Init(void) { SetBit(P1_AN, P13); // CMP3 /* ------------------------------------------------------------------------------------------------- 电流保护时间滤波宽度 00-不滤波 01-4cpu clock 10-8cpu clock 11-16cpu clock -------------------------------------------------------------------------------------------------*/ SetReg(PFC_CR0, CMP5DIV1 | CMP5DIV0, CMP5DIV0); // 限流滤波选择10 330US /**********使能DAC******************/ SetBit(DAC_CR, DAC2EN ); /**********设置DAC过流值*****************/ DAC2_DR = DAC_PFCOvercurrentValue; /*比较器使能-------------------------------------------------------------------------------------*/ SetBit(CMP_CR4, CMP5EN); }