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