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