source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/tms320c54x/cpu_support.S@ 26

Last change on this file since 26 was 26, checked in by ykominami, 12 years ago

initial

File size: 9.4 KB
Line 
1; *
2; * TOPPERS/JSP Kernel
3; * Toyohashi Open Platform for Embedded Real-Time Systems/
4; * Just Standard Profile Kernel
5; *
6; * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7; * Toyohashi Univ. of Technology, JAPAN
8; *
9; * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11; * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13; * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14; * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16; * 利用と呼ぶ)することを無償で許諾する.
17; * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18; * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19; * スコード中に含まれていること.
20; * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21; * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24; * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26; * の無保証規定を掲載すること.
27; * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28; * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30; * と.
31; * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34; * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35; * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38; * 報告すること.
39; * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40; * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43; *
44; * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46; * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47; * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48; * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49; *
50; * @(#) $Id: cpu_support.S,v 1.5 2003/12/04 08:25:44 honda Exp $
51; *
52
53 .c_mode
54 .align 1
55 .global __kernel_dispatch
56 .include "c5402dsk.h"
57 .mmregs
58
59__kernel_dispatch:
60 PSHM AR1 ;AR1,6,7をスタックに保存
61 PSHM AR6 ;PCは呼び出し時にスタックに保存される
62 PSHM AR7 ;他の補助レジスタARxは保存する必
63要はない
64 LDM SP,A
65 MVDM *(__kernel_runtsk),AR1 ;AR1 <- runtsk
66 NOP
67 STL A,*AR1(TCB_sp) ;タスクスタックをTCBに保存
68 ST #dispatch_r,*AR1(TCB_pc) ;実行再開番地をTCBに保存
69 B dispatcher_1
70
71dispatch_r:
72 POPM AR7 ;レジスタを復帰
73 POPM AR6
74 POPM AR1
75 B __kernel_calltex ;タスク例外ルーチンの呼び出し
76
77 .global __kernel_exit_and_dispatch
78__kernel_exit_and_dispatch:
79 SSBX INTM ;割り込み禁止
80 ST #0,*(__kernel_nest) ;カーネルの初期化処理時のため
81dispatcher_1:
82 LD *(__kernel_schedtsk),A ;schedtskがあるか?
83 BC dispatcher_2,AEQ ;無ければジャンプ
84 MVDK *(__kernel_schedtsk),*(__kernel_runtsk) ;schedtskをruntskに
85 MVDM *(__kernel_runtsk),AR1
86 NOP
87 MVDK *AR1(TCB_sp),SP ;TCBからスタックを復帰
88 LD *AR1(TCB_pc),A ;TCBから実行再開番地を復帰
89 BACC A
90
91dispatcher_2:
92 STM #STACKTOP,SP
93 ST #0x01,*(__kernel_nest)
94 RSBX INTM ;割り込み許可
95 IDLE 1 ;リセットかマスクされていない割込み待
96ち
97 SSBX INTM ;割り込み禁止
98 ST #0x0,*(__kernel_nest)
99 B dispatcher_1
100
101
102;
103; タスクの起動処理
104;
105
106 .global __kernel_activate_r
107; .global _activate_r
108__kernel_activate_r:
109;_activate_r:
110 RSBX INTM ;割り込み許可
111 POPM AR2
112 POPM AR3
113 LDM AR2,B
114 LDM AR3,A
115 BACC B
116
117
118
119 .global _interrupt
120_interrupt:
121 PSHM ST0
122 PSHM AL
123 PSHM AH
124 PSHM AG
125 PSHM BL
126 PSHM BH
127 PSHM BG
128 PSHM ST1
129 PSHM AR0
130 PSHM AR2
131 PSHM AR3
132 PSHM AR4
133 PSHM AR5
134 PSHM T
135 PSHM TRN
136 PSHM BK
137 PSHM BRC
138 PSHM RSA
139 PSHM REA
140 PSHM PMST
141 LD *(__kernel_nest),A
142 ADDM #1,*(__kernel_nest) ;割り込みのネスト回数をインクリメント
143 BC _interrupt_from_int,ANEQ
144 LDM SP,A ;スタックå…
145¥ã‚Œæ›¿ãˆã¨
146 STM #STACKTOP,SP ;å…
147ƒã®ã‚¹ã‚¿ãƒƒã‚¯ãƒã‚¤ãƒ³ã‚¿ã®
148 PSHM AL ;保存を行う
149 PSHM IMR
150 MVDM *(_INT_VECNO),AR2 ;オフセット値をAR2にセット
151 STM #IMR,AR3 ;同じ割り込みが何度もかからないように
152 LD *AR2(__kernel_int_mask_table),A ; |
153 AND *AR3,A ; ↓
154 STL A,*AR3 ;現在の割り込みをマスクする
155 LD *AR2(__kernel_int_table),A ;割り込みハンドラのアドレスを取得
156 RSBX INTM ;これ以降割り込みを受け受け付ける
157 CALA A ;割り込みハンドラへ
158 SSBX INTM ;割り込みを禁止
159 ADDM #-1,*(__kernel_nest) ;デクリメント
160 POPM IMR
161 POPM SP ;戻りå…
162ˆãŒã‚¿ã‚¹ã‚¯ãªã®ã§ã‚¹ã‚¿ãƒƒã‚¯ã‚’戻す
163 LD *(__kernel_reqflg),A
164 BC _ret_to_task_int,AEQ ;reqflgがFALSEならジャンプ
165 ST #0,*(__kernel_reqflg)
166 B ret_int
167
168_interrupt_from_int:
169 LDM SP,A
170 ANDM #0xFFFE,*(SP)
171 NOP
172 NOP
173 PSHM AL
174 PSHM IMR
175 MVDM *(_INT_VECNO),AR2 ;オフセット値をAR2にセット
176 STM #IMR,AR3 ;同じ割り込みが何度もかからないように
177 LD *AR2(__kernel_int_mask_table),A ; |
178 AND *AR3,A ; ↓
179 STL A,*AR3 ;現在の割り込みをマスクする
180 LD *AR2(__kernel_int_table),A ;割り込みハンドラのアドレスを取得
181 RSBX INTM ;これ以降割り込みを受け付ける
182 CALA A ;割り込みハンドラヘ
183 SSBX INTM ;割り込み禁止
184 POPM IMR
185 POPM SP
186 ADDM #-1,*(__kernel_nest) ;割り込みのネスト回数をデクリメント
187_ret_to_task_int: ;レジスタを復帰し割り込みå…
188ƒã¸æˆ»ã‚‹ã€‚
189 POPM PMST
190 POPM REA
191 POPM RSA
192 POPM BRC
193 POPM BK
194 POPM TRN
195 POPM T
196 POPM AR5
197 POPM AR4
198 POPM AR3
199 POPM AR2
200 POPM AR0
201 POPM ST1
202 POPM BG
203 POPM BH
204 POPM BL
205 POPM AG
206 POPM AH
207 POPM AL
208 POPM ST0
209 RETE
210
211 .global ret_int
212ret_int:
213 LD *(__kernel_enadsp),A
214 BC ret_int_1,AEQ
215 MVDM *(__kernel_runtsk),AR0
216 MVDM *(__kernel_schedtsk),AR2
217 NOP
218 CMPR EQ,AR2 ;runtskとschedtskを比較
219 BC ret_int_1,TC
220 PSHM AR1
221 PSHM AR6
222 PSHM AR7
223 LDM SP,A
224 STL A,*AR0(TCB_sp)
225 ST #ret_int_r,*AR0(TCB_pc)
226 B dispatcher_1
227ret_int_r:
228 POPM AR7
229 POPM AR6
230 POPM AR1
231ret_int_1:
232 LDM SP,A
233 ANDM #0xFFFE,*(SP)
234 NOP
235 NOP
236 PSHM AL
237 FRAME #-1
238 LD #__kernel_calltex,A
239 CALA A
240 FRAME #1
241 POPM SP
242 NOP
243 POPM PMST
244 POPM REA
245 POPM RSA
246 POPM BRC
247 POPM BK
248 POPM TRN
249 POPM T
250 POPM AR5
251 POPM AR4
252 POPM AR3
253 POPM AR2
254 POPM AR0
255 POPM ST1
256 POPM BG
257 POPM BH
258 POPM BL
259 POPM AG
260 POPM AH
261 POPM AL
262 POPM ST0
263 RETE
264
265;
266; 微少時間待
267ち
268;
269 .global _sil_dly_nse
270_sil_dly_nse:
271 SSBX SXM
272 NOP
273 LD *(AL), A
274 SUB #SIL_DLY_TIM1, A, A
275 BC _sil_dly_nse1, AGT
276 RET
277_sil_dly_nse1:
278 SUB #SIL_DLY_TIM2, A, A
279 BC _sil_dly_nse1, AGT
280 RET
281
Note: See TracBrowser for help on using the repository browser.