1 /*
2 * Copyright (c) 2023, Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7 /*
8 * EGU - Event generator unit
9 * https://infocenter.nordicsemi.com/topic/ps_nrf52833/egu.html?cp=5_1_0_5_6
10 * https://infocenter.nordicsemi.com/topic/ps_nrf5340/egu.html#concept_x4j_fx1_lr
11 *
12 * This file provides the implementation of the EGU peripherals,
13 * and instantiates N of them (and initializes them at startup and frees them on exit),
14 * as described in the configuration (NHW_config.h)
15 *
16 * Each EGU instance has a configurable number of tasks/events (up to 32)
17 */
18
19 #include <string.h>
20 #include "bs_tracing.h"
21 #include "bs_oswrap.h"
22 #include "irq_ctrl.h"
23 #include "NHW_common_types.h"
24 #include "NHW_config.h"
25 #include "NHW_peri_types.h"
26 #include "NHW_xPPI.h"
27 #include "NHW_EGU.h"
28 #include "nsi_tasks.h"
29
30
31 struct egu_status {
32 NRF_EGU_Type *NRF_EGU_regs;
33 uint n_events; /* Number of events configured in this EGU instance */
34
35 #if (NHW_HAS_DPPI)
36 uint dppi_map; //To which DPPI instance are this EGU subscribe&publish ports connected to
37 //Which of the subscription ports are currently connected, and to which channel:
38 struct nhw_subsc_mem* subscribed; //[n_events]
39 #endif
40 };
41
42 static struct egu_status nhw_egu_st[NHW_EGU_TOTAL_INST];
43 NRF_EGU_Type NRF_EGU_regs[NHW_EGU_TOTAL_INST];
44
45 /**
46 * Initialize the EGU model
47 */
nhw_egu_init(void)48 static void nhw_egu_init(void) {
49 #if (NHW_HAS_DPPI)
50 /* Mapping of peripheral instance to DPPI instance */
51 uint nhw_egu_dppi_map[NHW_EGU_TOTAL_INST] = NHW_EGU_DPPI_MAP;
52 #endif
53
54 uint nhw_egu_n_events[NHW_EGU_TOTAL_INST] = NHW_EGU_N_EVENTS;
55
56 memset(NRF_EGU_regs, 0, sizeof(NRF_EGU_Type) * NHW_EGU_TOTAL_INST);
57
58 for (int i = 0; i< NHW_EGU_TOTAL_INST; i++) {
59 nhw_egu_st[i].NRF_EGU_regs = &NRF_EGU_regs[i];
60 nhw_egu_st[i].n_events = nhw_egu_n_events[i];
61
62 #if (NHW_HAS_DPPI)
63 nhw_egu_st[i].dppi_map = nhw_egu_dppi_map[i];
64 nhw_egu_st[i].subscribed = (struct nhw_subsc_mem*)bs_calloc(nhw_egu_n_events[i], sizeof(struct nhw_subsc_mem));
65 #endif
66 }
67 }
68
69 NSI_TASK(nhw_egu_init, HW_INIT, 100);
70
71 #if (NHW_HAS_DPPI)
72 /*
73 * Free all EGU instances resources before program exit
74 */
nhw_egu_free(void)75 static void nhw_egu_free(void)
76 {
77 for (int i = 0; i< NHW_EGU_TOTAL_INST; i++) {
78 free(nhw_egu_st[i].subscribed);
79 nhw_egu_st[i].subscribed = NULL;
80 }
81 }
82
83 NSI_TASK(nhw_egu_free, ON_EXIT_PRE, 100);
84 #endif /* (NHW_HAS_DPPI) */
85
86 /**
87 * Check if the interrupt line for EGU instance needs to be raised or lowered
88 * (as a result of either the interrupt mask or the event register having
89 * been modified)
90 */
nhw_egu_eval_interrupt(uint inst)91 static void nhw_egu_eval_interrupt(uint inst)
92 {
93 /* Mapping of peripheral instance to {int controller instance, int number} */
94 static struct nhw_irq_mapping nhw_egu_irq_map[NHW_EGU_TOTAL_INST] = NHW_EGU_INT_MAP;
95 static bool egu_int_line[NHW_EGU_TOTAL_INST] = {false}; //Is the EGU currently driving this interrupt line high
96
97 struct egu_status *this = &nhw_egu_st[inst];
98
99 NRF_EGU_Type *EGU_regs = this->NRF_EGU_regs;
100 bool new_egu_int_line = false;
101
102 for (int i = 0; i < this->n_events; i++) {
103 int int_mask = (EGU_regs->INTEN >> i) & 1;
104 if (int_mask && EGU_regs->EVENTS_TRIGGERED[i]) {
105 new_egu_int_line = true;
106 }
107 }
108
109 hw_irq_ctrl_toggle_level_irq_line_if(&egu_int_line[inst],
110 new_egu_int_line,
111 &nhw_egu_irq_map[inst]);
112 }
113
nhw_egu_check_inst_event(uint egu_inst,uint nbr,const char * type)114 static inline void nhw_egu_check_inst_event(uint egu_inst, uint nbr, const char *type)
115 {
116 if ((egu_inst >= NHW_EGU_TOTAL_INST) || (nbr >= nhw_egu_st[egu_inst].n_events) ) {
117 bs_trace_error_time_line("Attempted to access non existent %s %u (>= %u) in EGU instance %u\n",
118 type, nbr, nhw_egu_st[egu_inst].n_events, egu_inst);
119 }
120 }
121
nhw_egu_signal_EVENTS_TRIGGERED(uint inst,uint event_nbr)122 static void nhw_egu_signal_EVENTS_TRIGGERED(uint inst, uint event_nbr)
123 {
124 struct egu_status *this = &nhw_egu_st[inst];
125 NRF_EGU_Type *EGU_regs = this->NRF_EGU_regs;
126
127 EGU_regs->EVENTS_TRIGGERED[event_nbr] = 1;
128 nhw_egu_eval_interrupt(inst);
129
130 #if (NHW_HAS_PPI)
131 { //Signal the PPI
132 const ppi_event_types_t PPI_EGU_EVENTS_base[NHW_EGU_TOTAL_INST] = {
133 EGU0_EVENTS_TRIGGERED_0,
134 EGU1_EVENTS_TRIGGERED_0,
135 EGU2_EVENTS_TRIGGERED_0,
136 EGU3_EVENTS_TRIGGERED_0,
137 EGU4_EVENTS_TRIGGERED_0,
138 EGU5_EVENTS_TRIGGERED_0,
139 }; //The events for each EGU instance are assumed consecutive
140
141 nrf_ppi_event(PPI_EGU_EVENTS_base[inst]+ event_nbr);
142 }
143 #elif (NHW_HAS_DPPI)
144 nhw_dppi_event_signal_if(this->dppi_map,
145 EGU_regs->PUBLISH_TRIGGERED[event_nbr]);
146 #endif
147 }
148
149 /**
150 * Do whatever is needed after the task has been triggered
151 */
nhw_egu_TASK_TRIGGER(uint inst,uint task_nbr)152 void nhw_egu_TASK_TRIGGER(uint inst, uint task_nbr)
153 {
154 nhw_egu_check_inst_event(inst, task_nbr, "task");
155 nhw_egu_signal_EVENTS_TRIGGERED(inst, task_nbr);
156 }
157
158 #if (NHW_HAS_DPPI)
nhw_egu_tasktrigger_wrap(void * param)159 static void nhw_egu_tasktrigger_wrap(void* param) {
160 unsigned int inst = (uintptr_t)param >> 16;
161 uint n = (uintptr_t)param & 0xFFFF;
162 nhw_egu_TASK_TRIGGER(inst, n);
163 }
164
nhw_egu_regw_sideeffects_SUBSCRIBE_TRIGGER(uint inst,uint n)165 void nhw_egu_regw_sideeffects_SUBSCRIBE_TRIGGER(uint inst, uint n) {
166 struct egu_status *this = &nhw_egu_st[inst];
167
168 nhw_egu_check_inst_event(inst, n, "subscribe");
169
170 nhw_dppi_common_subscribe_sideeffect(this->dppi_map,
171 this->NRF_EGU_regs->SUBSCRIBE_TRIGGER[n],
172 &this->subscribed[n],
173 nhw_egu_tasktrigger_wrap,
174 (void*)((inst << 16) + n));
175 }
176 #endif /* NHW_HAS_DPPI */
177
nhw_egu_regw_sideeffect_INTENSET(uint inst)178 void nhw_egu_regw_sideeffect_INTENSET(uint inst) {
179 NRF_EGU_Type *EGU_regs = &NRF_EGU_regs[inst];
180 if ( EGU_regs->INTENSET ) {
181 EGU_regs->INTEN |= EGU_regs->INTENSET;
182 EGU_regs->INTENSET = EGU_regs->INTEN;
183
184 nhw_egu_eval_interrupt(inst);
185 }
186 }
187
nhw_egu_regw_sideeffect_INTENCLR(uint inst)188 void nhw_egu_regw_sideeffect_INTENCLR(uint inst) {
189 NRF_EGU_Type *EGU_regs = &NRF_EGU_regs[inst];
190 if ( EGU_regs->INTENCLR ) {
191 EGU_regs->INTEN &= ~EGU_regs->INTENCLR;
192 EGU_regs->INTENSET = EGU_regs->INTEN;
193 EGU_regs->INTENCLR = 0; //We do not model reading the INTEN register thru the INTENCLR one
194
195 nhw_egu_eval_interrupt(inst);
196 }
197 }
198
nhw_egu_regw_sideeffect_INTEN(uint inst)199 void nhw_egu_regw_sideeffect_INTEN(uint inst) {
200 NRF_EGU_Type *EGU_regs = &NRF_EGU_regs[inst];
201 EGU_regs->INTENSET = EGU_regs->INTEN;
202 nhw_egu_eval_interrupt(inst);
203 }
204
nhw_egu_regw_sideeffect_EVENTS_TRIGGERED(uint inst,uint event_nbr)205 void nhw_egu_regw_sideeffect_EVENTS_TRIGGERED(uint inst, uint event_nbr) {
206 nhw_egu_check_inst_event(inst, event_nbr, "event");
207 nhw_egu_eval_interrupt(inst);
208 }
209
nhw_egu_regw_sideeffects_TASK_TRIGGER(uint inst,uint task_nbr)210 void nhw_egu_regw_sideeffects_TASK_TRIGGER(uint inst, uint task_nbr){
211 nhw_egu_check_inst_event(inst, task_nbr, "task");
212
213 if (NRF_EGU_regs[inst].TASKS_TRIGGER[task_nbr] != 0) {
214 NRF_EGU_regs[inst].TASKS_TRIGGER[task_nbr] = 0;
215 nhw_egu_TASK_TRIGGER(inst, task_nbr);
216 }
217 }
218
219 #if (NHW_HAS_PPI)
220 /*
221 * Trampolines to automatically call from the PPI
222 */
223 /* Generated with:
224 #! /usr/bin/env python3
225 #EGU.c
226 for inst in range(0,6):
227 for i in range(0,16):
228 print("void nhw_egu_%i_TASK_TRIGGER_%i(void){ nhw_eguTASK_TRIGGER(%i,%i); }"%(inst,i,inst,i))
229 #EGU.h
230 for inst in range(0,6):
231 for i in range(0,16):
232 print("void nhw_egu%i_TASK_TRIGGER_%i(void);"%(inst,i))
233 #PPI connections:
234 #PPI ppi_tasks_table:
235 for inst in range(0,6):
236 for i in range(0,16):
237 print("{(void*)&NRF_EGU_regs[%i].TASKS_TRIGGER[%i] , nhw_egu%i_TASK_TRIGGER_%i},"%(inst,i,inst,i))
238 #PPI ppi_events_table:
239 for inst in range(0,6):
240 for i in range(0,16):
241 print("{EGU%i_EVENTS_TRIGGERED_%i, &NRF_EGU_regs[%i].EVENTS_TRIGGERED[%i]},"%(inst,i,inst,i))
242 */
nhw_egu_0_TASK_TRIGGER_0(void)243 void nhw_egu_0_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(0,0); }
nhw_egu_0_TASK_TRIGGER_1(void)244 void nhw_egu_0_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(0,1); }
nhw_egu_0_TASK_TRIGGER_2(void)245 void nhw_egu_0_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(0,2); }
nhw_egu_0_TASK_TRIGGER_3(void)246 void nhw_egu_0_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(0,3); }
nhw_egu_0_TASK_TRIGGER_4(void)247 void nhw_egu_0_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(0,4); }
nhw_egu_0_TASK_TRIGGER_5(void)248 void nhw_egu_0_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(0,5); }
nhw_egu_0_TASK_TRIGGER_6(void)249 void nhw_egu_0_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(0,6); }
nhw_egu_0_TASK_TRIGGER_7(void)250 void nhw_egu_0_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(0,7); }
nhw_egu_0_TASK_TRIGGER_8(void)251 void nhw_egu_0_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(0,8); }
nhw_egu_0_TASK_TRIGGER_9(void)252 void nhw_egu_0_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(0,9); }
nhw_egu_0_TASK_TRIGGER_10(void)253 void nhw_egu_0_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(0,10); }
nhw_egu_0_TASK_TRIGGER_11(void)254 void nhw_egu_0_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(0,11); }
nhw_egu_0_TASK_TRIGGER_12(void)255 void nhw_egu_0_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(0,12); }
nhw_egu_0_TASK_TRIGGER_13(void)256 void nhw_egu_0_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(0,13); }
nhw_egu_0_TASK_TRIGGER_14(void)257 void nhw_egu_0_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(0,14); }
nhw_egu_0_TASK_TRIGGER_15(void)258 void nhw_egu_0_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(0,15); }
nhw_egu_1_TASK_TRIGGER_0(void)259 void nhw_egu_1_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(1,0); }
nhw_egu_1_TASK_TRIGGER_1(void)260 void nhw_egu_1_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(1,1); }
nhw_egu_1_TASK_TRIGGER_2(void)261 void nhw_egu_1_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(1,2); }
nhw_egu_1_TASK_TRIGGER_3(void)262 void nhw_egu_1_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(1,3); }
nhw_egu_1_TASK_TRIGGER_4(void)263 void nhw_egu_1_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(1,4); }
nhw_egu_1_TASK_TRIGGER_5(void)264 void nhw_egu_1_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(1,5); }
nhw_egu_1_TASK_TRIGGER_6(void)265 void nhw_egu_1_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(1,6); }
nhw_egu_1_TASK_TRIGGER_7(void)266 void nhw_egu_1_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(1,7); }
nhw_egu_1_TASK_TRIGGER_8(void)267 void nhw_egu_1_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(1,8); }
nhw_egu_1_TASK_TRIGGER_9(void)268 void nhw_egu_1_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(1,9); }
nhw_egu_1_TASK_TRIGGER_10(void)269 void nhw_egu_1_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(1,10); }
nhw_egu_1_TASK_TRIGGER_11(void)270 void nhw_egu_1_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(1,11); }
nhw_egu_1_TASK_TRIGGER_12(void)271 void nhw_egu_1_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(1,12); }
nhw_egu_1_TASK_TRIGGER_13(void)272 void nhw_egu_1_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(1,13); }
nhw_egu_1_TASK_TRIGGER_14(void)273 void nhw_egu_1_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(1,14); }
nhw_egu_1_TASK_TRIGGER_15(void)274 void nhw_egu_1_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(1,15); }
nhw_egu_2_TASK_TRIGGER_0(void)275 void nhw_egu_2_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(2,0); }
nhw_egu_2_TASK_TRIGGER_1(void)276 void nhw_egu_2_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(2,1); }
nhw_egu_2_TASK_TRIGGER_2(void)277 void nhw_egu_2_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(2,2); }
nhw_egu_2_TASK_TRIGGER_3(void)278 void nhw_egu_2_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(2,3); }
nhw_egu_2_TASK_TRIGGER_4(void)279 void nhw_egu_2_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(2,4); }
nhw_egu_2_TASK_TRIGGER_5(void)280 void nhw_egu_2_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(2,5); }
nhw_egu_2_TASK_TRIGGER_6(void)281 void nhw_egu_2_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(2,6); }
nhw_egu_2_TASK_TRIGGER_7(void)282 void nhw_egu_2_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(2,7); }
nhw_egu_2_TASK_TRIGGER_8(void)283 void nhw_egu_2_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(2,8); }
nhw_egu_2_TASK_TRIGGER_9(void)284 void nhw_egu_2_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(2,9); }
nhw_egu_2_TASK_TRIGGER_10(void)285 void nhw_egu_2_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(2,10); }
nhw_egu_2_TASK_TRIGGER_11(void)286 void nhw_egu_2_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(2,11); }
nhw_egu_2_TASK_TRIGGER_12(void)287 void nhw_egu_2_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(2,12); }
nhw_egu_2_TASK_TRIGGER_13(void)288 void nhw_egu_2_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(2,13); }
nhw_egu_2_TASK_TRIGGER_14(void)289 void nhw_egu_2_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(2,14); }
nhw_egu_2_TASK_TRIGGER_15(void)290 void nhw_egu_2_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(2,15); }
nhw_egu_3_TASK_TRIGGER_0(void)291 void nhw_egu_3_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(3,0); }
nhw_egu_3_TASK_TRIGGER_1(void)292 void nhw_egu_3_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(3,1); }
nhw_egu_3_TASK_TRIGGER_2(void)293 void nhw_egu_3_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(3,2); }
nhw_egu_3_TASK_TRIGGER_3(void)294 void nhw_egu_3_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(3,3); }
nhw_egu_3_TASK_TRIGGER_4(void)295 void nhw_egu_3_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(3,4); }
nhw_egu_3_TASK_TRIGGER_5(void)296 void nhw_egu_3_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(3,5); }
nhw_egu_3_TASK_TRIGGER_6(void)297 void nhw_egu_3_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(3,6); }
nhw_egu_3_TASK_TRIGGER_7(void)298 void nhw_egu_3_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(3,7); }
nhw_egu_3_TASK_TRIGGER_8(void)299 void nhw_egu_3_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(3,8); }
nhw_egu_3_TASK_TRIGGER_9(void)300 void nhw_egu_3_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(3,9); }
nhw_egu_3_TASK_TRIGGER_10(void)301 void nhw_egu_3_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(3,10); }
nhw_egu_3_TASK_TRIGGER_11(void)302 void nhw_egu_3_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(3,11); }
nhw_egu_3_TASK_TRIGGER_12(void)303 void nhw_egu_3_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(3,12); }
nhw_egu_3_TASK_TRIGGER_13(void)304 void nhw_egu_3_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(3,13); }
nhw_egu_3_TASK_TRIGGER_14(void)305 void nhw_egu_3_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(3,14); }
nhw_egu_3_TASK_TRIGGER_15(void)306 void nhw_egu_3_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(3,15); }
nhw_egu_4_TASK_TRIGGER_0(void)307 void nhw_egu_4_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(4,0); }
nhw_egu_4_TASK_TRIGGER_1(void)308 void nhw_egu_4_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(4,1); }
nhw_egu_4_TASK_TRIGGER_2(void)309 void nhw_egu_4_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(4,2); }
nhw_egu_4_TASK_TRIGGER_3(void)310 void nhw_egu_4_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(4,3); }
nhw_egu_4_TASK_TRIGGER_4(void)311 void nhw_egu_4_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(4,4); }
nhw_egu_4_TASK_TRIGGER_5(void)312 void nhw_egu_4_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(4,5); }
nhw_egu_4_TASK_TRIGGER_6(void)313 void nhw_egu_4_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(4,6); }
nhw_egu_4_TASK_TRIGGER_7(void)314 void nhw_egu_4_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(4,7); }
nhw_egu_4_TASK_TRIGGER_8(void)315 void nhw_egu_4_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(4,8); }
nhw_egu_4_TASK_TRIGGER_9(void)316 void nhw_egu_4_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(4,9); }
nhw_egu_4_TASK_TRIGGER_10(void)317 void nhw_egu_4_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(4,10); }
nhw_egu_4_TASK_TRIGGER_11(void)318 void nhw_egu_4_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(4,11); }
nhw_egu_4_TASK_TRIGGER_12(void)319 void nhw_egu_4_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(4,12); }
nhw_egu_4_TASK_TRIGGER_13(void)320 void nhw_egu_4_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(4,13); }
nhw_egu_4_TASK_TRIGGER_14(void)321 void nhw_egu_4_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(4,14); }
nhw_egu_4_TASK_TRIGGER_15(void)322 void nhw_egu_4_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(4,15); }
nhw_egu_5_TASK_TRIGGER_0(void)323 void nhw_egu_5_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(5,0); }
nhw_egu_5_TASK_TRIGGER_1(void)324 void nhw_egu_5_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(5,1); }
nhw_egu_5_TASK_TRIGGER_2(void)325 void nhw_egu_5_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(5,2); }
nhw_egu_5_TASK_TRIGGER_3(void)326 void nhw_egu_5_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(5,3); }
nhw_egu_5_TASK_TRIGGER_4(void)327 void nhw_egu_5_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(5,4); }
nhw_egu_5_TASK_TRIGGER_5(void)328 void nhw_egu_5_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(5,5); }
nhw_egu_5_TASK_TRIGGER_6(void)329 void nhw_egu_5_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(5,6); }
nhw_egu_5_TASK_TRIGGER_7(void)330 void nhw_egu_5_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(5,7); }
nhw_egu_5_TASK_TRIGGER_8(void)331 void nhw_egu_5_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(5,8); }
nhw_egu_5_TASK_TRIGGER_9(void)332 void nhw_egu_5_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(5,9); }
nhw_egu_5_TASK_TRIGGER_10(void)333 void nhw_egu_5_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(5,10); }
nhw_egu_5_TASK_TRIGGER_11(void)334 void nhw_egu_5_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(5,11); }
nhw_egu_5_TASK_TRIGGER_12(void)335 void nhw_egu_5_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(5,12); }
nhw_egu_5_TASK_TRIGGER_13(void)336 void nhw_egu_5_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(5,13); }
nhw_egu_5_TASK_TRIGGER_14(void)337 void nhw_egu_5_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(5,14); }
nhw_egu_5_TASK_TRIGGER_15(void)338 void nhw_egu_5_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(5,15); }
339 #endif /* NHW_HAS_PPI */
340