/******************************************************************************** **** Copyright (C), 2019, Fortior Technology Co., Ltd. **** ******************************************************************************** * File Name : DRIVER.c * Author : Bruce HW&RD * Date : 2019-03-29 * Description : .C file function description * Version : 1.0 * Function List : * * Record : * 1.Date : 2019-03-29 * Author : Bruce HW&RD * Modification: Created file ********************************************************************************/ #include "AddFunction.h" #include "Driver.h" #include "Parameter.h" #include "customer.h" #include "FU68xx_5_MCU.h" /***************************************************************************** * Function : Driver_Init * Description : Driver初始化 * Input : void * Output : None * Return : * Others : * Record * 1.Date : 20190329 * Author : Bruce HW&RD * Modification: Created function *****************************************************************************/ void Driver_Init(void) { DRV_ARR = PWM_VALUE_LOAD ; // 载波频率的周期值 DRV_DTR = PWM_LOAD_DEADTIME; // 死区时间 DRV_DR = 0; DRV_CMR = 0x0abf; //UH/VH/WH UL/VL/WL 互补 DRV_OUT = 0x00; //空闲电平,默认高电平有效 /*驱动有效电平和空闲电平*/ #if (PWM_Level_Mode == High_Level) { ClrBit(PI_CR , HINV); // 反相关闭 ClrBit(PI_CR , LINV); // 反相关闭 } #elif (PWM_Level_Mode == Low_Level) { SetBit(PI_CR , HINV); // 反相打开 SetBit(PI_CR , LINV); // 反相打开 } #elif (PWM_Level_Mode == UP_H_DOWN_L) { ClrBit(PI_CR , HINV); // 反相关闭 SetBit(PI_CR , LINV); // 反相打开 } #elif (PWM_Level_Mode == UP_L_DOWN_H) { SetBit(PI_CR , HINV); // 反相打开 ClrBit(PI_CR , LINV); // 反相关闭 } #endif //end PWM_Level_Mode // SetBit(DRV_SR , FGIE); //FG中断使能 0-->Disable 1-->Enable /*清中断标志位,使能中断,配置比较值,设置中断优先级*/ ClrBit(DRV_SR , DCIF); //清除DRV中断标志位 /************************************************** DRV比较匹配中断模式 当计数值等于DRV_COMR时,根据DCIM的设置判断是否产生中断标记 00:不产生中断 01:上升方向 10:下降方向 11:上升/下降方向 *************************************************/ SetBit(DRV_SR , DCIM1); ClrBit(DRV_SR , DCIM0); /*设置DRV计数器的比较匹配值,当DRV计数值与COMR相等时,根据DRV_SR寄存器的DCIM是否产生比较匹配事件*/ DRV_COMR = (PWM_VALUE_LOAD >> 3); SetBit(IP0 , PDRV1); SetBit(IP0 , PDRV0); ClrBit(DRV_SR , DCIP); //0-->1个计数周期产生中断 1-->2个计数周期产生中断 ClrBit(DRV_CR , FOCEN); /*MESEL为0,ME模块工作在BLDC模式 MESEL为1,ME模块工作在FOC/SVPWM/SPWM模式*/ SetBit(DRV_CR , MESEL); SetBit(DRV_CR , DRVEN); //计数器使能 0-->Disable 1-->Enable ClrBit(DRV_CR , DRPE); //计数器比较值预装载使能 0-->Disable 1-->Enable SetBit(DRV_CR , DRVOE); //Driver输出使能0-->Disable 1-->Enable }