Subversion Repositories FuelGauge

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f0xx_hal_cortex.c
4
  * @author  MCD Application Team
5
  * @brief   CORTEX HAL module driver.
6
  *          This file provides firmware functions to manage the following
7
  *          functionalities of the CORTEX:
8
  *           + Initialization and de-initialization functions
9
  *           + Peripheral Control functions
10
  *
11
  *  @verbatim
12
  ==============================================================================
13
                        ##### How to use this driver #####
14
  ==============================================================================
15
 
16
    [..]  
17
    *** How to configure Interrupts using CORTEX HAL driver ***
18
    ===========================================================
19
    [..]
20
    This section provides functions allowing to configure the NVIC interrupts (IRQ).
21
    The Cortex-M0 exceptions are managed by CMSIS functions.
22
      (#) Enable and Configure the priority of the selected IRQ Channels.
23
             The priority can be 0..3.
24
 
25
        -@- Lower priority values gives higher priority.
26
        -@- Priority Order:
27
            (#@) Lowest priority.
28
            (#@) Lowest hardware priority (IRQn position).  
29
 
30
      (#)  Configure the priority of the selected IRQ Channels using HAL_NVIC_SetPriority()
31
 
32
      (#)  Enable the selected IRQ Channels using HAL_NVIC_EnableIRQ()
33
 
34
      -@-  Negative value of IRQn_Type are not allowed.
35
 
36
 
37
    [..]
38
    *** How to configure Systick using CORTEX HAL driver ***
39
    ========================================================
40
    [..]
41
    Setup SysTick Timer for time base.
42
 
43
   (+) The HAL_SYSTICK_Config()function calls the SysTick_Config() function which
44
       is a CMSIS function that:
45
        (++) Configures the SysTick Reload register with value passed as function parameter.
46
        (++) Configures the SysTick IRQ priority to the lowest value (0x03).
47
        (++) Resets the SysTick Counter register.
48
        (++) Configures the SysTick Counter clock source to be Core Clock Source (HCLK).
49
        (++) Enables the SysTick Interrupt.
50
        (++) Starts the SysTick Counter.
51
 
52
   (+) You can change the SysTick Clock source to be HCLK_Div8 by calling the macro
53
       HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8) just after the
54
       HAL_SYSTICK_Config() function call. The HAL_SYSTICK_CLKSourceConfig() macro is defined
55
       inside the stm32f0xx_hal_cortex.h file.
56
 
57
   (+) You can change the SysTick IRQ priority by calling the
58
       HAL_NVIC_SetPriority(SysTick_IRQn,...) function just after the HAL_SYSTICK_Config() function
59
       call. The HAL_NVIC_SetPriority() call the NVIC_SetPriority() function which is a CMSIS function.
60
 
61
   (+) To adjust the SysTick time base, use the following formula:
62
 
63
       Reload Value = SysTick Counter Clock (Hz) x  Desired Time base (s)
64
       (++) Reload Value is the parameter to be passed for HAL_SYSTICK_Config() function
65
       (++) Reload Value should not exceed 0xFFFFFF
66
 
67
  @endverbatim
68
  ******************************************************************************
69
  * @attention
70
  *
71
  * <h2><center>&copy; Copyright (c) 2016 STMicroelectronics.
72
  * All rights reserved.</center></h2>
73
  *
74
  * This software component is licensed by ST under BSD 3-Clause license,
75
  * the "License"; You may not use this file except in compliance with the
76
  * License. You may obtain a copy of the License at:
77
  *                        opensource.org/licenses/BSD-3-Clause
78
  *
79
  ******************************************************************************
80
  */
81
 
82
/* Includes ------------------------------------------------------------------*/
83
#include "stm32f0xx_hal.h"
84
 
85
/** @addtogroup STM32F0xx_HAL_Driver
86
  * @{
87
  */
88
 
89
/** @defgroup CORTEX CORTEX
90
  * @brief CORTEX CORTEX HAL module driver
91
  * @{
92
  */
93
 
94
#ifdef HAL_CORTEX_MODULE_ENABLED
95
 
96
/* Private typedef -----------------------------------------------------------*/
97
/* Private define ------------------------------------------------------------*/
98
/* Private macro -------------------------------------------------------------*/
99
/* Private variables ---------------------------------------------------------*/
100
/* Private function prototypes -----------------------------------------------*/
101
/* Exported functions ---------------------------------------------------------*/
102
 
103
/** @defgroup CORTEX_Exported_Functions CORTEX Exported Functions
104
  * @{
105
  */
106
 
107
 
108
/** @defgroup CORTEX_Exported_Functions_Group1 Initialization and de-initialization functions
109
 *  @brief    Initialization and Configuration functions
110
 *
111
@verbatim
112
  ==============================================================================
113
              ##### Initialization and de-initialization functions #####
114
  ==============================================================================
115
    [..]
116
      This section provides the CORTEX HAL driver functions allowing to configure Interrupts
117
      Systick functionalities
118
 
119
@endverbatim
120
  * @{
121
  */
122
 
123
/**
124
  * @brief  Sets the priority of an interrupt.
125
  * @param  IRQn External interrupt number .
126
  *         This parameter can be an enumerator of IRQn_Type enumeration
127
  *         (For the complete STM32 Devices IRQ Channels list, please refer to stm32f0xx.h file)
128
  * @param  PreemptPriority The preemption priority for the IRQn channel.
129
  *         This parameter can be a value between 0 and 3.
130
  *         A lower priority value indicates a higher priority
131
  * @param  SubPriority the subpriority level for the IRQ channel.
132
  *         with stm32f0xx devices, this parameter is a dummy value and it is ignored, because
133
  *         no subpriority supported in Cortex M0 based products.  
134
  * @retval None
135
  */
136
void HAL_NVIC_SetPriority(IRQn_Type IRQn, uint32_t PreemptPriority, uint32_t SubPriority)
137
{
138
  /* Check the parameters */
139
  assert_param(IS_NVIC_PREEMPTION_PRIORITY(PreemptPriority));
140
  NVIC_SetPriority(IRQn,PreemptPriority);
141
}
142
 
143
/**
144
  * @brief  Enables a device specific interrupt in the NVIC interrupt controller.
145
  * @note   To configure interrupts priority correctly, the NVIC_PriorityGroupConfig()
146
  *         function should be called before.
147
  * @param  IRQn External interrupt number.
148
  *         This parameter can be an enumerator of IRQn_Type enumeration
149
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f0xxxx.h))
150
  * @retval None
151
  */
152
void HAL_NVIC_EnableIRQ(IRQn_Type IRQn)
153
{
154
  /* Check the parameters */
155
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
156
 
157
  /* Enable interrupt */
158
  NVIC_EnableIRQ(IRQn);
159
}
160
 
161
/**
162
  * @brief  Disables a device specific interrupt in the NVIC interrupt controller.
163
  * @param  IRQn External interrupt number.
164
  *         This parameter can be an enumerator of IRQn_Type enumeration
165
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f0xxxx.h))
166
  * @retval None
167
  */
168
void HAL_NVIC_DisableIRQ(IRQn_Type IRQn)
169
{
170
  /* Check the parameters */
171
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
172
 
173
  /* Disable interrupt */
174
  NVIC_DisableIRQ(IRQn);
175
}
176
 
177
/**
178
  * @brief  Initiates a system reset request to reset the MCU.
179
  * @retval None
180
  */
181
void HAL_NVIC_SystemReset(void)
182
{
183
  /* System Reset */
184
  NVIC_SystemReset();
185
}
186
 
187
/**
188
  * @brief  Initializes the System Timer and its interrupt, and starts the System Tick Timer.
189
  *         Counter is in free running mode to generate periodic interrupts.
190
  * @param  TicksNumb Specifies the ticks Number of ticks between two interrupts.
191
  * @retval status:  - 0  Function succeeded.
192
  *                  - 1  Function failed.
193
  */
194
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
195
{
196
   return SysTick_Config(TicksNumb);
197
}
198
/**
199
  * @}
200
  */
201
 
202
/** @defgroup CORTEX_Exported_Functions_Group2 Peripheral Control functions
203
 *  @brief   Cortex control functions
204
 *
205
@verbatim
206
  ==============================================================================
207
                      ##### Peripheral Control functions #####
208
  ==============================================================================
209
    [..]
210
      This subsection provides a set of functions allowing to control the CORTEX
211
      (NVIC, SYSTICK) functionalities.
212
 
213
 
214
@endverbatim
215
  * @{
216
  */
217
 
218
 
219
/**
220
  * @brief  Gets the priority of an interrupt.
221
  * @param  IRQn External interrupt number.
222
  *         This parameter can be an enumerator of IRQn_Type enumeration
223
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f0xxxx.h))
224
  * @retval None
225
  */
226
uint32_t HAL_NVIC_GetPriority(IRQn_Type IRQn)
227
{
228
  /* Get priority for Cortex-M system or device specific interrupts */
229
  return NVIC_GetPriority(IRQn);
230
}
231
 
232
/**
233
  * @brief  Sets Pending bit of an external interrupt.
234
  * @param  IRQn External interrupt number
235
  *         This parameter can be an enumerator of IRQn_Type enumeration
236
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f0xxxx.h))
237
  * @retval None
238
  */
239
void HAL_NVIC_SetPendingIRQ(IRQn_Type IRQn)
240
{
241
  /* Check the parameters */
242
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
243
 
244
  /* Set interrupt pending */
245
  NVIC_SetPendingIRQ(IRQn);
246
}
247
 
248
/**
249
  * @brief  Gets Pending Interrupt (reads the pending register in the NVIC
250
  *         and returns the pending bit for the specified interrupt).
251
  * @param  IRQn External interrupt number.
252
  *         This parameter can be an enumerator of IRQn_Type enumeration
253
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f0xxxx.h))
254
  * @retval status: - 0  Interrupt status is not pending.
255
  *                 - 1  Interrupt status is pending.
256
  */
257
uint32_t HAL_NVIC_GetPendingIRQ(IRQn_Type IRQn)
258
{
259
  /* Check the parameters */
260
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
261
 
262
  /* Return 1 if pending else 0 */
263
  return NVIC_GetPendingIRQ(IRQn);
264
}
265
 
266
/**
267
  * @brief  Clears the pending bit of an external interrupt.
268
  * @param  IRQn External interrupt number.
269
  *         This parameter can be an enumerator of IRQn_Type enumeration
270
  *         (For the complete STM32 Devices IRQ Channels list, please refer to the appropriate CMSIS device file (stm32f0xxxx.h))
271
  * @retval None
272
  */
273
void HAL_NVIC_ClearPendingIRQ(IRQn_Type IRQn)
274
{
275
  /* Check the parameters */
276
  assert_param(IS_NVIC_DEVICE_IRQ(IRQn));
277
 
278
  /* Clear pending interrupt */
279
  NVIC_ClearPendingIRQ(IRQn);
280
}
281
 
282
/**
283
  * @brief  Configures the SysTick clock source.
284
  * @param  CLKSource specifies the SysTick clock source.
285
  *         This parameter can be one of the following values:
286
  *             @arg SYSTICK_CLKSOURCE_HCLK_DIV8: AHB clock divided by 8 selected as SysTick clock source.
287
  *             @arg SYSTICK_CLKSOURCE_HCLK: AHB clock selected as SysTick clock source.
288
  * @retval None
289
  */
290
void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource)
291
{
292
  /* Check the parameters */
293
  assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));
294
  if (CLKSource == SYSTICK_CLKSOURCE_HCLK)
295
  {
296
    SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;
297
  }
298
  else
299
  {
300
    SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;
301
  }
302
}
303
 
304
/**
305
  * @brief  This function handles SYSTICK interrupt request.
306
  * @retval None
307
  */
308
void HAL_SYSTICK_IRQHandler(void)
309
{
310
  HAL_SYSTICK_Callback();
311
}
312
 
313
/**
314
  * @brief  SYSTICK callback.
315
  * @retval None
316
  */
317
__weak void HAL_SYSTICK_Callback(void)
318
{
319
  /* NOTE : This function Should not be modified, when the callback is needed,
320
            the HAL_SYSTICK_Callback could be implemented in the user file
321
   */
322
}
323
 
324
/**
325
  * @}
326
  */
327
 
328
/**
329
  * @}
330
  */
331
 
332
#endif /* HAL_CORTEX_MODULE_ENABLED */
333
/**
334
  * @}
335
  */
336
 
337
/**
338
  * @}
339
  */
340
 
341
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/