gonzui


Format: Advanced Search

mtkernel_3/kernel/sysdepend/cpu/core/armv7m/exc_hdr.cbare sourcepermlink (0.01 seconds)

Search this content:

    1: /*
    2:  *----------------------------------------------------------------------
    3:  *    micro T-Kernel 3.00.03
    4:  *
    5:  *    Copyright (C) 2006-2021 by Ken Sakamura.
    6:  *    This software is distributed under the T-License 2.2.
    7:  *----------------------------------------------------------------------
    8:  *
    9:  *    Released by TRON Forum(http://www.tron.org) at 2021/03/31.
   10:  *
   11:  *----------------------------------------------------------------------
   12:  */
   13: 
   14: #include <sys/machine.h>
   15: #ifdef CPU_CORE_ARMV7M
   16: 
   17: /*
   18:  *      exc_hdr.c (ARMv7-M)
   19:  *      Exception handler
   20:  */
   21: 
   22: #include <tk/tkernel.h>
   23: #include <tm/tmonitor.h>
   24: #include <kernel.h>
   25: #include "../../../sysdepend.h"
   26: 
   27: #if (USE_EXCEPTION_DBG_MSG && USE_TMONITOR)
   28:         #define EXCEPTION_DBG_MSG(a)   tm_putstring((UB*)a)
   29: #else
   30:         #define EXCEPTION_DBG_MSG(a)
   31: #endif
   32: 
   33: /*
   34:  * NMI handler
   35:  */
   36: WEAK_FUNC EXPORT void NMI_Handler(void)
   37: {
   38:         EXCEPTION_DBG_MSG("NMI\n");
   39:         while(1);
   40: }
   41: 
   42: /*
   43:  * Hard fault handler
   44:  */
   45: WEAK_FUNC EXPORT void HardFault_Handler(void)
   46: {
   47: #if (USE_EXCEPTION_DBG_MSG  && USE_TMONITOR)
   48: 
   49:         UW     hfsr, cfsr;
   50:         ID     ctskid;
   51: 
   52:         hfsr   = *(_UW *)SCB_HFSR;
   53:         if(knl_ctxtsk != NULL) {
   54:                 ctskid = knl_ctxtsk->tskid;
   55:         } else {
   56:                 ctskid = 0;
   57:         }
   58: 
   59:         if(hfsr & 0x40000000) {
   60:                 cfsr = *(_UW*)SCB_CFSR;
   61:                 tm_printf((UB*)"*** Hard fault ***  ctxtsk:%d  HFSR:%x  CFSR:%x\n", ctskid, hfsr, cfsr);
   62:         } else {
   63:                 tm_printf((UB*)"*** Hard fault ***  ctxtsk:%d  HFSR:%x%x\n", ctskid, hfsr);
   64:         }
   65: #endif
   66:         while(1);
   67: }
   68: 
   69: /*
   70:  * MPU Fault Handler
   71:  */
   72: WEAK_FUNC EXPORT void MemManage_Handler(void)
   73: {
   74:         EXCEPTION_DBG_MSG("MPU Fault\n");
   75:         while(1);
   76: }
   77: 
   78: /* 
   79:  * Bus Fault Handler
   80:  */
   81: WEAK_FUNC EXPORT void BusFault_Handler(void)
   82: {
   83:         EXCEPTION_DBG_MSG("Bus Fault\n");
   84:         while(1);
   85: }
   86: 
   87: /*
   88:  * Usage Fault Handler
   89:  */
   90: WEAK_FUNC EXPORT void UsageFault_Handler(void)
   91: {
   92:         EXCEPTION_DBG_MSG("Usage Fault\n");
   93:         while(1);
   94: }
   95: 
   96: /*
   97:  * Svcall
   98:  */
   99: WEAK_FUNC EXPORT void Svcall_Handler(void)
  100: {
  101:         EXCEPTION_DBG_MSG("SVCall\n");
  102:         while(1);
  103: }
  104: 
  105: /* 
  106:  * Debug Monitor
  107:  */
  108: WEAK_FUNC EXPORT void DebugMon_Handler(void)
  109: {
  110:         EXCEPTION_DBG_MSG("Debug Monitor\n");
  111:         while(1);
  112: }
  113: 
  114: /*
  115:  * Default Handler
  116:  */
  117: WEAK_FUNC EXPORT void Default_Handler(void)
  118: {
  119: #if (USE_EXCEPTION_DBG_MSG  && USE_TMONITOR)
  120:         INT    i;
  121:         _UW    *icpr;
  122: 
  123:         icpr = (_UW*)NVIC_ICPR_BASE;
  124: 
  125:         EXCEPTION_DBG_MSG("Undefine Exceptio ICPR: ");
  126:         for(i=0; i < 8; i++) {
  127:                 tm_printf((UB*)"%x ", *icpr++);
  128:         }
  129:         EXCEPTION_DBG_MSG("\n");
  130: #endif
  131:         while(1);
  132: }
  133: 
  134: #endif /* CPU_CORE_ACM4F */