GadgetSeed  0.9.6
asm-Cortex-M3.h
[詳解]
1 /** @file
2  @brief Cortex-M3
3 
4  @date 2018.08.11
5  @author Takashi SHUDO
6 */
7 
8 #ifndef CORTEX_M3_H
9 #define CORTEX_M3_H
10 
11 #define ENDIAN_LITTLE
12 
13 #define MAXVECT 98
14 #define IRQ_VECT_OFFSET (16)
15 #define IRQ2VECT(x) (x + IRQ_VECT_OFFSET)
16 
17 /*
18  割り込み処理時のスタック状態
19 
20  割り込みハンドラではスタック状態を以下の構造体と同等にしてから、割り込み処理を行うこと
21 */
22 union st_regs {
23  unsigned int data[18];
24  struct {
25  unsigned int sp; // r13
26 
27  unsigned int r4;
28  unsigned int r5;
29  unsigned int r6;
30  unsigned int r7;
31  unsigned int r8;
32  unsigned int r9;
33  unsigned int r10;
34  unsigned int r11;
35  unsigned int ilr; // r14
36 
37  // 以下は割り込み発生時に自動的にスタックに保存される
38  unsigned int r0;
39  unsigned int r1;
40  unsigned int r2;
41  unsigned int r3;
42  unsigned int r12;
43  unsigned int lr; // r14
44  unsigned int pc; // r15
45  unsigned int xpsr;
46  } name;
47 }; ///< Cortex-M3 MCU レジスタ定義
48 
49 struct st_context {
50  union st_regs *regs;
51 }; ///< Cortex-M3 用タスクコンテキスト
52 
53 
54 #define disable_interrupt() asm volatile("cpsid i");
55 #define enable_interrupt() asm volatile("cpsie i");
56 #define sleep_cpu() asm volatile("wfi");
57 #define syscall_trap() asm volatile("svc 0");
58 #define nop() asm volatile("nop");
59 
60 #define INTNUM_SYSCALL 11 // SVC 割り込み番号 #11
61 
62 #endif // CORTEX_M3_H
Cortex-M3 MCU レジスタ定義
Definition: asm-Cortex-M3.h:22
Cortex-M3 用タスクコンテキスト
Definition: asm-Cortex-M3.h:49