1 /***********************************************************************
2 * Filename : hal_lpuart.c
3 * Description : lpuart driver source file
4 * Author(s) : xwl
5 * version : V1.0
6 * Modify date : 2021-04-02
7 ***********************************************************************/
8 #include "ACM32Fxx_HAL.h"
9
10
11 /*********************************************************************************
12 * Function : HAL_TIMER_ConfigBreakDeadTime
13 * Description : configure deadtime parameter
14 * Input : timer handler, break and deadtime configuration
15 * Output : none
16 * Author : xwl
17 **********************************************************************************/
HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef * htim,TIM_BreakDeadTimeConfigTypeDef * sBreakDeadTimeConfig)18 void HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef * sBreakDeadTimeConfig)
19 {
20 /* Keep this variable initialized to 0 as it is used to configure BDTR register */
21 uint32_t break_deadtime_reg = 0U;
22
23 /* Set the BDTR bits */
24 MODIFY_REG(break_deadtime_reg, TIM_BDTR_DTG, sBreakDeadTimeConfig->DeadTime);
25 MODIFY_REG(break_deadtime_reg, TIM_BDTR_LOCK, sBreakDeadTimeConfig->LockLevel);
26 MODIFY_REG(break_deadtime_reg, TIM_BDTR_OSSI, sBreakDeadTimeConfig->OffStateIDLEMode);
27 MODIFY_REG(break_deadtime_reg, TIM_BDTR_OSSR, sBreakDeadTimeConfig->OffStateRunMode);
28 MODIFY_REG(break_deadtime_reg, TIM_BDTR_BKE, sBreakDeadTimeConfig->BreakState);
29 MODIFY_REG(break_deadtime_reg, TIM_BDTR_BKP, sBreakDeadTimeConfig->BreakPolarity);
30 MODIFY_REG(break_deadtime_reg, TIM_BDTR_AOE, sBreakDeadTimeConfig->AutomaticOutput);
31 MODIFY_REG(break_deadtime_reg, TIM_BDTR_BKF, (sBreakDeadTimeConfig->BreakFilter << TIM_BDTR_BKF_Pos));
32
33 /* Set TIMx_BDTR */
34 htim->Instance->BDTR = break_deadtime_reg;
35
36 }
37
38 /*********************************************************************************
39 * Function : HAL_TIMEx_ConfigBreakInput
40 * Description : Configures the break input source.
41 * Input :
42 htim: timer handler
43 BreakInput: TIM_BREAKINPUT_BRK
44 sBreakInputConfig: Break input source configuration
45 * Output :
46 * Author : xwl
47 **********************************************************************************/
HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef * htim,uint32_t BreakInput,TIMEx_BreakInputConfigTypeDef * sBreakInputConfig)48 HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput,
49 TIMEx_BreakInputConfigTypeDef *sBreakInputConfig)
50 {
51 uint32_t tmporx;
52 uint32_t bkin_enable_mask;
53 uint32_t bkin_polarity_mask;
54 uint32_t bkin_enable_bitpos;
55 uint32_t bkin_polarity_bitpos;
56
57 switch(sBreakInputConfig->Source)
58 {
59 case TIM_BREAKINPUTSOURCE_BKIN:
60 {
61 bkin_enable_mask = TIM1_AF1_BKINE;
62 bkin_enable_bitpos = TIM1_AF1_BKINE_Pos;
63 bkin_polarity_mask = TIM1_AF1_BKINP;
64 bkin_polarity_bitpos = TIM1_AF1_BKINP_Pos;
65 break;
66 }
67 #ifdef HAL_COMP_MODULE_ENABLED
68 case TIM_BREAKINPUTSOURCE_COMP1:
69 {
70 bkin_enable_mask = TIM1_AF1_BKCMP1E;
71 bkin_enable_bitpos = TIM1_AF1_BKCMP1E_Pos;
72 bkin_polarity_mask = TIM1_AF1_BKCMP1P;
73 bkin_polarity_bitpos = TIM1_AF1_BKCMP1P_Pos;
74 break;
75 }
76 case TIM_BREAKINPUTSOURCE_COMP2:
77 {
78 bkin_enable_mask = TIM1_AF1_BKCMP2E;
79 bkin_enable_bitpos = TIM1_AF1_BKCMP2E_Pos;
80 bkin_polarity_mask = TIM1_AF1_BKCMP2P;
81 bkin_polarity_bitpos = TIM1_AF1_BKCMP2P_Pos;
82 break;
83 }
84 #endif /* COMP1 && COMP2 */
85
86 default:
87 {
88 bkin_enable_mask = 0U;
89 bkin_enable_bitpos = 0U;
90 bkin_polarity_mask = 0U;
91 bkin_polarity_bitpos = 0U;
92 break;
93 }
94 }
95
96 switch(BreakInput)
97 {
98 case TIM_BREAKINPUT_BRK:
99 {
100 /* Get the TIMx_AF1 register value */
101 tmporx = htim->Instance->AF1;
102
103 /* Enable the break input */
104 tmporx &= ~bkin_enable_mask;
105 tmporx |= (sBreakInputConfig->Enable << bkin_enable_bitpos) & bkin_enable_mask;
106
107 /* Set the break input polarity */
108 tmporx &= ~bkin_polarity_mask;
109 tmporx |= (sBreakInputConfig->Polarity << bkin_polarity_bitpos) & bkin_polarity_mask;
110
111 /* Set TIMx_AF1 */
112 htim->Instance->AF1 = tmporx;
113 break;
114 }
115
116 default:
117 break;
118 }
119
120 return HAL_OK;
121 }
122
123
124 /*********************************************************************************
125 * Function : HAL_TIMEx_ConfigCommutEvent
126 * Description : Configure the TIM commutation event sequence. This function is mandatory to use the commutation event
127 in order to update the configuration at each commutation detection on the TRGI input of the Timer.
128 * Input :
129 htim: timer handler
130 InputTrigger: TIM_TRIGGER_SOURCE_ITR0, TIM_TRIGGER_SOURCE_ITR1...
131 CommutationSource: TIM_COMMUTATION_TRGI, TIM_COMMUTATION_SOFTWARE
132 * Output :
133 * Author : xwl
134 **********************************************************************************/
HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef * htim,uint32_t InputTrigger,uint32_t CommutationSource)135 void HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
136 {
137
138 if ((InputTrigger == TIM_TRIGGER_SOURCE_ITR0) || (InputTrigger == TIM_TRIGGER_SOURCE_ITR1) ||
139 (InputTrigger == TIM_TRIGGER_SOURCE_ITR2) || (InputTrigger == TIM_TRIGGER_SOURCE_ITR3))
140 {
141 /* Select the Input trigger */
142 htim->Instance->SMCR &= (~(BIT4|BIT5|BIT6));
143 htim->Instance->SMCR |= InputTrigger;
144 }
145
146 /* Select the Capture Compare preload feature */
147 htim->Instance->CR2 |= TIM_CR2_CCPC;
148 /* Select the Commutation event source */
149 htim->Instance->CR2 &= ~TIM_CR2_CCUS;
150 htim->Instance->CR2 |= CommutationSource;
151
152 /* Disable Commutation Interrupt */
153 HAL_TIM_DISABLE_IT(htim, TIM_IT_COM);
154
155 /* Disable Commutation DMA request */
156 HAL_TIM_DISABLE_DMA(htim, TIM_DMA_COM);
157
158 }
159
160
161