Hey Carl,
The value of parameter is an address, here is an example how you can extract vector number etc:
void _int_unexpected_isr
(
/* [IN] the parameter passed to the default ISR, the vector */
pointer parameter
)
{ /* Body */
KERNEL_DATA_STRUCT_PTR kernel_data;
PSP_BASIC_INT_FRAME_STRUCT_PTR basic_frame_ptr;
PSP_INTERRUPT_FRAME_STRUCT_PTR frame_ptr;
TD_STRUCT_PTR td_ptr;
volatile uint_32 vector, offset;
_GET_KERNEL_DATA(kernel_data);
td_ptr = kernel_data->ACTIVE_PTR;
if (kernel_data->IN_ISR == 1) {
/* Get the pointer to the data stored on the task stack */
basic_frame_ptr = (pointer)td_ptr->STACK_PTR;
} else {
frame_ptr = (PSP_INTERRUPT_FRAME_STRUCT_PTR)¶meter;
basic_frame_ptr = &frame_ptr->BASIC_FRAME;
}/* Endif */
vector = PSP_FAV_GET_VECTOR_NUMBER(basic_frame_ptr->FRAME.FORMAT_AND_VECTOR);
offset = PSP_FAV_GET_VECTOR_OFFSET(basic_frame_ptr->FRAME.FORMAT_AND_VECTOR);
printf( "\n*** UNHANDLED INTERRUPT ***\n");
printf( "Vector #: %d 0x%x\n\r",vector,vector);
printf( "Offset : %d 0x%x\n\r",offset,offset);
printf( "Task Id: 0x%0x Td_ptr 0x%x Stack Frame: 0x%x\n\r",
td_ptr->TASK_ID, td_ptr, basic_frame_ptr);
printf( "Interrupt_nesting level: %d PC: 0x%08x SR: 0x%04x\n\r",
kernel_data->IN_ISR,
basic_frame_ptr->FRAME.RETURN_ADDRESS,
basic_frame_ptr->FRAME.STATUS_REGISTER );
td_ptr->STATE = UNHANDLED_INT_BLOCKED;
_task_set_error_td_internal(td_ptr, MQX_UNHANDLED_INTERRUPT);
kernel_data->IN_ISR = 0;
_task_block();
} /* Endbody */
Thanks,
Evgeny