HPM SDK
HPMicro Software Development Kit
hpm_tsns_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2022 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 
9 #ifndef HPM_TSNS_DRV_H
10 #define HPM_TSNS_DRV_H
11 
12 #include "hpm_common.h"
13 #include "hpm_tsns_regs.h"
14 
23 /***********************************************************************************************************************
24  *
25  * Definitions
26  *
27  **********************************************************************************************************************/
28 #define TSNS_TEMP_SCALE 256
29 
30 typedef enum {
37 
38 typedef enum {
41 } tsns_event_t;
42 
43 #ifdef __cplusplus
44 extern "C" {
45 #endif
46 
47 
53 static inline void tsns_enable(TSNS_Type *ptr)
54 {
56 }
57 
63 static inline void tsns_disable(TSNS_Type *ptr)
64 {
66 }
67 
75 static inline bool tsns_temperature_is_valid(TSNS_Type *ptr)
76 {
77  return ptr->STATUS & TSNS_STATUS_VALID_MASK;
78 }
79 
87 static inline int32_t tsns_get_max_temp_raw(TSNS_Type *ptr)
88 {
89  return TSNS_TMAX_T_GET(ptr->TMAX);
90 }
91 
99 static inline int32_t tsns_get_min_temp_raw(TSNS_Type *ptr)
100 {
101  return TSNS_TMIN_T_GET(ptr->TMIN);
102 }
103 
111 static inline int32_t tsns_get_current_temp_in_raw(TSNS_Type *ptr)
112 {
113  while (!tsns_temperature_is_valid(ptr)) {
114  ;
115  }
116  return TSNS_T_T_GET(ptr->T);
117 }
118 
126 static inline float tsns_get_current_temp(TSNS_Type *ptr)
127 {
128  return (float)(((int32_t)tsns_get_current_temp_in_raw(ptr) / TSNS_TEMP_SCALE));
129 }
130 
138 static inline uint32_t tsns_get_temp_age(TSNS_Type *ptr)
139 {
140  return TSNS_AGE_AGE_GET(ptr->AGE);
141 }
142 
149 static inline void tsns_set_reset_threshold_high(TSNS_Type *ptr, uint32_t high)
150 {
152 }
153 
160 static inline void tsns_set_reset_threshold_low(TSNS_Type *ptr, uint32_t low)
161 {
163 }
164 
171 {
173 }
174 
181 {
183 }
184 
191 static inline void tsns_set_irq_threshold_high(TSNS_Type *ptr, uint32_t high)
192 {
194 }
195 
202 static inline void tsns_set_irq_threshold_low(TSNS_Type *ptr, uint32_t low)
203 {
205 }
206 
212 static inline void tsns_enable_limit_trigger_irq(TSNS_Type *ptr)
213 {
215 }
216 
223 static inline void tsns_set_validity(TSNS_Type *ptr, uint32_t validity)
224 {
225  ptr->VALIDITY = TSNS_VALIDITY_VALIDITY_SET(validity);
226 }
227 
235 static inline void tsns_config_irq_threshold(TSNS_Type *ptr, uint32_t high, uint32_t low)
236 {
237  tsns_set_irq_threshold_low(ptr, low);
238  tsns_set_irq_threshold_high(ptr, high);
239 }
240 
248 static inline void tsns_config_reset_threshold(TSNS_Type *ptr, uint32_t high, uint32_t low)
249 {
252 }
253 
259 static inline void tsns_enable_compare_max(TSNS_Type *ptr)
260 {
262 }
263 
269 static inline void tsns_enable_compare_min(TSNS_Type *ptr)
270 {
272 }
273 
279 static inline void tsns_disable_compare_max(TSNS_Type *ptr)
280 {
282 }
283 
289 static inline void tsns_disable_compare_min(TSNS_Type *ptr)
290 {
292 }
293 
300 static inline void tsns_set_speed(TSNS_Type *ptr, uint8_t speed)
301 {
302  assert(speed >= 24);
303  ptr->CONFIG = (ptr->CONFIG & ~TSNS_CONFIG_SPEED_MASK) | TSNS_CONFIG_SPEED_SET(speed);
304 }
305 
312 static inline void tsns_set_average(TSNS_Type *ptr, uint8_t average)
313 {
315 }
316 
322 static inline void tsns_enable_async_mode(TSNS_Type *ptr)
323 {
325 }
326 
332 static inline void tsns_disable_async_mode(TSNS_Type *ptr)
333 {
335 }
336 
342 static inline void tsns_enable_trigger_mode(TSNS_Type *ptr)
343 {
345 }
346 
352 static inline void tsns_enable_continuous_mode(TSNS_Type *ptr)
353 {
355 }
356 
362 static inline void tsns_trigger_measurement(TSNS_Type *ptr)
363 {
364  uint32_t tmp = ptr->CONFIG;
367  ptr->CONFIG = tmp;
368 }
369 
377 {
378  ptr->FLAG |= mask;
379 }
380 
387 static inline uint32_t tsns_get_flag_value(TSNS_Type *ptr)
388 {
389  return ptr->FLAG;
390 }
391 
392 
400 void tsns_configure_low_limit_event(TSNS_Type *ptr, int32_t low, tsns_event_t e);
401 
409 void tsns_configure_high_limit_event(TSNS_Type *ptr, int32_t high, tsns_event_t e);
410 
419 void tsns_configure_limit_event(TSNS_Type *ptr, int32_t high, int32_t low, tsns_event_t e);
420 
421 #ifdef __cplusplus
422 }
423 #endif
428 #endif /* HPM_TSNS_DRV_H */
#define TSNS_TMAX_T_GET(x)
Definition: hpm_tsns_regs.h:49
#define TSNS_AGE_AGE_GET(x)
Definition: hpm_tsns_regs.h:69
#define TSNS_CONFIG_AVERAGE_MASK
Definition: hpm_tsns_regs.h:159
#define TSNS_FLAG_OVER_TEMP_MASK
Definition: hpm_tsns_regs.h:247
#define TSNS_CONFIG_SPEED_SET(x)
Definition: hpm_tsns_regs.h:146
#define TSNS_UPPER_LIM_IRQ_T_SET(x)
Definition: hpm_tsns_regs.h:270
#define TSNS_UPPER_LIM_RST_T_SET(x)
Definition: hpm_tsns_regs.h:292
#define TSNS_STATUS_TRIGGER_MASK
Definition: hpm_tsns_regs.h:88
#define TSNS_CONFIG_RST_EN_MASK
Definition: hpm_tsns_regs.h:109
#define TSNS_VALIDITY_VALIDITY_SET(x)
Definition: hpm_tsns_regs.h:208
#define TSNS_CONFIG_AVERAGE_SET(x)
Definition: hpm_tsns_regs.h:161
#define TSNS_FLAG_IRQ_MASK
Definition: hpm_tsns_regs.h:257
#define TSNS_LOWER_LIM_IRQ_T_SET(x)
Definition: hpm_tsns_regs.h:281
#define TSNS_FLAG_RECORD_MIN_CLR_MASK
Definition: hpm_tsns_regs.h:217
#define TSNS_FLAG_RECORD_MAX_CLR_MASK
Definition: hpm_tsns_regs.h:227
#define TSNS_LOWER_LIM_RST_T_SET(x)
Definition: hpm_tsns_regs.h:303
#define TSNS_CONFIG_IRQ_EN_MASK
Definition: hpm_tsns_regs.h:99
#define TSNS_T_T_GET(x)
Definition: hpm_tsns_regs.h:39
#define TSNS_CONFIG_SPEED_MASK
Definition: hpm_tsns_regs.h:144
#define TSNS_CONFIG_ASYNC_MASK
Definition: hpm_tsns_regs.h:183
#define TSNS_TMIN_T_GET(x)
Definition: hpm_tsns_regs.h:59
#define TSNS_CONFIG_COMPARE_MAX_EN_MASK
Definition: hpm_tsns_regs.h:129
#define TSNS_CONFIG_ENABLE_MASK
Definition: hpm_tsns_regs.h:195
#define TSNS_CONFIG_CONTINUOUS_MASK
Definition: hpm_tsns_regs.h:171
#define TSNS_CONFIG_COMPARE_MIN_EN_MASK
Definition: hpm_tsns_regs.h:119
#define TSNS_FLAG_UNDER_TEMP_MASK
Definition: hpm_tsns_regs.h:237
#define TSNS_STATUS_VALID_MASK
Definition: hpm_tsns_regs.h:79
static void tsns_enable(TSNS_Type *ptr)
Enable temperature sensor.
Definition: hpm_tsns_drv.h:53
void tsns_configure_high_limit_event(TSNS_Type *ptr, int32_t high, tsns_event_t e)
configure high temperature limite to trigger event
Definition: hpm_tsns_drv.c:26
static void tsns_set_irq_threshold_low(TSNS_Type *ptr, uint32_t low)
Set temperature low limit to trigger irq.
Definition: hpm_tsns_drv.h:202
void tsns_configure_low_limit_event(TSNS_Type *ptr, int32_t low, tsns_event_t e)
configure low temperature limite to trigger event
Definition: hpm_tsns_drv.c:10
static void tsns_enable_continuous_mode(TSNS_Type *ptr)
Enable continuous mode.
Definition: hpm_tsns_drv.h:352
static void tsns_disable_limit_trigger_irq(TSNS_Type *ptr)
Disable temperature limit to trigger irq.
Definition: hpm_tsns_drv.h:180
static uint32_t tsns_get_flag_value(TSNS_Type *ptr)
Get the flag value from a TSNS.
Definition: hpm_tsns_drv.h:387
void tsns_configure_limit_event(TSNS_Type *ptr, int32_t high, int32_t low, tsns_event_t e)
configure temperature limite to trigger event
Definition: hpm_tsns_drv.c:42
tsns_event_t
Definition: hpm_tsns_drv.h:38
static void tsns_set_validity(TSNS_Type *ptr, uint32_t validity)
Set validity of current measured temperature in 24Mhz clock cycles.
Definition: hpm_tsns_drv.h:223
static uint32_t tsns_get_temp_age(TSNS_Type *ptr)
Get temperature age.
Definition: hpm_tsns_drv.h:138
static void tsns_set_average(TSNS_Type *ptr, uint8_t average)
Set average.
Definition: hpm_tsns_drv.h:312
static void tsns_enable_compare_max(TSNS_Type *ptr)
Enable compare max temperature.
Definition: hpm_tsns_drv.h:259
static float tsns_get_current_temp(TSNS_Type *ptr)
Get current temperature in celsius degree.
Definition: hpm_tsns_drv.h:126
static void tsns_set_irq_threshold_high(TSNS_Type *ptr, uint32_t high)
Set temperature high limit to trigger irq.
Definition: hpm_tsns_drv.h:191
static void tsns_config_reset_threshold(TSNS_Type *ptr, uint32_t high, uint32_t low)
Set temperature limit to trigger reset.
Definition: hpm_tsns_drv.h:248
static void tsns_enable_limit_trigger_irq(TSNS_Type *ptr)
Enable temperature limit to trigger irq.
Definition: hpm_tsns_drv.h:212
static void tsns_enable_trigger_mode(TSNS_Type *ptr)
Enable trigger mode.
Definition: hpm_tsns_drv.h:342
static void tsns_config_irq_threshold(TSNS_Type *ptr, uint32_t high, uint32_t low)
Set temperature limit to trigger irq.
Definition: hpm_tsns_drv.h:235
static void tsns_disable_async_mode(TSNS_Type *ptr)
Disable Async mode and switch to active mode.
Definition: hpm_tsns_drv.h:332
static void tsns_enable_async_mode(TSNS_Type *ptr)
Enable Async mode.
Definition: hpm_tsns_drv.h:322
tsns_clear_type_mask_t
Definition: hpm_tsns_drv.h:30
static int32_t tsns_get_min_temp_raw(TSNS_Type *ptr)
Get minimum measured temperature in raw.
Definition: hpm_tsns_drv.h:99
static void tsns_set_reset_threshold_low(TSNS_Type *ptr, uint32_t low)
Set temperature low limit to trigger reset.
Definition: hpm_tsns_drv.h:160
static void tsns_clear_with_mask(TSNS_Type *ptr, tsns_clear_type_mask_t mask)
clear tsns flag or recorded data
Definition: hpm_tsns_drv.h:376
static bool tsns_temperature_is_valid(TSNS_Type *ptr)
Check if current temperature value is valid or not.
Definition: hpm_tsns_drv.h:75
#define TSNS_TEMP_SCALE
Definition: hpm_tsns_drv.h:28
static void tsns_disable_compare_min(TSNS_Type *ptr)
Disable compare min temperature.
Definition: hpm_tsns_drv.h:289
static int32_t tsns_get_max_temp_raw(TSNS_Type *ptr)
Get maximum measured temperature in raw.
Definition: hpm_tsns_drv.h:87
static void tsns_enable_compare_min(TSNS_Type *ptr)
Enable compare min temperature.
Definition: hpm_tsns_drv.h:269
static void tsns_set_speed(TSNS_Type *ptr, uint8_t speed)
Set measurement speed.
Definition: hpm_tsns_drv.h:300
static void tsns_enable_limit_trigger_reset(TSNS_Type *ptr)
Enable temperature limit to trigger irq.
Definition: hpm_tsns_drv.h:170
static void tsns_set_reset_threshold_high(TSNS_Type *ptr, uint32_t high)
Set temperature high limit to trigger rest.
Definition: hpm_tsns_drv.h:149
static void tsns_disable(TSNS_Type *ptr)
Disable temperature sensor.
Definition: hpm_tsns_drv.h:63
static void tsns_disable_compare_max(TSNS_Type *ptr)
Disable compare max temperature.
Definition: hpm_tsns_drv.h:279
static void tsns_trigger_measurement(TSNS_Type *ptr)
trigger measurement
Definition: hpm_tsns_drv.h:362
static int32_t tsns_get_current_temp_in_raw(TSNS_Type *ptr)
Get current temperature in raw.
Definition: hpm_tsns_drv.h:111
@ tsns_event_reset
Definition: hpm_tsns_drv.h:40
@ tsns_event_irq
Definition: hpm_tsns_drv.h:39
@ tsns_clear_under_temp
Definition: hpm_tsns_drv.h:33
@ tsns_clear_over_temp
Definition: hpm_tsns_drv.h:34
@ tsns_clear_max
Definition: hpm_tsns_drv.h:32
@ tsns_clear_irq
Definition: hpm_tsns_drv.h:35
@ tsns_clear_min
Definition: hpm_tsns_drv.h:31
Definition: hpm_tsns_regs.h:12
__R uint32_t T
Definition: hpm_tsns_regs.h:13
__RW uint32_t FLAG
Definition: hpm_tsns_regs.h:20
__RW uint32_t VALIDITY
Definition: hpm_tsns_regs.h:19
__R uint32_t TMAX
Definition: hpm_tsns_regs.h:14
__R uint32_t AGE
Definition: hpm_tsns_regs.h:16
__RW uint32_t LOWER_LIM_IRQ
Definition: hpm_tsns_regs.h:22
__RW uint32_t STATUS
Definition: hpm_tsns_regs.h:17
__RW uint32_t CONFIG
Definition: hpm_tsns_regs.h:18
__RW uint32_t UPPER_LIM_IRQ
Definition: hpm_tsns_regs.h:21
__R uint32_t TMIN
Definition: hpm_tsns_regs.h:15