NIIETCM4 PD  v0.7.0
Драйвер периферии для микроконтроллеров на базе ядра ARM Cortex-M4
niietcm4_rcc.h
См. документацию.
1 
29 /* Define to prevent recursive inclusion -------------------------------------*/
30 #ifndef __NIIETCM4_RCC_H
31 #define __NIIETCM4_RCC_H
32 
33 #ifdef __cplusplus
34  extern "C" {
35 #endif
36 
37 /* Includes ------------------------------------------------------------------*/
38 #include "niietcm4.h"
39 
52  #define RCC_CLK_CHANGE_TIMEOUT ((uint32_t)10000)
66 typedef enum
67 {
73 
78 #define IS_RCC_PLL_REF(PLL_REF) (((PLL_REF) == RCC_PLLRef_XI_OSC) || \
79  ((PLL_REF) == RCC_PLLRef_USB_CLK) || \
80  ((PLL_REF) == RCC_PLLRef_USB_60MHz)|| \
81  ((PLL_REF) == RCC_PLLRef_ETH_25MHz))
82 
83 
88 typedef enum
89 {
94 
99 #define IS_RCC_PLL_NO(PLL_NO) (((PLL_NO) == RCC_PLLNO_Disable) || \
100  ((PLL_NO) == RCC_PLLNO_Div2) || \
101  ((PLL_NO) == RCC_PLLNO_Div4))
102 
107 typedef enum
108 {
114 
119 #define IS_RCC_UART_CLK(UART_CLK) (((UART_CLK) == RCC_UARTClk_SYSCLK) || \
120  ((UART_CLK) == RCC_UARTClk_XI_OSC) || \
121  ((UART_CLK) == RCC_UARTClk_USB_CLK) || \
122  ((UART_CLK) == RCC_UARTClk_USB_60MHz))
123 
128  typedef enum
129  {
135 
140  #define IS_RCC_SPI_CLK(SPI_CLK) (((SPI_CLK) == RCC_SPIClk_SYSCLK) || \
141  ((SPI_CLK) == RCC_SPIClk_XI_OSC) || \
142  ((SPI_CLK) == RCC_SPIClk_USB_CLK) || \
143  ((SPI_CLK) == RCC_SPIClk_USB_60MHz))
144 
149 typedef enum
150 {
154 
159 #define IS_RCC_USB_CLK(USB_CLK) (((USB_CLK) == RCC_USBClk_XI_OSC) || \
160  ((USB_CLK) == RCC_USBClk_USB_CLK))
161 
166 typedef enum
167 {
171 
176 #define IS_RCC_USB_FREQ(USB_FREQ) (((USB_FREQ) == RCC_USBFreq_12MHz) || \
177  ((USB_FREQ) == RCC_USBFreq_24MHz))
178 
183 typedef enum
184 {
198 
203 #define IS_RCC_ADC_CLK(ADC_CLK) (((ADC_CLK) == RCC_ADCClk_0) || \
204  ((ADC_CLK) == RCC_ADCClk_1) || \
205  ((ADC_CLK) == RCC_ADCClk_2) || \
206  ((ADC_CLK) == RCC_ADCClk_3) || \
207  ((ADC_CLK) == RCC_ADCClk_4) || \
208  ((ADC_CLK) == RCC_ADCClk_5) || \
209  ((ADC_CLK) == RCC_ADCClk_6) || \
210  ((ADC_CLK) == RCC_ADCClk_7) || \
211  ((ADC_CLK) == RCC_ADCClk_8) || \
212  ((ADC_CLK) == RCC_ADCClk_9) || \
213  ((ADC_CLK) == RCC_ADCClk_10) || \
214  ((ADC_CLK) == RCC_ADCClk_11))
215 
220 typedef enum
221 {
231 
236 #define IS_RCC_SYS_CLK(SYS_CLK) (((SYS_CLK) == RCC_SysClk_CPE_Sel) || \
237  ((SYS_CLK) == RCC_SysClk_POR) || \
238  ((SYS_CLK) == RCC_SysClk_XI_OSC) || \
239  ((SYS_CLK) == RCC_SysClk_PLL) || \
240  ((SYS_CLK) == RCC_SysClk_PLLDIV) || \
241  ((SYS_CLK) == RCC_SysClk_USB60MHz) || \
242  ((SYS_CLK) == RCC_SysClk_USB_CLK) || \
243  ((SYS_CLK) == RCC_SysClk_ETH25MHz))
244 
249 typedef enum
250 {
251  RCC_PeriphClk_QEP0 = ((uint32_t)(1<<1)),
252  RCC_PeriphClk_QEP1 = ((uint32_t)(1<<2)),
253  RCC_PeriphClk_CMP = ((uint32_t)(1<<9)),
254  RCC_PeriphClk_PWM0 = ((uint32_t)(1<<10)),
255  RCC_PeriphClk_PWM1 = ((uint32_t)(1<<11)),
256  RCC_PeriphClk_PWM2 = ((uint32_t)(1<<12)),
257  RCC_PeriphClk_PWM3 = ((uint32_t)(1<<13)),
258  RCC_PeriphClk_PWM4 = ((uint32_t)(1<<14)),
259  RCC_PeriphClk_PWM5 = ((uint32_t)(1<<15)),
260  RCC_PeriphClk_PWM6 = ((uint32_t)(1<<16)),
261  RCC_PeriphClk_PWM7 = ((uint32_t)(1<<17)),
262  RCC_PeriphClk_PWM8 = ((uint32_t)(1<<18)),
263  RCC_PeriphClk_WD = ((uint32_t)(1<<19)),
264  RCC_PeriphClk_I2C0 = ((uint32_t)(1<<20)),
265  RCC_PeriphClk_I2C1 = ((uint32_t)(1<<21)),
266  RCC_PeriphClk_ADC = ((uint32_t)(1<<24))
268 
273 #define IS_RCC_PERIPH_CLK(PERIPH_CLK) (((PERIPH_CLK) == RCC_PeriphClk_QEP0) || \
274  ((PERIPH_CLK) == RCC_PeriphClk_QEP1) || \
275  ((PERIPH_CLK) == RCC_PeriphClk_CMP) || \
276  ((PERIPH_CLK) == RCC_PeriphClk_PWM0) || \
277  ((PERIPH_CLK) == RCC_PeriphClk_PWM1) || \
278  ((PERIPH_CLK) == RCC_PeriphClk_PWM2) || \
279  ((PERIPH_CLK) == RCC_PeriphClk_PWM4) || \
280  ((PERIPH_CLK) == RCC_PeriphClk_PWM5) || \
281  ((PERIPH_CLK) == RCC_PeriphClk_PWM6) || \
282  ((PERIPH_CLK) == RCC_PeriphClk_PWM7) || \
283  ((PERIPH_CLK) == RCC_PeriphClk_PWM8) || \
284  ((PERIPH_CLK) == RCC_PeriphClk_WD) || \
285  ((PERIPH_CLK) == RCC_PeriphClk_I2C0) || \
286  ((PERIPH_CLK) == RCC_PeriphClk_I2C1) || \
287  ((PERIPH_CLK) == RCC_PeriphClk_ADC))
288 
293 typedef enum
294 {
295  RCC_PeriphRst_WD = ((uint32_t)(1<<0)),
296  RCC_PeriphRst_I2C0 = ((uint32_t)(1<<1)),
297  RCC_PeriphRst_I2C1 = ((uint32_t)(1<<2)),
298  RCC_PeriphRst_USB = ((uint32_t)(1<<3)),
299  RCC_PeriphRst_Timer0 = ((uint32_t)(1<<4)),
300  RCC_PeriphRst_Timer1 = ((uint32_t)(1<<5)),
301  RCC_PeriphRst_Timer2 = ((uint32_t)(1<<6)),
302  RCC_PeriphRst_UART0 = ((uint32_t)(1<<7)),
303  RCC_PeriphRst_UART1 = ((uint32_t)(1<<8)),
304  RCC_PeriphRst_UART2 = ((uint32_t)(1<<9)),
305  RCC_PeriphRst_UART3 = ((uint32_t)(1<<10)),
306  RCC_PeriphRst_SPI0 = ((uint32_t)(1<<11)),
307  RCC_PeriphRst_SPI1 = ((uint32_t)(1<<12)),
308  RCC_PeriphRst_SPI2 = ((uint32_t)(1<<13)),
309  RCC_PeriphRst_SPI3 = ((uint32_t)(1<<14)),
310  RCC_PeriphRst_ETH = ((uint32_t)(1<<15)),
311  RCC_PeriphRst_QEP0 = ((uint32_t)(1<<0)),
312  RCC_PeriphRst_QEP1 = ((uint32_t)(1<<1)),
313  RCC_PeriphRst_PWM0 = ((uint32_t)(1<<2)),
314  RCC_PeriphRst_PWM1 = ((uint32_t)(1<<3)),
315  RCC_PeriphRst_PWM2 = ((uint32_t)(1<<4)),
316  RCC_PeriphRst_PWM3 = ((uint32_t)(1<<5)),
317  RCC_PeriphRst_PWM4 = ((uint32_t)(1<<6)),
318  RCC_PeriphRst_PWM5 = ((uint32_t)(1<<7)),
319  RCC_PeriphRst_PWM6 = ((uint32_t)(1<<8)),
320  RCC_PeriphRst_PWM7 = ((uint32_t)(1<<9)),
321  RCC_PeriphRst_PWM8 = ((uint32_t)(1<<10)),
322  RCC_PeriphRst_CAP0 = ((uint32_t)(1<<11)),
323  RCC_PeriphRst_CAP1 = ((uint32_t)(1<<12)),
324  RCC_PeriphRst_CAP2 = ((uint32_t)(1<<13)),
325  RCC_PeriphRst_CAP3 = ((uint32_t)(1<<14)),
326  RCC_PeriphRst_CAP4 = ((uint32_t)(1<<15)),
327  RCC_PeriphRst_CAP5 = ((uint32_t)(1<<16)),
328  RCC_PeriphRst_CMP = ((uint32_t)(1<<17)),
330 
335 #define IS_RCC_PERIPH_RST(PERIPH_RST) (((PERIPH_RST) == RCC_PeriphRst_WD) || \
336  ((PERIPH_RST) == RCC_PeriphRst_I2C0) || \
337  ((PERIPH_RST) == RCC_PeriphRst_I2C1) || \
338  ((PERIPH_RST) == RCC_PeriphRst_USB) || \
339  ((PERIPH_RST) == RCC_PeriphRst_Timer0) || \
340  ((PERIPH_RST) == RCC_PeriphRst_Timer1) || \
341  ((PERIPH_RST) == RCC_PeriphRst_Timer2) || \
342  ((PERIPH_RST) == RCC_PeriphRst_UART0) || \
343  ((PERIPH_RST) == RCC_PeriphRst_UART1) || \
344  ((PERIPH_RST) == RCC_PeriphRst_UART2) || \
345  ((PERIPH_RST) == RCC_PeriphRst_UART3) || \
346  ((PERIPH_RST) == RCC_PeriphRst_SPI0) || \
347  ((PERIPH_RST) == RCC_PeriphRst_SPI1) || \
348  ((PERIPH_RST) == RCC_PeriphRst_SPI2) || \
349  ((PERIPH_RST) == RCC_PeriphRst_SPI3) || \
350  ((PERIPH_RST) == RCC_PeriphRst_ETH) || \
351  ((PERIPH_RST) == RCC_PeriphRst_QEP0) || \
352  ((PERIPH_RST) == RCC_PeriphRst_QEP1) || \
353  ((PERIPH_RST) == RCC_PeriphRst_PWM0) || \
354  ((PERIPH_RST) == RCC_PeriphRst_PWM1) || \
355  ((PERIPH_RST) == RCC_PeriphRst_PWM2) || \
356  ((PERIPH_RST) == RCC_PeriphRst_PWM3) || \
357  ((PERIPH_RST) == RCC_PeriphRst_PWM4) || \
358  ((PERIPH_RST) == RCC_PeriphRst_PWM5) || \
359  ((PERIPH_RST) == RCC_PeriphRst_PWM6) || \
360  ((PERIPH_RST) == RCC_PeriphRst_PWM7) || \
361  ((PERIPH_RST) == RCC_PeriphRst_PWM8) || \
362  ((PERIPH_RST) == RCC_PeriphRst_CAP0) || \
363  ((PERIPH_RST) == RCC_PeriphRst_CAP1) || \
364  ((PERIPH_RST) == RCC_PeriphRst_CAP2) || \
365  ((PERIPH_RST) == RCC_PeriphRst_CAP3) || \
366  ((PERIPH_RST) == RCC_PeriphRst_CAP4) || \
367  ((PERIPH_RST) == RCC_PeriphRst_CAP5) || \
368  ((PERIPH_RST) == RCC_PeriphRst_CMP))
369 
375 typedef struct
376 {
377  uint32_t RCC_PLLDiv;
383  uint32_t RCC_PLLNR;
385  uint32_t RCC_PLLNF;
388 
393 #define IS_RCC_PLLDIV(PLLDIV) (((PLLDIV) & ((uint32_t)0xFFFFFF00)) == ((uint32_t)0x00))
394 
399 #define IS_RCC_PLL_NR(PLL_NR) (((PLL_NR) <= ((uint32_t)33)) && ((PLL_NR) >= ((uint32_t)2)))
400 
405 #define IS_RCC_PLL_NF(PLL_NF) (((PLL_NF) <= ((uint32_t)513)) && ((PLL_NF) >= ((uint32_t)2)))
406 
411 #define IS_RCC_CLK_DIV(CLK_DIV) ((CLK_DIV) < ((uint32_t)64))
412 
417  #define IS_RCC_SYS_FREQ(SYS_FREQ) (((SYS_FREQ) < ((uint32_t)200000000)) && ((SYS_FREQ) >= ((uint32_t)1000000)))
418 
429 
434 OperationStatus RCC_PLLAutoConfig(RCC_PLLRef_TypeDef RCC_PLLRef, uint32_t SysFreq);
435 void RCC_PLLInit(RCC_PLLInit_TypeDef* RCC_PLLInit_Struct);
436 void RCC_PLLDeInit();
437 void RCC_PLLStructInit(RCC_PLLInit_TypeDef* RCC_PLLInit_Struct);
439 
448 void RCC_PeriphClkCmd(RCC_PeriphClk_TypeDef RCC_PeriphClk, FunctionalState State);
451 
456 void RCC_USBClkConfig(RCC_USBClk_TypeDef RCC_USBClk, RCC_USBFreq_TypeDef RCC_USBFreq);
457 void RCC_USBClkCmd(FunctionalState State);
458 
467 void RCC_UARTClkSel(NT_UART_TypeDef* UARTx, RCC_UARTClk_TypeDef RCC_UARTClk);
468 void RCC_UARTClkDivConfig(NT_UART_TypeDef* UARTx, uint32_t DivVal, FunctionalState DivState);
469 void RCC_UARTClkCmd(NT_UART_TypeDef* UARTx, FunctionalState State);
470 
479 void RCC_SPIClkSel(NT_SPI_TypeDef* SPIx, RCC_SPIClk_TypeDef RCC_SPIClk);
480 void RCC_SPIClkDivConfig(NT_SPI_TypeDef* SPIx, uint32_t DivVal, FunctionalState DivState);
481 void RCC_SPIClkCmd(NT_SPI_TypeDef* SPIx, FunctionalState State);
482 
491 void RCC_ADCClkDivConfig(RCC_ADCClk_TypeDef RCC_ADCClk, uint32_t DivVal, FunctionalState DivState);
492 void RCC_ADCClkCmd(RCC_ADCClk_TypeDef RCC_ADCClk, FunctionalState State);
493 
506 void RCC_PeriphRstCmd(RCC_PeriphRst_TypeDef RCC_PeriphRst, FunctionalState State);
507 
512 #ifdef __cplusplus
513 }
514 #endif
515 
516 #endif /* __NIIETCM4_RCC_H */
517 
530 /******************* (C) COPYRIGHT 2015 NIIET *****END OF FILE****/
RCC_UARTClk_TypeDef
Выбор источника тактирования для UART.
Definition: niietcm4_rcc.h:107
void RCC_SPIClkCmd(NT_SPI_TypeDef *SPIx, FunctionalState State)
Включение тактирования SPI.
Definition: niietcm4_rcc.c:642
RCC_PLLRef_TypeDef
Выбор источника опорного сигнала PLL.
Definition: niietcm4_rcc.h:66
RCC_ADCClk_TypeDef
Выбор модуля ADC для настройки его тактового сигнала.
Definition: niietcm4_rcc.h:183
void RCC_PeriphClkCmd(RCC_PeriphClk_TypeDef RCC_PeriphClk, FunctionalState State)
Включение тактирования выбранного блока периферии.
Definition: niietcm4_rcc.c:336
FunctionalState
Описывает логическое состояние периферии. Используется для операций включения/выключения периферийных...
Definition: niietcm4.h:157
void RCC_USBClkConfig(RCC_USBClk_TypeDef RCC_USBClk, RCC_USBFreq_TypeDef RCC_USBFreq)
Настройка источника тактового сигнала для USB.
Definition: niietcm4_rcc.c:402
void RCC_UARTClkSel(NT_UART_TypeDef *UARTx, RCC_UARTClk_TypeDef RCC_UARTClk)
Настройка источника тактового сигнала для выбранного UART.
Definition: niietcm4_rcc.c:442
void RCC_SysClkDiv2Out(FunctionalState State)
Включение генерации тактового сигнала с частой равной половине системной на выводе H[0]...
Definition: niietcm4_rcc.c:106
void RCC_USBClkCmd(FunctionalState State)
Включение тактирования USB.
Definition: niietcm4_rcc.c:419
Структура инициализации PLL.
Definition: niietcm4_rcc.h:375
RCC_USBClk_TypeDef
Выбор источника тактирования для USB.
Definition: niietcm4_rcc.h:149
void RCC_ADCClkDivConfig(RCC_ADCClk_TypeDef RCC_ADCClk, uint32_t DivVal, FunctionalState DivState)
Настройка делителя тактового сигнала для выбранного ADC.
Definition: niietcm4_rcc.c:689
RCC_PLLNO_TypeDef
Выходной делитель NO.
Definition: niietcm4_rcc.h:88
void RCC_UARTClkDivConfig(NT_UART_TypeDef *UARTx, uint32_t DivVal, FunctionalState DivState)
Настройка делителя тактового сигнала для выбранного UART.
Definition: niietcm4_rcc.c:482
void RCC_PeriphRstCmd(RCC_PeriphRst_TypeDef RCC_PeriphRst, FunctionalState State)
Вывод из состояния сброса периферийных блоков.
Definition: niietcm4_rcc.c:863
void RCC_SPIClkSel(NT_SPI_TypeDef *SPIx, RCC_SPIClk_TypeDef RCC_SPIClk)
Настройка источника тактового сигнала для выбранного SPI.
Definition: niietcm4_rcc.c:563
RCC_SPIClk_TypeDef
Выбор источника тактирования для SPI.
Definition: niietcm4_rcc.h:128
void RCC_UARTClkCmd(NT_UART_TypeDef *UARTx, FunctionalState State)
Включение тактирования UART.
Definition: niietcm4_rcc.c:520
void RCC_PLLDeInit()
Устанавливает все регистры PLL значениями по умолчанию.
Definition: niietcm4_rcc.c:292
void RCC_ADCClkCmd(RCC_ADCClk_TypeDef RCC_ADCClk, FunctionalState State)
Включение тактирования ADC.
Definition: niietcm4_rcc.c:773
void RCC_PLLPowerDownCmd(FunctionalState State)
Управление режимом PowerDown PLL.
Definition: niietcm4_rcc.c:307
RCC_PLLNO_TypeDef RCC_PLLNO
Definition: niietcm4_rcc.h:381
OperationStatus RCC_PLLAutoConfig(RCC_PLLRef_TypeDef RCC_PLLRef, uint32_t SysFreq)
Автоматическая конфигурация PLL для получения желаемой системной частоты.
Definition: niietcm4_rcc.c:142
OperationStatus
Описывает коды возврата для функций при выполнении какой-либо операции.
Definition: niietcm4.h:173
RCC_USBFreq_TypeDef
Выбор фиксированной частоты на входе CLK_USB.
Definition: niietcm4_rcc.h:166
RCC_PLLRef_TypeDef RCC_PLLRef
Definition: niietcm4_rcc.h:379
RCC_SysClk_TypeDef RCC_SysClkStatus()
Текущий источник системного тактового сигнала.
Definition: niietcm4_rcc.c:388
void RCC_PLLInit(RCC_PLLInit_TypeDef *RCC_PLLInit_Struct)
Инициализирует PLL согласно параметрам структуры RCC_PLLInit_Struct.
Definition: niietcm4_rcc.c:256
OperationStatus RCC_SysClkSel(RCC_SysClk_TypeDef RCC_SysClk)
Выбор источника для системного тактового сигнала.
Definition: niietcm4_rcc.c:359
Это главный заголовочный файл драйвера, обычно включаемый в main.c.
RCC_PeriphRst_TypeDef
Управление сбросом периферийных блоков
Definition: niietcm4_rcc.h:293
RCC_PeriphClk_TypeDef
Управление тактированием периферийных блоков
Definition: niietcm4_rcc.h:249
RCC_SysClk_TypeDef
Выбор источника системной частоты.
Definition: niietcm4_rcc.h:220
void RCC_PLLStructInit(RCC_PLLInit_TypeDef *RCC_PLLInit_Struct)
Заполнение каждого члена структуры RCC_PLLInit_Struct значениями по умолчанию.
Definition: niietcm4_rcc.c:278
void RCC_SPIClkDivConfig(NT_SPI_TypeDef *SPIx, uint32_t DivVal, FunctionalState DivState)
Настройка делителя тактового сигнала для выбранного SPI.
Definition: niietcm4_rcc.c:604