Rev 2 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 2 | Rev 6 | ||
|---|---|---|---|
| Line 55... | Line 55... | ||
| 55 | { |
55 | { |
| 56 | RCC_ClkInitTypeDef clkconfig; |
56 | RCC_ClkInitTypeDef clkconfig; |
| 57 | uint32_t uwTimclock, uwAPB1Prescaler = 0U; |
57 | uint32_t uwTimclock, uwAPB1Prescaler = 0U; |
| 58 | uint32_t uwPrescalerValue = 0U; |
58 | uint32_t uwPrescalerValue = 0U; |
| 59 | uint32_t pFLatency; |
59 | uint32_t pFLatency; |
| 60 | - | ||
| 61 | /*Configure the TIM6 IRQ priority */ |
- | |
| 62 | HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority ,0U); |
- | |
| 63 | - | ||
| 64 | /* Enable the TIM6 global Interrupt */ |
- | |
| 65 | HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); |
60 | HAL_StatusTypeDef status; |
| 66 | 61 | ||
| 67 | /* Enable TIM6 clock */ |
62 | /* Enable TIM6 clock */ |
| 68 | __HAL_RCC_TIM6_CLK_ENABLE(); |
63 | __HAL_RCC_TIM6_CLK_ENABLE(); |
| 69 | 64 | ||
| 70 | /* Get clock configuration */ |
65 | /* Get clock configuration */ |
| 71 | HAL_RCC_GetClockConfig(&clkconfig, &pFLatency); |
66 | HAL_RCC_GetClockConfig(&clkconfig, &pFLatency); |
| 72 | 67 | ||
| 73 | /* Get APB1 prescaler */ |
68 | /* Get APB1 prescaler */ |
| 74 | uwAPB1Prescaler = clkconfig.APB1CLKDivider; |
69 | uwAPB1Prescaler = clkconfig.APB1CLKDivider; |
| 75 | 70 | ||
| 76 | /* Compute TIM6 clock */ |
71 | /* Compute TIM6 clock */ |
| 77 | if (uwAPB1Prescaler == RCC_HCLK_DIV1) |
72 | if (uwAPB1Prescaler == RCC_HCLK_DIV1) |
| 78 | { |
73 | { |
| 79 | uwTimclock = HAL_RCC_GetPCLK1Freq(); |
74 | uwTimclock = HAL_RCC_GetPCLK1Freq(); |
| 80 | } |
75 | } |
| 81 | else |
76 | else |
| 82 | { |
77 | { |
| 83 | uwTimclock = 2*HAL_RCC_GetPCLK1Freq(); |
78 | uwTimclock = 2 * HAL_RCC_GetPCLK1Freq(); |
| 84 | } |
79 | } |
| 85 | 80 | ||
| 86 | /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */ |
81 | /* Compute the prescaler value to have TIM6 counter clock equal to 1MHz */ |
| 87 | uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U); |
82 | uwPrescalerValue = (uint32_t) ((uwTimclock / 1000000U) - 1U); |
| 88 | 83 | ||
| 89 | /* Initialize TIM6 */ |
84 | /* Initialize TIM6 */ |
| 90 | TimHandle.Instance = TIM6; |
85 | TimHandle.Instance = TIM6; |
| 91 | 86 | ||
| 92 | /* Initialize TIMx peripheral as follow: |
87 | /* Initialize TIMx peripheral as follow: |
| 93 | + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base. |
88 | + Period = [(TIM6CLK/1000) - 1]. to have a (1/1000) s time base. |
| 94 | + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock. |
89 | + Prescaler = (uwTimclock/1000000 - 1) to have a 1MHz counter clock. |
| 95 | + ClockDivision = 0 |
90 | + ClockDivision = 0 |
| 96 | + Counter direction = Up |
91 | + Counter direction = Up |
| Line 98... | Line 93... | ||
| 98 | TimHandle.Init.Period = (1000000U / 1000U) - 1U; |
93 | TimHandle.Init.Period = (1000000U / 1000U) - 1U; |
| 99 | TimHandle.Init.Prescaler = uwPrescalerValue; |
94 | TimHandle.Init.Prescaler = uwPrescalerValue; |
| 100 | TimHandle.Init.ClockDivision = 0U; |
95 | TimHandle.Init.ClockDivision = 0U; |
| 101 | TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP; |
96 | TimHandle.Init.CounterMode = TIM_COUNTERMODE_UP; |
| 102 | TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
97 | TimHandle.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; |
| 103 | if(HAL_TIM_Base_Init(&TimHandle) == HAL_OK) |
98 | status = HAL_TIM_Base_Init(&TimHandle); |
| - | 99 | if (status == HAL_OK) |
|
| 104 | { |
100 | { |
| 105 | /* Start the TIM time Base generation in interrupt mode */ |
101 | /* Start the TIM time Base generation in interrupt mode */ |
| 106 | return HAL_TIM_Base_Start_IT(&TimHandle); |
102 | status = HAL_TIM_Base_Start_IT(&TimHandle); |
| - | 103 | if (status == HAL_OK) |
|
| - | 104 | { |
|
| - | 105 | /* Enable the TIM6 global Interrupt */ |
|
| - | 106 | HAL_NVIC_EnableIRQ(TIM6_DAC_IRQn); |
|
| - | 107 | ||
| - | 108 | if (TickPriority < (1UL << __NVIC_PRIO_BITS)) |
|
| - | 109 | { |
|
| - | 110 | /* Enable the TIM6 global Interrupt */ |
|
| - | 111 | HAL_NVIC_SetPriority(TIM6_DAC_IRQn, TickPriority, 0); |
|
| - | 112 | uwTickPrio = TickPriority; |
|
| - | 113 | } |
|
| - | 114 | else |
|
| - | 115 | { |
|
| - | 116 | status = HAL_ERROR; |
|
| - | 117 | } |
|
| - | 118 | } |
|
| 107 | } |
119 | } |
| 108 | - | ||
| 109 | /* Return function status */ |
120 | /* Return function status */ |
| 110 | return HAL_ERROR; |
121 | return status; |
| 111 | } |
122 | } |
| 112 | 123 | ||
| 113 | /** |
124 | /** |
| 114 | * @brief Suspend Tick increment. |
125 | * @brief Suspend Tick increment. |
| 115 | * @note Disable the tick increment by disabling TIM6 update interrupt. |
126 | * @note Disable the tick increment by disabling TIM6 update interrupt. |