1 /*
2 * Copyright (c) 2023 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * Note that the function prototypes are taken from the NRFx HAL
7 */
8 #include "hal/nrf_temp.h"
9 #include "bs_tracing.h"
10 #include "NHW_TEMP.h"
11
nrf_temp_task_trigger(NRF_TEMP_Type * p_reg,nrf_temp_task_t temp_task)12 void nrf_temp_task_trigger(NRF_TEMP_Type * p_reg, nrf_temp_task_t temp_task)
13 {
14 *((volatile uint32_t *)((uint8_t *)p_reg + (uint32_t)temp_task)) = 0x1UL;
15
16 if ( temp_task == NRF_TEMP_TASK_START ) {
17 nhw_TEMP_regw_sideeffects_TASKS_START();
18 } else if ( temp_task == NRF_TEMP_TASK_STOP ) {
19 nhw_TEMP_regw_sideeffects_TASKS_STOP();
20 } else {
21 bs_trace_error_line_time("Not supported task started in %s\n", __func__);
22 }
23 }
24
nrf_temp_int_enable(NRF_TEMP_Type * p_reg,uint32_t mask)25 void nrf_temp_int_enable(NRF_TEMP_Type * p_reg, uint32_t mask)
26 {
27 NRF_TEMP_regs.INTENSET = mask;
28 nhw_TEMP_regw_sideeffects_INTENSET();
29 }
30
nrf_temp_int_disable(NRF_TEMP_Type * p_reg,uint32_t mask)31 void nrf_temp_int_disable(NRF_TEMP_Type * p_reg, uint32_t mask)
32 {
33 NRF_TEMP_regs.INTENCLR = mask;
34 nhw_TEMP_regw_sideeffects_INTENCLR();
35 }
36
nrf_temp_event_clear(NRF_TEMP_Type * p_reg,nrf_temp_event_t event)37 void nrf_temp_event_clear(NRF_TEMP_Type * p_reg, nrf_temp_event_t event)
38 {
39 *((volatile uint32_t *)((uint8_t *)p_reg + (uint32_t)event)) = 0x0UL;
40 nhw_TEMP_regw_sideeffects_EVENTS_all(0);
41 }
42
43 #if defined(DPPI_PRESENT)
44
nrf_temp_subscribe_common(NRF_TEMP_Type * p_reg,nrf_temp_task_t task)45 static void nrf_temp_subscribe_common(NRF_TEMP_Type * p_reg,
46 nrf_temp_task_t task)
47 {
48 if (task == NRF_TEMP_TASK_START) {
49 nhw_TEMP_regw_sideeffects_SUBSCRIBE_START(0);
50 } else if ( task == NRF_TEMP_TASK_STOP ) {
51 nhw_TEMP_regw_sideeffects_SUBSCRIBE_STOP(0);
52 } else {
53 bs_trace_error_line_time("Attempted to subscribe to an not-supported task in the nrf_temp (%i)\n",
54 task);
55 }
56 }
57
nrf_temp_subscribe_set(NRF_TEMP_Type * p_reg,nrf_temp_task_t task,uint8_t channel)58 void nrf_temp_subscribe_set(NRF_TEMP_Type * p_reg,
59 nrf_temp_task_t task,
60 uint8_t channel)
61 {
62 *((volatile uint32_t *) ((uint8_t *) p_reg + (uint32_t) task + 0x80uL)) =
63 ((uint32_t)channel | NRF_SUBSCRIBE_PUBLISH_ENABLE);
64 nrf_temp_subscribe_common(p_reg, task);
65 }
66
nrf_temp_subscribe_clear(NRF_TEMP_Type * p_reg,nrf_temp_task_t task)67 void nrf_temp_subscribe_clear(NRF_TEMP_Type * p_reg,
68 nrf_temp_task_t task)
69 {
70 *((volatile uint32_t *) ((uint8_t *) p_reg + (uint32_t) task + 0x80uL)) = 0;
71 nrf_temp_subscribe_common(p_reg, task);
72 }
73
74 #endif /* defined(DPPI_PRESENT) */
75