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 23 extern "C" { 24 #endif /* __cpluscplus */ 25 #endif /* __cpluscplus */ 26 27 /* 28 * 寄存器信息结构 29 * 30 * 描述:MX平台下的异常触发时保存的寄存器信息。 31 * 32 * 注意:以下寄存器名称对应芯片手册中的寄存器名称。 33 */ 34 struct 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 */ 61 struct 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 */ 76 struct 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