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