1 /* SPDX-License-Identifier: BSD-3-Clause */ 2 /* 3 * Copyright (c) 2020-2021 Rockchip Electronics Co., Ltd. 4 */ 5 6 #include "hal_conf.h" 7 8 #ifdef HAL_PWM_MODULE_ENABLED 9 10 /** @addtogroup RK_HAL_Driver 11 * @{ 12 */ 13 14 /** @addtogroup PWM 15 * @{ 16 */ 17 18 #ifndef __HAL_PWM_H 19 #define __HAL_PWM_H 20 21 #include "hal_def.h" 22 23 /***************************** MACRO Definition ******************************/ 24 /** @defgroup PWM_Exported_Definition_Group1 Basic Definition 25 * @{ 26 */ 27 28 #define HAL_PWM_NUM_CHANNELS (HAL_ARRAY_SIZE(((struct PWM_REG *)0)->CHANNELS)) 29 #define PWM_PWRMATCH_MAX_COUNT (10) 30 31 /***************************** Structure Definition **************************/ 32 33 typedef enum { 34 HAL_PWM_ONE_SHOT = 0, 35 HAL_PWM_CONTINUOUS, 36 HAL_PWM_CAPTURE, 37 } ePWM_Mode; 38 39 /** 40 * @brief PWM HW information definition 41 */ 42 struct HAL_PWM_DEV { 43 struct PWM_REG *pReg; 44 uint32_t clkID; 45 uint32_t clkGateID; 46 uint32_t pclkGateID; 47 IRQn_Type irqNum; 48 }; 49 50 /** 51 * @brief PWM handle Structure definition 52 */ 53 struct HAL_PWM_CONFIG { 54 uint8_t channel; 55 uint32_t periodNS; 56 uint32_t dutyNS; 57 bool polarity; 58 }; 59 60 /** 61 * @brief PWM capture data 62 */ 63 struct PWM_CAPTURE { 64 uint32_t period; 65 bool pol; 66 bool active; 67 }; 68 69 /** 70 * @brief PWM match data 71 */ 72 struct PWM_MATCH { 73 uint32_t match[PWM_PWRMATCH_MAX_COUNT]; 74 uint8_t matchCount; 75 uint16_t lpreMin; 76 uint16_t lpreMax; 77 uint16_t hpreMin; 78 uint16_t hpreMax; 79 uint16_t ldMin; 80 uint16_t ldMax; 81 uint16_t hdZeroMin; 82 uint16_t hdZeroMax; 83 uint16_t hdOneMin; 84 uint16_t hdOneMax; 85 }; 86 87 /** 88 * @brief PWM Handle Structure definition 89 */ 90 91 struct PWM_HANDLE { 92 struct PWM_REG *pReg; 93 uint32_t freq; 94 ePWM_Mode mode[HAL_PWM_NUM_CHANNELS]; 95 struct PWM_CAPTURE result[HAL_PWM_NUM_CHANNELS]; 96 }; 97 98 /** 99 * @} 100 */ 101 102 /***************************** Function Declare ******************************/ 103 /** @defgroup PWM_Public_Function_Declare Public Function Declare 104 * @{ 105 */ 106 107 HAL_Status HAL_PWM_IRQHandler(struct PWM_HANDLE *pPWM); 108 HAL_Status HAL_PWM_SetConfig(struct PWM_HANDLE *pPWM, uint8_t channel, 109 const struct HAL_PWM_CONFIG *config); 110 HAL_Status HAL_PWM_SetOneshot(struct PWM_HANDLE *pPWM, uint8_t channel, uint32_t count); 111 HAL_Status HAL_PWM_SetCapturedFreq(struct PWM_HANDLE *pPWM, uint8_t channel, uint32_t freq); 112 HAL_Status HAL_PWM_SetMatch(struct PWM_HANDLE *pPWM, uint8_t channel, const struct PWM_MATCH *data); 113 ePWM_Mode HAL_PWM_GetMode(struct PWM_HANDLE *pPWM, uint8_t channel); 114 HAL_Status HAL_PWM_Enable(struct PWM_HANDLE *pPWM, uint8_t channel, ePWM_Mode mode); 115 HAL_Status HAL_PWM_Disable(struct PWM_HANDLE *pPWM, uint8_t channel); 116 HAL_Status HAL_PWM_Init(struct PWM_HANDLE *pPWM, struct PWM_REG *pReg, uint32_t freq); 117 HAL_Status HAL_PWM_DeInit(struct PWM_HANDLE *pPWM); 118 119 /** @} */ 120 121 #endif 122 123 /** 124 * @} 125 */ 126 127 /** 128 * @} 129 */ 130 131 #endif /* HAL_PWM_MODULE_ENABLED */ 132