-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcmu.c
42 lines (38 loc) · 3.28 KB
/
cmu.c
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
#include "cmu.h"
/******************************************************************************
* @brief initialize clock trees for each peripheral in use
(I2C, LDMA, LEUART, and LETIMER)
* @param none
* @return none
*****************************************************************************/
void cmu_init(void){
// High freq clock tree:
CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFRCO); // route HFRCO to HFCLK branch (I2C and LDMA clock tree 1)
CMU_OscillatorEnable(cmuOsc_HFXO, false, false); // disable HFXO
CMU_OscillatorEnable(cmuOsc_HFRCO, true, true); // enable HFRCO (I2C and LDMA clock tree 2)
CMU_ClockSelectSet(cmuClock_HFPER, cmuSelect_HFCLK); // route HFCLK to HFPERCLK(high freq periph clk) (I2C clock tree 3)
CMU_ClockSelectSet(cmuClock_BUS, cmuSelect_HFCLK); // route HFCLK to HFBUSCLK (LDMA clock tree 3)
CMU_ClockEnable(cmuClock_HF, true); // enable HFCLK (I2C and LDMA clock tree 4)
CMU_ClockEnable(cmuClock_HFPER, true); // enable HFPERCLK (I2C clock tree 5)
CMU_ClockEnable(cmuClock_BUS, true); // enable HFBUSCLK (LDMA clock tree 5)
CMU_HFXOAutostartEnable(true, false, false);
// By default, LFRCO is enabled:
CMU_OscillatorEnable(cmuOsc_LFRCO, false, false); // DISABLE LFRCO
CMU_OscillatorEnable(cmuOsc_ULFRCO, false, false); // DISABLE ULFRCO
// Low freq clock tree:
CMU_OscillatorEnable(cmuOsc_LFXO, true, true); // enable LFXO (LETIMER and LEUART clock tree 1)
CMU_OscillatorEnable(cmuOsc_ULFRCO, true, true); // enable ULFRCO (CRYOTIMER clock tree 1)
CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFXO); // route LFXO to LFACLK (LETIMER clock tree 2)
CMU_ClockEnable(cmuClock_LFA, true); // enable LFACLK (LETIMER clock tree 3)
CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFXO); // route LFXO to LFBCLK (LEUART clock tree 2)
CMU_ClockEnable(cmuClock_LFB, true); // enable LFBCLK (LEUART clock tree 3)
CMU_ClockSelectSet(cmuClock_CRYOTIMER, cmuSelect_ULFRCO);// route ULFRCO to CRYOCLK (CRYOTIMER clock tree 2)
CMU_ClockEnable(cmuClock_CRYOTIMER, true); // enable CRYOCLK (CRYOTIMER clock tree 3)
CMU_ClockEnable(cmuClock_CORELE, true);
// Enable peripheral clocks:
CMU_ClockEnable(cmuClock_GPIO, true); // connect clock source to GPIO clock
CMU_ClockEnable(cmuClock_LETIMER0, true); // connect clock source(LFA) to LETIMER clock tree (LETIMER clock tree 4)
CMU_ClockEnable(cmuClock_LEUART0, true); // connect clock source(LFB) to LEUART clock tree (LEUART clock tree 4)
CMU_ClockEnable(cmuClock_I2C0, true); // connect clock source (HFPER) to I2C clock tree (I2C clock tree 6)
CMU_ClockEnable(cmuClock_LDMA, true); // connect clock source (HFBUS) to LDMA clock tree (LDMA clock tree 6)
}