source: asp3_wo_tecs/trunk/arch/arm_gcc/common/gic_support.S@ 306

Last change on this file since 306 was 306, checked in by ertl-honda, 7 years ago

3.1.0を反映

File size: 6.1 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 *
10 * 上記著作権者
11は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再é…
14å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再é…
20å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
21å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
22 * 者
23マニュアルなど)に,上記の著作権表示,この利用条件および下記
24 * の無保証規定を掲載すること.
25 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
26 * 用できない形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
28 * と.
29 * (a) 再é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
31マニュアルなど)に,上記の著
32 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
33 * (b) 再é…
34å¸ƒã®å½¢æ…
35‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
36 * 報告すること.
37 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
38 * 害からも,上記著作権者
39およびTOPPERSプロジェクトをå…
40è²¬ã™ã‚‹ã“と.
41 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
42 * 由に基づく請求からも,上記著作権者
43およびTOPPERSプロジェクトを
44 * å…
45è²¬ã™ã‚‹ã“と.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
48お
49 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
50 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
51 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
52 * の責任を負わない.
53 *
54 * $Id: gic_support.S 718 2016-04-01 15:05:01Z ertl-hiro $
55 */
56
57/*
58 * カーネルの割込みコントローラ依存部のアセンブリ言語部(GIC用)
59 */
60
61#define TOPPERS_MACRO_ONLY
62#define TOPPERS_ASM_MACRO
63#define UINT_C(val) (val) /* uint_t型の定数を作るマクロ */
64#define ULONG_C(val) (val) /* ulong_t型の定数を作るマクロ */
65#define CAST(type, val) (val) /* 型キャストを行うマクロ */
66#define GIC_REG(base, offset) ((base) + (offset))
67#include "kernel_impl.h"
68#include "core_asm.inc"
69
70#if __TARGET_ARCH_ARM < 6
71#error gic_suport.S supports ARMv6 or later.
72#endif /* __TARGET_ARCH_ARM < 6 */
73
74/*
75 * 割込みハンドラ呼出し前の割込みコントローラ操作
76 *
77 * r4に割込み番号を返す.irc_end_intで用いる情
78報(割込み発生前の割込み
79 * 優å…
80ˆåº¦ãƒžã‚¹ã‚¯ï¼‰ã‚’,スタックのå…
81ˆé ­ã«ä¿å­˜ã™ã‚‹ï¼Ž
82 */
83 ATEXT
84 AALIGN(2)
85 AGLOBAL(irc_begin_int)
86ALABEL(irc_begin_int)
87 /*
88 * 割込み要因を取得する.
89 */
90 ldr r1, =GICC_IAR
91 ldr r3, [r1]
92
93 /*
94 * 割込み要因の割込み優å…
95ˆåº¦ã‚’求め,割込み優å…
96ˆåº¦ãƒžã‚¹ã‚¯ã«è¨­å®šã™ã‚‹ï¼Ž
97 */
98 ldr r1, =GICC_RPR /* 受け付けた割込みの割込み優å…
99ˆåº¦ã‚’取得 */
100 ldr r0, [r1]
101 ldr r1, =GICC_PMR /* 割込み発生前の割込み優å…
102ˆåº¦ã‚’取得 */
103 ldr r2, [r1]
104 str r0, [r1] /* 新しい割込み優å…
105ˆåº¦ãƒžã‚¹ã‚¯ã‚’セットする */
106 asm_data_sync_barrier r0 /* 割込み優å…
107ˆåº¦ãƒžã‚¹ã‚¯ãŒã‚»ãƒƒãƒˆã•ã‚Œã‚‹ã®ã‚’å¾…
108つ */
109 str r2, [sp] /* irc_end_intで用いる情
110報を保存 */
111
112 /*
113 * EOIを発行する.
114 */
115 ldr r1, =GICC_EOIR /* EOIレジスタへの書込み */
116 str r3, [r1]
117
118 /*
119 * 割込み番号を返値としてリターンする.
120 */
121 lsl r4, r3, #22 /* 下位10ビットを取り出す */
122 lsr r4, r4, #22
123 bx lr
124
125/*
126 * 割込みハンドラ呼出し後の割込みコントローラ操作
127 */
128 ATEXT
129 AALIGN(2)
130 AGLOBAL(irc_end_int)
131ALABEL(irc_end_int)
132 /*
133 * 割込み優å…
134ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
135ƒã«æˆ»ã™ï¼Ž
136 */
137 ldr r2, [sp] /* irc_begin_intで保存した情
138報を復帰 */
139 ldr r1, =GICC_PMR /* 割込み優å…
140ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
141ƒã«æˆ»ã™ */
142 str r2, [r1]
143 bx lr
144
145/*
146 * CPU例外発生前の割込み優å…
147ˆåº¦ã®å–å¾—
148 *
149 * CPU例外の発生で割込み優å…
150ˆåº¦ãŒå¤‰ã‚ã‚‹ã“とはないため,現在の割込み優å…
151ˆ
152 * 度を返す.
153 */
154 ATEXT
155 AALIGN(2)
156 AGLOBAL(irc_get_intpri)
157ALABEL(irc_get_intpri)
158 /*
159 * 割込み優å…
160ˆåº¦ãƒžã‚¹ã‚¯ã‚’外部表現に変換して返す.
161 */
162 ldr r1, =GICC_PMR
163 ldr r0, [r1]
164 asr r0, r0, #GIC_PRI_SHIFT
165 sub r0, r0, #GIC_PRI_MASK
166 bx lr
167
168/*
169 * CPU例外ハンドラ呼出し前の割込みコントローラ操作
170 *
171 * irc_end_excで用いる情
172報(CPU例外発生前の割込み優å…
173ˆåº¦ãƒžã‚¹ã‚¯ï¼‰ã‚’,スタッ
174 * クのå…
175ˆé ­ã«ä¿å­˜ã™ã‚‹ï¼Ž
176 */
177 ATEXT
178 AALIGN(2)
179 AGLOBAL(irc_begin_exc)
180ALABEL(irc_begin_exc)
181 /*
182 * 割込み優å…
183ˆåº¦ãƒžã‚¹ã‚¯ã‚’保存する.
184 */
185 ldr r1, =GICC_PMR /* 現在の割込み優å…
186ˆåº¦ã‚’取得 */
187 ldr r2, [r1]
188 str r2, [sp] /* irc_end_excで用いる情
189報を保存 */
190 bx lr
191
192/*
193 * CPU例外ハンドラ呼出し後の割込みコントローラ操作
194 */
195 ATEXT
196 AALIGN(2)
197 AGLOBAL(irc_end_exc)
198ALABEL(irc_end_exc)
199 /*
200 * 割込み優å…
201ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
202ƒã«æˆ»ã™ï¼Ž
203 */
204 ldr r2, [sp] /* irc_begin_excで保存した情
205報を復帰 */
206 ldr r1, =GICC_PMR /* 割込み優å…
207ˆåº¦ãƒžã‚¹ã‚¯ã‚’å…
208ƒã«æˆ»ã™ */
209 str r2, [r1]
210 bx lr
Note: See TracBrowser for help on using the repository browser.