/** * @file pwm.h * @author chipsea * @brief * @version 0.1 * @date 2020-11-30 * @copyright Copyright (c) 2020, CHIPSEA Co., Ltd. * @note */ /******************************************************************************* * @file pwm.h * @brief Contains all functions support for pwm driver * @version 0.0 * @date 30. Oct. 2017 * @author Ding * * *******************************************************************************/ #ifndef __PWM__H__ #define __PWM__H__ #ifdef __cplusplus extern "C" { #endif #include "types.h" #include "gpio.h" #define PWM_ENABLE_ALL do{\ AP_PWM->pwmen |= BIT(0);\ AP_PWM->pwmen |= BIT(4);\ }while(0) #define PWM_DISABLE_ALL do{\ AP_PWM->pwmen &= ~BIT(0);\ AP_PWM->pwmen &= ~BIT(4);\ }while(0) #define PWM_ENABLE_CH_012 do{\ AP_PWM->pwmen |= BIT(8);\ AP_PWM->pwmen |= BIT(9);\ }while(0) #define PWM_DISABLE_CH_012 do{\ AP_PWM->pwmen &= ~BIT(8);\ AP_PWM->pwmen &= ~BIT(9);\ }while(0) #define PWM_ENABLE_CH_345 do{\ AP_PWM->pwmen |= BIT(10);\ AP_PWM->pwmen |= BIT(11);\ }while(0) #define PWM_DISABLE_CH_345 do{\ AP_PWM->pwmen &= ~BIT(10);\ AP_PWM->pwmen &= ~BIT(11);\ }while(0) #define PWM_ENABLE_CH_01 do{\ AP_PWM->pwmen |= BIT(12);\ AP_PWM->pwmen |= BIT(13);\ }while(0) #define PWM_DISABLE_CH_01 do{\ AP_PWM->pwmen &= ~BIT(12);\ AP_PWM->pwmen &= ~BIT(13);\ }while(0) #define PWM_ENABLE_CH_23 do{\ AP_PWM->pwmen |= BIT(14);\ AP_PWM->pwmen |= BIT(15);\ }while(0) #define PWM_DISABLE_CH_23 do{\ AP_PWM->pwmen &= ~BIT(14);\ AP_PWM->pwmen &= ~BIT(15);\ }while(0) #define PWM_ENABLE_CH_45 do{\ AP_PWM->pwmen |= BIT(16);\ AP_PWM->pwmen |= BIT(17);\ }while(0) #define PWM_DISABLE_CH_45 do{\ AP_PWM->pwmen &= ~BIT(16);\ AP_PWM->pwmen &= ~BIT(17);\ }while(0) #define PWM_INSTANT_LOAD_CH(n) subWriteReg(&(AP_PWM_CTRL(n)->ctrl0),31,31,1) #define PWM_NO_INSTANT_LOAD_CH(n) subWriteReg(&(AP_PWM_CTRL(n)->ctrl0),31,31,0) #define PWM_LOAD_CH(n) subWriteReg(&(AP_PWM_CTRL(n)->ctrl0),16,16,1) #define PWM_NO_LOAD_CH(n) subWriteReg(&(AP_PWM_CTRL(n)->ctrl0),16,16,0) #define PWM_SET_DIV(n,v) subWriteReg(&(AP_PWM_CTRL(n)->ctrl0),14,12,v) #define PWM_SET_MODE(n,v) subWriteReg(&(AP_PWM_CTRL(n)->ctrl0),8,8,v) #define PWM_SET_POL(n,v) subWriteReg(&(AP_PWM_CTRL(n)->ctrl0),4,4,v) #define PWM_ENABLE_CH(n) subWriteReg(&(AP_PWM_CTRL(n)->ctrl0),0,0,1) #define PWM_DISABLE_CH(n) subWriteReg(&(AP_PWM_CTRL(n)->ctrl0),0,0,0) #define PWM_SET_CMP_VAL(n,v) subWriteReg(&(AP_PWM_CTRL(n)->ctrl1),31,16,v) #define PWM_SET_TOP_VAL(n,v) subWriteReg(&(AP_PWM_CTRL(n)->ctrl1),15,0,v) #define PWM_GET_CMP_VAL(n) ((AP_PWM_CTRL(n)->ctrl1 & 0xFFFF0000) >> 8) #define PWM_GET_TOP_VAL(n) AP_PWM_CTRL(n)->ctrl1 & 0x0000FFFF /************************************************************* * @brief enum variable, the number of PWM channels supported * */ typedef enum{ PWM_CH0 = 0, PWM_CH1 = 1, PWM_CH2 = 2, PWM_CH3 = 3, PWM_CH4 = 4, PWM_CH5 = 5 }PwmCh_t; /************************************************************* * @brief enum variable used for PWM clock prescaler * */ typedef enum{ PWM_CLK_NO_DIV = 0, PWM_CLK_DIV_2 = 1, PWM_CLK_DIV_4 = 2, PWM_CLK_DIV_8 = 3, PWM_CLK_DIV_16 = 4, PWM_CLK_DIV_32 = 5, PWM_CLK_DIV_64 = 6, PWM_CLK_DIV_128 = 7 }PwmClkDiv_t; /************************************************************* * @brief enum variable used for PWM work mode setting * */ typedef enum{ PWM_CNT_UP = 0, //!