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 if (new_egu_int_line && (egu_int_line[inst] == false)) {
110 egu_int_line[inst] = true;
111 hw_irq_ctrl_raise_level_irq_line(nhw_egu_irq_map[inst].cntl_inst,
112 nhw_egu_irq_map[inst].int_nbr);
113 } else if ((new_egu_int_line == false) && egu_int_line[inst]) {
114 egu_int_line[inst] = false;
115 hw_irq_ctrl_lower_level_irq_line(nhw_egu_irq_map[inst].cntl_inst,
116 nhw_egu_irq_map[inst].int_nbr);
117 }
118 }
119
nhw_egu_check_inst_event(uint egu_inst,uint nbr,const char * type)120 static inline void nhw_egu_check_inst_event(uint egu_inst, uint nbr, const char *type)
121 {
122 if ((egu_inst >= NHW_EGU_TOTAL_INST) || (nbr >= nhw_egu_st[egu_inst].n_events) ) {
123 bs_trace_error_time_line("Attempted to access non existent %s %u (>= %u) in EGU instance %u\n",
124 type, nbr, nhw_egu_st[egu_inst].n_events, egu_inst);
125 }
126 }
127
nhw_egu_signal_EVENTS_TRIGGERED(uint inst,uint event_nbr)128 static void nhw_egu_signal_EVENTS_TRIGGERED(uint inst, uint event_nbr)
129 {
130 struct egu_status *this = &nhw_egu_st[inst];
131 NRF_EGU_Type *EGU_regs = this->NRF_EGU_regs;
132
133 EGU_regs->EVENTS_TRIGGERED[event_nbr] = 1;
134 nhw_egu_eval_interrupt(inst);
135
136 #if (NHW_HAS_PPI)
137 { //Signal the PPI
138 const ppi_event_types_t PPI_EGU_EVENTS_base[NHW_EGU_TOTAL_INST] = {
139 EGU0_EVENTS_TRIGGERED_0,
140 EGU1_EVENTS_TRIGGERED_0,
141 EGU2_EVENTS_TRIGGERED_0,
142 EGU3_EVENTS_TRIGGERED_0,
143 EGU4_EVENTS_TRIGGERED_0,
144 EGU5_EVENTS_TRIGGERED_0,
145 }; //The events for each EGU instance are assumed consecutive
146
147 nrf_ppi_event(PPI_EGU_EVENTS_base[inst]+ event_nbr);
148 }
149 #elif (NHW_HAS_DPPI)
150 nhw_dppi_event_signal_if(this->dppi_map,
151 EGU_regs->PUBLISH_TRIGGERED[event_nbr]);
152 #endif
153 }
154
155 /**
156 * Do whatever is needed after the task has been triggered
157 */
nhw_egu_TASK_TRIGGER(uint inst,uint task_nbr)158 void nhw_egu_TASK_TRIGGER(uint inst, uint task_nbr)
159 {
160 nhw_egu_check_inst_event(inst, task_nbr, "task");
161 nhw_egu_signal_EVENTS_TRIGGERED(inst, task_nbr);
162 }
163
164 #if (NHW_HAS_DPPI)
nhw_egu_tasktrigger_wrap(void * param)165 static void nhw_egu_tasktrigger_wrap(void* param) {
166 unsigned int inst = (uintptr_t)param >> 16;
167 uint n = (uintptr_t)param & 0xFFFF;
168 nhw_egu_TASK_TRIGGER(inst, n);
169 }
170
nhw_egu_regw_sideeffects_SUBSCRIBE_TRIGGER(uint inst,uint n)171 void nhw_egu_regw_sideeffects_SUBSCRIBE_TRIGGER(uint inst, uint n) {
172 struct egu_status *this = &nhw_egu_st[inst];
173
174 nhw_egu_check_inst_event(inst, n, "subscribe");
175
176 nhw_dppi_common_subscribe_sideeffect(this->dppi_map,
177 this->NRF_EGU_regs->SUBSCRIBE_TRIGGER[n],
178 &this->subscribed[n],
179 nhw_egu_tasktrigger_wrap,
180 (void*)((inst << 16) + n));
181 }
182 #endif /* NHW_HAS_DPPI */
183
nhw_egu_regw_sideeffect_INTENSET(uint inst)184 void nhw_egu_regw_sideeffect_INTENSET(uint inst) {
185 NRF_EGU_Type *EGU_regs = &NRF_EGU_regs[inst];
186 if ( EGU_regs->INTENSET ) {
187 EGU_regs->INTEN |= EGU_regs->INTENSET;
188 EGU_regs->INTENSET = EGU_regs->INTEN;
189
190 nhw_egu_eval_interrupt(inst);
191 }
192 }
193
nhw_egu_regw_sideeffect_INTENCLR(uint inst)194 void nhw_egu_regw_sideeffect_INTENCLR(uint inst) {
195 NRF_EGU_Type *EGU_regs = &NRF_EGU_regs[inst];
196 if ( EGU_regs->INTENCLR ) {
197 EGU_regs->INTEN &= ~EGU_regs->INTENCLR;
198 EGU_regs->INTENSET = EGU_regs->INTEN;
199 EGU_regs->INTENCLR = 0; //We do not model reading the INTEN register thru the INTENCLR one
200
201 nhw_egu_eval_interrupt(inst);
202 }
203 }
204
nhw_egu_regw_sideeffect_INTEN(uint inst)205 void nhw_egu_regw_sideeffect_INTEN(uint inst) {
206 NRF_EGU_Type *EGU_regs = &NRF_EGU_regs[inst];
207 EGU_regs->INTENSET = EGU_regs->INTEN;
208 nhw_egu_eval_interrupt(inst);
209 }
210
nhw_egu_regw_sideeffect_EVENTS_TRIGGERED(uint inst,uint event_nbr)211 void nhw_egu_regw_sideeffect_EVENTS_TRIGGERED(uint inst, uint event_nbr) {
212 nhw_egu_check_inst_event(inst, event_nbr, "event");
213 nhw_egu_eval_interrupt(inst);
214 }
215
nhw_egu_regw_sideeffects_TASK_TRIGGER(uint inst,uint task_nbr)216 void nhw_egu_regw_sideeffects_TASK_TRIGGER(uint inst, uint task_nbr){
217 nhw_egu_check_inst_event(inst, task_nbr, "task");
218
219 if (NRF_EGU_regs[inst].TASKS_TRIGGER[task_nbr] != 0) {
220 NRF_EGU_regs[inst].TASKS_TRIGGER[task_nbr] = 0;
221 nhw_egu_TASK_TRIGGER(inst, task_nbr);
222 }
223 }
224
225 #if (NHW_HAS_PPI)
226 /*
227 * Trampolines to automatically call from the PPI
228 */
229 /* Generated with:
230 #! /usr/bin/env python3
231 #EGU.c
232 for inst in range(0,6):
233 for i in range(0,16):
234 print("void nhw_egu_%i_TASK_TRIGGER_%i(void){ nhw_eguTASK_TRIGGER(%i,%i); }"%(inst,i,inst,i))
235 #EGU.h
236 for inst in range(0,6):
237 for i in range(0,16):
238 print("void nhw_egu%i_TASK_TRIGGER_%i(void);"%(inst,i))
239 #PPI connections:
240 #PPI ppi_tasks_table:
241 for inst in range(0,6):
242 for i in range(0,16):
243 print("{(void*)&NRF_EGU_regs[%i].TASKS_TRIGGER[%i] , nhw_egu%i_TASK_TRIGGER_%i},"%(inst,i,inst,i))
244 #PPI ppi_events_table:
245 for inst in range(0,6):
246 for i in range(0,16):
247 print("{EGU%i_EVENTS_TRIGGERED_%i, &NRF_EGU_regs[%i].EVENTS_TRIGGERED[%i]},"%(inst,i,inst,i))
248 */
nhw_egu_0_TASK_TRIGGER_0(void)249 void nhw_egu_0_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(0,0); }
nhw_egu_0_TASK_TRIGGER_1(void)250 void nhw_egu_0_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(0,1); }
nhw_egu_0_TASK_TRIGGER_2(void)251 void nhw_egu_0_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(0,2); }
nhw_egu_0_TASK_TRIGGER_3(void)252 void nhw_egu_0_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(0,3); }
nhw_egu_0_TASK_TRIGGER_4(void)253 void nhw_egu_0_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(0,4); }
nhw_egu_0_TASK_TRIGGER_5(void)254 void nhw_egu_0_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(0,5); }
nhw_egu_0_TASK_TRIGGER_6(void)255 void nhw_egu_0_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(0,6); }
nhw_egu_0_TASK_TRIGGER_7(void)256 void nhw_egu_0_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(0,7); }
nhw_egu_0_TASK_TRIGGER_8(void)257 void nhw_egu_0_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(0,8); }
nhw_egu_0_TASK_TRIGGER_9(void)258 void nhw_egu_0_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(0,9); }
nhw_egu_0_TASK_TRIGGER_10(void)259 void nhw_egu_0_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(0,10); }
nhw_egu_0_TASK_TRIGGER_11(void)260 void nhw_egu_0_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(0,11); }
nhw_egu_0_TASK_TRIGGER_12(void)261 void nhw_egu_0_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(0,12); }
nhw_egu_0_TASK_TRIGGER_13(void)262 void nhw_egu_0_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(0,13); }
nhw_egu_0_TASK_TRIGGER_14(void)263 void nhw_egu_0_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(0,14); }
nhw_egu_0_TASK_TRIGGER_15(void)264 void nhw_egu_0_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(0,15); }
nhw_egu_1_TASK_TRIGGER_0(void)265 void nhw_egu_1_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(1,0); }
nhw_egu_1_TASK_TRIGGER_1(void)266 void nhw_egu_1_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(1,1); }
nhw_egu_1_TASK_TRIGGER_2(void)267 void nhw_egu_1_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(1,2); }
nhw_egu_1_TASK_TRIGGER_3(void)268 void nhw_egu_1_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(1,3); }
nhw_egu_1_TASK_TRIGGER_4(void)269 void nhw_egu_1_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(1,4); }
nhw_egu_1_TASK_TRIGGER_5(void)270 void nhw_egu_1_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(1,5); }
nhw_egu_1_TASK_TRIGGER_6(void)271 void nhw_egu_1_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(1,6); }
nhw_egu_1_TASK_TRIGGER_7(void)272 void nhw_egu_1_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(1,7); }
nhw_egu_1_TASK_TRIGGER_8(void)273 void nhw_egu_1_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(1,8); }
nhw_egu_1_TASK_TRIGGER_9(void)274 void nhw_egu_1_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(1,9); }
nhw_egu_1_TASK_TRIGGER_10(void)275 void nhw_egu_1_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(1,10); }
nhw_egu_1_TASK_TRIGGER_11(void)276 void nhw_egu_1_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(1,11); }
nhw_egu_1_TASK_TRIGGER_12(void)277 void nhw_egu_1_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(1,12); }
nhw_egu_1_TASK_TRIGGER_13(void)278 void nhw_egu_1_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(1,13); }
nhw_egu_1_TASK_TRIGGER_14(void)279 void nhw_egu_1_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(1,14); }
nhw_egu_1_TASK_TRIGGER_15(void)280 void nhw_egu_1_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(1,15); }
nhw_egu_2_TASK_TRIGGER_0(void)281 void nhw_egu_2_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(2,0); }
nhw_egu_2_TASK_TRIGGER_1(void)282 void nhw_egu_2_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(2,1); }
nhw_egu_2_TASK_TRIGGER_2(void)283 void nhw_egu_2_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(2,2); }
nhw_egu_2_TASK_TRIGGER_3(void)284 void nhw_egu_2_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(2,3); }
nhw_egu_2_TASK_TRIGGER_4(void)285 void nhw_egu_2_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(2,4); }
nhw_egu_2_TASK_TRIGGER_5(void)286 void nhw_egu_2_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(2,5); }
nhw_egu_2_TASK_TRIGGER_6(void)287 void nhw_egu_2_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(2,6); }
nhw_egu_2_TASK_TRIGGER_7(void)288 void nhw_egu_2_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(2,7); }
nhw_egu_2_TASK_TRIGGER_8(void)289 void nhw_egu_2_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(2,8); }
nhw_egu_2_TASK_TRIGGER_9(void)290 void nhw_egu_2_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(2,9); }
nhw_egu_2_TASK_TRIGGER_10(void)291 void nhw_egu_2_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(2,10); }
nhw_egu_2_TASK_TRIGGER_11(void)292 void nhw_egu_2_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(2,11); }
nhw_egu_2_TASK_TRIGGER_12(void)293 void nhw_egu_2_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(2,12); }
nhw_egu_2_TASK_TRIGGER_13(void)294 void nhw_egu_2_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(2,13); }
nhw_egu_2_TASK_TRIGGER_14(void)295 void nhw_egu_2_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(2,14); }
nhw_egu_2_TASK_TRIGGER_15(void)296 void nhw_egu_2_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(2,15); }
nhw_egu_3_TASK_TRIGGER_0(void)297 void nhw_egu_3_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(3,0); }
nhw_egu_3_TASK_TRIGGER_1(void)298 void nhw_egu_3_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(3,1); }
nhw_egu_3_TASK_TRIGGER_2(void)299 void nhw_egu_3_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(3,2); }
nhw_egu_3_TASK_TRIGGER_3(void)300 void nhw_egu_3_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(3,3); }
nhw_egu_3_TASK_TRIGGER_4(void)301 void nhw_egu_3_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(3,4); }
nhw_egu_3_TASK_TRIGGER_5(void)302 void nhw_egu_3_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(3,5); }
nhw_egu_3_TASK_TRIGGER_6(void)303 void nhw_egu_3_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(3,6); }
nhw_egu_3_TASK_TRIGGER_7(void)304 void nhw_egu_3_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(3,7); }
nhw_egu_3_TASK_TRIGGER_8(void)305 void nhw_egu_3_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(3,8); }
nhw_egu_3_TASK_TRIGGER_9(void)306 void nhw_egu_3_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(3,9); }
nhw_egu_3_TASK_TRIGGER_10(void)307 void nhw_egu_3_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(3,10); }
nhw_egu_3_TASK_TRIGGER_11(void)308 void nhw_egu_3_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(3,11); }
nhw_egu_3_TASK_TRIGGER_12(void)309 void nhw_egu_3_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(3,12); }
nhw_egu_3_TASK_TRIGGER_13(void)310 void nhw_egu_3_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(3,13); }
nhw_egu_3_TASK_TRIGGER_14(void)311 void nhw_egu_3_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(3,14); }
nhw_egu_3_TASK_TRIGGER_15(void)312 void nhw_egu_3_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(3,15); }
nhw_egu_4_TASK_TRIGGER_0(void)313 void nhw_egu_4_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(4,0); }
nhw_egu_4_TASK_TRIGGER_1(void)314 void nhw_egu_4_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(4,1); }
nhw_egu_4_TASK_TRIGGER_2(void)315 void nhw_egu_4_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(4,2); }
nhw_egu_4_TASK_TRIGGER_3(void)316 void nhw_egu_4_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(4,3); }
nhw_egu_4_TASK_TRIGGER_4(void)317 void nhw_egu_4_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(4,4); }
nhw_egu_4_TASK_TRIGGER_5(void)318 void nhw_egu_4_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(4,5); }
nhw_egu_4_TASK_TRIGGER_6(void)319 void nhw_egu_4_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(4,6); }
nhw_egu_4_TASK_TRIGGER_7(void)320 void nhw_egu_4_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(4,7); }
nhw_egu_4_TASK_TRIGGER_8(void)321 void nhw_egu_4_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(4,8); }
nhw_egu_4_TASK_TRIGGER_9(void)322 void nhw_egu_4_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(4,9); }
nhw_egu_4_TASK_TRIGGER_10(void)323 void nhw_egu_4_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(4,10); }
nhw_egu_4_TASK_TRIGGER_11(void)324 void nhw_egu_4_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(4,11); }
nhw_egu_4_TASK_TRIGGER_12(void)325 void nhw_egu_4_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(4,12); }
nhw_egu_4_TASK_TRIGGER_13(void)326 void nhw_egu_4_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(4,13); }
nhw_egu_4_TASK_TRIGGER_14(void)327 void nhw_egu_4_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(4,14); }
nhw_egu_4_TASK_TRIGGER_15(void)328 void nhw_egu_4_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(4,15); }
nhw_egu_5_TASK_TRIGGER_0(void)329 void nhw_egu_5_TASK_TRIGGER_0(void){ nhw_egu_TASK_TRIGGER(5,0); }
nhw_egu_5_TASK_TRIGGER_1(void)330 void nhw_egu_5_TASK_TRIGGER_1(void){ nhw_egu_TASK_TRIGGER(5,1); }
nhw_egu_5_TASK_TRIGGER_2(void)331 void nhw_egu_5_TASK_TRIGGER_2(void){ nhw_egu_TASK_TRIGGER(5,2); }
nhw_egu_5_TASK_TRIGGER_3(void)332 void nhw_egu_5_TASK_TRIGGER_3(void){ nhw_egu_TASK_TRIGGER(5,3); }
nhw_egu_5_TASK_TRIGGER_4(void)333 void nhw_egu_5_TASK_TRIGGER_4(void){ nhw_egu_TASK_TRIGGER(5,4); }
nhw_egu_5_TASK_TRIGGER_5(void)334 void nhw_egu_5_TASK_TRIGGER_5(void){ nhw_egu_TASK_TRIGGER(5,5); }
nhw_egu_5_TASK_TRIGGER_6(void)335 void nhw_egu_5_TASK_TRIGGER_6(void){ nhw_egu_TASK_TRIGGER(5,6); }
nhw_egu_5_TASK_TRIGGER_7(void)336 void nhw_egu_5_TASK_TRIGGER_7(void){ nhw_egu_TASK_TRIGGER(5,7); }
nhw_egu_5_TASK_TRIGGER_8(void)337 void nhw_egu_5_TASK_TRIGGER_8(void){ nhw_egu_TASK_TRIGGER(5,8); }
nhw_egu_5_TASK_TRIGGER_9(void)338 void nhw_egu_5_TASK_TRIGGER_9(void){ nhw_egu_TASK_TRIGGER(5,9); }
nhw_egu_5_TASK_TRIGGER_10(void)339 void nhw_egu_5_TASK_TRIGGER_10(void){ nhw_egu_TASK_TRIGGER(5,10); }
nhw_egu_5_TASK_TRIGGER_11(void)340 void nhw_egu_5_TASK_TRIGGER_11(void){ nhw_egu_TASK_TRIGGER(5,11); }
nhw_egu_5_TASK_TRIGGER_12(void)341 void nhw_egu_5_TASK_TRIGGER_12(void){ nhw_egu_TASK_TRIGGER(5,12); }
nhw_egu_5_TASK_TRIGGER_13(void)342 void nhw_egu_5_TASK_TRIGGER_13(void){ nhw_egu_TASK_TRIGGER(5,13); }
nhw_egu_5_TASK_TRIGGER_14(void)343 void nhw_egu_5_TASK_TRIGGER_14(void){ nhw_egu_TASK_TRIGGER(5,14); }
nhw_egu_5_TASK_TRIGGER_15(void)344 void nhw_egu_5_TASK_TRIGGER_15(void){ nhw_egu_TASK_TRIGGER(5,15); }
345 #endif /* NHW_HAS_PPI */
346