1 /* 2 * Copyright (c) 2017 - 2023, Nordic Semiconductor ASA 3 * All rights reserved. 4 * 5 * SPDX-License-Identifier: BSD-3-Clause 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, this 11 * list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of Nordic Semiconductor ASA nor the names of its 18 * contributors may be used to endorse or promote products derived from this 19 * software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY, AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 * 33 */ 34 35 /** 36 * @brief This module defines the Clock Abstraction Layer for the 802.15.4 driver. 37 * 38 * Clock Abstraction Layer can be used by other modules to start and stop nRF52840 clocks. 39 * 40 * It is used by the Radio Scheduler (RSCH) to start the HF clock when entering continuous mode 41 * and to stop the HF clock after exiting the continuous mode. 42 * 43 * It is also used by the standalone Low Power Timer Abstraction Layer implementation 44 * to start the LF clock during the initialization. 45 * 46 */ 47 48 #ifndef NRF_802154_CLOCK_H_ 49 #define NRF_802154_CLOCK_H_ 50 51 #include <stdbool.h> 52 53 #ifdef __cplusplus 54 extern "C" { 55 #endif 56 57 /** 58 * @defgroup nrf_802154_clock Clock Abstraction Layer for the 802.15.4 driver 59 * @{ 60 * @ingroup nrf_802154_clock 61 * @brief Clock Abstraction Layer interface for the 802.15.4 driver. 62 * 63 */ 64 65 /** 66 * @brief Initializes the clock driver. 67 */ 68 void nrf_802154_clock_init(void); 69 70 /** 71 * @brief Deinitializes the clock driver. 72 */ 73 void nrf_802154_clock_deinit(void); 74 75 /** 76 * @brief Starts the High Frequency Clock. 77 * 78 * This function is asynchronous, meant to request the ramp-up of the High Frequency Clock and exit. 79 * When the High Frequency Clock is ready, @ref nrf_802154_hfclk_ready() is called. 80 * 81 */ 82 void nrf_802154_clock_hfclk_start(void); 83 84 /** 85 * @brief Stops the High Frequency Clock. 86 */ 87 void nrf_802154_clock_hfclk_stop(void); 88 89 /** 90 * @brief Checks if the High Frequency Clock is running. 91 * 92 * @retval true High Frequency Clock is running. 93 * @retval false High Frequency Clock is not running. 94 * 95 */ 96 bool nrf_802154_clock_hfclk_is_running(void); 97 98 /** 99 * @brief Starts the Low Frequency Clock. 100 * 101 * This function is asynchronous, meant to request the ramp-up of the Low Frequency Clock and exit. 102 * When the Low Frequency Clock is ready, @ref nrf_802154_lfclk_ready() is called. 103 * 104 */ 105 void nrf_802154_clock_lfclk_start(void); 106 107 /** 108 * @brief Stops the Low Frequency Clock. 109 */ 110 void nrf_802154_clock_lfclk_stop(void); 111 112 /** 113 * @brief Checks if the Low Frequency Clock is running. 114 * 115 * @retval true Low Frequency Clock is running. 116 * @retval false Low Frequency Clock is not running. 117 */ 118 bool nrf_802154_clock_lfclk_is_running(void); 119 120 /** 121 * @brief Callback function executed when the High Frequency Clock is ready. 122 */ 123 extern void nrf_802154_clock_hfclk_ready(void); 124 125 /** 126 * @brief Callback function executed when the Low Frequency Clock is ready. 127 */ 128 extern void nrf_802154_clock_lfclk_ready(void); 129 130 /** 131 *@} 132 **/ 133 134 #ifdef __cplusplus 135 } 136 #endif 137 138 #endif /* NRF_802154_CLOCK_H_ */ 139