📄 excep_api.h
字号:
* Return values :
* ---------------
*
* 'OK'(=0)
* 'ERROR_EXCEP_ILLEGAL_HANDLER': ref is unknown
*
************************************************************************/
INT32
EXCEP_deregister_esr(
t_EXCEP_ref ref ); /* In : Handle for deregistration */
/************************************************************************
*
* EXCEP_register_cpu_isr
* Description :
* -------------
*
* Registers an interrupt handler for the specified CPU interrupt.
* The highest service priority is attached to HW-INT5, which is
* connected to the CPU-built-in CP0-timer. SW_INT0 gets the lowest
* service priority. During registration, the interrupt mask field
* in the CPU CP0-status register is updated to enable interrupts
* from the specified interrupt source.
*
* A special ID is defined :
* EXCEP_DEFAULT_HANDLER used for a default handler.
*
* The default handler is called if no other handler is registered
* for a CPU interrupt.
*
* Deregistration of the default handler may be done by calling
* this function with 'handler' set to NULL.
* Also, a new default handler may be registered even if a
* previously registered handler has not been deregistered.
* Handlers for specific CPU interrupts must be deregistered using
* EXCEP_deregister_cpu_isr.
*
* Parameters :
* ------------
*
* 'cpu_int', IN, CPU interrupt (C0_STATUS_IM_HW[0..5] |
* C0_STATUS_IM_SW[0..1])
* or EXCEP_DEFAULT_HANDLER for a default handler.
* 'handler', IN, Function pointer for user defined handler
* 'data', IN, Data pointer, may be NULL
* 'ref', OUT, Handle used for deregistration of handler.
*
* Return values :
* ---------------
*
* 'OK'(=0)
* 'ERROR_EXCEP_ILLEGAL_INTERRUPT': CPU interrupt source is unknown
* 'ERROR_EXCEP_ILLEGAL_HANDLER': Handler reference is NULL
* 'ERROR_EXCEP_NO_SPACE': Too many handlers have been registered
*
************************************************************************/
INT32
EXCEP_register_cpu_isr(
UINT32 cpu_int, /* CPU interrupt, 0..7 */
t_EXCEP_isr handler, /* ISR to be registered */
void *data, /* Data reference to be registered */
t_EXCEP_ref *ref ); /* OUT : Handle for deregistration */
/************************************************************************
*
* EXCEP_deregister_cpu_isr
* Description :
* -------------
*
* Deregisters interrupt handler
*
* Parameters :
* ------------
*
* 'ref', IN, Handle obtained when calling EXCEP_register_cpu_isr
* It is OK to call this function even if we are in interrupt context.
*
* Return values :
* ---------------
*
* 'OK'(=0)
* 'ERROR_EXCEP_ILLEGAL_HANDLER': ref is unknown
*
************************************************************************/
INT32
EXCEP_deregister_cpu_isr(
t_EXCEP_ref ref ); /* In : Handle for deregistration */
/************************************************************************
*
* EXCEP_register_ic_isr
* Description :
* -------------
*
* Registers an interrupt handler for the specified source in the
* interrupt controller.
*
* A special ID is defined :
* EXCEP_DEFAULT_HANDLER used for a default handler.
*
* The default handler is called if no other handler is registered
* for an interrupt.
*
* Deregistration of the default handler may be done by calling
* this function with 'handler' set to NULL.
* Also, a new default handler may be registered even if a
* previously registered handler has not been deregistered.
* Handlers for specific interrupts must be deregistered using
* EXCEP_deregister_ic_isr.
* Parameters :
* ------------
*
* 'ic_int_line', IN, Interrupt source line in Int. Controller
* or EXCEP_DEFAULT_HANDLER for a default handler.
* 'handler', IN, Function pointer for user defined handler
* 'data', IN, Data pointer; may be NULL
* 'ref', OUT, Handle used for deregistration of handler.
*
* Return values :
* ---------------
*
* 'OK'(=0)
* 'ERROR_EXCEP_ILLEGAL_INTERRUPT': Int. source line is unknown
* 'ERROR_EXCEP_ILLEGAL_HANDLER': Handler reference is NULL
* 'ERROR_EXCEP_NO_SPACE': Too many handlers have been registered
*
************************************************************************/
INT32
EXCEP_register_ic_isr(
UINT32 ic_int_line, /* Exception identification */
t_EXCEP_isr handler, /* ISR to be registered */
void *data, /* Data reference to be registered */
t_EXCEP_ref *ref ); /* OUT : Handle for deregistration */
/************************************************************************
*
* EXCEP_deregister_ic_isr
* Description :
* -------------
*
* Deregisters interrupt handler for source in interrupt controller
* It is OK to call this function even if we are in interrupt context.
*
* Parameters :
* ------------
*
* 'ref', IN, Handle obtained when calling EXCEP_register_ic_isr
*
* Return values :
* ---------------
*
* 'OK'(=0)
* 'ERROR_EXCEP_ILLEGAL_HANDLER': ref is unknown
*
************************************************************************/
INT32
EXCEP_deregister_ic_isr(
t_EXCEP_ref ref ); /* In : Handle for deregistration */
/************************************************************************
*
* EXCEP_toggle_handlers
* Description :
* -------------
*
* Based on 'store' parameter, the current setup of registered
* exception handlers is stored or restored.
*
************************************************************************/
void
EXCEP_toggle_handlers(
bool store ); /* TRUE -> Store current setup, FALSE -> Restore setup */
/************************************************************************
*
* EXCEP_install_exc_in_ram
* Description :
* -------------
*
* Install jump instructions to exc handler at exception vector locations.
* Stores/restores old data at exception vector locations depending
* on restore_old parameter.
*
* Return values :
* ---------------
*
* None
*
************************************************************************/
void
EXCEP_install_exc_in_ram(
/* 0 -> Install exc. handler, 1-> Restore old */
UINT32 restore_old,
/* Exception handler to be called after context has been stored. */
t_EXCEP_first_level_excep exc_handler );
/************************************************************************
*
* EXCEP_exc_handler_ret
* Description :
* -------------
*
* Restore context and return from exception
*
* Return values :
* ---------------
*
* None
*
************************************************************************/
void
EXCEP_exc_handler_ret(
t_gdb_regs *context );
/************************************************************************
*
* EXCEP_print_context
* Description :
* -------------
*
* Print context
*
* Note : The EXCEP module in installed before the serial drivers
* (see initmodules.h), so if an exception occurs before the serial
* drivers are installed, printf, which is used in this function, will
* not work. printf ultimately causes IO module to be called, and since
* the IO module initialises write function pointers to dummy functions,
* everything is OK.
*
* Return values :
* ---------------
*
* None
*
************************************************************************/
void
EXCEP_print_context(
t_gdb_regs *context, /* Context to print */
char *msg, /* Special msg to be printed (or NULL) */
bool user, /* In user context */
bool display ); /* TRUE -> Print EPC in ASCII display */
#else /* #ifndef _ASSEMBLER_ */
EXTERN(EXCEP_install_exc_in_ram)
EXTERN(EXCEP_exc_handler_ret)
#endif /* #ifndef _ASSEMBLER_ */
#endif /* #ifndef EXCEP_API_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -