1/* 2 * Copyright (c) 2009-2022 Huawei Technologies Co., Ltd. All rights reserved. 3 * 4 * UniProton is licensed under Mulan PSL v2. 5 * You can use this software according to the terms and conditions of the Mulan PSL v2. 6 * You may obtain a copy of Mulan PSL v2 at: 7 * http://license.coscl.org.cn/MulanPSL2 8 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, 9 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, 10 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. 11 * See the Mulan PSL v2 for more details. 12 * Create: 2009-12-22 13 * Description: 异常模块的对外头文件。 14 */ 15#ifndef ARMV7_M_EXC_H 16#define ARMV7_M_EXC_H 17 18#include "prt_typedef.h" 19#include "prt_sys.h" 20 21#ifdef __cplusplus 22#if __cplusplus 23extern "C" { 24#endif /* __cpluscplus */ 25#endif /* __cpluscplus */ 26 27/* 28 * 寄存器信息结构 29 * 30 * 描述:MX平台下的异常触发时保存的寄存器信息。 31 * 32 * 注意:以下寄存器名称对应芯片手册中的寄存器名称。 33 */ 34struct ExcContext { 35 U32 r4; /* R4寄存器 */ 36 U32 r5; /* R5寄存器 */ 37 U32 r6; /* R6寄存器 */ 38 U32 r7; /* R7寄存器 */ 39 U32 r8; /* R8寄存器 */ 40 U32 r9; /* R9寄存器 */ 41 U32 r10; /* R10寄存器 */ 42 U32 r11; /* R11寄存器 */ 43 U32 basePri; /* 中断优先级屏蔽寄存器 */ 44 U32 sp; /* 程序栈指针 */ 45 U32 r0; /* RO寄存器 */ 46 U32 r1; /* R1寄存器 */ 47 U32 r2; /* R2寄存器 */ 48 U32 r3; /* R3寄存器 */ 49 U32 r12; /* R12寄存器 */ 50 U32 lr; /* 程序返回地址,即异常时的下一条指令 */ 51 U32 pc; /* 异常时的PC指针 */ 52 U32 xpsr; /* xpsr程序状态寄存器 */ 53}; 54 55/* 56 * 异常信息结构体 57 * 58 * 描述:MX平台下的异常触发时保存的异常信息。 59 * 60 */ 61struct ExcRegInfo { 62 /* 63 * 上一次异常类型, bit16标示FaultAddr域是否有效,bit8~bit15表示当发生HardFault时的子异常错误类型, 64 * bit0~bit7表示异常时的主异常错误类型 65 */ 66 U32 excType; 67 /* 若为精确地址访问错误表示异常发生时的错误访问地址,其它为缺省值0xABABABAB */ 68 U32 faultAddr; 69 /* 异常发生时刻的硬件上下文 */ 70 struct ExcContext *context; 71}; 72 73/* 74 * 用户可以看到异常信息 75 */ 76struct ExcInfo { 77 /* OS版本号 */ 78 char osVer[OS_SYS_OS_VER_LEN]; 79 /* 产品版本号 */ 80 char appVer[OS_SYS_APP_VER_LEN]; 81 /* 异常原因 */ 82 U32 excCause; 83 /* 异常前的线程类型 */ 84 U32 threadType; 85 /* 异常前的线程ID */ 86 U32 threadId; 87 /* 字节序 */ 88 U16 byteOrder; 89 /* CPU类型 */ 90 U16 cpuType; 91 /* CPU ID */ 92 U32 coreId; 93 /* CPU Tick */ 94 U64 cpuTick; 95 /* 异常嵌套计数 */ 96 U32 nestCnt; 97 /* 异常前栈指针 */ 98 U32 sp; 99 /* 异常前栈底 */ 100 U32 stackBottom; 101 /* 102 * 异常发生时的核内寄存器上下文信息,82\57必须位于152字节处, 103 * 若有改动,需更新prt_asm_cpu_external.h中的OS_EXC_REGINFO_OFFSET宏 104 */ 105 struct ExcRegInfo regInfo; 106}; 107 108/* 109 * Cortex-MX异常具体类型:总线状态寄存器入栈时发生错误。 110 */ 111#define OS_EXC_BF_STKERR 1 112 113/* 114 * Cortex-MX异常具体类型:总线状态寄存器出栈时发生错误。 115 */ 116#define OS_EXC_BF_UNSTKERR 2 117 118/* 119 * Cortex-MX异常具体类型:总线状态寄存器不精确的数据访问违例。 120 */ 121#define OS_EXC_BF_IMPRECISERR 3 122 123/* 124 * Cortex-MX异常具体类型:总线状态寄存器精确的数据访问违例。 125 */ 126#define OS_EXC_BF_PRECISERR 4 127 128/* 129 * Cortex-MX异常具体类型:总线状态寄存器取指时的访问违例。 130 */ 131#define OS_EXC_BF_IBUSERR 5 132 133/* 134 * Cortex-MX异常具体类型:存储器管理状态寄存器入栈时发生错误。 135 */ 136#define OS_EXC_MF_MSTKERR 6 137 138/* 139 * Cortex-MX异常具体类型:存储器管理状态寄存器出栈时发生错误。 140 */ 141#define OS_EXC_MF_MUNSTKERR 7 142 143/* 144 * Cortex-MX异常具体类型:存储器管理状态寄存器数据访问违例。 145 */ 146#define OS_EXC_MF_DACCVIOL 8 147 148/* 149 * Cortex-MX异常具体类型:存储器管理状态寄存器取指访问违例。 150 */ 151#define OS_EXC_MF_IACCVIOL 9 152 153/* 154 * Cortex-MX异常具体类型:用法错误,表示除法运算时除数为零。 155 */ 156#define OS_EXC_UF_DIVBYZERO 10 157 158/* 159 * Cortex-MX异常具体类型:用法错误,未对齐访问导致的错误。 160 */ 161#define OS_EXC_UF_UNALIGNED 11 162 163/* 164 * Cortex-MX异常具体类型:用法错误,试图执行协处理器相关指令。 165 */ 166#define OS_EXC_UF_NOCP 12 167 168/* 169 * Cortex-MX异常具体类型:用法错误,在异常返回时试图非法地加载EXC_RETURN到PC。 170 */ 171#define OS_EXC_UF_INVPC 13 172 173/* 174 * Cortex-MX异常具体类型:用法错误,试图切入ARM状态。 175 */ 176#define OS_EXC_UF_INVSTATE 14 177 178/* 179 * Cortex-MX异常具体类型:用法错误,执行的指令其编码是未定义的——解码不能。 180 */ 181#define OS_EXC_UF_UNDEFINSTR 15 182 183/* 184 * Cortex-MX异常具体类型:NMI中断。 185 */ 186#define OS_EXC_CAUSE_NMI 16 187 188/* 189 * Cortex-MX异常具体类型:硬fault。 190 */ 191#define OS_EXC_CAUSE_HARDFAULT 17 192 193/* 194 * Cortex-MX异常具体类型:致命错误。 195 */ 196#define OS_EXC_CAUSE_FATAL_ERR 18 197 198/* 199 * Cortex-MX异常具体类型:维测事件导致的硬fault。 200 */ 201#define OS_EXC_CAUSE_DBGEVT 19 202 203/* 204 * Cortex-MX异常具体类型:取向量时发生的硬fault。 205 */ 206#define OS_EXC_CAUSE_VECTBL 20 207 208#ifdef __cplusplus 209#if __cplusplus 210} 211#endif /* __cpluscplus */ 212#endif /* __cpluscplus */ 213 214#endif /* ARMV7_M_EXC_H */ 215