Contiki-NG
temperature-sensor.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2015, Nordic Semiconductor
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  * 3. Neither the name of the Institute nor the names of its contributors
14  * may be used to endorse or promote products derived from this software
15  * without specific prior written permission.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  */
30 
31 /**
32  * \addtogroup nrf52840generic All nRF52840 platforms
33  * @{
34  *
35  * \addtogroup nrf52840-devices Device drivers
36  * @{
37  *
38  * \addtogroup nrf52840-devices-temp Temperature sensor driver
39  * This is a driver for nRF52840 hardware sensor.
40  *
41  * @{
42  *
43  * \file
44  * Temperature sensor implementation.
45  * \author
46  * Wojciech Bober <wojciech.bober@nordicsemi.no>
47  *
48  */
49 #include "contiki.h"
50 #include "nrf_temp.h"
51 #include "temperature-sensor.h"
52 
53 const struct sensors_sensor temperature_sensor;
54 
55 /*---------------------------------------------------------------------------*/
56 /**
57  * \brief Returns device temperature
58  * \param type ignored
59  * \return Device temperature in degrees Celsius
60  */
61 static int
62 value(int type)
63 {
64  int32_t volatile temp;
65 
66  NRF_TEMP->TASKS_START = 1;
67  /* nRF52832 datasheet: one temperature measurement takes typically 36 us */
68  RTIMER_BUSYWAIT_UNTIL(NRF_TEMP->EVENTS_DATARDY, RTIMER_SECOND * 72 / 1000000);
69  NRF_TEMP->EVENTS_DATARDY = 0;
70  temp = nrf_temp_read();
71  NRF_TEMP->TASKS_STOP = 1;
72 
73  return temp;
74 }
75 /*---------------------------------------------------------------------------*/
76 /**
77  * \brief Configures temperature sensor
78  * \param type initializes the hardware sensor when \a type is set to
79  * \a SENSORS_HW_INIT
80  * \param c ignored
81  * \return 1
82  */
83 static int
84 configure(int type, int c)
85 {
86  if(type == SENSORS_HW_INIT) {
87  nrf_temp_init();
88  }
89  return 1;
90 }
91 /**
92  * \brief Return temperature sensor status
93  * \param type ignored
94  * \return 1
95  */
96 /*---------------------------------------------------------------------------*/
97 static int
98 status(int type)
99 {
100  return 1;
101 }
102 /*---------------------------------------------------------------------------*/
103 SENSORS_SENSOR(temperature_sensor, TEMPERATURE_SENSOR, value, configure, status);
104 /**
105  * @}
106  * @}
107  * @}
108  */
Temperature sensor header file.
#define RTIMER_BUSYWAIT_UNTIL(cond, max_time)
Busy-wait until a condition for at most max_time.
Definition: rtimer.h:211
#define RTIMER_SECOND
Number of rtimer ticks for 1 second.
Definition: rtimer.h:112
static int status(int type)
Return temperature sensor status.
static int configure(int type, int c)
Configures temperature sensor.
static int value(int type)
Returns device temperature.