• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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