172 lines
4.6 KiB
C
172 lines
4.6 KiB
C
/******************************************************************************
|
|
*
|
|
* @brief provide interrupt vector table for NV32Fxxx.
|
|
*
|
|
*******************************************************************************/
|
|
|
|
#include "vectors.h"
|
|
#include "isr.h"
|
|
#include "common.h"
|
|
|
|
/******************************************************************************
|
|
* Vector Table
|
|
******************************************************************************/
|
|
typedef void (*vector_entry)(void);
|
|
|
|
#ifdef KEIL
|
|
const vector_entry __vector_table[] __attribute__((at(0x00))) =
|
|
#elif (defined(__GNUC__))
|
|
//void (* const __vector_table[])() __attribute__ ((section(".vectortable"))) =
|
|
void (* const InterruptVector[])() __attribute__ ((section(".isr_vector"))) =
|
|
#else
|
|
#pragma location = ".intvec"
|
|
const vector_entry __vector_table[] = //@ ".intvec" =
|
|
#endif
|
|
{
|
|
VECTOR_000, /* Initial SP */
|
|
VECTOR_001, /* Initial PC */
|
|
VECTOR_002,
|
|
VECTOR_003,
|
|
VECTOR_004,
|
|
VECTOR_005,
|
|
VECTOR_006,
|
|
VECTOR_007,
|
|
VECTOR_008,
|
|
VECTOR_009,
|
|
VECTOR_010,
|
|
VECTOR_011,
|
|
VECTOR_012,
|
|
VECTOR_013,
|
|
VECTOR_014,
|
|
VECTOR_015,
|
|
VECTOR_016,
|
|
VECTOR_017,
|
|
VECTOR_018,
|
|
VECTOR_019,
|
|
VECTOR_020,
|
|
VECTOR_021,
|
|
VECTOR_022,
|
|
VECTOR_023,
|
|
VECTOR_024,
|
|
VECTOR_025,
|
|
VECTOR_026,
|
|
VECTOR_027,
|
|
VECTOR_028,
|
|
VECTOR_029,
|
|
VECTOR_030,
|
|
VECTOR_031,
|
|
VECTOR_032,
|
|
VECTOR_033,
|
|
VECTOR_034,
|
|
VECTOR_035,
|
|
VECTOR_036,
|
|
VECTOR_037,
|
|
VECTOR_038,
|
|
VECTOR_039,
|
|
VECTOR_040,
|
|
VECTOR_041,
|
|
VECTOR_042,
|
|
VECTOR_043,
|
|
VECTOR_044,
|
|
VECTOR_045,
|
|
VECTOR_046,
|
|
VECTOR_047 // END of real vector table
|
|
};
|
|
// VECTOR_TABLE end
|
|
#ifndef KEIL
|
|
#ifndef USE_BOOTLOADER
|
|
#ifdef KEIL
|
|
const uint32_t __flash_config[] __attribute__((at(0x400))) =
|
|
#elif (defined(__GNUC__))
|
|
const uint32_t __flash_config[] __attribute__ ((section(".nv32_flash_config_field"))) =
|
|
#else
|
|
#pragma location = 0x400
|
|
__root const uint32_t __flash_config[] = //@ ".intvec" =
|
|
#endif
|
|
{
|
|
CONFIG_1,
|
|
CONFIG_2,
|
|
CONFIG_3,
|
|
CONFIG_4,
|
|
};
|
|
#endif
|
|
#endif
|
|
/******************************************************************************
|
|
* default_isr(void)
|
|
*
|
|
* Default ISR definition.
|
|
*
|
|
* In: n/a
|
|
* Out: n/a
|
|
******************************************************************************/
|
|
void default_isr(void)
|
|
{
|
|
#define VECTORNUM (*(volatile uint32_t*)(0xE000ED04))
|
|
|
|
printf("\n****default_isr entered on vector %lu*****\r\n\n",VECTORNUM);
|
|
return;
|
|
}
|
|
/******************************************************************************/
|
|
/* Generic interrupt handler for a GPIO interrupt connected to an
|
|
* abort switch.
|
|
* NOTE: For true abort operation this handler should be modified
|
|
* to jump to the main process instead of executing a return.
|
|
*/
|
|
void abort_isr(void)
|
|
{
|
|
//printf("\n****Abort button interrupt****\n\n");
|
|
return;
|
|
}
|
|
|
|
|
|
/******************************************************************************/
|
|
/* Exception frame without floating-point storage
|
|
* 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;
|
|
|
|
//Exception stack frame
|
|
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 ("[Hard fault handler]\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 = %x\n", stacked_lr);
|
|
printf ("PC = %x\n", stacked_pc);
|
|
printf ("PSR = %x\n", stacked_psr);
|
|
printf ("BFAR = %x\n", (*((volatile unsigned long *)(0xE000ED38))));
|
|
printf ("CFSR = %x\n", (*((volatile unsigned long *)(0xE000ED28))));
|
|
printf ("HFSR = %x\n", (*((volatile unsigned long *)(0xE000ED2C))));
|
|
printf ("DFSR = %x\n", (*((volatile unsigned long *)(0xE000ED30))));
|
|
printf ("AFSR = %x\n", (*((volatile unsigned long *)(0xE000ED3C))));
|
|
*/
|
|
//for(;;)
|
|
//;/*infinite loop*/
|
|
}
|
|
|
|
|
|
/* End of "vectors.c" */
|