~aleteoryx/muditaos

ref: 2fd3ea0c0663e75db67b9719944eac885c39e8ec muditaos/module-bsp/board/rt1051/drivers/RT1051DriverPLL.cpp -rw-r--r-- 2.9 KiB
2fd3ea0c — Mateusz Piesta [BH-1175] Various sample rates support 4 years ago
                                                                                
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
90
91
92
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include "RT1051DriverPLL.hpp"
#include <log/log.hpp>
#include "board/clock_config.h"

namespace drivers
{

    RT1051DriverPLL::RT1051DriverPLL(const drivers::PLLInstances &inst, const drivers::DriverPLLParams &params)
        : DriverPLL(params), instance(inst)
    {

        switch (instance) {
        case PLLInstances::PLL4_Audio: {
            clkPLL4setup(CLK_ENABLE,
                         clock_audio_pll_config_t{.loopDivider = static_cast<uint8_t>(params.loopDivider),
                                                  .postDivider = static_cast<uint8_t>(params.postDivider),
                                                  .numerator   = params.numerator,
                                                  .denominator = params.denominator,
                                                  .src         = static_cast<uint8_t>(params.src)});
            name = "PLL4_Audio";
        } break;
        case PLLInstances::PLL3: {
            clkPLL3setup(CLK_ENABLE);
            name = "PLL3";
        } break;
        case PLLInstances::PLL3_PFD0: {
            clkPLL3_PFD0setup(CLK_ENABLE);
            name = "PLL3_PFD0";
        } break;
        case PLLInstances::PLL3_PFD1: {
            clkPLL3_PFD1setup(CLK_ENABLE);
            name = "PLL3_PFD1";
        } break;
        case PLLInstances::PLL3_PFD2: {
            clkPLL3_PFD2setup(CLK_ENABLE);
            name = "PLL3_PFD2";
        } break;
        case PLLInstances::PLL2_PFD2:
            clkPLL2_PFD2setup(CLK_ENABLE);
            name = "PLL2_PFD2";
            break;
        case PLLInstances::PLL1_ARM: {
            clkPLL1setup(CLK_ENABLE);
            name = "PLL1_ARM";
        } break;
        case PLLInstances::OSC_24M: {
            // not used
        } break;
        default:
            break;
        }
        LOG_DEBUG("Init: %s", name.c_str());
    }

    RT1051DriverPLL::~RT1051DriverPLL()
    {
        switch (instance) {
        case PLLInstances::PLL4_Audio: {
            clkPLL4setup(CLK_DISABLE, {});
        } break;
        case PLLInstances::PLL3: {
            clkPLL3setup(CLK_DISABLE);
        } break;
        case PLLInstances::PLL3_PFD0: {
            clkPLL3_PFD0setup(CLK_DISABLE);
        } break;
        case PLLInstances::PLL3_PFD1: {
            clkPLL3_PFD1setup(CLK_DISABLE);
        } break;
        case PLLInstances::PLL3_PFD2: {
            clkPLL3_PFD2setup(CLK_DISABLE);
        } break;
        case PLLInstances::PLL2_PFD2:
            clkPLL2_PFD2setup(CLK_DISABLE);
            break;
        case PLLInstances::PLL1_ARM: {
            clkPLL1setup(CLK_DISABLE);
        } break;
        case PLLInstances::OSC_24M: {
            // not used
        } break;
        default:
            break;
        }

        LOG_DEBUG("Deinit: %s", name.c_str());
    }

} // namespace drivers