-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRCC.h
89 lines (72 loc) · 4.25 KB
/
RCC.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#ifndef __RCC_H__
#define __RCC_H__
#include "stm32f4xx.h"
#include <stdint.h>
static inline void EnableAHB1PeripheralClock(uint32_t peripherals) { RCC->AHB1ENR|=peripherals; }
static inline void EnableAHB2PeripheralClock(uint32_t peripherals) { RCC->AHB2ENR|=peripherals; }
static inline void EnableAHB3PeripheralClock(uint32_t peripherals) { RCC->AHB3ENR|=peripherals; }
static inline void EnableAPB1PeripheralClock(uint32_t peripherals) { RCC->APB1ENR|=peripherals; }
static inline void EnableAPB2PeripheralClock(uint32_t peripherals) { RCC->APB2ENR|=peripherals; }
static inline void DisableAHB1PeripheralClock(uint32_t peripherals) { RCC->AHB1ENR&=~peripherals; }
static inline void DisableAHB2PeripheralClock(uint32_t peripherals) { RCC->AHB2ENR&=~peripherals; }
static inline void DisableAHB3PeripheralClock(uint32_t peripherals) { RCC->AHB3ENR&=~peripherals; }
static inline void DisableAPB1PeripheralClock(uint32_t peripherals) { RCC->APB1ENR&=~peripherals; }
static inline void DisableAPB2PeripheralClock(uint32_t peripherals) { RCC->APB2ENR&=~peripherals; }
static inline void SetAHB1PeripheralReset(uint32_t peripherals) { RCC->AHB1RSTR|=peripherals; }
static inline void SetAHB2PeripheralReset(uint32_t peripherals) { RCC->AHB2RSTR|=peripherals; }
static inline void SetAHB3PeripheralReset(uint32_t peripherals) { RCC->AHB3RSTR|=peripherals; }
static inline void SetAPB1PeripheralReset(uint32_t peripherals) { RCC->APB1RSTR|=peripherals; }
static inline void SetAPB2PeripheralReset(uint32_t peripherals) { RCC->APB2RSTR|=peripherals; }
static inline void ClearAHB1PeripheralReset(uint32_t peripherals) { RCC->AHB1RSTR&=~peripherals; }
static inline void ClearAHB2PeripheralReset(uint32_t peripherals) { RCC->AHB2RSTR&=~peripherals; }
static inline void ClearAHB3PeripheralReset(uint32_t peripherals) { RCC->AHB3RSTR&=~peripherals; }
static inline void ClearAPB1PeripheralReset(uint32_t peripherals) { RCC->APB1RSTR&=~peripherals; }
static inline void ClearAPB2PeripheralReset(uint32_t peripherals) { RCC->APB2RSTR&=~peripherals; }
static inline void EnableAHB1PeripheralLowPowerClock(uint32_t peripherals) { RCC->AHB1LPENR|=peripherals; }
static inline void EnableAHB2PeripheralLowPowerClock(uint32_t peripherals) { RCC->AHB2LPENR|=peripherals; }
static inline void EnableAHB3PeripheralLowPowerClock(uint32_t peripherals) { RCC->AHB3LPENR|=peripherals; }
static inline void EnableAPB1PeripheralLowPowerClock(uint32_t peripherals) { RCC->APB1LPENR|=peripherals; }
static inline void EnableAPB2PeripheralLowPowerClock(uint32_t peripherals) { RCC->APB2LPENR|=peripherals; }
static inline void DisableAHB1PeripheralLowPowerClock(uint32_t peripherals) { RCC->AHB1LPENR&=~peripherals; }
static inline void DisableAHB2PeripheralLowPowerClock(uint32_t peripherals) { RCC->AHB2LPENR&=~peripherals; }
static inline void DisableAHB3PeripheralLowPowerClock(uint32_t peripherals) { RCC->AHB3LPENR&=~peripherals; }
static inline void DisableAPB1PeripheralLowPowerClock(uint32_t peripherals) { RCC->APB1LPENR&=~peripherals; }
static inline void DisableAPB2PeripheralLowPowerClock(uint32_t peripherals) { RCC->APB2LPENR&=~peripherals; }
static const uint8_t APBAHBPrescalerTable[16]={0,0,0,0,1,2,3,4,1,2,3,4,6,7,8,9};
static inline uint32_t SYSCLKFrequency()
{
switch(RCC->CFGR&RCC_CFGR_SWS)
{
case 0x00: // HSI used as system clock source
return HSI_VALUE;
default:
case 0x04: // HSE used as system clock source
return HSE_VALUE;
case 0x08: // PLL used as system clock source
{
uint32_t srcclock;
if(RCC->PLLCFGR&RCC_PLLCFGR_PLLSRC) srcclock=HSE_VALUE; // HSE used as PLL clock source
else srcclock=HSI_VALUE; // HSI used as PLL clock source
uint32_t pllm=RCC->PLLCFGR&RCC_PLLCFGR_PLLM;
uint32_t pllvco=(srcclock/pllm)*((RCC->PLLCFGR&RCC_PLLCFGR_PLLN)>>6);
uint32_t pllp=(((RCC->PLLCFGR&RCC_PLLCFGR_PLLP)>>16)+1)*2;
return pllvco/pllp;
}
}
}
static inline uint32_t HCLKFrequency()
{
uint32_t shift=APBAHBPrescalerTable[(RCC->CFGR&RCC_CFGR_HPRE)>>4];
return SYSCLKFrequency()>>shift;
}
static inline uint32_t PCLK1Frequency()
{
uint32_t shift=APBAHBPrescalerTable[(RCC->CFGR&RCC_CFGR_PPRE1)>>10];
return SYSCLKFrequency()>>shift;
}
static inline uint32_t PCLK2Frequency()
{
uint32_t shift=APBAHBPrescalerTable[(RCC->CFGR&RCC_CFGR_PPRE2)>>13];
return SYSCLKFrequency()>>shift;
}
#endif