// hard fault handler in C,
// with stack frame location as input parameter
void hard_fault_handler_c (unsigned int * hardfault_args)
{
unsigned int stacked_r0;
unsigned int stacked_r1;
unsigned int stacked_r2;
unsigned int stacked_r3;
unsigned int stacked_r12;
unsigned int stacked_lr;
unsigned int stacked_pc;
unsigned int stacked_psr;
stacked_r0 = ((unsigned long)hardfault_args[0]);
stacked_r1 = ((unsigned long)hardfault_args[1]);
stacked_r2 = ((unsigned long)hardfault_args[2]);
stacked_r3 = ((unsigned long)hardfault_args[3]);
stacked_r12 = ((unsigned long)hardfault_args[4]);
stacked_lr = ((unsigned long)hardfault_args[5]);
stacked_pc = ((unsigned long)hardfault_args[6]);
stacked_psr = ((unsigned long) hardfault_args[7]);
printf ("\n\n[Hard faulthandler - all numbers in hex]\n");
printf ("R0 = %x\n",stacked_r0);
printf ("R1 = %x\n",stacked_r1);
printf ("R2 = %x\n",stacked_r2);
printf ("R3 = %x\n",stacked_r3);
printf ("R12 = %x\n",stacked_r12);
printf ("LR [R14] = %x subroutine call return address\n",stacked_lr);
printf ("PC [R15] = %x program counter\n", stacked_pc);
printf ("PSR = %x\n",stacked_psr);
/******************* Add yourdebug trace here ***********************/
_int_kernel_isr();
}
/* hard fault interrupt handler */
void _int_hardfault_isr( )
{
__asm("TST LR, #4");
__asm("ITE EQ");
__asm("MRSEQ R0,MSP");
__asm("MRSNE R0,PSP");
__asm("Bhard_fault_handler_c");
}
// hard fault handler in C,
// with stack frame location as input parameter
void hard_fault_handler_c (unsigned int * hardfault_args)
{
unsigned int stacked_r0;
unsigned int stacked_r1;
unsigned int stacked_r2;
unsigned int stacked_r3;
unsigned int stacked_r12;
unsigned int stacked_lr;
unsigned int stacked_pc;
unsigned int stacked_psr;
stacked_r0 = ((unsigned long)hardfault_args[0]);
stacked_r1 = ((unsigned long)hardfault_args[1]);
stacked_r2 = ((unsigned long)hardfault_args[2]);
stacked_r3 = ((unsigned long)hardfault_args[3]);
stacked_r12 = ((unsigned long)hardfault_args[4]);
stacked_lr = ((unsigned long)hardfault_args[5]);
stacked_pc = ((unsigned long)hardfault_args[6]);
stacked_psr = ((unsigned long) hardfault_args[7]);
printf ("\n\n[Hard faulthandler - all numbers in hex]\n");
printf ("R0 = %x\n",stacked_r0);
printf ("R1 = %x\n",stacked_r1);
printf ("R2 = %x\n",stacked_r2);
printf ("R3 = %x\n",stacked_r3);
printf ("R12 = %x\n",stacked_r12);
printf ("LR [R14] = %x subroutine call return address\n",stacked_lr);
printf ("PC [R15] = %x program counter\n", stacked_pc);
printf ("PSR = %x\n",stacked_psr);
/******************* Add yourdebug trace here ***********************/
_int_kernel_isr();
}
/* hard fault interrupt handler */
void _int_hardfault_isr( )
{
__asm("TST LR, #4");
__asm("ITE EQ");
__asm("MRSEQ R0,MSP");
__asm("MRSNE R0,PSP");
__asm("Bhard_fault_handler_c");
}