1 | =====================================================================
|
---|
2 | BCM283x ãããä¾åé¨è¨è¨ã¡ã¢
|
---|
3 | Last Modified: 16 Apr 2019
|
---|
4 | =====================================================================
|
---|
5 |
|
---|
6 | âãã®ããã¥ã¡ã³ãã®ä½ç½®ã¥ã
|
---|
7 |
|
---|
8 | ãã®ããã¥ã¡ã³ãã¯ï¼TOPPERS/SSPã«ã¼ãã«ãBCM283xã«ç§»æ¤ããéã®
|
---|
9 | ãããåºæäºé
|
---|
10 | ã«é¢ããè¨è¨ã¡ã¢ã§ããï¼
|
---|
11 |
|
---|
12 | (åè)
|
---|
13 |
|
---|
14 | (a) QA7(ARM Quad A7 core)
|
---|
15 | https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2836/QA7_rev3.4.pdf
|
---|
16 |
|
---|
17 | (b) BCM2835 ARM Peripherals
|
---|
18 | https://www.raspberrypi.org/documentation/hardware/raspberrypi/bcm2835/BCM2835-ARM-Peripherals.
|
---|
19 | pdf
|
---|
20 |
|
---|
21 |
|
---|
22 | [CPUã¢ã¼ã]
|
---|
23 |
|
---|
24 | âãªã»ããæã®ç¶æ
|
---|
25 |
|
---|
26 |
|
---|
27 | ãªã»ããæï¼BCM283x (Cortex-A53) ã¯ï¼EL3h (使ç¨ã¹ã¿ã㯠SP_EL3)ã§èµ·åããï¼
|
---|
28 |
|
---|
29 |
|
---|
30 | [å²è¾¼ã¿]
|
---|
31 |
|
---|
32 |
|
---|
33 | âå²è¾¼ã¿åªå
|
---|
34 | 度
|
---|
35 |
|
---|
36 | BCM283x ã®å²è¾¼ã¿ã³ã³ããã¼ã©ã¯åªå
|
---|
37 | 度ãå®è£
|
---|
38 | ããã¦ããªãï¼ãã®ãã
|
---|
39 | åªå
|
---|
40 | 度ã«åºã¥ãå²è¾¼ã¿ã®ãã¹ã¯ãã½ããã¦ã§ã¢ã§æ¬ä¼¼çã«å®è£
|
---|
41 | ãã¦ããï¼
|
---|
42 | å²è¾¼ã¿ã®å
|
---|
43 | é¨åªå
|
---|
44 | 度ã®å¤ã¯å¤é¨åªå
|
---|
45 | 度ã®ç¬¦å·ãå転ãããã®ãç¨ããããï¼
|
---|
46 | å¤ã®å¤§ããæ¹ãé«åªå
|
---|
47 | 度ã¨ãªãï¼
|
---|
48 |
|
---|
49 | åªå
|
---|
50 | 度ã®ç¯å²ã¯èªç±ã«æ±ºãããã¨ãã§ããï¼æ¢å®ã®æé«å¤ã¯15ã¨ãªã£ã¦ããï¼
|
---|
51 |
|
---|
52 |
|
---|
53 | âå²è¾¼ã¿/ä¾å¤ã®åä»
|
---|
54 |
|
---|
55 | å²è¾¼ã¿ä¿¡å·ãåä¿¡ããã¨ï¼BCM283xã®ãã³ãã£ã³ã°ã¬ã¸ã¹ã¿ã®è©²å½ããããããã»ãããããï¼
|
---|
56 | å²è¾¼ã¿çªå·ã¯ãã®ã¬ã¸ã¹ã¿ã«ã»ãããããå¤ã使ç¨ããï¼
|
---|
57 |
|
---|
58 | å²è¾¼ã¿ãã³ãã©çªå·ã¨å²è¾¼ã¿çªå·ã¯ï¼BCM2835åã³BCM2836ã®
|
---|
59 | ããªãã§ã©ã«ããã¥ã¢ã«(ä¸è¨aåã³b)ããï¼ãã³ãã£ã³ã°ã¬ã¸ã¹ã¿ã®ãããä½ç½®ã«åºã¥ãã¦
|
---|
60 | 0ãã127ã®çªå·ãå²ãå½ã¦ãï¼(åã
|
---|
61 | ã®å®ç¾©ã¯ bcm2837.h ãåç
|
---|
62 | §)
|
---|
63 |
|
---|
64 | 0 ... 31 Core interrupt (ä¸è¨aã®P16 ãCore0 interrupt sourceãã«å¯¾å¿)
|
---|
65 | 32 ... 63 ARM peripherals interrupt(bã®P113ãBasic pending registerãã«å¯¾å¿)
|
---|
66 | 64 ... 95 ARM peripherals interrupt(bã®P115ãGPU pending register 1ãã«å¯¾å¿)
|
---|
67 | 96 ...127 ARM peripherals interrupt(bã®P115ãGPU pending register 2ãã«å¯¾å¿)
|
---|
68 |
|
---|
69 | å²è¾¼ã¿ãåãä»ããã¨ä¾å¤ã¬ãã«ã¨ä¾å¤ã®ç¨®é¡ã«å¿ããæå®ã®ä½ç½®ãã
|
---|
70 | å®è¡ãéå§ããç¹ã¯ã³ã¢ä¾åé¨ã®èª¬æã¨åæ§ã§ãããï¼å²è¾¼ã¿ã®åªå
|
---|
71 | 度ã®
|
---|
72 | å¦çå
|
---|
73 | 容ã«ã¤ãã¦ã¯ä»¥ä¸ã®ããã«ãªãï¼
|
---|
74 |
|
---|
75 | ã¾ãå²è¾¼ã¿ã®å
|
---|
76 | ¥å£å¦çã§ã¯ä»¥ä¸ã®å¦çãè¡ãï¼
|
---|
77 | ã»å²è¾¼ã¿çºçæï¼å²è¾¼ã¿è¦å ãå
|
---|
78 | ã«åªå
|
---|
79 | 度ãåå¾ãã
|
---|
80 | ã»åªå
|
---|
81 | 度ãå
|
---|
82 | ã«ï¼ãã®å²è¾¼ã¿åªå
|
---|
83 | ã¬ãã«ã§å½è©²ã®å²è¾¼ã¿è¦å ããã¹ã¯ãããã©ããã決å®ããï¼
|
---|
84 | ã»ãã®åªå
|
---|
85 | 度ã§ãã¹ã¯ããå¿
|
---|
86 | è¦ã®ããå²è¾¼ã¿ãå
|
---|
87 | ¨ã¦ãã¹ã¯ããï¼
|
---|
88 | ã»CPUããã¯ã解é¤ãï¼å²è¾¼ã¿ãã³ãã©ãå¼ã³åºãï¼
|
---|
89 |
|
---|
90 | å²è¾¼ã¿ãã³ãã©ããã®ãªã¿ã¼ã³å¾ï¼åºå£å¦çã«å
|
---|
91 | ¥ãåã«åªå
|
---|
92 | 度ãå
|
---|
93 | ã«æ»ãï¼
|
---|
94 | ã»å²è¾¼ã¿çºçåã®å²è¾¼ã¿åªå
|
---|
95 | 度ãã¹ã¿ãã¯ããåå¾ãã
|
---|
96 | ã»å²è¾¼ã¿çºçåã®åªå
|
---|
97 | 度ãå
|
---|
98 | ã«ï¼ãã®å²è¾¼ã¿åªå
|
---|
99 | 度ã§ãã¹ã¯è§£é¤ã®å¯¾è±¡ã¨ãªãå²è¾¼ã¿ã決ãã
|
---|
100 | ã»å¯¾è±¡ã¨ãªãå²è¾¼ã¿ã®å²è¾¼ã¿ãã¹ã¯ããã¹ã¦è§£é¤ããï¼
|
---|
101 |
|
---|
102 | å²è¾¼ã¿è¦å ã¨åªå
|
---|
103 | 度ã¨ã®å¯¾å¿ï¼ããã³åªå
|
---|
104 | 度ã¨ãã¹ã¯ãã¿ã¼ã³ã¨ã®å¯¾å¿ã«ã¯
|
---|
105 | ãããã intpri_tableï¼åã³ iipm_mask_table ã¨ããé
|
---|
106 | åã使ç¨ããï¼
|
---|
107 | ããã㯠CFG_INT ã®è¨å®å¤ããã¨ã«ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã kernel_cfg.c ã«åºåããï¼
|
---|
108 |
|
---|
109 |
|
---|
110 | CPUä¾å¤ã®ä¾å¤çªå·ã«ã¤ãã¦ã¯ï¼ã³ã¢ä¾åé¨ã¨åæ§ã®ããçç¥ããï¼
|
---|
111 |
|
---|
112 |
|
---|
113 | âä¾å¤/å²è¾¼ã¿ã®åä»
|
---|
114 |
|
---|
115 | ã»ä¾å¤/å²è¾¼ã¿ãåä»ããã¨ï¼åä»ãæã«ã¢ã¯ãã£ããªã¹ã¿ãã¯ä¸ã«ä»¥ä¸ã®ã³
|
---|
116 | ã³ããã¹ããä¿åããï¼
|
---|
117 |
|
---|
118 | ---------------
|
---|
119 | | GICC_PMR | <- new SP
|
---|
120 | ----------------
|
---|
121 | | å²è¾¼ã¿/ä¾å¤çªå·|
|
---|
122 | ----------------
|
---|
123 | | ESR_ELx |
|
---|
124 | ----------------
|
---|
125 | | ELR_ELx |
|
---|
126 | ----------------
|
---|
127 | | SPSR_ELx |
|
---|
128 | ----------------
|
---|
129 | | X30 |
|
---|
130 | ----------------
|
---|
131 | | X29 |
|
---|
132 | ----------------
|
---|
133 | | ï¼ |
|
---|
134 | | ï¼ |
|
---|
135 | ----------------
|
---|
136 | | X1 |
|
---|
137 | ----------------
|
---|
138 | | X0 |
|
---|
139 | ----------------
|
---|
140 | | | <- old SP
|
---|
141 |
|
---|
142 |
|
---|
143 | å²è¾¼ã¿/ä¾å¤çºçæã®ä¸»ãªã·ã¼ã±ã³ã¹ã¯æ¬¡ã®ããã«ãªãï¼é·ç§»å
|
---|
144 | ã®ä¾å¤ã¬ãã«ãELxã¨è¡¨ç¾ããï¼
|
---|
145 |
|
---|
146 | ï¼ãã¼ãã¦ã§ã¢ã®å¦çï¼
|
---|
147 | ã»PSTATEãSPSR_ELxã«ä¿åãã
|
---|
148 | ã»ãªã¿ã¼ã³ã¢ãã¬ã¹ãELR_ELxã«ä¿åãã
|
---|
149 | ã»PSTATE.{D,A,I,F}ã1ã«ã»ãããã
|
---|
150 | ã»åæä¾å¤ããã³SErrorå²è¾¼ã¿ã®ã¨ãï¼ä¾å¤è¦å æ
|
---|
151 | å ±ãESR_ELxã«ä¿åãã
|
---|
152 | ã»ã¹ã¿ãã¯ãã¤ã³ã¿ãSP_ELxã«åãæ¿ãã
|
---|
153 | ã»ï¼CPUä¾å¤ã®å ´åï¼ä¾å¤çªå·ãx22ã«æ ¼ç´
|
---|
154 | ã»ELxã¸é·ç§»ãã
|
---|
155 |
|
---|
156 | ï¼ã½ããã¦ã§ã¢ã§ã®å¦çï¼
|
---|
157 | ã»(çºçæã«SP_EL0ã使ç¨ãã¦ããå ´å)ã¹ã¿ãã¯ãå²è¾¼ã¿çºçå(SP_EL0)ã«æ»ã
|
---|
158 | ã»æ±ç¨ã¬ã¸ã¹ã¿(X0-X30)ãã¹ã¿ãã¯ã«ä¿å
|
---|
159 | ã»SPSR_ELx, ESR_ELx, ELR_ELxãã¹ã¿ãã¯ã«ä¿å
|
---|
160 | ã»(å²è¾¼ã¿)ãã³ãã£ã³ã°ã¬ã¸ã¹ã¿ããå²è¾¼ã¿çªå·ãåå¾
|
---|
161 | (CPUä¾å¤)ä¾å¤çªå·ãx22ããåå¾
|
---|
162 | ã»å²è¾¼ã¿çªå·ï¼ä¾å¤çªå·ãã¹ã¿ãã¯ã«ä¿å
|
---|
163 | ã»å²è¾¼ã¿çºçåã®å²è¾¼ã¿åªå
|
---|
164 | 度ãã¹ã¯ãã¹ã¿ãã¯ã«ä¿å
|
---|
165 | ã»åãä»ããå²è¾¼ã¿ã®å²è¾¼ã¿åªå
|
---|
166 | 度ãå¤æ° current_intpri ã«ã»ãã
|
---|
167 | ã»(å²è¾¼ã¿ã®å ´å)å²è¾¼ã¿åªå
|
---|
168 | 度ã®å¤ãå
|
---|
169 | ã«ï¼å²è¾¼ã¿ããã¹ã¯ãã
|
---|
170 | ã»å²è¾¼ã¿/ä¾å¤ãã¹ãã«ã¦ã³ã¿ã®ã¤ã³ã¯ãªã¡ã³ã
|
---|
171 | ã»(å²è¾¼ã¿ã®å ´å)CPUããã¯è§£é¤
|
---|
172 | (ã«ã¼ãã«ç®¡çã®CPUä¾å¤ã®å ´å)ä¾å¤çºçåã®PSTATEç¶æ
|
---|
173 | ã«è¨å®
|
---|
174 | ã»ãã³ãã©ã®é
|
---|
175 | åããã¢ãã¬ã¹ãèªã¿è¾¼ã¿ãã³ãã©ãå®è¡ãã
|
---|
176 |
|
---|
177 | âä¾å¤/å²è¾¼ã¿ããã®ãªã¿ã¼ã³
|
---|
178 |
|
---|
179 | ï¼ã½ããã¦ã§ã¢ã§ã®å¦çï¼
|
---|
180 | ã»CPUããã¯ç¶æ
|
---|
181 | ã¸ç§»è¡
|
---|
182 | ã»å²è¾¼ã¿/ä¾å¤ãã¹ãã«ã¦ã³ã¿ã®ãã¯ãªã¡ã³ã
|
---|
183 | ã»(å²è¾¼ã¿ã®å ´å)å²è¾¼ã¿çºçåã®åªå
|
---|
184 | 度ãã¹ã¯ãæ»ãï¼åªå
|
---|
185 | 度ã«å¿ãã¦å²è¾¼ã¿ã®ãã¹ã¯ã解é¤ãã
|
---|
186 | (CPUä¾å¤ã®å ´å)CPU管çå¤ã®ä¾å¤ã®å ´åï¼ä¾å¤çºçå
|
---|
187 | ã¸ãªã¿ã¼ã³ãã
|
---|
188 | ã»æ»ãå
|
---|
189 | ã®ã³ã³ããã¹ããã·ã¹ãã ç¶æ
|
---|
190 | ã«å¿ãã¦å²è¾¼ã¿/ä¾å¤çºçå
|
---|
191 | ã¸ãªã¿ã¼ã³
|
---|
192 | ã¾ãã¯é
|
---|
193 | 延ãã£ã¹ããããå®è¡ãã
|
---|
194 | ã»ELR_ELxã«æ»ãå
|
---|
195 | ã¢ãã¬ã¹ï¼SPSR_ELxã«ããã»ããµç¶æ
|
---|
196 | ããããã
|
---|
197 | ã»ããããã¦ããç¶æ
|
---|
198 | ã§eretå½ä»¤ãå®è¡ãï¼å²è¾¼ã¿/ä¾å¤ãããªã¿ã¼ã³
|
---|
199 |
|
---|
200 |
|
---|
201 | â OSã®å®è£
|
---|
202 |
|
---|
203 |
|
---|
204 | 1.ãããä¾åé¨å称: bcm283x
|
---|
205 |
|
---|
206 | ç¾ç¶ã§ã¯ Raspberry Pi3B ã«æè¼ãããBCM2837ã®ã¿ãµãã¼ããããï¼
|
---|
207 | Raspberry Pi ã«æè¼ãããããã»ããµBCM283x (x=5,6,7)ã¯å¨è¾ºåè·¯ã«ã¤ãã¦
|
---|
208 | å
|
---|
209 | ±éããé¨åãå¤ãï¼ã¾ã¨ãã¦æ±ããã¨ã«ããããä¾åé¨å称ã bcm283x ã¨ãã
|
---|
210 |
|
---|
211 |
|
---|
212 | 2. å¤é¨åªå
|
---|
213 | 度ã¨å
|
---|
214 | é¨åªå
|
---|
215 | 度
|
---|
216 |
|
---|
217 | å¤é¨åªå
|
---|
218 | 度ã¨ã¯APIã§æå®ããå²è¾¼ã¿åªå
|
---|
219 | 度(PRIå)ã®ãã¨ã§ããï¼å¤ãå°ãã
|
---|
220 | ã»ã©åªå
|
---|
221 | 度ãé«ãï¼å²è¾¼ã¿ãã³ãã©ã«ã¯ï¼-1ããé£ç¶ããè² ã®å¤ãè¨å®å¯è½ã§
|
---|
222 | ããï¼å
|
---|
223 | é¨åªå
|
---|
224 | 度ã¯å¤é¨åªå
|
---|
225 | 度ã®ç¬¦å·ãå転ããå¤ã¨ããï¼
|
---|
226 | å¤é¨åªå
|
---|
227 | 度ã¨å
|
---|
228 | é¨åªå
|
---|
229 | 度ã®å¤æã¯ä»¥ä¸ã®ãã¯ãã§è¡¨ç¾ãããï¼
|
---|
230 |
|
---|
231 | /* å¤é¨è¡¨ç¾ã¸ã®å¤æ */
|
---|
232 | #define EXT_IPM(pri) (-pri)
|
---|
233 |
|
---|
234 | /* å
|
---|
235 | é¨è¡¨ç¾ã¸ã®å¤æ */
|
---|
236 | #define INT_IPM(ipm) (-ipm)
|
---|
237 |
|
---|
238 |
|
---|
239 | 3. ã«ã¼ãã«ç®¡çå
|
---|
240 | ã®æé«åªå
|
---|
241 | 度(CPUããã¯ç¶æ
|
---|
242 | ã§ã®åªå
|
---|
243 | 度ãã¹ã¯)
|
---|
244 |
|
---|
245 | CPUããã¯ç¶æ
|
---|
246 | ã®å®è£
|
---|
247 | ã«åªå
|
---|
248 | 度ã¯ç¨ãã¦ããªãï¼
|
---|
249 | ã¾ãåªå
|
---|
250 | 度å¶å¾¡ã¯ã½ããã¦ã§ã¢ã§å®è£
|
---|
251 | ãã¦ããããï¼
|
---|
252 | ã«ã¼ãã«ç®¡çå
|
---|
253 | ã®å²è¾¼ã¿ã®æé«åªå
|
---|
254 | 度ã¯èªç±ã«è¨å®å¯è½ã§ããï¼
|
---|
255 |
|
---|
256 | ãããä¾åé¨ã§æ¢å®å¤ã¨ãã¦-15ã«å®ç¾©ãã¦ãããï¼å¿
|
---|
257 | è¦ã«å¿ãã¦
|
---|
258 | ã¿ã¼ã²ããæ¯ã«å¿
|
---|
259 | è¦ãªå¤ãè¨å®ãããã¨ãã§ããï¼
|
---|
260 |
|
---|
261 |
|
---|
262 | 以ä¸ï¼
|
---|