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 bt.h 44 ** 45 ** 基本定时器数据结构及API声明 46 ** @link BT Timer3 Group Some description @endlink 47 ** 48 ** History: 49 ** - 2018-04-29 Husj First Version 50 ** 51 *****************************************************************************/ 52 53 #ifndef __TIMER3_H__ 54 #define __TIMER3_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 Tim3Group Base Timer (BT) 70 ** 71 ******************************************************************************/ 72 //@{ 73 74 /******************************************************************************/ 75 /* Global pre-processor symbols/macros ('#define') */ 76 /******************************************************************************/ 77 78 /****************************************************************************** 79 * Global type definitions 80 ******************************************************************************/ 81 82 /** 83 ****************************************************************************** 84 ** \brief Timer3 通道定义 85 *****************************************************************************/ 86 typedef enum en_tim3_channel 87 { 88 Tim3CH0 = 0u, ///< Timer3通道0 89 Tim3CH1 = 1u, ///< Timer3通道1 90 Tim3CH2 = 2u, ///< Timer3通道2 91 }en_tim3_channel_t; 92 93 /** 94 ****************************************************************************** 95 ** \brief 工作模式选择数据类型重定义 (MODE)(模式0/1/23) 96 *****************************************************************************/ 97 typedef enum en_tim3_work_mode 98 { 99 Tim3WorkMode0 = 0u, ///< 定时器模式 100 Tim3WorkMode1 = 1u, ///< PWC模式 101 Tim3WorkMode2 = 2u, ///< 锯齿波模式 102 Tim3WorkMode3 = 3u, ///< 三角波模式 103 }en_tim3_work_mode_t; 104 105 /** 106 ****************************************************************************** 107 ** \brief 极性控制数据类型重定义 (GATE_P)(模式0) 108 *****************************************************************************/ 109 typedef enum en_tim3_m0cr_gatep 110 { 111 Tim3GatePositive = 0u, ///< 高电平有效 112 Tim3GateOpposite = 1u, ///< 低电平有效 113 }en_tim3_m0cr_gatep_t; 114 115 /** 116 ****************************************************************************** 117 ** \brief TIM3 预除频选择 (PRS)(模式0/1/23) 118 *****************************************************************************/ 119 typedef enum en_tim3_cr_timclkdiv 120 { 121 Tim3PCLKDiv1 = 0u, ///< Div 1 122 Tim3PCLKDiv2 = 1u, ///< Div 2 123 Tim3PCLKDiv4 = 2u, ///< Div 4 124 Tim3PCLKDiv8 = 3u, ///< Div 8 125 Tim3PCLKDiv16 = 4u, ///< Div 16 126 Tim3PCLKDiv32 = 5u, ///< Div 32 127 Tim3PCLKDiv64 = 6u, ///< Div 64 128 Tim3PCLKDiv256 = 7u, ///< Div 256 129 }en_tim3_cr_timclkdiv_t; 130 131 /** 132 ****************************************************************************** 133 ** \brief 计数/定时器功能选择数据类型重定义 (CT)(模式0/1/23) 134 *****************************************************************************/ 135 typedef enum en_tim3_cr_ct 136 { 137 Tim3Timer = 0u, ///< 定时器功能,计数时钟为内部PCLK 138 Tim3Counter = 1u, ///< 计数器功能,计数时钟为外部ETR 139 }en_tim3_cr_ct_t; 140 141 142 /** 143 ****************************************************************************** 144 ** \brief 定时器工作模式数据类型重定义 (MD)(模式0) 145 *****************************************************************************/ 146 typedef enum en_tim3_m0cr_md 147 { 148 Tim332bitFreeMode = 0u, ///< 32位计数器/定时器 149 Tim316bitArrMode = 1u, ///< 自动重装载16位计数器/定时器 150 }en_tim3_m0cr_md_t; 151 152 /** 153 ****************************************************************************** 154 ** \brief TIM3中断类型数据类型重定义(模式0/1/23) 155 *****************************************************************************/ 156 typedef enum en_tim3_irq_type 157 { 158 Tim3UevIrq = 0u, ///< 溢出/事件更新中断 159 Tim3CA0Irq = 2u, ///< CH0A捕获/比较中断(仅模式1/23存在) 160 Tim3CA1Irq = 3u, ///< CH1A捕获/比较中断(仅模式23存在) 161 Tim3CA2Irq = 4u, ///< CH2A捕获/比较中断(仅模式23存在) 162 Tim3CB0Irq = 5u, ///< CH0B捕获/比较中断(仅模式23存在) 163 Tim3CB1Irq = 6u, ///< CH1B捕获/比较中断(仅模式23存在) 164 Tim3CB2Irq = 7u, ///< CH2B捕获/比较中断(仅模式23存在) 165 Tim3CA0E = 8u, ///< CH0A捕获数据丢失标志(仅模式23存在)(不是中断) 166 Tim3CA1E = 9u, ///< CH1A捕获数据丢失标志(仅模式23存在)(不是中断) 167 Tim3CA2E = 10u, ///< CH2A捕获数据丢失标志(仅模式23存在)(不是中断) 168 Tim3CB0E = 11u, ///< CH0B捕获数据丢失标志(仅模式23存在)(不是中断) 169 Tim3CB1E = 12u, ///< CH1B捕获数据丢失标志(仅模式23存在)(不是中断) 170 Tim3CB2E = 13u, ///< CH2B捕获数据丢失标志(仅模式23存在)(不是中断) 171 Tim3BkIrq = 14u, ///< 刹车中断(仅模式23存在) 172 Tim3TrigIrq = 15u, ///< 触发中断(仅模式23存在) 173 }en_tim3_irq_type_t; 174 175 /** 176 ****************************************************************************** 177 ** \brief 测量开始结束数据类型重定义 (Edg1stEdg2nd)(模式1) 178 *****************************************************************************/ 179 typedef enum en_tim3_m1cr_Edge 180 { 181 Tim3PwcRiseToRise = 0u, ///< 上升沿到上升沿(周期) 182 Tim3PwcFallToRise = 1u, ///< 下降沿到上升沿(低电平) 183 Tim3PwcRiseToFall = 2u, ///< 上升沿到下降沿(高电平) 184 Tim3PwcFallToFall = 3u, ///< 下降沿到下降沿(周期) 185 }en_tim3_m1cr_Edge_t; 186 187 /** 188 ****************************************************************************** 189 ** \brief PWC测量测试模式选择数据类型重定义 (Oneshot)(模式1) 190 *****************************************************************************/ 191 typedef enum en_tim3_m1cr_oneshot 192 { 193 Tim3PwcCycleDetect = 0u, ///< PWC循环测量 194 Tim3PwcOneShotDetect = 1u, ///< PWC单次测量 195 }en_tim3_m1cr_oneshot_t; 196 197 /** 198 ****************************************************************************** 199 ** \brief PWC IA0选择数据类型重定义 (IA0S)(模式1) 200 *****************************************************************************/ 201 typedef enum en_tim3_m1_mscr_ia0s 202 { 203 Tim3IA0Input = 0u, ///< IAO输入 204 Tim3XORInput = 1u, ///< IA0 ETR GATE XOR(TIM0/1/2)/IA0 IA1 IA2 XOR(TIM3) 205 }en_tim3_m1_mscr_ia0s_t; 206 207 /** 208 ****************************************************************************** 209 ** \brief PWC IB0选择数据类型重定义 (IA0S)(模式1) 210 *****************************************************************************/ 211 typedef enum en_tim3_m1_mscr_ib0s 212 { 213 Tim3IB0Input = 0u, ///< IBO输入 214 Tim3TsInput = 1u, ///< 内部触发TS选择信号 215 }en_tim3_m1_mscr_ib0s_t; 216 217 /** 218 ****************************************************************************** 219 ** \brief 输出极性、输入相位 数据类型重定义 (CCPA0/CCPB0/ETP/BKP)(模式1/23) 220 *****************************************************************************/ 221 typedef enum en_tim3_port_polarity 222 { 223 Tim3PortPositive = 0u, ///< 正常输入输出 224 Tim3PortOpposite = 1u, ///< 反向输入输出 225 }en_tim3_port_polarity_t; 226 227 /** 228 ****************************************************************************** 229 ** \brief 滤波选择数据类型重定义 (FLTET/FLTA0/FLAB0)(模式1/23) 230 *****************************************************************************/ 231 typedef enum en_tim3_flt 232 { 233 Tim3FltNone = 0u, ///< 无滤波 234 Tim3FltPCLKCnt3 = 4u, ///< PCLK 3个连续有效 235 Tim3FltPCLKDiv4Cnt3 = 5u, ///< PCLK/4 3个连续有效 236 Tim3FltPCLKDiv16Cnt3 = 6u, ///< PCLK/16 3个连续有效 237 Tim3FltPCLKDiv64Cnt3 = 7u, ///< PCLK/64 3个连续有效 238 }en_tim3_flt_t; 239 240 /** 241 ****************************************************************************** 242 ** \brief 通道比较控制 数据类型重定义 (OCMA/OCMB)(模式23) 243 *****************************************************************************/ 244 typedef enum en_tim3_m23_fltr_ocm 245 { 246 Tim3ForceLow = 0u, ///< 强制为0 247 Tim3ForceHigh = 1u, ///< 强制为1 248 Tim3CMPForceLow = 2u, ///< 比较匹配时强制为0 249 Tim3CMPForceHigh = 3u, ///< 比较匹配时强制为1 250 Tim3CMPInverse = 4u, ///< 比较匹配时翻转电平 251 Tim3CMPOnePrdHigh = 5u, ///< 比较匹配时输出一个计数周期的高电平 252 Tim3PWMMode1 = 6u, ///< 通道控制为PWM mode 1 253 Tim3PWMMode2 = 7u, ///< 通道控制为PWM mode 2 254 }en_tim3_m23_fltr_ocm_t; 255 256 /** 257 ****************************************************************************** 258 ** \brief 主从模式TS数据类型重定义 (TS)(模式1/23) 259 *****************************************************************************/ 260 typedef enum en_tim3_mscr_ts 261 { 262 Tim3Ts0ETR = 0u, ///< ETR外部输入滤波后的相位选择信号 263 Tim3Ts1TIM0TRGO = 1u, ///< Timer0的TRGO输出信号 264 Tim3Ts2TIM1TRGO = 2u, ///< Timer1的TRGO输出信号 265 Tim3Ts3TIM2TRGO = 3u, ///< Timer2的TRGO输出信号 266 Tim3Ts4TIM3TRGO = 4u, ///< Timer3的TRGO输出信号 267 //Tim3Ts5IA0ED = 5u, ///< 无效 268 Tim3Ts6IAFP = 6u, ///< CH0A 外部输输入滤波后的相位选择信号 269 Tim3Ts7IBFP = 7u, ///< CH0B 外部输输入滤波后的相位选择信 270 }en_tim3_mscr_ts_t; 271 272 /** 273 ****************************************************************************** 274 ** \brief PWM输出模式选择数据类型重定义 (COMP)(模式23) 275 *****************************************************************************/ 276 typedef enum en_tim3_m23cr_comp 277 { 278 Tim3IndependentPWM = 0u, ///< 独立PWM输出 279 Tim3ComplementaryPWM = 1u, ///< 互补PWM输出 280 }en_tim3_m23cr_comp_t; 281 282 /** 283 ****************************************************************************** 284 ** \brief 计数方向选择数据类型重定义 (DIR)(模式23) 285 *****************************************************************************/ 286 typedef enum en_tim3_m23cr_dir 287 { 288 Tim3CntUp = 0u, ///< 向上计数 289 Tim3CntDown = 1u, ///< 向下计数 290 }en_tim3_m23cr_dir_t; 291 292 /** 293 ****************************************************************************** 294 ** \brief 计数方向选择数据类型重定义 (PWM2S)(模式23) 295 *****************************************************************************/ 296 typedef enum en_tim3_m23cr_pwm2s 297 { 298 Tim3DoublePointCmp = 0u, ///< 双点比较使能,使用CCRA,CCRB比较控制OCREFA输出 299 Tim3SinglePointCmp = 1u, ///< 单点比较使能,使用CCRA比较控制OCREFA输出 300 }en_tim3_m23cr_pwm2s_t; 301 302 /** 303 ****************************************************************************** 304 ** \brief GATE在PWM互补模式下捕获或比较功能 选择数据类型重定义 (CSG)(模式23) 305 *****************************************************************************/ 306 typedef enum en_tim3_m23cr_csg 307 { 308 Tim3PWMCompGateCmpOut = 0u, ///< 在PWM互补模式下,Gate作为比较输出 309 Tim3PWMCompGateCapIn = 1u, ///< 在PWM互补模式下,Gate作为捕获输入 310 }en_tim3_m23cr_csg_t; 311 312 313 /** 314 ****************************************************************************** 315 ** \brief 比较捕获寄存器 数据类型重定义 (CCR0A,CCR0B)(模式23) 316 *****************************************************************************/ 317 typedef enum en_tim3_m23_ccrx 318 { 319 Tim3CCR0A = 0u, ///< CCR0A比较捕获寄存器 320 Tim3CCR0B = 1u, ///< CCR0B比较捕获寄存器 321 Tim3CCR1A = 2u, ///< CCR1A比较捕获寄存器 322 Tim3CCR1B = 3u, ///< CCR1B比较捕获寄存器 323 Tim3CCR2A = 4u, ///< CCR2A比较捕获寄存器 324 Tim3CCR2B = 5u, ///< CCR2B比较捕获寄存器 325 }en_tim3_m23_ccrx_t; 326 327 /** 328 ****************************************************************************** 329 ** \brief OCREF清除源 选择数据类型重定义 (OCCS)(模式23) 330 *****************************************************************************/ 331 typedef enum en_tim3_m23ce_occs 332 { 333 Tim3OC_Ref_Clr = 0u, ///< 来自VC的OC_Ref_Clr 334 Tim3ETRf = 1u, ///< 外部ETRf 335 }en_tim3_m23ce_occs_t; 336 337 /** 338 ****************************************************************************** 339 ** \brief 比较匹配中断模式 选择数据类型重定义 (CIS/CISB)(模式23) 340 *****************************************************************************/ 341 typedef enum en_tim3_m23_cisa_cisb 342 { 343 Tim3CmpIntNone = 0u, ///< 无比较匹配中断 344 Tim3CmpIntRise = 1u, ///< 比较匹配上升沿中断 345 Tim3CmpIntFall = 2u, ///< 比较匹配下降沿中断 346 Tim3CmpIntRiseFall = 3u, ///< 比较匹配上升沿下降沿中断 347 }en_tim3_m23_cisa_cisb_t; 348 349 /** 350 ****************************************************************************** 351 ** \brief TIM3端口控制 - 刹车时CHx输出状态控制(BKSA/BKSB)(模式23) 352 ** 353 ** \note 354 ******************************************************************************/ 355 typedef enum en_tim3_m23_crchx_bks 356 { 357 Tim3CHxBksHiZ = 0u, ///< 刹车使能时,CHx端口输出高阻态 358 Tim3CHxBksNorm = 1u, ///< 刹车使能时,CHx端口正常输出 359 Tim3CHxBksLow = 2u, ///< 刹车使能时,CHx端口输出低电平 360 Tim3CHxBksHigh = 3u, ///< 刹车使能时,CHx端口输出高电平 361 }en_tim3_m23_crchx_bks_t; 362 363 /** 364 ****************************************************************************** 365 ** \brief TIM3端口控制 - CHx上升沿下降沿捕获(CRx/CFx)(模式23) 366 ** 367 ** \note 368 ******************************************************************************/ 369 typedef enum en_tim3_m23_crch0_cfx_crx 370 { 371 Tim3CHxCapNone = 0u, ///< CHx通道捕获禁止 372 Tim3CHxCapRise = 1u, ///< CHx通道上升沿捕获使能 373 Tim3CHxCapFall = 2u, ///< CHx通道下降沿捕获使能 374 Tim3CHxCapFallRise = 3u, ///< CHx通道上升沿下降沿捕获都使能 375 }en_tim3_m23_crch0_cfx_crx_t; 376 377 /** 378 ****************************************************************************** 379 ** \brief TIM3端口控制 - CHx比较捕获模式(CSA/CSB)(模式23) 380 ** 381 ** \note 382 ******************************************************************************/ 383 typedef enum en_tim3_m23_crch0_csa_csb 384 { 385 Tim3CHxCmpMode = 0u, ///< CHx通道设置为比较模式 386 Tim3CHxCapMode = 1u, ///< CHx通道设置为捕获模式 387 }en_tim3_m23_crch0_csa_csb_t; 388 389 /** 390 ****************************************************************************** 391 ** \brief 比较模式下 DMA比较触发选择 数据类型重定义 (CCDS)(模式23) 392 *****************************************************************************/ 393 typedef enum en_tim3_m23_mscr_ccds 394 { 395 Tim3CmpTrigDMA = 0u, ///< 比较匹配触发DMA 396 Tim3UEVTrigDMA = 1u, ///< 事件更新代替比较匹配触发DMA 397 }en_tim3_m23_mscr_ccds_t; 398 399 /** 400 ****************************************************************************** 401 ** \brief 主从模式选择 数据类型重定义 (MSM)(模式23) 402 *****************************************************************************/ 403 typedef enum en_tim3_m23_mscr_msm 404 { 405 Tim3SlaveMode = 0u, ///< 从模式 406 Tim3MasterMode = 1u, ///< 主模式 407 }en_tim3_m23_mscr_msm_t; 408 409 /** 410 ****************************************************************************** 411 ** \brief 触发主模式输出源 数据类型重定义 (MMS)(模式23) 412 *****************************************************************************/ 413 typedef enum en_tim3_m23_mscr_mms 414 { 415 Tim3MasterUG = 0u, ///< UG(软件更新)源 416 Tim3MasterCTEN = 1u, ///< CTEN源 417 Tim3MasterUEV = 2u, ///< UEV更新源 418 Tim3MasterCMPSO = 3u, ///< 比较匹配选择输出源 419 Tim3MasterOCA0Ref = 4u, ///< OCA0_Ref源 420 Tim3MasterOCB0Ref = 5u, ///< OCB0_Ref源 421 //Tim3MasterOCB0Ref = 6u, 422 //Tim3MasterOCB0Ref = 7u, 423 }en_tim3_m23_mscr_mms_t; 424 425 /** 426 ****************************************************************************** 427 ** \brief 触发从模式选择 数据类型重定义 (SMS)(模式23) 428 *****************************************************************************/ 429 typedef enum en_tim3_m23_mscr_sms 430 { 431 Tim3SlaveIClk = 0u, ///< 使用内部时钟 432 Tim3SlaveResetTIM = 1u, ///< 复位功能 433 Tim3SlaveTrigMode = 2u, ///< 触发模式 434 Tim3SlaveEClk = 3u, ///< 外部时钟模式 435 Tim3SlaveCodeCnt1 = 4u, ///< 正交编码计数模式1 436 Tim3SlaveCodeCnt2 = 5u, ///< 正交编码计数模式2 437 Tim3SlaveCodeCnt3 = 6u, ///< 正交编码计数模式3 438 Tim3SlaveGateCtrl = 7u, ///< 门控功能 439 }en_tim3_m23_mscr_sms_t; 440 441 /** 442 ****************************************************************************** 443 ** \brief 定时器运行控制数据类型重定义 (CTEN) 444 *****************************************************************************/ 445 typedef enum en_tim3_start 446 { 447 Tim3CTENDisable = 0u, ///< 停止 448 Tim3CTENEnable = 1u, ///< 运行 449 }en_tim3_start_t; 450 451 /** 452 ****************************************************************************** 453 ** \brief TIM3 mode0 配置结构体定义(模式0) 454 *****************************************************************************/ 455 typedef struct stc_tim3_mode0_config 456 { 457 en_tim3_work_mode_t enWorkMode; ///< 工作模式设置 458 en_tim3_m0cr_gatep_t enGateP; ///< 门控极性控制 459 boolean_t bEnGate; ///< 门控使能 460 en_tim3_cr_timclkdiv_t enPRS; ///< 预除频配置 461 boolean_t bEnTog; ///< 翻转输出使能 462 en_tim3_cr_ct_t enCT; ///< 定时/计数功能选择 463 en_tim3_m0cr_md_t enCntMode; ///< 计数模式配置 464 465 func_ptr_t pfnTim3Cb; ///< Timer3中断服务回调函数[void function(void)] 466 }stc_tim3_mode0_config_t; 467 468 /** 469 ****************************************************************************** 470 ** \brief TIM3 mode1 配置结构体定义(模式1) 471 *****************************************************************************/ 472 typedef struct stc_tim3_mode1_config 473 { 474 en_tim3_work_mode_t enWorkMode; ///< 工作模式设置 475 en_tim3_cr_timclkdiv_t enPRS; ///< 预除频配置 476 en_tim3_cr_ct_t enCT; ///< 定时/计数功能选择 477 en_tim3_m1cr_oneshot_t enOneShot; ///< 单次测量/循环测量选择 478 479 func_ptr_t pfnTim3Cb; ///< Timer3中断服务回调函数[void function(void)] 480 481 }stc_tim3_mode1_config_t; 482 483 /** 484 ****************************************************************************** 485 ** \brief PWC输入配置结构体定义(模式1) 486 *****************************************************************************/ 487 typedef struct stc_tim3_pwc_input_config 488 { 489 en_tim3_mscr_ts_t enTsSel; ///< 触发输入源选择 490 en_tim3_m1_mscr_ia0s_t enIA0Sel; ///< CHA0输入选择 491 en_tim3_m1_mscr_ib0s_t enIB0Sel; ///< CHB0输入选择 492 en_tim3_port_polarity_t enETRPhase; ///< ETR相位选择 493 en_tim3_flt_t enFltETR; ///< ETR滤波设置 494 en_tim3_flt_t enFltIA0; ///< CHA0滤波设置 495 en_tim3_flt_t enFltIB0; ///< CHB0滤波设置 496 }stc_tim3_pwc_input_config_t; 497 498 /** 499 ****************************************************************************** 500 ** \brief TIM3 mode23 配置结构体定义(模式23) 501 *****************************************************************************/ 502 typedef struct stc_tim3_mode23_config 503 { 504 en_tim3_work_mode_t enWorkMode; ///< 工作模式设置 505 en_tim3_m23cr_dir_t enCntDir; ///< 计数方向 506 en_tim3_cr_timclkdiv_t enPRS; ///< 时钟预除频配置 507 en_tim3_cr_ct_t enCT; ///< 定时/计数功能选择 508 en_tim3_m23cr_comp_t enPWMTypeSel; ///< PWM模式选择(独立/互补) 509 en_tim3_m23cr_pwm2s_t enPWM2sSel; ///< OCREFA双点比较功能选择 510 boolean_t bOneShot; ///< 单次触发模式使能/禁止 511 boolean_t bURSSel; ///< 更新源选择 512 513 func_ptr_t pfnTim3Cb; ///< Timer3中断服务回调函数[void function(void)] 514 }stc_tim3_mode23_config_t; 515 516 /** 517 ****************************************************************************** 518 ** \brief GATE在PWM互补模式下捕获或比较功能 配置结构体定义(模式23) 519 *****************************************************************************/ 520 typedef struct stc_tim3_m23_gate_config 521 { 522 en_tim3_m23cr_csg_t enGateFuncSel; ///< Gate比较、捕获功能选择 523 boolean_t bGateRiseCap; ///< GATE作为捕获功能时,上沿捕获有效控制 524 boolean_t bGateFallCap; ///< GATE作为捕获功能时,下沿捕获有效控制 525 }stc_tim3_m23_gate_config_t; 526 527 /** 528 ****************************************************************************** 529 ** \brief CHA/CHB通道比较控制 配置结构体定义(模式23) 530 *****************************************************************************/ 531 typedef struct stc_tim3_m23_compare_config 532 { 533 en_tim3_m23_crch0_csa_csb_t enCHxACmpCap; ///< CH0A比较/捕获功能选择 534 en_tim3_m23_fltr_ocm_t enCHxACmpCtrl; ///< CH0A通道比较控制 535 en_tim3_port_polarity_t enCHxAPolarity; ///< CH0A输出极性控制 536 boolean_t bCHxACmpBufEn; ///< 比较A缓存功能 使能/禁止 537 en_tim3_m23_cisa_cisb_t enCHxACmpIntSel; ///< CHA比较匹配中断选择 538 539 en_tim3_m23_crch0_csa_csb_t enCHxBCmpCap; ///< CH0B比较/捕获功能选择 540 en_tim3_m23_fltr_ocm_t enCHxBCmpCtrl; ///< CH0B通道比较控制 541 en_tim3_port_polarity_t enCHxBPolarity; ///< CH0B输出极性控制 542 boolean_t bCHxBCmpBufEn; ///< 比较B缓存功能 使能/禁止 543 en_tim3_m23_cisa_cisb_t enCHxBCmpIntSel; ///< CHB0比较匹配中断选择 544 }stc_tim3_m23_compare_config_t; 545 546 /** 547 ****************************************************************************** 548 ** \brief CHA/CHB通道捕获控制 配置结构体定义(模式23) 549 *****************************************************************************/ 550 typedef struct stc_tim3_m23_input_config 551 { 552 en_tim3_m23_crch0_csa_csb_t enCHxACmpCap; ///< CH0A比较/捕获功能选择 553 en_tim3_m23_crch0_cfx_crx_t enCHxACapSel; ///< CH0A捕获边沿选择 554 en_tim3_flt_t enCHxAInFlt; ///< CH0A通道捕获滤波控制 555 en_tim3_port_polarity_t enCHxAPolarity; ///< CH0A输入相位 556 557 en_tim3_m23_crch0_csa_csb_t enCHxBCmpCap; ///< CH0A比较/捕获功能选择 558 en_tim3_m23_crch0_cfx_crx_t enCHxBCapSel; ///< CH0B捕获边沿选择 559 en_tim3_flt_t enCHxBInFlt; ///< CH0B通道捕获滤波控制 560 en_tim3_port_polarity_t enCHxBPolarity; ///< CH0B输入相位 561 562 }stc_tim3_m23_input_config_t; 563 564 /** 565 ****************************************************************************** 566 ** \brief ETR输入相位滤波配置结构体定义(模式23) 567 *****************************************************************************/ 568 typedef struct stc_tim3_m23_etr_input_config 569 { 570 en_tim3_port_polarity_t enETRPolarity; ///< ETR输入极性设置 571 en_tim3_flt_t enETRFlt; ///< ETR滤波设置 572 }stc_tim3_m23_etr_input_config_t; 573 574 /** 575 ****************************************************************************** 576 ** \brief 刹车BK输入相位滤波配置结构体定义(模式23) 577 *****************************************************************************/ 578 typedef struct stc_tim3_m23_bk_input_config 579 { 580 boolean_t bEnBrake; ///< 刹车使能 581 boolean_t bEnVC0Brake; ///< 使能VC0刹车 582 boolean_t bEnVC1Brake; ///< 使能VC1刹车 583 boolean_t bEnSafetyBk; ///< 使能safety刹车 584 boolean_t bEnBKSync; ///< TIM0/TIM1/TIM2刹车同步使能 585 en_tim3_m23_crchx_bks_t enBkCH0AStat; ///< 刹车时CHA端口状态设置 586 en_tim3_m23_crchx_bks_t enBkCH0BStat; ///< 刹车时CHB端口状态设置 587 en_tim3_m23_crchx_bks_t enBkCH1AStat; ///< 刹车时CHA端口状态设置 588 en_tim3_m23_crchx_bks_t enBkCH1BStat; ///< 刹车时CHB端口状态设置 589 en_tim3_m23_crchx_bks_t enBkCH2AStat; ///< 刹车时CHA端口状态设置 590 en_tim3_m23_crchx_bks_t enBkCH2BStat; ///< 刹车时CHB端口状态设置 591 en_tim3_port_polarity_t enBrakePolarity; ///< 刹车BK输入极性设置 592 en_tim3_flt_t enBrakeFlt; ///< 刹车BK滤波设置 593 }stc_tim3_m23_bk_input_config_t; 594 595 /** 596 ****************************************************************************** 597 ** \brief 死区功能配置结构体定义(模式23) 598 *****************************************************************************/ 599 typedef struct stc_tim3_m23_dt_config 600 { 601 boolean_t bEnDeadTime; ///< 刹车时CHA端口状态设置 602 uint8_t u8DeadTimeValue; ///< 刹车时CHA端口状态设置 603 }stc_tim3_m23_dt_config_t; 604 605 /** 606 ****************************************************************************** 607 ** \brief 触发ADC配置结构体定义(模式23) 608 *****************************************************************************/ 609 typedef struct stc_tim3_m23_adc_trig_config 610 { 611 boolean_t bEnTrigADC; ///< 触发ADC全局控制 612 boolean_t bEnUevTrigADC; ///< 事件更新触发ADC 613 boolean_t bEnCH0ACmpTrigADC; ///< CH0A比较匹配触发ADC 614 boolean_t bEnCH0BCmpTrigADC; ///< CH0B比较匹配触发ADC 615 boolean_t bEnCH1ACmpTrigADC; ///< CH0A比较匹配触发ADC 616 boolean_t bEnCH1BCmpTrigADC; ///< CH0B比较匹配触发ADC 617 boolean_t bEnCH2ACmpTrigADC; ///< CH0A比较匹配触发ADC 618 boolean_t bEnCH2BCmpTrigADC; ///< CH0B比较匹配触发ADC 619 }stc_tim3_m23_adc_trig_config_t; 620 621 /** 622 ****************************************************************************** 623 ** \brief DMA触发 配置结构体定义(模式23) 624 *****************************************************************************/ 625 typedef struct stc_tim3_m23_trig_dma_config 626 { 627 boolean_t bUevTrigDMA; ///< 更新 触发DMA使能 628 boolean_t bTITrigDMA; ///< Trig 触发DMA功能 629 boolean_t bCmpA0TrigDMA; ///< CH0A捕获比较触发DMA使能 630 boolean_t bCmpB0TrigDMA; ///< CH0B捕获比较触发DMA使能 631 boolean_t bCmpA1TrigDMA; ///< CH1A捕获比较触发DMA使能 632 boolean_t bCmpB1TrigDMA; ///< CH1B捕获比较触发DMA使能 633 boolean_t bCmpA2TrigDMA; ///< CH2A捕获比较触发DMA使能 634 boolean_t bCmpB2TrigDMA; ///< CH2B捕获比较触发DMA使能 635 en_tim3_m23_mscr_ccds_t enCmpUevTrigDMA; ///< 比较模式下DMA比较触发选择 636 }stc_tim3_m23_trig_dma_config_t; 637 638 /** 639 ****************************************************************************** 640 ** \brief 主从模式 配置结构体定义(模式23) 641 *****************************************************************************/ 642 typedef struct stc_tim3_m23_master_slave_config 643 { 644 en_tim3_m23_mscr_msm_t enMasterSlaveSel; ///< 主从模式选择 645 en_tim3_m23_mscr_mms_t enMasterSrc; ///< 主模式触发源选择 646 en_tim3_m23_mscr_sms_t enSlaveModeSel; ///< 从模式选择 647 en_tim3_mscr_ts_t enTsSel; ///< 触发输入源选择 648 }stc_tim3_m23_master_slave_config_t; 649 650 /** 651 ****************************************************************************** 652 ** \brief OCREF清除功能 配置结构体定义(模式23) 653 *****************************************************************************/ 654 typedef struct stc_tim3_m23_OCREF_Clr_config 655 { 656 en_tim3_m23ce_occs_t enOCRefClrSrcSel; ///< OCREF清除源选择 657 boolean_t bVCClrEn; ///< 是否使能来自VC的OCREF_Clr 658 }stc_tim3_m23_OCREF_Clr_config_t; 659 660 /****************************************************************************** 661 * Global variable declarations ('extern', definition in C source) 662 *****************************************************************************/ 663 664 /****************************************************************************** 665 * Global function prototypes (definition in C source) 666 *****************************************************************************/ 667 //中断相关函数 668 669 //中断标志获取 670 boolean_t Tim3_GetIntFlag(en_tim3_irq_type_t enTim3Irq); 671 //中断标志清除 672 en_result_t Tim3_ClearIntFlag(en_tim3_irq_type_t enTim3Irq); 673 //所有中断标志清除 674 en_result_t Tim3_ClearAllIntFlag(void); 675 //模式0中断使能 676 en_result_t Tim3_Mode0_EnableIrq(void); 677 //模式1中断使能 678 en_result_t Tim3_Mode1_EnableIrq (en_tim3_irq_type_t enTim3Irq); 679 //模式2中断使能 680 en_result_t Tim3_Mode23_EnableIrq (en_tim3_irq_type_t enTim3Irq); 681 //模式0中断禁止 682 en_result_t Tim3_Mode0_DisableIrq(void); 683 //模式1中断禁止 684 en_result_t Tim3_Mode1_DisableIrq (en_tim3_irq_type_t enTim3Irq); 685 //模式2中断禁止 686 en_result_t Tim3_Mode23_DisableIrq (en_tim3_irq_type_t enTim3Irq); 687 688 689 //模式0初始化及相关功能操作 690 691 //timer配置及初始化 692 en_result_t Tim3_Mode0_Init(stc_tim3_mode0_config_t* pstcConfig); 693 //timer 启动/停止 694 en_result_t Tim3_M0_Run(void); 695 en_result_t Tim3_M0_Stop(void); 696 //重载值设置 697 en_result_t Tim3_M0_ARRSet(uint16_t u16Data); 698 //16位计数值设置/获取 699 en_result_t Tim3_M0_Cnt16Set(uint16_t u16Data); 700 uint16_t Tim3_M0_Cnt16Get(void); 701 //32位计数值设置/获取 702 en_result_t Tim3_M0_Cnt32Set(uint32_t u32Data); 703 uint32_t Tim3_M0_Cnt32Get(void); 704 //翻转输出使能/禁止设定 705 en_result_t Tim3_M0_EnTOG_Output(boolean_t bEnOutput); 706 707 708 //模式1初始化及相关功能操作 709 710 //timer配置及初始化 711 en_result_t Tim3_Mode1_Init(stc_tim3_mode1_config_t* pstcConfig); 712 //PWC 输入配置 713 en_result_t Tim3_M1_Input_Config(stc_tim3_pwc_input_config_t* pstcConfig); 714 //PWC测量边沿起始结束选择 715 en_result_t Tim3_M1_PWC_Edge_Sel(en_tim3_m1cr_Edge_t enEdgeSel); 716 //timer 启动/停止 717 en_result_t Tim3_M1_Run(void); 718 en_result_t Tim3_M1_Stop(void); 719 //16位计数值设置/获取 720 en_result_t Tim3_M1_Cnt16Set(uint16_t u16Data); 721 uint16_t Tim3_M1_Cnt16Get(void); 722 //脉冲宽度测量结果数值获取 723 uint16_t Tim3_M1_PWC_CapValueGet(void); 724 725 726 //模式1初始化及相关功能操作 727 728 //timer配置及初始化 729 en_result_t Tim3_Mode23_Init(stc_tim3_mode23_config_t* pstcConfig); 730 //timer 启动/停止 731 en_result_t Tim3_M23_Run(void); 732 en_result_t Tim3_M23_Stop(void); 733 //PWM输出使能 734 en_result_t Tim3_M23_EnPWM_Output(boolean_t bEnOutput, boolean_t bEnAutoOutput); 735 //重载值设置 736 en_result_t Tim3_M23_ARRSet(uint16_t u16Data, boolean_t bArrBufEn); 737 //16位计数值设置/获取 738 en_result_t Tim3_M23_Cnt16Set(uint16_t u16Data); 739 uint16_t Tim3_M23_Cnt16Get(void); 740 //比较捕获寄存器CCR0A/CCR0B设置/读取 741 en_result_t Tim3_M23_CCR_Set(en_tim3_m23_ccrx_t enCCRSel, uint16_t u16Data); 742 uint16_t Tim3_M23_CCR_Get(en_tim3_m23_ccrx_t enCCRSel); 743 //PWM互补输出模式下,GATE功能选择 744 en_result_t Tim3_M23_GateFuncSel(stc_tim3_m23_gate_config_t* pstcConfig); 745 //主从模式配置 746 en_result_t Tim3_M23_MasterSlave_Set(stc_tim3_m23_master_slave_config_t* pstcConfig); 747 //CH0A/CH0B比较通道控制 748 en_result_t Tim3_M23_PortOutput_Config(en_tim3_channel_t enTim3Chx, stc_tim3_m23_compare_config_t* pstcConfig); 749 //CH0A/CH0B输入控制 750 en_result_t Tim3_M23_PortInput_Config(en_tim3_channel_t enTim3Chx, stc_tim3_m23_input_config_t* pstcConfig); 751 //ERT输入控制 752 en_result_t Tim3_M23_ETRInput_Config(stc_tim3_m23_etr_input_config_t* pstcConfig); 753 //刹车BK输入控制 754 en_result_t Tim3_M23_BrakeInput_Config(stc_tim3_m23_bk_input_config_t* pstcConfig); 755 //触发ADC控制 756 en_result_t Tim3_M23_TrigADC_Config(stc_tim3_m23_adc_trig_config_t* pstcConfig); 757 //死区功能 758 en_result_t Tim3_M23_DT_Config(stc_tim3_m23_dt_config_t* pstcConfig); 759 //重复周期设置 760 en_result_t Tim3_M23_SetValidPeriod(uint8_t u8ValidPeriod); 761 //OCREF清除功能 762 en_result_t Tim3_M23_OCRefClr(stc_tim3_m23_OCREF_Clr_config_t* pstcConfig); 763 //使能DMA传输 764 en_result_t Tim3_M23_EnDMA(stc_tim3_m23_trig_dma_config_t* pstcConfig); 765 //捕获比较A软件触发 766 en_result_t Tim3_M23_EnSwTrigCapCmpA(en_tim3_channel_t enTim3Chx); 767 //捕获比较B软件触发 768 en_result_t Tim3_M23_EnSwTrigCapCmpB(en_tim3_channel_t enTim3Chx); 769 //软件更新使能 770 en_result_t Tim3_M23_EnSwUev(void); 771 //软件触发使能 772 en_result_t Tim3_M23_EnSwTrig(void); 773 //软件刹车使能 774 en_result_t Tim3_M23_EnSwBk(void); 775 776 777 //@} // Tim3Group 778 779 #ifdef __cplusplus 780 #endif 781 782 783 #endif /* __BT_H__ */ 784 /****************************************************************************** 785 * EOF (not truncated) 786 *****************************************************************************/ 787 788 789