1 |
|
---|
2 | TOPPERS/ASP3ã«ã¼ãã«
|
---|
3 | ARMã³ã¢ä¾åé¨ è¨è¨ã¡ã¢
|
---|
4 |
|
---|
5 | 対å¿ãã¼ã¸ã§ã³: Release 3.1.0
|
---|
6 | æçµæ´æ°: 2016å¹´5æ14æ¥
|
---|
7 |
|
---|
8 | ----------------------------------------------------------------------
|
---|
9 | TOPPERS/ASP Kernel
|
---|
10 | Toyohashi Open Platform for Embedded Real-Time Systems/
|
---|
11 | Advanced Standard Profile Kernel
|
---|
12 |
|
---|
13 | Copyright (C) 2014-2016 by Embedded and Real-Time Systems Laboratory
|
---|
14 | Graduate School of Information Science, Nagoya Univ., JAPAN
|
---|
15 |
|
---|
16 | ä¸è¨èä½æ¨©è
|
---|
17 | ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§
|
---|
18 | ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹
|
---|
19 | å¤ã»åé
|
---|
20 | å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
|
---|
21 | (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
|
---|
22 | 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
|
---|
23 | ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼
|
---|
24 | (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
25 | ç¨ã§ããå½¢ã§åé
|
---|
26 | å¸ããå ´åã«ã¯ï¼åé
|
---|
27 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨
|
---|
28 | è
|
---|
29 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
|
---|
30 | ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
31 | (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
32 | ç¨ã§ããªãå½¢ã§åé
|
---|
33 | å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
|
---|
34 | ã¨ï¼
|
---|
35 | (a) åé
|
---|
36 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è
|
---|
37 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
|
---|
38 | ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
39 | (b) åé
|
---|
40 | å¸ã®å½¢æ
|
---|
41 | ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã«
|
---|
42 | å ±åãããã¨ï¼
|
---|
43 | (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
|
---|
44 | 害ãããï¼ä¸è¨èä½æ¨©è
|
---|
45 | ããã³TOPPERSããã¸ã§ã¯ããå
|
---|
46 | 責ãããã¨ï¼
|
---|
47 | ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç
|
---|
48 | ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è
|
---|
49 | ããã³TOPPERSããã¸ã§ã¯ãã
|
---|
50 | å
|
---|
51 | 責ãããã¨ï¼
|
---|
52 |
|
---|
53 | æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
|
---|
54 | ã
|
---|
55 | ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç
|
---|
56 | ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§
|
---|
57 | ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã
|
---|
58 | ã®è²¬ä»»ãè² ããªãï¼
|
---|
59 |
|
---|
60 | $Id: arm_design.txt 751 2016-05-14 15:03:06Z ertl-hiro $
|
---|
61 | ----------------------------------------------------------------------
|
---|
62 |
|
---|
63 | âç®æ¬¡
|
---|
64 |
|
---|
65 | ã»ç¥å·
|
---|
66 | ã»åèæç®
|
---|
67 | ã»ARMã³ã¢ä¾åé¨ã®ä½ç½®ã¥ã
|
---|
68 | - Thumbå½ä»¤ã®æ±ã
|
---|
69 | ã»ã·ã¹ãã ç¶æ
|
---|
70 | ã®ç®¡ç
|
---|
71 | - ããã»ããµã¢ã¼ã
|
---|
72 | - ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿
|
---|
73 | - å
|
---|
74 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
75 | ã®ç®¡ç
|
---|
76 | - ã³ã³ããã¹ãã®ç®¡ç
|
---|
77 | - CPUããã¯ç¶æ
|
---|
78 | ã®ç®¡ç
|
---|
79 | - å²è¾¼ã¿åªå
|
---|
80 | 度ãã¹ã¯ã®ç®¡ç
|
---|
81 | - å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ç®¡ç
|
---|
82 | - å²è¾¼ã¿ã«é¢ãããã®ä»ã®æä½
|
---|
83 | - CPSRï¼Program Status Registerï¼ã®è¨å®å¤
|
---|
84 | ã»ä¾å¤ï¼å²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ï¼ã®åºå
|
---|
85 | ¥å£
|
---|
86 | - ARMv6ããåã®ããã»ããµã®å ´å
|
---|
87 | - ARMv6以éã®ããã»ããµã®å ´å
|
---|
88 | ã»å²è¾¼ã¿ãã³ãã©ã®åºå
|
---|
89 | ¥å£å¦ç
|
---|
90 | ã»CPUä¾å¤ãã³ãã©ã®åºå
|
---|
91 | ¥å£å¦ç
|
---|
92 | - ã¹ã¿ãã¯ãã¤ã³ã¿ãä¸æ£ã®å ´åã®å¯¾ç
|
---|
93 |
|
---|
94 | âç¥å·
|
---|
95 |
|
---|
96 | CPSR Current Program Status Register
|
---|
97 | FIQ Fast Interrupt Request
|
---|
98 | GIC Generic Interrupt Controller
|
---|
99 | IRQ Interrupt Request
|
---|
100 |
|
---|
101 | âåèæç®
|
---|
102 |
|
---|
103 | [1] TOPPERSããã¸ã§ã¯ã è¨è¨ã¡ã¢ãARMã®ã¢ã¼ããã¯ãã£ã«é¢ããã¡ã¢ãï¼
|
---|
104 |
|
---|
105 | âARMã³ã¢ä¾åé¨ã®ä½ç½®ã¥ã
|
---|
106 |
|
---|
107 | ARMã³ã¢ä¾åé¨ã¯ï¼ã«ã¼ãã«ã®ã¿ã¼ã²ããä¾åé¨ã®ä¸ã§ï¼ARMv4ï¼ARMv5ï¼ARMv6ï¼
|
---|
108 | ARMv7-Aï¼ARMv7-Rã«æºæ ããããã»ããµã³ã¢ãæã¤ã¿ã¼ã²ããã·ã¹ãã ï¼ãã
|
---|
109 | ãï¼ã«å
|
---|
110 | ±éã«ä½¿ç¨ã§ããé¨åã§ããï¼ãã ãï¼ããã«è©²å½ãããã¹ã¦ã®ARMã³ã¢
|
---|
111 | ã«å¯¾å¿ã§ãã¦ããããã§ã¯ãªãï¼æ°ãããããã«ãã¼ãã£ã³ã°ããéã«ã¯ï¼ã³
|
---|
112 | ã¢ä¾åé¨ã«ä½ããã®ä¿®æ£ãå¿
|
---|
113 | è¦ã«ãªããã¨ãå¤ãã¨æãããï¼
|
---|
114 |
|
---|
115 | ARMã³ã¢ã®ããã»ããµã³ã¢ç¥ç§°ã"arm"ã¨ããï¼GNUéçºç°å¢åãã®ARMã³ã¢ä¾å
|
---|
116 | é¨ãç½®ããã£ã¬ã¯ããªã¯arch/arm_gcc/commonã¨ãªãï¼
|
---|
117 |
|
---|
118 | ARMã®å ´åï¼å²è¾¼ã¿ã³ã³ããã¼ã©ã¯ã³ã¢ã®å¤ã«ãããã¨ããï¼å²è¾¼ã¿ã³ã³ããã¼
|
---|
119 | ã©ã«ä¾åããé¨åã¯ARMã³ã¢ä¾åé¨ã«å«ããªããã¨ãååã¨ãããï¼å¤ãã®ãã
|
---|
120 | ãã«æ¡ç¨ããã¦ããå²è¾¼ã¿ã³ã³ããã¼ã©ã§ããGICï¼ARM Generic Interrupt
|
---|
121 | Controllerï¼ã«ä¾åããé¨åï¼GICä¾åé¨ï¼ã¯ï¼ARMã³ã¢ä¾åé¨ã®ãã£ã¬ã¯ããª
|
---|
122 | ã«ç½®ãã¦ããï¼GICä¾åé¨ã®è¨è¨ã«ã¤ãã¦ã¯ï¼ãGICä¾åé¨ è¨è¨ã¡ã¢ããåç
|
---|
123 | §ã
|
---|
124 | ããã¨ï¼
|
---|
125 |
|
---|
126 | ãªãï¼ARMã³ã¢ä¾åé¨ã¯ï¼ARMã¢ã¼ããã¯ãã£ã®ãã¼ã¸ã§ã³çªå·ï¼4ã7ã®ããã
|
---|
127 | ãï¼ãï¼__TARGET_ARCH_ARMã«ãã¯ãå®ç¾©ããã¦ãããã®ã¨ãã¦è¨è¿°ãã¦ããï¼
|
---|
128 |
|
---|
129 | âThumbã¢ã¼ãã®æ±ã
|
---|
130 |
|
---|
131 | ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®Cè¨èªã§è¨è¿°ãããé¨åã¯ï¼Thumbã¢ã¼
|
---|
132 | ãåãã«ã³ã³ãã¤ã«ãã¦ãåä½ããããã«ããï¼ããã«å¯¾ãã¦ï¼ã«ã¼ãã«ã®ã¢
|
---|
133 | ã»ã³ããªè¨èªè¨è¿°ã®é¨åã¯ï¼ARMå½ä»¤ã§è¨è¿°ãï¼Thumbã¢ã¼ãã§å®è¡ãããã¨ã¯
|
---|
134 | èããªãï¼
|
---|
135 |
|
---|
136 | âã·ã¹ãã ç¶æ
|
---|
137 | ã®ç®¡ç
|
---|
138 |
|
---|
139 | âããã»ããµã¢ã¼ã
|
---|
140 |
|
---|
141 | ASP3ã«ã¼ãã«ã®ARMã³ã¢ä¾åé¨ã§ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®
|
---|
142 | 大é¨åãï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã§å®è¡ããï¼ä¾å¤ã®å
|
---|
143 | ¥å£ã§ããããã®ããã»ã
|
---|
144 | ãµã¢ã¼ãã«åãæãããï¼å
|
---|
145 | ¥å£å¦çã®ä¸ã§ã¹ã¼ããã¤ã¶ã¢ã¼ãã«æ»ãããï¼ã
|
---|
146 | ãã¾ã§ã«ã¼ãã«ã®å
|
---|
147 | é¨ã§ä¸æçã«ä»ã®ã¢ã¼ãã使ãã«éããªãï¼
|
---|
148 |
|
---|
149 | å²è¾¼ã¿å¦çã®å®è¡ã«IRQã¢ã¼ãã使ããªãã®ã¯ï¼æ¬¡ã®çç±ã§ããï¼IRQã¢ã¼ãã§
|
---|
150 | å®è¡ä¸ã«å²è¾¼ã¿ãçºçããã¨ï¼lrã¬ã¸ã¹ã¿ã«æ»ãçªå°ãæ ¼ç´ãããï¼ãã®ããï¼
|
---|
151 | å²è¾¼ã¿å¦çãIRQã¢ã¼ããå®è¡ããã¨ï¼å¤éå²è¾¼ã¿ã«ããlrã¬ã¸ã¹ã¿ã®å
|
---|
152 | 容ã失
|
---|
153 | ãããããï¼å¤éå²è¾¼ã¿ã許å¯ãããã¨ãã§ããªãï¼
|
---|
154 |
|
---|
155 | ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®å¤§é¨åã®å®è¡ã«ã·ã¹ãã ã¢ã¼ãã使
|
---|
156 | ããªãçç±ã¯ï¼ä»¥ä¸ã®éãã§ããï¼
|
---|
157 |
|
---|
158 | (1) ARMv5以åã®ããã»ããµã§ã¯ï¼ä¾å¤ããã®å¾©å¸°ãï¼
|
---|
159 |
|
---|
160 | ldmfd sp!, {<復帰ãã¹ãã¬ã¸ã¹ã¿ã®ãªã¹ã>, pc}^
|
---|
161 |
|
---|
162 | ã®å½ä»¤ã§è¡ãï¼ãã®å½ä»¤ã¯ï¼ä¾å¤ã¢ã¼ãã§ã®ã¿ä½¿ç¨ãããã¨ãã§ãï¼ã·ã¹ãã
|
---|
163 | ã¢ã¼ãã§ã¯ä½¿ç¨ã§ããªãï¼ã·ã¹ãã ã¢ã¼ãã«ã¯SPSRããªãããï¼CPSRã復帰ã§
|
---|
164 | ããªãï¼ï¼ãã®ããï¼å²è¾¼ã¿ãã³ãã©ãCPUä¾å¤ãã³ãã©ãã·ã¹ãã ã¢ã¼ãã§å®
|
---|
165 | è¡ããã¨ï¼ä¾å¤ããã®ãªã¿ã¼ã³æã«ï¼ä½è¨ãªããã»ããµã¢ã¼ãåæãã¨ããã«
|
---|
166 | ä¼´ãã¹ã¿ãã¯æä½ãå¿
|
---|
167 | è¦ã«ãªãï¼å¹çãæªãï¼
|
---|
168 |
|
---|
169 | ARMv6以éã®ããã»ããµã§ã¯ï¼ä¾å¤ããã®å¾©å¸°ã®ããã«rfeå½ä»¤ãæã£ã¦ãããï¼
|
---|
170 | rfeå½ä»¤ã«ã¯ã·ã¹ãã ã¢ã¼ãã§ã¯ä½¿ç¨ã§ããªãã¨ããå¶ç´ããªãããã«ï¼ãã®ã
|
---|
171 | ã¨ã¯å½ã¦ã¯ã¾ããªãï¼
|
---|
172 |
|
---|
173 | (2) ä¿è·æ©è½å¯¾å¿ã«ã¼ãã«ã«ããã¦ã¯ï¼ä¾å¤ã®å
|
---|
174 | ¥å£ã§ï¼ã¦ã¼ã¶ã¹ã¿ãã¯ããã·
|
---|
175 | ã¹ãã ã¹ã¿ãã¯ã«åãæããå¦çãå¿
|
---|
176 | è¦ã§ãããï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©
|
---|
177 | ã ã®éç¹æ¨©ã¢ã¼ãã§å®è¡ãã¹ãé¨åãã¦ã¼ã¶ã¢ã¼ãã§ï¼ã¢ããªã±ã¼ã·ã§ã³ãã
|
---|
178 | ã°ã©ã ã®ç¹æ¨©ã¢ã¼ãã§å®è¡ãã¹ãé¨åã¨ã«ã¼ãã«ã®å¤§é¨åãã¹ã¼ããã¤ã¶ã¢ã¼
|
---|
179 | ããå®è¡ããã°ï¼ã¹ã¿ãã¯ã®åæãããã¼ãã¦ã§ã¢ã§è¡ããï¼å¹ççã§ããï¼
|
---|
180 |
|
---|
181 | éã«ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®å¤§é¨åãã·ã¹ãã ã¢ã¼ãã§å®
|
---|
182 | è¡ããã¡ãªããã¨ãã¦ï¼ä»¥ä¸ãæãããã¨ãã§ããï¼
|
---|
183 |
|
---|
184 | ã»ã¹ã¼ããã¤ã¶ã¢ã¼ãã§å®è¡ä¸ã«svcå½ä»¤ãçºè¡ããã¨ï¼lrã¬ã¸ã¹ã¿ã«æ»ãçªå°
|
---|
185 | ããæ ¼ç´ãããï¼lrãå£ããæ³å®ã§svcå½ä»¤ãå¼ã³åºãã°ãããï¼ããã°ã©ã ã«
|
---|
186 | ãããããå½ã¦ãç®çã§svcå½ä»¤ã使ãå ´åãªã©ï¼lrãä¿åï¼å¾©å¸°ããä½å°ããª
|
---|
187 | ããå ´åã«ã¯ï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã§å®è¡ãã¦ããã¨ãã¾ãå®è£
|
---|
188 | ã§ããªãï¼
|
---|
189 |
|
---|
190 | ä¿è·æ©è½å¯¾å¿ã§ãªãASP3ã«ã¼ãã«ã§ï¼ARMv6以éã®ããã»ããµã使ç¨ããå ´åã«
|
---|
191 | ã¯ï¼ã¢ããªã±ã¼ã·ã§ã³ããã°ã©ã ã¨ã«ã¼ãã«ã®å¤§é¨åãã·ã¹ãã ã¢ã¼ãã§å®è¡
|
---|
192 | ããããã«ä¿®æ£ããã®ã¯å®¹æã§ããï¼å
|
---|
193 | ·ä½çã«ã¯ï¼core_support.Sã¨start.Så
|
---|
194 |
|
---|
195 | ã®ç´20ç®æç¨åº¦ã®CPSR_SVC_MODEãï¼CPSR_SYS_MODEã«æ¸ãæããã°ããï¼
|
---|
196 |
|
---|
197 | âã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿
|
---|
198 |
|
---|
199 | ARMã³ã¢ä¾åé¨ã®æ¨æºã§ã¯ï¼IRQãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ï¼FIQãã«ã¼ãã«ç®¡çå¤
|
---|
200 | ã®å²è¾¼ã¿ã¨æ±ãï¼ãã®ããã«ããã®ãï¼æãã·ã³ãã«ã§æ§è½ãè¯ãããã§ããï¼
|
---|
201 |
|
---|
202 | ãã ãï¼SafeGã®ã»ãã¥ã¢ã¢ã¼ãã§ASP3ã«ã¼ãã«ãåä½ãããå ´åã«ã¯ï¼FIQã
|
---|
203 | ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ã¨ãã¦æ±ãï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ã¯ãµãã¼ãããªãï¼
|
---|
204 | IRQã¯ï¼ãã³ã»ãã¥ã¢ã¢ã¼ãã§åä½ããOSã使ç¨ããï¼ãã®è¨å®ã«ããå ´åã«ã¯ï¼
|
---|
205 | TOPPERS_SAFEG_SECUREããã¯ãå®ç¾©ããï¼
|
---|
206 |
|
---|
207 | âå
|
---|
208 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
209 | ã®ç®¡ç
|
---|
210 |
|
---|
211 | å
|
---|
212 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
213 | ã§ã¯ï¼FIQã»IRQã¨ããã¹ã¯ããï¼å
|
---|
214 | ·å¤çã«ã¯ï¼CPSRä¸ã®Fãã
|
---|
215 | ãï¼FIQç¦æ¢ï¼ã¨Iãããï¼IRQç¦æ¢ï¼ãã»ããããï¼
|
---|
216 |
|
---|
217 | âã³ã³ããã¹ãã®ç®¡ç
|
---|
218 |
|
---|
219 | å®è¡ä¸ã®ã³ã³ããã¹ããããã»ããµã¢ã¼ãã§å¤æãããã¨ãã§ããªãããï¼ä¾
|
---|
220 | å¤ï¼å²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ï¼ã®ãã¹ã段æ°ãå¤æ°ï¼ãããï¼ä¾
|
---|
221 | å¤ãã¹ãã«ã¦ã³ãã¨å¼ã¶ï¼ã§ç®¡çãï¼ä¾å¤ãã¹ãã«ã¦ã³ãã0ã®æã«ã¿ã¹ã¯ã³ã³
|
---|
222 | ããã¹ãï¼0ãã大ããå ´åã«éã¿ã¹ã¯ã³ã³ããã¹ãã§ããã¨å¤æããï¼
|
---|
223 |
|
---|
224 | âCPUããã¯ç¶æ
|
---|
225 | ã®ç®¡ç
|
---|
226 |
|
---|
227 | CPUããã¯ç¶æ
|
---|
228 | ã§ã¯ï¼IRQããã¹ã¯ããï¼å
|
---|
229 | ·å¤çã«ã¯ï¼CPSRä¸ã®Iãããï¼IRQç¦
|
---|
230 | æ¢ï¼ãã»ããããï¼å
|
---|
231 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
232 | ã¨CPUããã¯ç¶æ
|
---|
233 | ãåºå¥ã§ããå¿
|
---|
234 | è¦ã¯ãª
|
---|
235 | ããã¨ããï¼CPSRä¸ã®Iããããç«ã£ã¦ããã°ï¼CPUããã¯ç¶æ
|
---|
236 | ã§ããã¨å¤æã
|
---|
237 | ãï¼
|
---|
238 |
|
---|
239 | TOPPERS_SAFEG_SECUREããã¯ãå®ç¾©ããã¦ããå ´åã«ã¯ï¼CPUããã¯ç¶æ
|
---|
240 | ã§ã¯ï¼
|
---|
241 | FIQããã¹ã¯ããï¼IRQã¯å¸¸ã«ãã¹ã¯ããããï¼FIQã»IRQã¨ããã¹ã¯ãããã¨ã«
|
---|
242 | ãªãï¼CPSRä¸ã®Fããããç«ã£ã¦ããã°ï¼CPUããã¯ç¶æ
|
---|
243 | ã§ããã¨å¤æããï¼
|
---|
244 |
|
---|
245 | âå²è¾¼ã¿åªå
|
---|
246 | 度ãã¹ã¯ã®ç®¡ç
|
---|
247 |
|
---|
248 | å²è¾¼ã¿åªå
|
---|
249 | 度ãã¹ã¯ã®ç®¡çã¯ï¼å²è¾¼ã¿ã³ã³ããã¼ã©ã«ãã£ã¦è¡ãï¼ãã®ããï¼
|
---|
250 | ARMä¾åé¨ã«ã¯å«ããªãï¼
|
---|
251 |
|
---|
252 | GICã®å ´åã«ã¯ï¼GICC_PMRï¼Interrupt Priority Mask Registerï¼ã«ããï¼å²è¾¼
|
---|
253 | ã¿åªå
|
---|
254 | 度ãã¹ã¯ã管çããï¼
|
---|
255 |
|
---|
256 | âå²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ç®¡ç
|
---|
257 |
|
---|
258 | å²è¾¼ã¿è¦æ±ç¦æ¢ãã©ã°ã®ç®¡çã¯ï¼å²è¾¼ã¿ã³ã³ããã¼ã©ã«ãã£ã¦è¡ãï¼ãã®ããï¼
|
---|
259 | ARMä¾åé¨ã«ã¯å«ããªãï¼
|
---|
260 |
|
---|
261 | GICã®å ´åã«ã¯ï¼GICD_ISENABLEnï¼Interrupt Set-Enable Registersï¼ã¨
|
---|
262 | GICD_ICENABLERnï¼Interrupt Clear-Enable Registersï¼ã«ãã£ã¦ï¼ã»ããï¼ã¯
|
---|
263 | ãªã¢ããï¼
|
---|
264 |
|
---|
265 | âå²è¾¼ã¿ã«é¢ãããã®ä»ã®æä½
|
---|
266 |
|
---|
267 | å²è¾¼ã¿ã«é¢ãããã®ä»ã®æä½ã¯ï¼å²è¾¼ã¿ã³ã³ããã¼ã©ã«ãã£ã¦å®ç¾ããï¼ãã®
|
---|
268 | ããï¼ARMä¾åé¨ã«ã¯å«ããªãï¼
|
---|
269 |
|
---|
270 | GICã®å ´åã«ã¯ï¼å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ã¨ããã¼ãã¯ï¼GICD_ICPENDRnï¼Interrupt
|
---|
271 | Clear-Pending Registersï¼ã¨GICD_ISPENDRnï¼Interrupt Set-Pending
|
---|
272 | Registersï¼ã«ãã£ã¦å®ç¾ããï¼
|
---|
273 |
|
---|
274 | âCPSRï¼Program Status Registerï¼ã®è¨å®å¤
|
---|
275 |
|
---|
276 | CPUããã¯ã»å
|
---|
277 | ¨å²è¾¼ã¿ããã¯è§£é¤ç¶æ
|
---|
278 | ï¼CPUããã¯ç¶æ
|
---|
279 | ï¼å
|
---|
280 | ¨å²è¾¼ããã¯ç¶æ
|
---|
281 | ã¨ã
|
---|
282 | ãCPSRã®è¨å®å¤ãï¼ä»¥ä¸ã®ããã«å®ç¾©ãã¦ããï¼
|
---|
283 |
|
---|
284 | #define CPSR_UNLOCK UINT_C(0x00)
|
---|
285 | #define CPSR_CPULOCK CPSR_IRQ_BIT
|
---|
286 | #define CPSR_INTLOCK CPSR_FIQ_IRQ_BIT
|
---|
287 |
|
---|
288 | TOPPERS_SAFEG_SECUREããã¯ãå®ç¾©ããã¦ããå ´åã«ã¯ï¼ä»¥ä¸ã®ããã«å®ç¾©ã
|
---|
289 | ãï¼
|
---|
290 |
|
---|
291 | #define CPSR_UNLOCK CPSR_IRQ_BIT
|
---|
292 | #define CPSR_CPULOCK CPSR_FIQ_IRQ_BIT
|
---|
293 | #define CPSR_INTLOCK CPSR_FIQ_IRQ_BIT
|
---|
294 |
|
---|
295 | ããã§ï¼CPSR_IRQ_BITã¨CPSR_FIQ_BITã¯ï¼ããããIRQã¨FIQããã¹ã¯ããå ´å
|
---|
296 | ã®CPSRã®å¤ï¼CPSR_FIQ_IRQ_BITã¯ï¼FIQã»IRQã¨ããã¹ã¯ããå ´åã®CPSRã®å¤ã§
|
---|
297 | ããï¼ä»¥ä¸ã®ããã«å®ç¾©ãã¦ããï¼
|
---|
298 |
|
---|
299 | #define CPSR_IRQ_BIT UINT_C(0x80)
|
---|
300 | #define CPSR_FIQ_BIT UINT_C(0x40)
|
---|
301 | #define CPSR_FIQ_IRQ_BIT (CPSR_FIQ_BIT|CPSR_IRQ_BIT)
|
---|
302 |
|
---|
303 | âä¾å¤ï¼å²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ï¼ã®åºå
|
---|
304 | ¥å£
|
---|
305 |
|
---|
306 | SRSå½ä»¤ã¨RFEå½ä»¤ãæã¤ARMv6以éã¨ï¼ããããåã®ããã»ããµã§ã¯ï¼ä¾å¤ã®åº
|
---|
307 | å
|
---|
308 | ¥å£ï¼å²è¾¼ã¿ãã³ãã©ããã³CPUä¾å¤ãã³ãã©ã®åºå
|
---|
309 | ¥å£å¦çã®æåã¨æå¾ã®é¨åï¼
|
---|
310 | ã®æé©ãªã³ã¼ããç°ãªãï¼
|
---|
311 |
|
---|
312 | âARMv6ããåã®ããã»ããµã®å ´å
|
---|
313 |
|
---|
314 | ã¢ã¼ããã¯ãã£ã®æ³å®ã§ã¯ï¼ä¾å¤ããã®å¾©å¸°ãï¼
|
---|
315 |
|
---|
316 | ldmfd sp!, {<復帰ãã¹ãã¬ã¸ã¹ã¿ã®ãªã¹ã>, pc}^
|
---|
317 |
|
---|
318 | ã®å½ä»¤ã§è¡ãï¼ãã®æç¹ã§ï¼æ»ãçªå°ãã¹ã¿ãã¯ã®æå¾ï¼æã大ããçªå°ï¼ã«
|
---|
319 | ä¿åããã¦ããï¼æ»ãå
|
---|
320 | ã®CPSRããã®ã¢ã¼ãã®SPSRã«ç½®ããã¦ãããã¨ãå¿
|
---|
321 | è¦
|
---|
322 | ã§ããï¼
|
---|
323 |
|
---|
324 | ä¾å¤ã®åºå
|
---|
325 | ¥å£å¦çã§ï¼ãã¹ã¦ã®ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãä¿åï¼å¾©å¸°ãããã¨ã«ã
|
---|
326 | ãã¨ï¼ä¸ã®å½ä»¤ã®<復帰ãã¹ãã¬ã¸ã¹ã¿ã®ãªã¹ã>ã«ã¯ï¼ãã¹ã¦ã®ã¹ã¯ã©ããã¬
|
---|
327 | ã¸ã¹ã¿ã®ãªã¹ããè¨è¿°ããï¼ã¾ãï¼ä¾å¤ããã®ãªã¿ã¼ã³ã§ã¢ã¼ããå¤ãããªã
|
---|
328 | ï¼ã©ã¡ããã¹ã¼ããã¤ã¶ã¢ã¼ãã§ããï¼ããï¼å¾©å¸°ããã¬ã¸ã¹ã¿ã«ï¼lrãå ã
|
---|
329 | ã¦ãããã¨ãå¿
|
---|
330 | è¦ã§ããï¼
|
---|
331 |
|
---|
332 | å
|
---|
333 | ·ä½çã«ã¯ï¼ä¾å¤ã®åºå£ã¯ï¼æ¬¡ã®ãããªã³ã¼ãã¨ãªãï¼
|
---|
334 |
|
---|
335 | ----------------------------------------
|
---|
336 | /*
|
---|
337 | * ãã®æç¹ã§ã¯ã¹ã¼ããã¤ã¶ã¢ã¼ãã«ãªã£ã¦ããï¼
|
---|
338 | */
|
---|
339 | ldmfd sp!, {r0} /* æ»ãå
|
---|
340 | ã®cpsrãspsrã«å¾©å¸° */
|
---|
341 | msr spsr_cxsf, r0
|
---|
342 | ldmfd sp!, {r0-r5,r12,lr,pc}^ /* ä¾å¤å¦çããã®å¾©å¸° */
|
---|
343 | ----------------------------------------
|
---|
344 |
|
---|
345 | ããã§ï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã«å ãã¦r4ã¨r5ã復帰ãã¦ããã®ã¯ï¼ä¾å¤ã®åºå
|
---|
346 | ¥
|
---|
347 | å£å¦çã§ã¹ã¯ã©ããã¬ã¸ã¹ã¿ä»¥å¤ã«ä½¿ããã¬ã¸ã¹ã¿ã¨ãã¦ï¼r4ã¨r5ã確ä¿ãã
|
---|
348 | ããã§ããï¼å®éã«ã¯ï¼r4ã ãã使ããã°ååã§ãããï¼ã¹ã¿ãã¯ãã¤ã³ã¿ã
|
---|
349 | 8ãã¤ãå¢çã«ã¢ã©ã¤ã³ããããã«r5ãä¿åï¼å¾©å¸°ãã¦ããï¼ï¼
|
---|
350 |
|
---|
351 | ãã®åºå£ãå®è¡ããæç¹ã§ï¼ã¹ã¿ãã¯ã¯æ¬¡ã®ããã«ãªã£ã¦ããå¿
|
---|
352 | è¦ãããï¼ã¬
|
---|
353 | ã¸ã¹ã¿ã¯ããããCPUä¾å¤çºçæã®å¤ã示ãï¼ä¾ãã°ï¼CPSRã¯CPUä¾å¤çºçæã®
|
---|
354 | CPSRã示ãï¼ï¼
|
---|
355 |
|
---|
356 | +----------------+ <- sp
|
---|
357 | | cpsr |
|
---|
358 | +----------------+ <- sp+0x04
|
---|
359 | | r0 |
|
---|
360 | +----------------+ <- sp+0x08
|
---|
361 | | r1 |
|
---|
362 | +----------------+ <- sp+0x0c
|
---|
363 | | r2 |
|
---|
364 | +----------------+ <- sp+0x10
|
---|
365 | | r3 |
|
---|
366 | +----------------+ <- sp+0x14
|
---|
367 | | r4 |
|
---|
368 | +----------------+ <- sp+0x18
|
---|
369 | | r5 |
|
---|
370 | +----------------+ <- sp+0x1c
|
---|
371 | | r12 |
|
---|
372 | +----------------+ <- sp+0x20
|
---|
373 | | lr |
|
---|
374 | +----------------+ <- sp+0x24
|
---|
375 | | æ»ãçªå° |
|
---|
376 | +----------------+ <- sp+0x28
|
---|
377 |
|
---|
378 | ããã«å¯¾å¿ããä¾å¤ã®å
|
---|
379 | ¥å£ã¯ï¼æ¬¡ã®ã³ã¼ãã¨ãªãï¼IRQã®å ´åï¼ï¼
|
---|
380 |
|
---|
381 | ----------------------------------------
|
---|
382 | /*
|
---|
383 | * ã¹ã¼ããã¤ã¶ã¢ã¼ãã«åãæãï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãä¿åããï¼
|
---|
384 | */
|
---|
385 | msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
|
---|
386 | stmfd sp!, {r0-r5,r12,lr,pc} /* pcã¯ã¹ãã¼ã¹ç¢ºä¿ã®ãã */ (*1)
|
---|
387 |
|
---|
388 | /*
|
---|
389 | * IRQã¢ã¼ãã«æ»ãã¦ï¼æ»ãçªå°ã¨spsrï¼æ»ãå
|
---|
390 | ã®cpsrï¼ãåå¾ããï¼
|
---|
391 | */
|
---|
392 | msr cpsr_c, #(CPSR_IRQ_MODE AOR CPSR_IRQ_BIT)
|
---|
393 | sub r2, lr, #4
|
---|
394 | mrs r1, spsr
|
---|
395 |
|
---|
396 | /*
|
---|
397 | * ã¹ã¼ããã¤ã¶ã¢ã¼ãã«åãæãï¼æ»ãçªå°ã¨spsrãä¿åããï¼
|
---|
398 | */
|
---|
399 | msr cpsr_c, #(CPSR_SVC_MODE AOR CPSR_IRQ_BIT)
|
---|
400 | str r2, [sp,#0x20] /* æ»ãçªå°ãã¹ã¿ãã¯ã«ä¿å */ (*2)
|
---|
401 | push {r1} /* spsrãã¹ã¿ãã¯ã«ä¿å */
|
---|
402 | ----------------------------------------
|
---|
403 |
|
---|
404 | (*1)ã§pcãä¿åããã®ã¯ï¼æ»ãçªå°ãä¿åãã¹ãã¹ãã¼ã¹ã確ä¿ããããã§ã
|
---|
405 | ãï¼ãã®æç¹ã§ä¿åããpcã®å¤ã¯ä½¿ããªãï¼(*2)ã§ï¼ç¢ºä¿ããã¹ãã¼ã¹ã«æ»ã
|
---|
406 | çªå°ãæ ¼ç´ããï¼æ ¼ç´å
|
---|
407 | ã[sp,#0x20]ã¨ããã®ã¯ï¼ãã®æç¹ã§ã¯spã¯ä¸ã®å³ã®
|
---|
408 | ï¼sp+0x04ï¼ãæãã¦ããï¼æ»ãçªå°ã¯ï¼sp+0x24ï¼ã«æ ¼ç´ãããããã§ããï¼
|
---|
409 |
|
---|
410 | ä¾å¤ãåãä»ããã¨Iããããã»ããããããï¼ä¾å¤ã®å
|
---|
411 | ¥å£ãå®è¡ãããæç¹ã§ï¼
|
---|
412 | CPSRã®Iãããã¯ã»ããããã¦ããï¼IRQã®å ´åï¼IRQãåãä»ããããã¨ããã
|
---|
413 | ã¨ã¯ï¼åä»åã®æç¹ã§ã¯Iãããã¯ã¯ãªã¢ããã¦ããã¯ãã§ããããï¼Fããã
|
---|
414 | ã¯ã¯ãªã¢ããã¦ããï¼Iããããã»ããããã¦ããï¼Fããããã¯ãªã¢ããã¦ã
|
---|
415 | ãç¶æ³ã¯ä½ããªãããï¼ï¼ãã£ã¦ï¼ä¸è¨ã®ã³ã¼ãã§ï¼Iãããã¨Fãããã¯å¤å
|
---|
416 | ããªãï¼
|
---|
417 |
|
---|
418 | IRQ以å¤ã®ä¾å¤ï¼CPUä¾å¤ãã³ãã©ï¼ã®åºå
|
---|
419 | ¥å£ã«ããã¦ã¯ï¼ä¸è¨ã®ã³ã¼ãã«å¯¾ã
|
---|
420 | ã¦ï¼æ¬¡ã®ä¿®æ£ãå ããï¼
|
---|
421 |
|
---|
422 | ã»Iãããã ãã§ã¯ãªãï¼Fããããã»ããããï¼å
|
---|
423 | ·ä½çã«ã¯ï¼3ç®æã«ãã
|
---|
424 | ãCPSR_IRQ_BITãï¼CPSR_FIQ_IRQ_BITã«ç½®ãæããï¼
|
---|
425 |
|
---|
426 | ã»æ»ãçªå°ãåå¾ããæã«ï¼lrãã4ãæ¸ç®ããªãï¼å®éã«æ»ãã¹ãçªå°ã«ãªã£
|
---|
427 | ãã¦ããã¨ã¯éããªãï¼ï¼
|
---|
428 |
|
---|
429 | ã»æ»ãçªå°ã¨spsrãåå¾ããæã«ï¼IRQã¢ã¼ãã§ã¯ãªãï¼ãã®CPUä¾å¤ã§é·ç§»ã
|
---|
430 | ããã¢ã¼ãã«æ»ãï¼ã¹ã¼ããã¤ã¶ã³ã¼ã«ã®å ´åã¯ï¼æ»ãå¿
|
---|
431 | è¦ããªãï¼ï¼
|
---|
432 |
|
---|
433 | Iãããã ãã§ãªãFããããã»ããããã®ã¯ï¼(1) FIQãåãä»ããã¨Fããã
|
---|
434 | ãã»ãããããï¼(2) ãã®ä»ã®ä¾å¤ã¯Fããããã»ããããã¦ããç¶æ
|
---|
435 | ã§ãåã
|
---|
436 | ä»ããããï¼ã®2ã¤ã®çç±ããã§ããï¼ãã ãï¼Fããããã¯ãªã¢ããã¦ããæ
|
---|
437 | ã«çºçããï¼FIQ以å¤ã®ï¼ä¾å¤ã§ã¯ï¼ãã®å¦çã«ããFããããã»ãããããã
|
---|
438 | ã¨ã«ãªãï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ããã¹ã¯ãããæéãé·ããªããï¼CPUä¾å¤
|
---|
439 | ãã³ãã©ãå¼ã³åºãã¾ã§ã®çæéãªã®ã§ï¼è¨±å®¹ãããã¨ã«ããï¼
|
---|
440 |
|
---|
441 | 3ã¤ãã®å¦çï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã«åãæãã¨ï¼æ»ãçªå°ã¨spsrã®ä¿åï¼ã¯ï¼
|
---|
442 | ï¼IRQ以å¤ã®ï¼ãã¹ã¦ã®ä¾å¤ã§å
|
---|
443 | ±éã§ããããï¼exc_handler_1ã®å
|
---|
444 | é ã§å®æ½ã
|
---|
445 | ããã¨ãã§ãããï¼ARMv6以éã®ããã»ããµã®å ´åã¨ã®å
|
---|
446 | ±éåã®ããã«ï¼ä¾å¤æ¯
|
---|
447 | ã«åå¥ã«å®æ½ããï¼
|
---|
448 |
|
---|
449 | âARMv6以éã®ããã»ããµã®å ´å
|
---|
450 |
|
---|
451 | ä¾å¤ããã®å¾©å¸°ã«rfeå½ä»¤ãç¨ããã¨ï¼ä¾å¤ã®åºå£ã¯ï¼æ¬¡ã®ãããªã³ã¼ãã¨ãªãï¼
|
---|
452 |
|
---|
453 | ----------------------------------------
|
---|
454 | ldmfd sp!, {r0-r5,r12,lr}
|
---|
455 | rfefd sp!
|
---|
456 | ----------------------------------------
|
---|
457 |
|
---|
458 | ããã§ï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã«å ãã¦r4ã¨r5ã復帰ãã¦ããã®ã¯ï¼ä¾å¤ã®åºå
|
---|
459 | ¥
|
---|
460 | å£å¦çã§ã¹ã¯ã©ããã¬ã¸ã¹ã¿ä»¥å¤ã«ä½¿ããã¬ã¸ã¹ã¿ã¨ãã¦ï¼r4ã¨r5ã確ä¿ãã
|
---|
461 | ããã§ããï¼å®éã«ã¯ï¼r4ã ãã使ããã°ååã§ãããï¼ã¹ã¿ãã¯ãã¤ã³ã¿ã
|
---|
462 | 8ãã¤ãå¢çã«ã¢ã©ã¤ã³ããããã«r5ãä¿åï¼å¾©å¸°ãã¦ããï¼ï¼
|
---|
463 |
|
---|
464 | ãã®åºå£ãå®è¡ããæç¹ã§ï¼ã¹ã¿ãã¯ã¯æ¬¡ã®ããã«ãªã£ã¦ããå¿
|
---|
465 | è¦ãããï¼ã¬
|
---|
466 | ã¸ã¹ã¿ã¯ããããCPUä¾å¤çºçæã®å¤ã示ãï¼ä¾ãã°ï¼CPSRã¯CPUä¾å¤çºçæã®
|
---|
467 | CPSRã示ãï¼ï¼
|
---|
468 |
|
---|
469 | +----------------+ <- sp
|
---|
470 | | r0 |
|
---|
471 | +----------------+ <- sp+0x04
|
---|
472 | | r1 |
|
---|
473 | +----------------+ <- sp+0x08
|
---|
474 | | r2 |
|
---|
475 | +----------------+ <- sp+0x0c
|
---|
476 | | r3 |
|
---|
477 | +----------------+ <- sp+0x10
|
---|
478 | | r4 |
|
---|
479 | +----------------+ <- sp+0x14
|
---|
480 | | r5 |
|
---|
481 | +----------------+ <- sp+0x18
|
---|
482 | | r12 |
|
---|
483 | +----------------+ <- sp+0x1c
|
---|
484 | | lr |
|
---|
485 | +----------------+ <- sp+0x20
|
---|
486 | | æ»ãçªå° |
|
---|
487 | +----------------+ <- sp+0x24
|
---|
488 | | cpsr |
|
---|
489 | +----------------+ <- sp+0x28
|
---|
490 |
|
---|
491 | ããã«å¯¾å¿ããä¾å¤ã®å
|
---|
492 | ¥å£ã¯ï¼æ¬¡ã®ãããªã³ã¼ãã¨ãªãï¼IRQã®å ´åï¼ï¼
|
---|
493 |
|
---|
494 | ----------------------------------------
|
---|
495 | /*
|
---|
496 | * æ»ãå
|
---|
497 | ï¼lrï¼ã¨spsrï¼cpsr_svcï¼ãã¹ã¼ããã¤ã¶ã¢ã¼ãã®ã¹ã¿ãã¯ã«
|
---|
498 | * ä¿åããï¼
|
---|
499 | */
|
---|
500 | sub lr, lr, #4 /* æ»ãçªå°ã®ç®åº */
|
---|
501 | srsfd #CPSR_SVC_MODE!
|
---|
502 |
|
---|
503 | /*
|
---|
504 | * ã¹ã¼ããã¤ã¶ã¢ã¼ãã«åãæãï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãä¿åããï¼
|
---|
505 | */
|
---|
506 | cps #CPSR_SVC_MODE
|
---|
507 | stmfd sp!, {r0-r5,r12,lr}
|
---|
508 | ----------------------------------------
|
---|
509 |
|
---|
510 | IRQ以å¤ã®ä¾å¤ï¼CPUä¾å¤ãã³ãã©ï¼ã®åºå
|
---|
511 | ¥å£ã«ããã¦ã¯ï¼ä¸è¨ã®ã³ã¼ãã«å¯¾ã
|
---|
512 | ã¦ï¼æ¬¡ã®ä¿®æ£ãå ããï¼
|
---|
513 |
|
---|
514 | ã»æ»ãçªå°ã®ç®åºã®ããã«lrãã4ãæ¸ç®ããªãï¼å®éã«æ»ãã¹ãçªå°ã«ãªã£ã¦
|
---|
515 | ãããã¨ã¯éããªãï¼ï¼
|
---|
516 |
|
---|
517 | å¾åã®å¦çï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã¸ã®åæãã¨ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã®ä¿åï¼ã¯
|
---|
518 | å
|
---|
519 | ±éã ãï¼ãã®ç´å¾ã§CPUä¾å¤ãã³ãã©çªå·ãæ ¼ç´ããããã«r4ã使ãããï¼
|
---|
520 | exc_handler_1ã®æ¹ã¸ç§»åã§ããªãï¼
|
---|
521 |
|
---|
522 | âå²è¾¼ã¿ãã³ãã©ã®åºå
|
---|
523 | ¥å£å¦ç
|
---|
524 |
|
---|
525 | ASP3ã«ã¼ãã« ãã¼ãã£ã³ã°ã¬ã¤ãã«å¾ã£ã¦ï¼å²è¾¼ã¿ãã³ãã©ã®åºå
|
---|
526 | ¥å£å¦çã®å®
|
---|
527 | è£
|
---|
528 | æ¹æ³ãæ¤è¨ãã¦ããï¼
|
---|
529 |
|
---|
530 | ----------------------------------------
|
---|
531 | void
|
---|
532 | <å²è¾¼ã¿ã®åºå
|
---|
533 | ¥å£å¦ç>(void)
|
---|
534 | {
|
---|
535 | å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
536 | ã«ãã ⦠(*d)
|
---|
537 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
538 | ----------------------------------------
|
---|
539 |
|
---|
540 | ARMã³ã¢ã¯ï¼ä¾å¤ãåãä»ããã¨ï¼CPSRä¸ã®Iããããã»ãããã¦å²è¾¼ã¿ãç¦æ¢
|
---|
541 | ããããï¼(*d)ã®å¦çã¯å¿
|
---|
542 | è¦ãªãï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã®ä¿åã¯ï¼ä¾å¤ã®å
|
---|
543 | ¥å£
|
---|
544 | ã§å®è£
|
---|
545 | æ¸ã¿ã§ããï¼
|
---|
546 |
|
---|
547 | ----------------------------------------
|
---|
548 | if (å²è¾¼ã¿ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
549 | ----------------------------------------
|
---|
550 |
|
---|
551 | ã¾ãï¼ä¾å¤ãã¹ãã«ã¦ã³ããã¤ã³ã¯ãªã¡ã³ãããï¼ã¤ã³ã¯ãªã¡ã³ãå¾ã®å¤ã1ã§
|
---|
552 | ãªãå ´åã«ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§ã®å²è¾¼ã¿çºçã§ããããï¼ãã®å¾ã®{}
|
---|
553 | å
|
---|
554 | ã®å¦çãã¹ãããããï¼irq_handler_1ã«åå²ï¼ï¼
|
---|
555 |
|
---|
556 | ----------------------------------------
|
---|
557 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
558 | ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢ */
|
---|
559 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
560 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼
|
---|
561 | éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
562 | }
|
---|
563 | ----------------------------------------
|
---|
564 |
|
---|
565 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼åãæãåã®ã¹ã¿ã
|
---|
566 | ã¯ãã¤ã³ã¿ãåãæãå¾ã®ã¹ã¿ãã¯ä¸ã«ä¿åããï¼ãããã®å¦çã®å¾ã«ï¼
|
---|
567 | irq_handler_1ã©ãã«ãç½®ãï¼
|
---|
568 |
|
---|
569 | ----------------------------------------
|
---|
570 | å²è¾¼ã¿åªå
|
---|
571 | 度ãã¹ã¯ãï¼åãä»ããå²è¾¼ã¿ã®å²è¾¼ã¿åªå
|
---|
572 | 度ã«è¨å®ãã
|
---|
573 |
|
---|
574 | CPUããã¯è§£é¤ç¶æ
|
---|
575 | ã«ããï¼åãä»ããå²è¾¼ã¿ãããåªå
|
---|
576 | 度ã®é«ãå²è¾¼ã¿ã
|
---|
577 | åãä»ããããã«ããï¼
|
---|
578 |
|
---|
579 | å²è¾¼ã¿ãã³ãã©ã®å
|
---|
580 | ¥å£ã§å¿
|
---|
581 | è¦ãªIRCã®æä½ãè¡ãï¼å²è¾¼ã¿è¦æ±ã©ã¤ã³ãã¨ã
|
---|
582 | ã¸ããªã¬ã§ããå ´åã®ããªã¬ãããå²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ãªã©ï¼
|
---|
583 | ----------------------------------------
|
---|
584 |
|
---|
585 | å²è¾¼ã¿åªå
|
---|
586 | 度ãã¹ã¯ã®ç®¡çã¯ï¼ãããä¾åã®å²è¾¼ã¿ã³ã³ããã¼ã©ã«ãã£ã¦è¡ã
|
---|
587 | å¿
|
---|
588 | è¦ãããããï¼ä¸è¨ã®å¦çã®é åºãä¸é¨å¤æ´ãï¼ä¸è¨ã®å¦çã®ä¸ã§ãCPUãã
|
---|
589 | ã¯è§£é¤ç¶æ
|
---|
590 | ã«ããã以å¤ã®å¦çã¯ï¼ãããä¾åé¨ã®irc_begin_intã§è¡ããã¨ã¨
|
---|
591 | ããï¼ããªãã¡ï¼irc_begin_intã¯ï¼å²è¾¼ã¿åªå
|
---|
592 | 度ãã¹ã¯ãåãä»ããå²è¾¼ã¿è¦
|
---|
593 | æ±ã®å²è¾¼ã¿åªå
|
---|
594 | 度ã«è¨å®ãï¼å²è¾¼ã¿ãã³ãã©ã®å
|
---|
595 | ¥å£ã§å¿
|
---|
596 | è¦ãªIRCã®æä½ãè¡ãï¼
|
---|
597 | ã¾ãirc_begin_intã¯ï¼å²è¾¼ã¿çªå·ï¼0ããå§ã¾ãçªå·ã§ï¼å²è¾¼ã¿ãã³ãã©çªå·
|
---|
598 | ã¨ä¸è´ãããï¼ãè¿ãããã«ããï¼ã¹ããªã¢ã¹å²è¾¼ã¿ã®å ´åã«ã¯ï¼
|
---|
599 | irc_begin_intã¯å²è¾¼ã¿çªå·ã®æ大å¤ãã大ããå¤ãè¿ããã®ã¨ãï¼ãã®å ´åã«
|
---|
600 | ã¯ï¼å²è¾¼ã¿ãã³ãã©ã®å¼åºãå¦çãã¹ãããããï¼irq_handler_2ã«åå²ï¼ï¼
|
---|
601 |
|
---|
602 | ãã®å¾ï¼irc_begin_intã§è¡ããªãã£ããCPUããã¯è§£é¤ç¶æ
|
---|
603 | ã«ãããå¦çãè¡
|
---|
604 | ãï¼å
|
---|
605 | ·ä½çã«ã¯ï¼CPSRä¸ã®Fãããã¨Iãããï¼ãã ãï¼TOPPERS_SAFEG_SECURE
|
---|
606 | ã®å ´åã¯ï¼Fãããã®ã¿ï¼ãã¯ãªã¢ãã¦ï¼å²è¾¼ã¿ã許å¯ããï¼
|
---|
607 |
|
---|
608 | ----------------------------------------
|
---|
609 | #ifdef LOG_INH_ENTER
|
---|
610 | log_inh_enter(å²è¾¼ã¿ãã³ãã©çªå·);
|
---|
611 | #endif /* LOG_INH_ENTER */
|
---|
612 | å²è¾¼ã¿ãã³ãã©ãå¼ã³åºã
|
---|
613 | #ifdef LOG_INH_LEAVE
|
---|
614 | log_inh_leave(å²è¾¼ã¿ãã³ãã©çªå·);
|
---|
615 | #endif /* LOG_INH_LEAVE */
|
---|
616 | ----------------------------------------
|
---|
617 |
|
---|
618 | å²è¾¼ã¿ãã³ãã©ãã¼ãã«ï¼inh_tableï¼ããå²è¾¼ã¿ãã³ãã©ã®çªå°ãåãåºãã¦
|
---|
619 | å¼ã³åºãï¼
|
---|
620 |
|
---|
621 | ----------------------------------------
|
---|
622 | å²è¾¼ã¿ãã³ãã©ã®åºå£ã§å¿
|
---|
623 | è¦ãªIRCã®æä½ãè¡ãï¼IRCã«å¯¾ããå²è¾¼ã¿å¦ç
|
---|
624 | ã®çµäºéç¥ãªã©ï¼
|
---|
625 |
|
---|
626 | å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
627 | ã«ãã
|
---|
628 |
|
---|
629 | å²è¾¼ã¿åªå
|
---|
630 | 度ãã¹ã¯ãï¼å²è¾¼ã¿ãåãä»ããåã®å¤ã«æ»ã ⦠(*e)
|
---|
631 | ----------------------------------------
|
---|
632 |
|
---|
633 | å²è¾¼ã¿ãã³ãã©ã®å¼åºãåã®å¦çã®é åºãä¸é¨å¤æ´ããã®ã«å¯¾å¿ãã¦ï¼ã¾ãï¼
|
---|
634 | ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããï¼å
|
---|
635 | ·ä½çã«ã¯ï¼CPSRä¸ã®Iãããï¼ãã ãï¼
|
---|
636 | TOPPERS_SAFEG_SECUREã®å ´åã¯ï¼Fããããï¼ãã»ããããï¼ãã®å¦çã®å¾ã«ï¼
|
---|
637 | irq_handler_2ã©ãã«ãç½®ãï¼
|
---|
638 |
|
---|
639 | 次ã«ï¼ãããä¾åé¨ã®irc_end_intãå¼ã³åºãï¼irc_end_intã§ã¯ï¼å²è¾¼ã¿ãã³
|
---|
640 | ãã©ã®åºå£ã§å¿
|
---|
641 | è¦ãªIRCã®æä½ãè¡ãï¼å²è¾¼ã¿åªå
|
---|
642 | 度ãã¹ã¯ãå²è¾¼ã¿å¦çåã®ç¶
|
---|
643 | æ
|
---|
644 | ã«æ»ãï¼
|
---|
645 |
|
---|
646 | ã³ã¢ä¾åé¨ããã¯ï¼irc_end_intã«ãã©ã¡ã¼ã¿ã渡ããªãããï¼irc_end_intã®
|
---|
647 | ä¸ã§å¿
|
---|
648 | è¦ãªæ
|
---|
649 | å ±ï¼ä¾ãã°ï¼å²è¾¼ã¿çªå·ï¼ã¯ï¼irc_begin_intã§ã¹ã¿ãã¯ã®å
|
---|
650 | é ã«
|
---|
651 | ä¿åãã¦ããå¿
|
---|
652 | è¦ãããï¼ããã«ç¨ããããã«ï¼ã¹ã¿ãã¯ã®å
|
---|
653 | é ã«1ã¯ã¼ãã®ç©º
|
---|
654 | ãé åãè¨ãã¦ããï¼
|
---|
655 |
|
---|
656 | irc_end_intã§å¿
|
---|
657 | è¦ãªæ
|
---|
658 | å ±ã1ã¯ã¼ãã§ä¸è¶³ããå ´åã«ã¯ï¼irc_begin_intã§ã¹ã¿ã
|
---|
659 | ã¯ã«ç©ã¿ï¼irc_end_intã§ã¹ã¿ãã¯ããåãåºãï¼ãããå¯è½ã«ããããã«ï¼
|
---|
660 | irc_begin_intãå¼ã³åºããããï¼irc_end_intãå¿
|
---|
661 | ãå¼ã³åºãããããã«ãã¦
|
---|
662 | ããï¼ã¹ããªã¢ã¹å²è¾¼ã¿ã®å ´åã«ãï¼irc_end_intãå¼ã³åºãããã«ãã¦ããï¼
|
---|
663 | ãµãã«ã¼ãã³ï¼irc_begin_intï¼ã®ä¸ã§ã¹ã¿ãã¯ã«ç©ã¿å¢ãã®ã¯ï¼ä¸è¬ã«ã¯æ¡ç¨
|
---|
664 | ããªãããã°ã©ãã³ã°ææ³ã§ãããï¼irc_begin_intããirc_end_intã«æ¸¡ãæ
|
---|
665 |
|
---|
666 | å ±ã¯ï¼ãããä¾åé¨ã«ãã£ã¦ç°ãªããã¨ï¼ARMã§ã¯æ»ãçªå°ãlrã«ä¿åãããã
|
---|
667 | ã¹ã¿ãã¯ã«ç©ã¿å¢ãã®ã容æã§ãããã¨ããï¼ãã®æ¹æ³ãæ¡ç¨ãããã¨ã«ããï¼
|
---|
668 |
|
---|
669 | ----------------------------------------
|
---|
670 | ret_int:
|
---|
671 | if (å²è¾¼ã¿ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
672 | ----------------------------------------
|
---|
673 |
|
---|
674 | ã¾ãï¼ä¾å¤ãã¹ãã«ã¦ã³ãããã¯ãªã¡ã³ãããï¼ãã¯ãªã¡ã³ãå¾ã®å¤ã0ã§ãªã
|
---|
675 | å ´åã«ã¯ï¼éã¿ã¹ã¯ã³ã³ããã¹ãã§ã®å²è¾¼ã¿çºçã§ããããï¼{}å
|
---|
676 | ã®å¦çãã¹
|
---|
677 | ãããããï¼irq_handler_3ã«åå²ï¼ï¼
|
---|
678 |
|
---|
679 | ----------------------------------------
|
---|
680 | ã¹ã¿ãã¯ãã¿ã¹ã¯ç¨ã®ã¹ã¿ãã¯ã«æ»ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
681 | ⦠(*f)
|
---|
682 | ----------------------------------------
|
---|
683 |
|
---|
684 | ã¿ã¹ã¯ã³ã³ããã¹ãã®ã¹ã¿ãã¯ãã¤ã³ã¿ã¯ï¼ãã®æç¹ã§ï¼ã¹ã¿ãã¯ã®å
|
---|
685 | é ã«ä¿
|
---|
686 | åããã¦ããããï¼ã¹ã¿ãã¯ã®å
|
---|
687 | é ãåãåºãã¦ï¼ã¹ã¿ãã¯ãã¤ã³ã¿ã«è¨å®ã
|
---|
688 | ãï¼
|
---|
689 |
|
---|
690 | ----------------------------------------
|
---|
691 | if (p_runtsk != p_schedtsk) {
|
---|
692 | ----------------------------------------
|
---|
693 |
|
---|
694 | ãã®å¦çã®åã«ï¼ret_int_1ã©ãã«ãç½®ãï¼p_runtskã¨p_schedtskãä¸è´ããªã
|
---|
695 | æã¯ï¼irq_handler_4ã¸åå²ããï¼
|
---|
696 |
|
---|
697 | ----------------------------------------
|
---|
698 | CPUããã¯ç¶æ
|
---|
699 | ã«ãã ⦠(*g)
|
---|
700 | å²è¾¼ã¿åªå
|
---|
701 | 度ãã¹ã¯ã¯ï¼å
|
---|
702 | ¨è§£é¤ç¶æ
|
---|
703 | ï¼TIPM_ENAALLï¼ã«ãªã£ã¦
|
---|
704 | ããªããã°ãªããªã ⦠(*h)
|
---|
705 | ----------------------------------------
|
---|
706 |
|
---|
707 | (*g)ã®å¦çã¯ï¼irc_end_intãå¼ã³åºãåã«è¡ã£ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢
|
---|
708 | ããå¦çã§ååã§ããããï¼ããã§ã¯è¡ããªãï¼(*h)ã«ã¤ãã¦ã¯ï¼
|
---|
709 | irc_end_intã§å²è¾¼ã¿åªå
|
---|
710 | 度ãã¹ã¯ãå²è¾¼ã¿å¦çåã®ç¶æ
|
---|
711 | ã«æ»ããã¨ã§ï¼æºãã
|
---|
712 | ãã¦ããã¯ãã§ããï¼
|
---|
713 |
|
---|
714 | ----------------------------------------
|
---|
715 | if (p_runtsk != NULL) {
|
---|
716 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
717 | ã¹ã¿ãã¯ãã¤ã³ã¿ãèªã¿ã¹ã¯ï¼p_runtskï¼ã®TCBã«ä¿åãã
|
---|
718 | ret_int_rãï¼å®è¡åéçªå°ã¨ãã¦èªã¿ã¹ã¯ã®TCBã«ä¿åãã ⦠(*a)
|
---|
719 | #ifdef LOG_DSP_ENTER
|
---|
720 | log_dsp_enter(p_runtsk);
|
---|
721 | #endif /* LOG_DSP_ENTER */
|
---|
722 | }
|
---|
723 | dispatcherã«åå²ãã
|
---|
724 |
|
---|
725 | ret_int_r:
|
---|
726 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
727 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
728 | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
729 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
730 | }
|
---|
731 | ----------------------------------------
|
---|
732 |
|
---|
733 | ãã®è¾ºãã¯ç´ ç´ã«å®è£
|
---|
734 | ã§ããï¼
|
---|
735 |
|
---|
736 | ----------------------------------------
|
---|
737 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
738 | else {
|
---|
739 | if (p_runtsk != NULL) {
|
---|
740 | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
741 | }
|
---|
742 | }
|
---|
743 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
744 | }
|
---|
745 | ----------------------------------------
|
---|
746 |
|
---|
747 | ãã®elseé¨ã¯ï¼p_runtskã¨p_schedtskãä¸è´ãã¦ããï¼ã¿ã¹ã¯åæããå¿
|
---|
748 | è¦ãª
|
---|
749 | ãã£ãå ´åã®å¦çã§ããï¼elseé¨ã®{}ã®ä¸ã®å¦çã®å
|
---|
750 | é ã«ï¼irq_handler_4ã©ã
|
---|
751 | ã«ãç½®ãï¼ãªã¼ãã©ã³ãã³ãã©ããµãã¼ãããªãå ´åã¯ï¼irq_handler_4ã®ã©ã
|
---|
752 | ã«ãï¼irq_handler_3ã¨åãå ´æï¼å¾è¿°ï¼ã«ç½®ãï¼ããã«ããï¼ä¸ã®å¦çãã¹ãã
|
---|
753 | ãããï¼
|
---|
754 |
|
---|
755 | ----------------------------------------
|
---|
756 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
757 | å²è¾¼ã¿å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUããã¯è§£é¤ç¶æ
|
---|
758 | ã«æ»ãããã«æºåãã
|
---|
759 | å²è¾¼ã¿å¦çããã®ãªã¿ã¼ã³
|
---|
760 | }
|
---|
761 | ----------------------------------------
|
---|
762 |
|
---|
763 | ãããã®å¦çã®åã«ï¼irq_handler_3ã®ã©ãã«ãç½®ãï¼ãããã®å¦çã¯ï¼ä¾å¤ã
|
---|
764 | ãã®åºå£ã§è¡ãï¼
|
---|
765 |
|
---|
766 | âCPUä¾å¤ãã³ãã©ã®åºå
|
---|
767 | ¥å£å¦ç
|
---|
768 |
|
---|
769 | ASP3ã«ã¼ãã« ãã¼ãã£ã³ã°ã¬ã¤ãã«å¾ã£ã¦ï¼CPUä¾å¤ãã³ãã©ã®åºå
|
---|
770 | ¥å£å¦çã®
|
---|
771 | å®è£
|
---|
772 | æ¹æ³ãæ¤è¨ãã¦ããï¼
|
---|
773 |
|
---|
774 | ----------------------------------------
|
---|
775 | void
|
---|
776 | <CPUä¾å¤ã®åºå
|
---|
777 | ¥å£å¦ç>(void)
|
---|
778 | {
|
---|
779 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
780 | ----------------------------------------
|
---|
781 |
|
---|
782 | ãã®å¦çã¯ï¼ä¾å¤ã®å
|
---|
783 | ¥å£ã§å®è£
|
---|
784 | æ¸ã¿ã§ããï¼
|
---|
785 |
|
---|
786 | ----------------------------------------
|
---|
787 | CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
788 | å ±ãã¹ã¿ãã¯ã«ä¿åãã ⦠(*j)
|
---|
789 | ãã®æç¹ã§ã®ã¹ã¿ãã¯ãã¤ã³ã¿Â±nãï¼CPUä¾å¤ã®æ
|
---|
790 | å ±ãè¨æ¶ãã¦ããé åã®
|
---|
791 | å
|
---|
792 | é çªå°ã¨ããï¼å¿
|
---|
793 | è¦ãªãä¿åããï¼
|
---|
794 | ----------------------------------------
|
---|
795 |
|
---|
796 | exc_sense_intmaskãå®ç¾ããããã«ï¼CPUä¾å¤ãçºçããæç¹ã§ã®ã³ã³ããã¹
|
---|
797 | ãã¨å²è¾¼ã¿åªå
|
---|
798 | 度ãã¹ã¯ãå¿
|
---|
799 | è¦ã¨ãªãããï¼ç¾å¨ã®å²è¾¼ã¿åªå
|
---|
800 | 度ãã¹ã¯ï¼CPUä¾
|
---|
801 | å¤ã®çºçã§å²è¾¼ã¿åªå
|
---|
802 | 度ãã¹ã¯ãå¤ãããã¨ã¯ãªãããï¼ããã§è¯ãï¼ã¨ä¾å¤
|
---|
803 | ãã¹ãã«ã¦ã³ããã¹ã¿ãã¯ã«ä¿åããï¼ã¾ãï¼CPUä¾å¤ã®æ
|
---|
804 | å ±ãè¨æ¶ãã¦ããé
|
---|
805 | åã®å
|
---|
806 | é çªå°ã¨ãã¦ï¼ãã®æç¹ã§ã®ã¹ã¿ãã¯ãã¤ã³ã¿ãï¼ã¬ã¸ã¹ã¿ã«ä¿åãã¦
|
---|
807 | ããï¼
|
---|
808 |
|
---|
809 | ----------------------------------------
|
---|
810 | if (ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤) {
|
---|
811 | ----------------------------------------
|
---|
812 |
|
---|
813 | ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã¯ï¼ã«ã¼ãã«å®è¡ä¸ï¼å
|
---|
814 | ¨å²è¾¼ã¿ããã¯ç¶æ
|
---|
815 | ï¼CPUãã
|
---|
816 | ã¯ç¶æ
|
---|
817 | ï¼ã«ã¼ãã«ç®¡çå¤ã®å²è¾¼ã¿ãã³ãã©å®è¡ä¸ã«çºçããCPUä¾å¤ã§ããï¼
|
---|
818 | ARMã³ã¢ã®å ´åã¯ï¼æ»ãå
|
---|
819 | ã®CPSRã®IããããFãããã®ãããããã»ããããã¦
|
---|
820 | ãããªãï¼ããã«è©²å½ããï¼
|
---|
821 |
|
---|
822 | ããã§ï¼ä¾å¤ãã¬ã¼ã ããæ»ãå
|
---|
823 | ã®CPSRãåãåºãï¼IããããFãããã®ãã
|
---|
824 | ãããã»ããããã¦ããå ´åã«ã¯ï¼ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã®åºå
|
---|
825 | ¥å£å¦ç
|
---|
826 | ï¼nk_exc_handler_1ï¼ã«åå²ããï¼
|
---|
827 |
|
---|
828 | ----------------------------------------
|
---|
829 | if (CPUä¾å¤ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
830 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼
|
---|
831 | éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã ⦠(*k)
|
---|
832 | }
|
---|
833 | ----------------------------------------
|
---|
834 |
|
---|
835 | ã«ã¼ãã«ç®¡çå¤ã®CPUä¾å¤ã®åºå
|
---|
836 | ¥å£å¦çï¼nk_exc_handler_1ï¼ã§ã¯ï¼ã¾ãï¼ä¾å¤
|
---|
837 | ãã¹ãã«ã¦ã³ããã¤ã³ã¯ãªã¡ã³ãããï¼CPUä¾å¤çºçåãã¿ã¹ã¯ã³ã³ããã¹ããª
|
---|
838 | ãï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼åãæãåã®ã¹ã¿ãã¯ã
|
---|
839 | ã¤ã³ã¿ãåãæãå¾ã®ã¹ã¿ãã¯ä¸ã«ä¿åããï¼
|
---|
840 |
|
---|
841 | ----------------------------------------
|
---|
842 | ã·ã¹ãã ç¶æ
|
---|
843 | ï¼ã³ã³ããã¹ãã¯é¤ãï¼ãï¼CPUä¾å¤çºçæã®ç¶æ
|
---|
844 | ã«ãã
|
---|
845 | ----------------------------------------
|
---|
846 |
|
---|
847 | ã·ã¹ãã ç¶æ
|
---|
848 | ï¼ã³ã³ããã¹ãã¯é¤ãï¼ãCPUä¾å¤çºçæã®ç¶æ
|
---|
849 | ã«ããã«ã¯ï¼ã¹ã¼
|
---|
850 | ããã¤ã¶ã¢ã¼ãã«åãæãï¼Iãã©ã°ã¨Fãã©ã°ã®ç¶æ
|
---|
851 | ãCPUä¾å¤çºçæã®ç¶æ
|
---|
852 | ã«
|
---|
853 | æ»ãï¼
|
---|
854 |
|
---|
855 | ----------------------------------------
|
---|
856 | CPUä¾å¤ãã³ãã©ãï¼CPUä¾å¤ã®æ
|
---|
857 | å ±ãè¨æ¶ãã¦ããé åã®å
|
---|
858 | é çªå°ã
|
---|
859 | ãã©ã¡ã¼ã¿ï¼p_excinfï¼ã¨ãã¦å¼ã³åºã
|
---|
860 | ----------------------------------------
|
---|
861 |
|
---|
862 | CPUä¾å¤ãã³ãã©ãã¼ãã«ï¼exc_tableï¼ããCPUä¾å¤ãã³ãã©ã®çªå°ãåãåºãï¼
|
---|
863 | CPUä¾å¤ã®æ
|
---|
864 | å ±ãè¨æ¶ãã¦ããé åã®å
|
---|
865 | é çªå°ã第1ãã©ã¡ã¼ã¿ï¼CPUä¾å¤ãã³ã
|
---|
866 | ã©çªå·ã第2ãã©ã¡ã¼ã¿ã¨ãã¦å¼ã³åºãï¼ç¬¬2ãã©ã¡ã¼ã¿ã«CPUä¾å¤ãã³ãã©çªå·
|
---|
867 | ã渡ãã®ã¯ï¼default_exc_handlerã§å²è¾¼ã¿ãã³ãã©çªå·ã表示ã§ããããã«ã
|
---|
868 | ãããã§ï¼ARMã³ã¢ä¾åé¨ã®ç¬èªæ¡å¼µã§ããï¼
|
---|
869 |
|
---|
870 | ----------------------------------------
|
---|
871 | if (CPUä¾å¤ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
872 | ã¹ã¿ãã¯ãã¿ã¹ã¯ç¨ã®ã¹ã¿ãã¯ã«æ»ãï¼
|
---|
873 | ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã ⦠(*k)
|
---|
874 | }
|
---|
875 | CPUä¾å¤å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUä¾å¤çºçæã®ã·ã¹ãã ç¶æ
|
---|
876 | ã«
|
---|
877 | æ»ãããã«æºåãã
|
---|
878 | }
|
---|
879 | CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
880 | å ±ãã¹ã¿ãã¯ä¸ããæ¨ã¦ã
|
---|
881 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
882 | CPUä¾å¤å¦çããã®ãªã¿ã¼ã³
|
---|
883 | }
|
---|
884 | ----------------------------------------
|
---|
885 |
|
---|
886 | ä¾å¤ãã¹ãã«ã¦ã³ãããã¯ãªã¡ã³ããï¼0ã«ãªã£ãå ´åã«ã¯ï¼ã¿ã¹ã¯ç¨ã®ã¹ã¿ã
|
---|
887 | ã¯ã«æ»ãï¼ãã®å¾ï¼CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
888 | å ±ãã¹ã¿ã
|
---|
889 | ã¯ä¸ããæ¨ã¦ï¼ã¹ã¯ã©ããã¬ã¸ã¹ã¿ã復帰ããå¾ï¼ä¾å¤ãããªã¿ã¼ã³ããï¼
|
---|
890 |
|
---|
891 | ----------------------------------------
|
---|
892 | else {
|
---|
893 | if (CPUä¾å¤ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
894 | ----------------------------------------
|
---|
895 |
|
---|
896 | ã«ã¼ãã«ç®¡çã®CPUä¾å¤ã®åºå
|
---|
897 | ¥å£å¦çã§ã¯ï¼ã¾ãï¼ä¾å¤ãã¹ãã«ã¦ã³ããã¤ã³ã¯
|
---|
898 | ãªã¡ã³ãããï¼CPUä¾å¤çºçåãéã¿ã¹ã¯ã³ã³ããã¹ããªãï¼ãã®å¾ã®{}å
|
---|
899 | ã®å¦
|
---|
900 | çãã¹ãããããï¼exc_handler_2ã«åå²ï¼ï¼
|
---|
901 |
|
---|
902 | ----------------------------------------
|
---|
903 | å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
904 | ã«ãã
|
---|
905 | ----------------------------------------
|
---|
906 |
|
---|
907 | ARMã³ã¢ã§ã¯ï¼ä¾å¤ã®åä»ã«ããCPSRã®Iããããã»ãããããããï¼ãã®å¦ç
|
---|
908 | ã¯å¿
|
---|
909 | è¦ãªãï¼
|
---|
910 |
|
---|
911 | ----------------------------------------
|
---|
912 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
913 | ovrtimer_stop(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åæ¢ */
|
---|
914 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
915 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼
|
---|
916 | éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
917 | }
|
---|
918 | ----------------------------------------
|
---|
919 |
|
---|
920 | ã¹ã¿ãã¯ãéã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã«åãæãï¼åãæãåã®ã¹ã¿ã
|
---|
921 | ã¯ãã¤ã³ã¿ãåãæãå¾ã®ã¹ã¿ãã¯ä¸ã«ä¿åããï¼ãããã®å¦çã®å¾ã«ï¼
|
---|
922 | exc_handler_2ã©ãã«ãç½®ãï¼
|
---|
923 |
|
---|
924 | ----------------------------------------
|
---|
925 | å²è¾¼ã¿åªå
|
---|
926 | 度ãã¹ã¯ãï¼CPUä¾å¤çºçæã®å¤ã«è¨å®ãã ⦠(*l)
|
---|
927 | ----------------------------------------
|
---|
928 |
|
---|
929 | ãããä¾åé¨ã®irc_begin_excãå¼ã³åºãï¼å¿
|
---|
930 | è¦ã§ããã°ï¼å²è¾¼ã¿åªå
|
---|
931 | 度ãã¹ã¯
|
---|
932 | ãCPUä¾å¤çºçæã®å¤ã«è¨å®ããï¼ã¾ãï¼irc_end_excã§å¿
|
---|
933 | è¦ãªæ
|
---|
934 | å ±ãã¹ã¿ãã¯
|
---|
935 | ã«ä¿åããï¼
|
---|
936 |
|
---|
937 | ----------------------------------------
|
---|
938 | CPUããã¯è§£é¤ç¶æ
|
---|
939 | ã«ããï¼CPUä¾å¤çºçæã®å²è¾¼ã¿åªå
|
---|
940 | 度ãã¹ã¯ããã
|
---|
941 | åªå
|
---|
942 | 度ã®é«ãå²è¾¼ã¿ãåãä»ããããã«ããï¼
|
---|
943 | ----------------------------------------
|
---|
944 |
|
---|
945 | å²è¾¼ã¿ã許å¯ãã¦ï¼CPUããã¯è§£é¤ç¶æ
|
---|
946 | ã«ããï¼
|
---|
947 |
|
---|
948 | ----------------------------------------
|
---|
949 | #ifdef LOG_EXC_ENTER
|
---|
950 | log_exc_enter(CPUä¾å¤ãã³ãã©çªå·);
|
---|
951 | #endif /* LOG_EXC_ENTER */
|
---|
952 | CPUä¾å¤ãã³ãã©ãï¼CPUä¾å¤ã®æ
|
---|
953 | å ±ãè¨æ¶ãã¦ããé åã®å
|
---|
954 | é çªå°ã
|
---|
955 | ãã©ã¡ã¼ã¿ï¼p_excinfï¼ã¨ãã¦å¼ã³åºã
|
---|
956 | #ifdef LOG_EXC_LEAVE
|
---|
957 | log_exc_leave(CPUä¾å¤ãã³ãã©çªå·);
|
---|
958 | #endif /* LOG_EXC_LEAVE */
|
---|
959 | ----------------------------------------
|
---|
960 |
|
---|
961 | CPUä¾å¤ãã³ãã©ãã¼ãã«ï¼exc_tableï¼ããCPUä¾å¤ãã³ãã©ã®çªå°ãåãåºãï¼
|
---|
962 | CPUä¾å¤ã®æ
|
---|
963 | å ±ãè¨æ¶ãã¦ããé åã®å
|
---|
964 | é çªå°ã第1ãã©ã¡ã¼ã¿ï¼CPUä¾å¤ãã³ã
|
---|
965 | ã©çªå·ã第2ãã©ã¡ã¼ã¿ã¨ãã¦å¼ã³åºãï¼
|
---|
966 |
|
---|
967 | ----------------------------------------
|
---|
968 | å°ãªãã¨ãã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããç¶æ
|
---|
969 | ã«ãã ⦠(*m)
|
---|
970 | å²è¾¼ã¿åªå
|
---|
971 | 度ãã¹ã¯ãï¼CPUä¾å¤çºçæã®å¤ã«è¨å®ãã ⦠(*n)
|
---|
972 | ----------------------------------------
|
---|
973 |
|
---|
974 | ã«ã¼ãã«ç®¡çã®å²è¾¼ã¿ãç¦æ¢ããå¾ï¼ãããä¾åé¨ã®irc_end_excãå¼ã³åºãï¼
|
---|
975 |
|
---|
976 | ----------------------------------------
|
---|
977 | if (CPUä¾å¤ãã¿ã¹ã¯ã³ã³ããã¹ãã§çºç) {
|
---|
978 | ã¹ã¿ãã¯ãã¿ã¹ã¯ç¨ã®ã¹ã¿ãã¯ã«æ»ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã
|
---|
979 | ⦠(*g)
|
---|
980 | ----------------------------------------
|
---|
981 |
|
---|
982 | ä¾å¤ãã¹ãã«ã¦ã³ãããã¯ãªã¡ã³ããï¼0ã«ãªã£ãå ´åã«ã¯ï¼ã¿ã¹ã¯ç¨ã®ã¹ã¿ã
|
---|
983 | ã¯ã«æ»ãï¼ãã®å¾ï¼CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
984 | å ±ãã¹ã¿ã
|
---|
985 | ã¯ä¸ããæ¨ã¦ãï¼ä¾å¤ãã¹ãã«ã¦ã³ãã0ã«ãªã£ãå ´åã®å¦çã¯ï¼è¿½å æ
|
---|
986 | å ±ãã¹
|
---|
987 | ã¿ãã¯ä¸ããæ¨ã¦ããã¨ä»¥å¤ã¯ï¼å²è¾¼ã¿ãã³ãã©ã®åºå£å¦çã¨åæ§ã§ããï¼
|
---|
988 |
|
---|
989 | ----------------------------------------
|
---|
990 | if (p_runtsk != p_schedtsk) {
|
---|
991 | CPUããã¯ç¶æ
|
---|
992 | ã«ãã ⦠(*h)
|
---|
993 | å²è¾¼ã¿åªå
|
---|
994 | 度ãã¹ã¯ã¯ï¼å
|
---|
995 | ¨è§£é¤ç¶æ
|
---|
996 | ï¼TIPM_ENAALLï¼ã«ãªã£ã¦
|
---|
997 | ããªããã°ãªããªã ⦠(*i)
|
---|
998 | if (p_runtsk != NULL) {
|
---|
999 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ã«ä¿åãã
|
---|
1000 | ã¹ã¿ãã¯ãã¤ã³ã¿ãèªã¿ã¹ã¯ï¼p_runtskï¼ã®TCBã«ä¿åãã
|
---|
1001 | ret_exc_rãï¼å®è¡åéçªå°ã¨ãã¦èªã¿ã¹ã¯ã®TCBã«ä¿åãã
|
---|
1002 | ⦠(*a)
|
---|
1003 | #ifdef LOG_DSP_ENTER
|
---|
1004 | log_dsp_enter(p_runtsk);
|
---|
1005 | #endif /* LOG_DSP_ENTER */
|
---|
1006 | }
|
---|
1007 | dispatcherã«åå²ãã
|
---|
1008 |
|
---|
1009 | ret_exc_r:
|
---|
1010 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãé¤ããã¹ã¦ã®ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
1011 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
1012 | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
1013 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
1014 | }
|
---|
1015 | #ifdef TOPPERS_SUPPORT_OVRHDR
|
---|
1016 | else {
|
---|
1017 | if (p_runtsk != NULL) {
|
---|
1018 | ovrtimer_start(); /* ãªã¼ãã©ã³ã¿ã¤ãã®åä½éå§ */
|
---|
1019 | }
|
---|
1020 | }
|
---|
1021 | #endif /* TOPPERS_SUPPORT_OVRHDR */
|
---|
1022 | }
|
---|
1023 | CPUä¾å¤å¦çããã®ãªã¿ã¼ã³å¾ã«ï¼CPUããã¯è§£é¤ç¶æ
|
---|
1024 | ã«æ»ãããã«æºåãã
|
---|
1025 | }
|
---|
1026 | CPUä¾å¤ãçºçããç¶æ³ãå¤æããããã®è¿½å æ
|
---|
1027 | å ±ãã¹ã¿ãã¯ä¸ããæ¨ã¦ã
|
---|
1028 | ã¹ã¯ã©ããã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ãã復帰ãã
|
---|
1029 | CPUä¾å¤å¦çããã®ãªã¿ã¼ã³
|
---|
1030 | }
|
---|
1031 | ----------------------------------------
|
---|
1032 |
|
---|
1033 | âã¹ã¿ãã¯ãã¤ã³ã¿ãä¸æ£ã®å ´åã®å¯¾ç
|
---|
1034 |
|
---|
1035 | CPUä¾å¤ãã³ãã©ãå®è¡ããéã«çµç±ããé¨åã§ï¼CPUä¾å¤ãèµ·ããå¯è½æ§ã¨ã
|
---|
1036 | ã¦ï¼ã¹ã¿ãã¯ãã¤ã³ã¿ãä¸æ£ãªçªå°ã¨ãªã£ãå ´åãèããããï¼ã¹ã¼ããã¤ã¶
|
---|
1037 | ã¢ã¼ãã®ã¹ã¿ãã¯ãã¤ã³ã¿ãä¸æ£ãªçªå°ã¨ãªã£ãç¶æ
|
---|
1038 | ã§ä¾å¤ãçºçããã¨ï¼ã
|
---|
1039 | ã®å
|
---|
1040 | ¥å£ã§ã¹ã¯ã©ããã¬ã¸ã¹ã¿çãä¿åãããã¨ãã¦ï¼å度ä¾å¤ãçºçããï¼ã
|
---|
1041 | ã®ç¶æ³ã§ï¼ä¾å¤çºçãç¡éã«ç¹°ãè¿ããã¨ãé²ã対çãã¨ããã¨ãæã¾ããï¼
|
---|
1042 |
|
---|
1043 | ãããé²ãããã«ï¼ãã¼ã¿ã¢ãã¼ãã®å
|
---|
1044 | ¥å£ã§ï¼ãã¼ã¿ã¢ãã¼ããçºçãããçª
|
---|
1045 | å°ã調ã¹ï¼CPUä¾å¤ã®å
|
---|
1046 | ¥å£ã§ãã£ãå ´åã«ã¯ï¼ãã§ã¤ã¿ã«ãã¼ã¿ã¢ãã¼ãå¦çã
|
---|
1047 | è¡ãï¼
|
---|
1048 |
|
---|
1049 | ãã§ã¤ã¿ã«ãã¼ã¿ã¢ãã¼ãå¦çã§ã¯ï¼ã¹ã¼ããã¤ã¶ã¢ã¼ãã®ã¹ã¿ãã¯ãï¼å¼·å¶
|
---|
1050 | çã«ï¼éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯ã®åæå¤ã«è¨å®ããå¾ï¼CPUä¾å¤ã®å¦
|
---|
1051 | çãè¡ãï¼ãã®éï¼é常ã®ãã¼ã¿ã¢ãã¼ãã¨åºå¥ã§ããããã«ï¼ä¾å¤ãã¹ãã«
|
---|
1052 | ã¦ã³ãã®æä¸ä½ãããã1ã«ããï¼ãã§ã¤ã¿ã«ãã¼ã¿ã¢ãã¼ãå¦çããã¯ãªã¿ã¼
|
---|
1053 | ã³ãããã¨ãã§ããªãï¼
|
---|
1054 |
|
---|
1055 | 以ä¸
|
---|