1 /*
2 * Copyright (c) 2022 - 2024, 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 the copyright holder 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 #include <nrfx_example.h>
35 #include <nrfx_temp.h>
36
37 #define NRFX_LOG_MODULE EXAMPLE
38 #define NRFX_EXAMPLE_CONFIG_LOG_ENABLED 1
39 #define NRFX_EXAMPLE_CONFIG_LOG_LEVEL 3
40 #include <nrfx_log.h>
41
42 /**
43 * @defgroup nrfx_temp_non_blocking_example Non-blocking TEMP example
44 * @{
45 * @ingroup nrfx_temp_examples
46 *
47 * @brief Example showing the functionality of nrfx_temp driver operating in the non-blocking mode.
48 *
49 * @details Application initializes nrfx_temp driver. The @ref temp_handler() is executed with
50 * relevant log message, until a number of measurements taken is equal to the value
51 * specified by the user.
52 */
53
54 /** @brief Symbol specifying the number of temperature measurements to take. */
55 #define TEMP_ITERATIONS 5UL
56
57 /**
58 * @brief Function for handling TEMP driver events.
59 *
60 * @param[in] temperature Temperature data passed to the event handler.
61 */
temp_handler(int32_t temperature)62 static void temp_handler(int32_t temperature)
63 {
64 nrfx_err_t status;
65 (void)status;
66
67 static uint32_t i = 1;
68 int32_t celsius_temperature = nrfx_temp_calculate(temperature);
69 int32_t whole_celsius = celsius_temperature / 100;
70 uint8_t fraction_celsius = NRFX_ABS(celsius_temperature % 100);
71
72 NRFX_LOG_INFO("Measured temperature: %d.%02u [C]", whole_celsius, fraction_celsius);
73
74 if (i < TEMP_ITERATIONS)
75 {
76 status = nrfx_temp_measure();
77 NRFX_ASSERT(status == NRFX_SUCCESS);
78 i++;
79 }
80 else
81 {
82 nrfx_temp_uninit();
83 }
84 }
85
86 /**
87 * @brief Function for application main entry.
88 *
89 * @return Nothing.
90 */
main(void)91 int main(void)
92 {
93 nrfx_err_t status;
94 (void)status;
95
96 #if defined(__ZEPHYR__)
97 IRQ_CONNECT(NRFX_IRQ_NUMBER_GET(NRF_TEMP), IRQ_PRIO_LOWEST, nrfx_temp_irq_handler, 0, 0);
98 #endif
99
100 NRFX_EXAMPLE_LOG_INIT();
101
102 NRFX_LOG_INFO("Starting nrfx_temp non-blocking example.");
103 NRFX_EXAMPLE_LOG_PROCESS();
104
105 nrfx_temp_config_t config = NRFX_TEMP_DEFAULT_CONFIG;
106 status = nrfx_temp_init(&config, temp_handler);
107 NRFX_ASSERT(status == NRFX_SUCCESS);
108
109 status = nrfx_temp_measure();
110 NRFX_ASSERT(status == NRFX_SUCCESS);
111
112 while (1)
113 {
114 NRFX_EXAMPLE_LOG_PROCESS();
115 }
116 }
117
118 /** @} */
119