1 /******************************************************************************* 2 * Copyright (C) 2018, Huada Semiconductor Co.,Ltd All rights reserved. 3 * 4 * This software is owned and published by: 5 * Huada Semiconductor Co.,Ltd ("HDSC"). 6 * 7 * BY DOWNLOADING, INSTALLING OR USING THIS SOFTWARE, YOU AGREE TO BE BOUND 8 * BY ALL THE TERMS AND CONDITIONS OF THIS AGREEMENT. 9 * 10 * This software contains source code for use with HDSC 11 * components. This software is licensed by HDSC to be adapted only 12 * for use in systems utilizing HDSC components. HDSC shall not be 13 * responsible for misuse or illegal use of this software for devices not 14 * supported herein. HDSC is providing this software "AS IS" and will 15 * not be responsible for issues arising from incorrect user implementation 16 * of the software. 17 * 18 * Disclaimer: 19 * HDSC MAKES NO WARRANTY, EXPRESS OR IMPLIED, ARISING BY LAW OR OTHERWISE, 20 * REGARDING THE SOFTWARE (INCLUDING ANY ACOOMPANYING WRITTEN MATERIALS), 21 * ITS PERFORMANCE OR SUITABILITY FOR YOUR INTENDED USE, INCLUDING, 22 * WITHOUT LIMITATION, THE IMPLIED WARRANTY OF MERCHANTABILITY, THE IMPLIED 23 * WARRANTY OF FITNESS FOR A PARTICULAR PURPOSE OR USE, AND THE IMPLIED 24 * WARRANTY OF NONINFRINGEMENT. 25 * HDSC SHALL HAVE NO LIABILITY (WHETHER IN CONTRACT, WARRANTY, TORT, 26 * NEGLIGENCE OR OTHERWISE) FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT 27 * LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, 28 * LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS) ARISING FROM USE OR 29 * INABILITY TO USE THE SOFTWARE, INCLUDING, WITHOUT LIMITATION, ANY DIRECT, 30 * INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL DAMAGES OR LOSS OF DATA, 31 * SAVINGS OR PROFITS, 32 * EVEN IF Disclaimer HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 33 * YOU ASSUME ALL RESPONSIBILITIES FOR SELECTION OF THE SOFTWARE TO ACHIEVE YOUR 34 * INTENDED RESULTS, AND FOR THE INSTALLATION OF, USE OF, AND RESULTS OBTAINED 35 * FROM, THE SOFTWARE. 36 * 37 * This software may be replicated in part or whole for the licensed use, 38 * with the restriction that this Disclaimer and Copyright notice must be 39 * included with each copy of this software, whether used in part or whole, 40 * at all times. 41 */ 42 /******************************************************************************/ 43 /** \file pcnt.h 44 ** 45 ** Headerfile for PCNT functions 46 ** @link PCNT Group Some description @endlink 47 ** 48 ** History: 49 ** - 2018-04-15 Devi First Version 50 ** 51 ******************************************************************************/ 52 53 #ifndef __PCNT_H__ 54 #define __PCNT_H__ 55 56 /******************************************************************************* 57 * Include files 58 ******************************************************************************/ 59 #include "ddl.h" 60 #include "interrupts_hc32l136.h" 61 62 #ifdef __cplusplus 63 extern "C" 64 { 65 #endif 66 67 /** 68 ****************************************************************************** 69 ** \defgroup PCNTGroup (PCNT) 70 ** 71 ******************************************************************************/ 72 //@{ 73 74 /** 75 ******************************************************************************* 76 ** function prototypes. 77 ******************************************************************************/ 78 /** 79 ******************************************************************************* 80 ** \brief PCNT S1通道极性选择 81 ** \note 82 ******************************************************************************/ 83 typedef enum en_pcnt_s1sel 84 { 85 S1P_Noinvert = 0u, ///<<S1通道极性不取反 86 S1P_Invert = 1u, ///<<S1通道极性取反 87 }en_pcnt_s1sel_t; 88 89 /** 90 ******************************************************************************* 91 ** \brief PCNT S0通道极性选择 92 ** \note 93 ******************************************************************************/ 94 typedef enum en_pcnt_s0sel 95 { 96 S0P_Noinvert = 0u, ///<<S0通道极性不取反 97 S0P_Invert = 1u, ///<<S0通道极性取反 98 }en_pcnt_s0sel_t; 99 100 /** 101 ******************************************************************************* 102 ** \brief PCNT 计数方向选择 103 ** \note 104 ******************************************************************************/ 105 typedef enum en_pcnt_direcsel 106 { 107 Direct_Add = 0u, ///<<加计数 108 Direct_Sub = 1u, ///<<减计数 109 }en_pcnt_direcsel_t; 110 111 /** 112 ******************************************************************************* 113 ** \brief PCNT 计数时钟选择 114 ** \note 115 ******************************************************************************/ 116 typedef enum en_pcnt_clksel 117 { 118 CLK_Pclk = 1u, ///<<PCLK 119 CLK_Xtl = 2u, ///<<XTL 120 CLK_Rcl = 3u, ///<<RCL 121 }en_pcnt_clksel_t; 122 123 /** 124 ******************************************************************************* 125 ** \brief PCNT 脉冲计数模式选择 126 ** \note 127 ******************************************************************************/ 128 typedef enum en_pcnt_modesel 129 { 130 Single_Mode = 1u, ///<<单通道脉冲计数模式 131 Special_Mode = 2u, ///<<双通道非正交脉冲计数模式 132 Double_Mode = 3u, ///<<双通道正交脉冲计数模式 133 }en_pcnt_modesel_t; 134 135 /** 136 ****************************************************************************** 137 ** \brief PCNT 状态 138 *****************************************************************************/ 139 typedef enum en_pcnt_status 140 { 141 PCNT_S1E = 0x80, ///<S1通道脉冲解码错误 142 PCNT_S0E = 0x40, ///<S0通道脉冲解码错误 143 PCNT_BB = 0x20, ///<脉冲解码错误 144 PCNT_FE = 0x10, ///<采样周期脉冲解码错误 145 PCNT_DIR = 0x08, ///<反向改变中断 146 PCNT_TO = 0x04, ///<超时中断标识 147 PCNT_OV = 0x02, ///<上溢中断标识 148 PCNT_UF = 0x01, ///<下溢中断标识 149 }en_pcnt_status_t; 150 151 /** 152 ****************************************************************************** 153 ** \brief PCNT 整体配置结构体 154 *****************************************************************************/ 155 typedef struct stc_pcnt_config 156 { 157 en_pcnt_s1sel_t bS1Sel; ///< S1通道极性选择 158 en_pcnt_s0sel_t bS0Sel; ///< S0通道极性选择 159 en_pcnt_direcsel_t u8Direc; ///< 计数方向选择 160 en_pcnt_clksel_t u8Clk; ///< 计数时钟选择 161 en_pcnt_modesel_t u8Mode; ///< 脉冲计数模式选择 162 boolean_t bFLTEn; ///< 滤波控制使能 163 uint8_t u8FLTDep; ///< 滤波阀值 164 uint8_t u8FLTClk; ///< 滤波时钟 165 boolean_t bTOEn; ///< 超时使能 166 uint16_t u16TODep; ///< 超时阀值 167 uint8_t u8IrqStatus; ///< 中断方式 168 boolean_t bIrqEn; ///< 中断使能 169 func_ptr_t pfnIrqCb; ///< 中断回调函数 170 }stc_pcnt_config_t; 171 172 //PCNT 中断 173 void Pcnt_IRQHandler(void); 174 175 /****************************************************************************** 176 * Global variable declarations ('extern', definition in C source) 177 ******************************************************************************/ 178 179 /****************************************************************************** 180 * Global function prototypes (definition in C source) 181 ******************************************************************************/ 182 ///< PCNT初始化 183 en_result_t PCNT_Init(stc_pcnt_config_t* pstcPcntConfig); 184 ///< PCNT去初始化 185 void PCNT_DeInit(void); 186 ///< PCNT 参数设置 187 en_result_t PCNT_Parameter(uint8_t start,uint8_t end); 188 ///< PCNT 读取PCNT 方向 189 en_pcnt_direcsel_t PCNT_Direction(void); 190 ///< PCNT 读取PCNT 计数值 191 uint16_t PCNT_Count(void); 192 ///< PCNT 读取PCNT 溢出值 193 uint16_t PCNT_TopCount(void); 194 ///< PCNT 设置PCNT 195 void PCNT_Run(boolean_t work); 196 ///< PCNT获取状态 197 boolean_t PCNT_GetStatus(en_pcnt_status_t enStatus); 198 ///< PCNT清除状态 199 void PCNT_ClrStatus(en_pcnt_status_t enStatus); 200 ///< PCNT设置中断 201 void PCNT_SetIrqStatus(en_pcnt_status_t enStatus); 202 203 204 //@} // PCNT Group 205 206 #ifdef __cplusplus 207 #endif 208 209 #endif /* __PCNT_H__ */ 210 /******************************************************************************* 211 * EOF (not truncated) 212 ******************************************************************************/ 213 214 215