annotate include/arm.h @ 0:ed10291ff195

first commit
author mir3636
date Sun, 06 Jan 2019 19:27:03 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ed10291ff195 first commit
mir3636
parents:
diff changeset
1 /*****************************************************************
ed10291ff195 first commit
mir3636
parents:
diff changeset
2 * arm.h
ed10291ff195 first commit
mir3636
parents:
diff changeset
3 * by Zhiyi Huang, hzy@cs.otago.ac.nz
ed10291ff195 first commit
mir3636
parents:
diff changeset
4 * University of Otago
ed10291ff195 first commit
mir3636
parents:
diff changeset
5 *
ed10291ff195 first commit
mir3636
parents:
diff changeset
6 ********************************************************************/
ed10291ff195 first commit
mir3636
parents:
diff changeset
7
ed10291ff195 first commit
mir3636
parents:
diff changeset
8
ed10291ff195 first commit
mir3636
parents:
diff changeset
9
ed10291ff195 first commit
mir3636
parents:
diff changeset
10
ed10291ff195 first commit
mir3636
parents:
diff changeset
11 #define PSR_MODE_USR 0x00000010
ed10291ff195 first commit
mir3636
parents:
diff changeset
12 #define PSR_MODE_FIQ 0x00000011
ed10291ff195 first commit
mir3636
parents:
diff changeset
13 #define PSR_MODE_IRQ 0x00000012
ed10291ff195 first commit
mir3636
parents:
diff changeset
14 #define PSR_MODE_SVC 0x00000013
ed10291ff195 first commit
mir3636
parents:
diff changeset
15 #define PSR_MODE_MON 0x00000016
ed10291ff195 first commit
mir3636
parents:
diff changeset
16 #define PSR_MODE_ABT 0x00000017
ed10291ff195 first commit
mir3636
parents:
diff changeset
17 #define PSR_MODE_UND 0x0000001B
ed10291ff195 first commit
mir3636
parents:
diff changeset
18 #define PSR_MODE_SYS 0x0000001F
ed10291ff195 first commit
mir3636
parents:
diff changeset
19 #define PSR_MASK 0x0000001F
ed10291ff195 first commit
mir3636
parents:
diff changeset
20 #define USER_MODE 0x0
ed10291ff195 first commit
mir3636
parents:
diff changeset
21
ed10291ff195 first commit
mir3636
parents:
diff changeset
22 #define PSR_DISABLE_IRQ 0x00000080
ed10291ff195 first commit
mir3636
parents:
diff changeset
23 #define PSR_DISABLE_FIQ 0x00000040
ed10291ff195 first commit
mir3636
parents:
diff changeset
24
ed10291ff195 first commit
mir3636
parents:
diff changeset
25 #define PSR_V 0x10000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
26 #define PSR_C 0x20000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
27 #define PSR_Z 0x40000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
28 #define PSR_N 0x80000000
ed10291ff195 first commit
mir3636
parents:
diff changeset
29
ed10291ff195 first commit
mir3636
parents:
diff changeset
30
ed10291ff195 first commit
mir3636
parents:
diff changeset
31 static inline uint
ed10291ff195 first commit
mir3636
parents:
diff changeset
32 inw(uint addr)
ed10291ff195 first commit
mir3636
parents:
diff changeset
33 {
ed10291ff195 first commit
mir3636
parents:
diff changeset
34 uint data;
ed10291ff195 first commit
mir3636
parents:
diff changeset
35
ed10291ff195 first commit
mir3636
parents:
diff changeset
36 asm volatile("ldr %0,[%1]" : "=r"(data) : "r"(addr));
ed10291ff195 first commit
mir3636
parents:
diff changeset
37 return data;
ed10291ff195 first commit
mir3636
parents:
diff changeset
38 }
ed10291ff195 first commit
mir3636
parents:
diff changeset
39
ed10291ff195 first commit
mir3636
parents:
diff changeset
40 static inline void
ed10291ff195 first commit
mir3636
parents:
diff changeset
41 outw(uint addr, uint data)
ed10291ff195 first commit
mir3636
parents:
diff changeset
42 {
ed10291ff195 first commit
mir3636
parents:
diff changeset
43 asm volatile("str %1,[%0]" : : "r"(addr), "r"(data));
ed10291ff195 first commit
mir3636
parents:
diff changeset
44 }
ed10291ff195 first commit
mir3636
parents:
diff changeset
45
ed10291ff195 first commit
mir3636
parents:
diff changeset
46
ed10291ff195 first commit
mir3636
parents:
diff changeset
47 // Layout of the trap frame built on the stack
ed10291ff195 first commit
mir3636
parents:
diff changeset
48 // by exception.s, and passed to trap().
ed10291ff195 first commit
mir3636
parents:
diff changeset
49 struct trapframe {
ed10291ff195 first commit
mir3636
parents:
diff changeset
50 uint sp; // user mode sp
ed10291ff195 first commit
mir3636
parents:
diff changeset
51 uint r0;
ed10291ff195 first commit
mir3636
parents:
diff changeset
52 uint r1;
ed10291ff195 first commit
mir3636
parents:
diff changeset
53 uint r2;
ed10291ff195 first commit
mir3636
parents:
diff changeset
54 uint r3;
ed10291ff195 first commit
mir3636
parents:
diff changeset
55 uint r4;
ed10291ff195 first commit
mir3636
parents:
diff changeset
56 uint r5;
ed10291ff195 first commit
mir3636
parents:
diff changeset
57 uint r6;
ed10291ff195 first commit
mir3636
parents:
diff changeset
58 uint r7;
ed10291ff195 first commit
mir3636
parents:
diff changeset
59 uint r8;
ed10291ff195 first commit
mir3636
parents:
diff changeset
60 uint r9;
ed10291ff195 first commit
mir3636
parents:
diff changeset
61 uint r10;
ed10291ff195 first commit
mir3636
parents:
diff changeset
62 uint r11;
ed10291ff195 first commit
mir3636
parents:
diff changeset
63 uint r12;
ed10291ff195 first commit
mir3636
parents:
diff changeset
64 uint r13;
ed10291ff195 first commit
mir3636
parents:
diff changeset
65 uint r14;
ed10291ff195 first commit
mir3636
parents:
diff changeset
66 uint trapno;
ed10291ff195 first commit
mir3636
parents:
diff changeset
67 uint ifar; // Instruction Fault Address Register (IFAR)
ed10291ff195 first commit
mir3636
parents:
diff changeset
68 uint cpsr;
ed10291ff195 first commit
mir3636
parents:
diff changeset
69 uint spsr; // saved cpsr from the trapped/interrupted mode
ed10291ff195 first commit
mir3636
parents:
diff changeset
70 uint pc; // return address of the interrupted code
ed10291ff195 first commit
mir3636
parents:
diff changeset
71 };
ed10291ff195 first commit
mir3636
parents:
diff changeset
72