@@ -58,6 +58,9 @@ Private global variables and functions
58
58
***********************************************************************************************************************/
59
59
/* This array holds callback functions. */
60
60
static void (* g_bsp_vectors [BSP_INT_SRC_TOTAL_ITEMS ])(void * pdata );
61
+ #if defined(BSP_MCU_RX26T )
62
+ static void * g_bsp_contexts [BSP_INT_SRC_TOTAL_ITEMS ];
63
+ #endif
61
64
62
65
static bsp_int_err_t bsp_fit_interrupts_control (bool enable , bsp_int_ctrl_t * pdata );
63
66
@@ -140,6 +143,9 @@ void bsp_interrupt_open(void)
140
143
{
141
144
/* Casting is valid because it matches the type to the right side or argument. */
142
145
g_bsp_vectors [i ] = FIT_NO_FUNC ;
146
+ #if defined(BSP_MCU_RX26T )
147
+ g_bsp_contexts [i ] = NULL ;
148
+ #endif
143
149
}
144
150
145
151
#ifdef BSP_MCU_SOFTWARE_CONFIGURABLE_INTERRUPT
@@ -202,6 +208,58 @@ bsp_int_err_t R_BSP_InterruptWrite(bsp_int_src_t vector, bsp_int_cb_t callback)
202
208
return err ;
203
209
} /* End of function R_BSP_InterruptWrite() */
204
210
211
+ #if defined(BSP_MCU_RX26T )
212
+ /**********************************************************************************************************************
213
+ * Function Name: R_BSP_InterruptWrite_EX
214
+ ******************************************************************************************************************/ /**
215
+ * @brief Registers a callback function for an interrupt.
216
+ * @param[in] vector Which interrupt to register a callback for.
217
+ * @param[in] callback Pointer to function to call when interrupt occurs.
218
+ * @param[in] context Pointer to the callback function's argument.
219
+ * @retval BSP_INT_SUCCESS Successful, callback has been registered.
220
+ * @retval BSP_INT_ERR_INVALID_ARG An invalid interrupt source was specified for vector.
221
+ * @details This function registers a callback function for an interrupt. If FIT_NO_FUNC, NULL, or any other invalid
222
+ * function address is passed for the callback argument then any previously registered callbacks are unregistered.
223
+ * If one of the interrupts that is handled by this code is triggered then the interrupt handler will query this code
224
+ * to see if a valid callback function is registered. If one is found then the callback function will be called.
225
+ * If one is not found then the interrupt handler will clear the appropriate flag(s) and exit. If the user has a
226
+ * callback function registered and wishes to no longer handle the interrupt then the user should call this function
227
+ * again with FIT_NO_FUNC as the vector parameter.
228
+ * @note Use of FIT_NO_FUNC is preferred over NULL since access to the address defined by FIT_NO_FUNC will cause a
229
+ * bus error which is easy for the user to catch. NULL typically resolves to 0 which is a valid address on RX MCUs.
230
+ */
231
+ bsp_int_err_t R_BSP_InterruptWrite_EX (bsp_int_src_t vector , bsp_int_cb_t callback , void * context )
232
+ {
233
+ bsp_int_err_t err ;
234
+
235
+ err = BSP_INT_SUCCESS ;
236
+
237
+ /* Check for valid address. */
238
+ if (((uint32_t )callback == (uint32_t )NULL ) || ((uint32_t )callback == (uint32_t )FIT_NO_FUNC ))
239
+ {
240
+ /* Casting is valid because it matches the type to the right side or argument. */
241
+ g_bsp_vectors [vector ] = FIT_NO_FUNC ;
242
+ g_bsp_contexts [vector ] = NULL ;
243
+ }
244
+ else
245
+ {
246
+ if ((BSP_INT_SRC_BUS_ERROR_ILLEGAL_ACCESS == vector ) || (BSP_INT_SRC_BUS_ERROR_TIMEOUT == vector ) ||
247
+ (BSP_INT_SRC_EMPTY <= vector ))
248
+ {
249
+ /* When registering a bus error callback function, specify BSP_INT_SRC_BUS_ERROR in the vector. */
250
+ err = BSP_INT_ERR_INVALID_ARG ;
251
+ }
252
+ else
253
+ {
254
+ g_bsp_vectors [vector ] = callback ;
255
+ g_bsp_contexts [vector ] = context ;
256
+ }
257
+ }
258
+
259
+ return err ;
260
+ } /* End of function R_BSP_InterruptWrite_EX() */
261
+ #endif
262
+
205
263
/**********************************************************************************************************************
206
264
* Function Name: R_BSP_InterruptRead
207
265
******************************************************************************************************************/ /**
@@ -297,7 +355,9 @@ bsp_int_err_t R_BSP_InterruptControl(bsp_int_src_t vector, bsp_int_cmd_t cmd, vo
297
355
{
298
356
/* Fill in callback info. */
299
357
cb_args .vector = vector ;
300
-
358
+ #if defined(BSP_MCU_RX26T )
359
+ cb_args .p_context = g_bsp_contexts [vector ];
360
+ #endif
301
361
g_bsp_vectors [vector ](& cb_args );
302
362
}
303
363
else
0 commit comments