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