7#ifndef SOFTPERIPHERAL_REGIF_H__
8#define SOFTPERIPHERAL_REGIF_H__
11#if defined (NRF54L05_XXAA) || defined (NRF54L09_ENGA_XXAA) || defined (NRF54L10_XXAA) || \
12 defined (NRF54L15_XXAA) || defined (NRF54LM20A_ENGA_XXAA) || \
13 defined (NRF54LV10A_XXAA) || defined (NRF54LM20A_XXAA) || defined (NRF54LM20B_XXAA)
14#define SP_VPR_EVENT_IDX 20
15#define NRF_VPR NRF_VPR00
19#define SP_VPR_TASK_DPPI_0_IDX 16
20#define SP_VPR_TASK_SLOT1_IDX 17
21#define SP_VPR_TASK_STOP_IDX 18
22#define SP_VPR_TASK_SLOT3_IDX 19
23#define SP_VPR_TASK_CONFIG_IDX 20
24#define SP_VPR_TASK_ACTION_IDX 21
25#define SP_VPR_IRQHandler VPR00_IRQHandler
26#define SP_VPR_IRQn VPR00_IRQn
27#define SP_VPR_BASE_FREQ_HZ 128000000
28#elif defined(NRF54H20_XXAA)
29#define SP_VPR_EVENT_IDX 28
30#define NRF_VPR NRF_VPR121
33#define SP_VPR_TASK_DPPI_0_IDX 24
34#define SP_VPR_TASK_SLOT1_IDX 25
35#define SP_VPR_TASK_STOP_IDX 26
36#define SP_VPR_TASK_SLOT3_IDX 27
37#define SP_VPR_TASK_CONFIG_IDX 16
38#define SP_VPR_TASK_ACTION_IDX 17
39#define SP_VPR_IRQHandler VPR121_IRQHandler
40#define SP_VPR_IRQn VPR121_IRQn
41#define SP_VPR_BASE_FREQ_HZ 320000000
43#pragma warning "Processor not defined."
73#define SP_DPPI_SLOT_COUNT 4
74#define SP_TASK_ENTRY_COUNT 6
75#define SP_TASK_ENTRY_NODPPI 4
77#define SP_DPPI_MAP_VALID_Pos 0UL
78#define SP_DPPI_MAP_VALID_Msk (0xFUL << SP_DPPI_MAP_VALID_Pos)
79#define SP_DPPI_MAP_VALID_Value 0x5UL
81#define SP_DPPI_MAP_ROLE_Pos(entry) (4UL + (4UL * (entry)))
82#define SP_DPPI_MAP_ROLE_Msk(entry) (0xFUL << SP_DPPI_MAP_ROLE_Pos(entry))
84#define SP_DPPI_MAP_PERMIT_Pos 28UL
85#define SP_DPPI_MAP_PERMIT_Msk (0xFUL << SP_DPPI_MAP_PERMIT_Pos)
88#define SP_VPR_TASK_IDX(entry) \
89 (((entry) < SP_DPPI_SLOT_COUNT) ? (SP_VPR_TASK_DPPI_0_IDX + (entry)) \
90 : (((entry) == SP_TASK_ENTRY_NODPPI) ? SP_VPR_TASK_CONFIG_IDX \
91 : SP_VPR_TASK_ACTION_IDX))
94#define SP_DPPI_ROLE_NONE 0UL
95#define SP_DPPI_ROLE_DPPI_0 1UL
96#define SP_DPPI_ROLE_CONFIG 2UL
97#define SP_DPPI_ROLE_ACTION 3UL
98#define SP_DPPI_ROLE_STOP 4UL
99#define SP_DPPI_ROLE_COUNT 5UL
106#define SP_DPPI_MAP_DEFAULT \
107 ((SP_DPPI_MAP_VALID_Value << SP_DPPI_MAP_VALID_Pos) \
108 | (SP_DPPI_ROLE_DPPI_0 << SP_DPPI_MAP_ROLE_Pos(0)) \
109 | (SP_DPPI_ROLE_NONE << SP_DPPI_MAP_ROLE_Pos(1)) \
110 | (SP_DPPI_ROLE_STOP << SP_DPPI_MAP_ROLE_Pos(2)) \
111 | (SP_DPPI_ROLE_NONE << SP_DPPI_MAP_ROLE_Pos(3)) \
112 | (SP_DPPI_ROLE_CONFIG << SP_DPPI_MAP_ROLE_Pos(4)) \
113 | (SP_DPPI_ROLE_ACTION << SP_DPPI_MAP_ROLE_Pos(5)))
118#define SP_DPPI_MAP_LEGACY \
119 ((SP_DPPI_MAP_VALID_Value << SP_DPPI_MAP_VALID_Pos) \
120 | (SP_DPPI_ROLE_DPPI_0 << SP_DPPI_MAP_ROLE_Pos(0)) \
121 | (SP_DPPI_ROLE_CONFIG << SP_DPPI_MAP_ROLE_Pos(1)) \
122 | (SP_DPPI_ROLE_ACTION << SP_DPPI_MAP_ROLE_Pos(2)) \
123 | (SP_DPPI_ROLE_STOP << SP_DPPI_MAP_ROLE_Pos(3)) \
124 | (SP_DPPI_ROLE_NONE << SP_DPPI_MAP_ROLE_Pos(4)) \
125 | (SP_DPPI_ROLE_NONE << SP_DPPI_MAP_ROLE_Pos(5)))
127#define SP_DPPI_MAP_PERMIT_ALL (0xFUL << SP_DPPI_MAP_PERMIT_Pos)
129#define SP_DPPI_MAP_ROLE_GET(word, slot) \
130 (((word) & SP_DPPI_MAP_ROLE_Msk(slot)) >> SP_DPPI_MAP_ROLE_Pos(slot))
132#define SP_DPPI_MAP_PERMIT_GET(word) \
133 (((word) & SP_DPPI_MAP_PERMIT_Msk) >> SP_DPPI_MAP_PERMIT_Pos)
135#if defined(NRF_APPLICATION)
137#ifndef SP_VPR_FIRMWARE_ADDRESS
138#define SP_VPR_FIRMWARE_ADDRESS 0x00040000
143#define __XSBx(R, P, T) \
145 sp_handshake_set(R, m_task_count, 0); \
146 nrf_vpr_task_trigger(P, (nrf_vpr_task_t)offsetof(NRF_VPR_Type, TASKS_TRIGGER[T])); \
147 while (sp_handshake_get(R, 0) != sp_handshake_get(R, 1)) { \
155#define __XSBx(R, P, T) \
157 nrf_vpr_task_trigger(P, (nrf_vpr_task_t)offsetof(NRF_VPR_Type, TASKS_TRIGGER[T])); \
178static inline uint32_t sp_dppi_map_normalize(uint32_t word)
185static inline void sp_dppi_role_task_update(uint32_t map_word)
187 map_word = sp_dppi_map_normalize(map_word);
200#define __CSB(R) __XSBx(R, NRF_VPR, m_sp_role_task[SP_DPPI_ROLE_CONFIG]);
201#define __ASB(R) __XSBx(R, NRF_VPR, m_sp_role_task[SP_DPPI_ROLE_ACTION]);
202#define __SSB(R) __XSBx(R, NRF_VPR, m_sp_role_task[SP_DPPI_ROLE_STOP]);
209static inline bool sp_dppi_role_map_pack(uint32_t * p_word,
const uint8_t * p_roles)
216 uint8_t role = p_roles[entry];
224 if ((seen & (1U << role)) != 0U)
228 seen |= (uint8_t)(1U << role);
237static inline uint32_t sp_dppi_map_permit_set(uint32_t word, uint8_t slot,
bool enable)
241 word = sp_dppi_map_normalize(word);
242 return enable ? (word | bit) : (word & ~bit);
#define SP_DPPI_MAP_VALID_Pos
Definition softperipheral_regif.h:77
#define SP_DPPI_MAP_DEFAULT
Definition softperipheral_regif.h:106
#define SP_DPPI_ROLE_DPPI_0
Definition softperipheral_regif.h:95
#define SP_DPPI_ROLE_COUNT
Definition softperipheral_regif.h:99
#define SP_DPPI_ROLE_ACTION
Definition softperipheral_regif.h:97
#define SP_DPPI_MAP_PERMIT_Pos
Definition softperipheral_regif.h:84
#define SP_DPPI_MAP_PERMIT_Msk
Definition softperipheral_regif.h:85
#define SP_DPPI_MAP_ROLE_Pos(entry)
Definition softperipheral_regif.h:81
#define SP_DPPI_MAP_ROLE_GET(word, slot)
Definition softperipheral_regif.h:129
#define SP_DPPI_MAP_VALID_Value
Definition softperipheral_regif.h:79
#define SP_TASK_ENTRY_COUNT
Definition softperipheral_regif.h:74
#define SP_DPPI_MAP_VALID_Msk
Definition softperipheral_regif.h:78
#define SP_DPPI_ROLE_CONFIG
Definition softperipheral_regif.h:96
#define SP_DPPI_ROLE_NONE
Definition softperipheral_regif.h:94
#define SP_DPPI_ROLE_STOP
Definition softperipheral_regif.h:98
#define SP_VPR_TASK_IDX(entry)
Definition softperipheral_regif.h:88