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