source: mypx/target/dve68k_gcc/target_config.c

このファイルの最終更新内容7 で kominami が 2015/09/12 9:22:12 に更新しました

TOPPERS/ASP 1.9.1

ファイルサイズ: 5.9 KB
 
1/*
2 *  TOPPERS/ASP Kernel
3 *      Toyohashi Open Platform for Embedded Real-Time Systems/
4 *      Advanced Standard Profile Kernel
5 *
6 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 *                              Toyohashi Univ. of Technology, JAPAN
8 *  Copyright (C) 2005-2011 by Embedded and Real-Time Systems Laboratory
9 *              Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 *  Ÿåµ­Ãøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§
12 *  ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ
13 *  ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥
14 *  (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ­€ÎÃøºî
15 *      ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ
16 *      ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥
17 *  (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
18 *      Íрǀ­€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍÑ
19 *      ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­
20 *      €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
21 *  (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È
22 *      Íрǀ­€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³
23 *      €È¡¥
24 *    (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥­¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ­€ÎÃø
25 *        ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ­€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥
26 *    (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë
27 *        Êó¹ð€¹€ë€³€È¡¥
28 *  (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë»
29 *      ³²€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥
30 *      €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý
31 *      ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€Ÿåµ­Ãøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò
32 *      ÌÈÀÕ€¹€ë€³€È¡¥
33 *
34 *  ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥Ÿåµ­Ãøºîž¢ŒÔ€ª
35 *  €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ
36 *  €ËÂЀ¹€ëŬ¹çÀ­€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§
37 *  ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ
38 *  €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥
39 *
40 *  @(#) $Id$
41 */
42
43/*
44 *              ¥¿¡Œ¥²¥Ã¥È°Íž¥â¥ž¥å¡Œ¥ë¡ÊDVE68K/40ÍÑ¡Ë
45 */
46
47#include "kernel_impl.h"
48#include <sil.h>
49
50/*
51 *  ¥×¥í¥»¥Ã¥µŒ±Ề΀¿€á€ÎÊÑ¿ô¡Ê¥Þ¥ë¥Á¥×¥í¥»¥Ã¥µÂбþ¡Ë
52 */
53uint_t  board_id;                       /* ¥Ü¡Œ¥ÉID */
54void    *board_addr;            /* ¥í¡Œ¥«¥ë¥á¥â¥ê€ÎÀèÆ¬¥¢¥É¥ì¥¹ */
55
56/*
57 *  ¥¿¡Œ¥²¥Ã¥È°Íž€ÎœéŽü²œ
58 */
59void
60target_initialize(void)
61{
62        /*
63         *  ¥×¥í¥»¥Ã¥µ°Íž€ÎœéŽü²œ
64         */
65        prc_initialize();
66
67        /*
68         *  ¥×¥í¥»¥Ã¥µŒ±Ề΀¿€á€ÎÊÑ¿ô€ÎœéŽü²œ
69         */
70        board_id = ((uint_t)(sil_rew_mem((void *) TADR_BOARD_REG0)) & 0x1fU);
71        board_addr = (void *)(board_id << 24);
72
73        /*
74         *  ³ä¹þ€ßŽØÏ¢€ÎœéŽü²œ
75         *
76         *  ³ä¹þ€ß°À­€¬ÀßÄꀵ€ì€Æ€€€ë€«€òÈœÊÌ€¹€ë€¿€á€ÎÊÑ¿ô€òœéŽü²œ€¹€ë¡¥
77         *  €Þ€¿¡€€¹€Ù€Æ€Î³ä¹þ€ß€ò¥Þ¥¹¥¯¡Š¥¯¥ê¥¢€·¡€³ä¹þ€ß¥Ù¥¯¥È¥ë€òÀßÄꀹ
78         *  €ë¡¥
79         */
80        dga_write((void *) TADR_DGA_CSR21, 0U);
81        dga_write((void *) TADR_DGA_CSR23, ~0U);
82        dga_write((void *) TADR_DGA_CSR19, (TVEC_G0I << 24) | (TVEC_G1I << 16)
83                                                                                | (TVEC_SWI << 8) | TVEC_SPRI);
84
85        /*
86         *  ¥¢¥Ü¡Œ¥È³ä¹þ€ß€ÎÀßÄê¡ÊNMI¡Ë
87         *
88         *  ¥¢¥Ü¡Œ¥È³ä¹þ€ß€ò¥š¥Ã¥ž¥È¥ê¥¬¡€³ä¹þ€ß¥ì¥Ù¥ë€òNMI€ËÀßÄꀷ¡€¥Þ¥¹¥¯
89         *  €ò²òœü€¹€ë¡¥
90         */
91        x_config_int(TINTNO_ABT, TA_EDGE, TIRQ_NMI);
92
93        /*
94         *  ¥á¥â¥êÎΰè€ÎÀßÄê
95         *
96         *  ¥í¡Œ¥«¥ë¥á¥â¥ê€ÎVME¥Ð¥¹Ÿå€Ç€ÎÀèÆ¬¥¢¥É¥ì¥¹€È¥µ¥€¥º¡Ê16MB¡Ë€·¡€¥¢
97         *  ¥¯¥»¥¹€òŒõ€±ÉÕ€±€ë€è€Š€ËÀßÄꀹ€ë¡¥€Þ€¿¡€VME¥Ð¥¹€«€é³ÈÄ¥¥¢¥É¥ì¥¹
98         *  ¥¢¥¯¥»¥¹€òŒõ€±ÉÕ€±€ë€è€Š€Ë€ËÀßÄꀹ€ë¡¥
99         */
100        dga_write((void *) TADR_DGA_CSR4, (uint32_t) board_addr | 0x00ffU);
101        dga_write((void *) TADR_DGA_CSR5, 0x0000012fU);
102
103        /*
104         *  ¥€¥ó¥¿¥Õ¥§¡Œ¥¹¥ì¥ž¥¹¥¿¡ÊIFR¡Ë€ÎÀßÄê
105         *
106         *  ¥€¥ó¥¿¥Õ¥§¡Œ¥¹¥ì¥ž¥¹¥¿€Î¥Ù¡Œ¥¹¥¢¥É¥ì¥¹€òÀßÄꀹ€ë¡¥€Þ€¿¡€¥€¥ó¥¿
107         *  ¥Õ¥§¡Œ¥¹¥ì¥ž¥¹¥¿0€Î¥µ¡Œ¥Ó¥¹¥ê¥¯¥š¥¹¥È¥Õ¥é¥°€ò¥¯¥ê¥¢¡¥¥€¥ó¥¿¥Õ¥§¡Œ
108         *  ¥¹¥ì¥ž¥¹¥¿3€Ë¥Ü¡Œ¥É€ÎIDÈÖ¹æ€òÀßÄê¡¥
109         */
110        dga_write((void *) TADR_DGA_CSR3, (board_id << 4) | 0x3U);
111        dga_write((void *) TADR_DGA_IFR0, 0x80000000U);
112        dga_write((void *) TADR_DGA_IFR3, board_id);
113
114        /*
115         *  ¥é¥Š¥ó¥É¥í¥Ó¥ó¥â¡Œ¥É€ËÀßÄê¡Ê¥Þ¥ë¥Á¥×¥í¥»¥Ã¥µÂбþ¡Ë
116         */
117        dga_write((void *) TADR_DGA_CSR1,
118                                                (dga_read((void *) TADR_DGA_CSR1) & 0xffeffcffU)
119                                                                        | (1U << 20) | ((board_id % 4) << 8));
120}
121
122/*
123 *  ¥¿¡Œ¥²¥Ã¥È°Íž€ÎœªÎ»œèÍý
124 */
125void
126target_exit(void)
127{
128        /*
129         *  ¥×¥í¥»¥Ã¥µ°Íž€ÎœªÎ»œèÍý
130         */
131        prc_terminate();
132
133        /*
134         *  €¹€Ù€Æ€Î³ä¹þ€ß€ò¥Þ¥¹¥¯¡Š¥¯¥ê¥¢€¹€ë¡¥
135         */
136        dga_write((void *) TADR_DGA_CSR21, 0U);
137        dga_write((void *) TADR_DGA_CSR23, ~0U);
138
139        /*
140         *  ³«È¯ŽÄ¶­°Íž€ÎœªÎ»œèÍý
141         */
142        dve68k_exit();
143}
144
145/*
146 *  ¥·¥¹¥Æ¥à¥í¥°€ÎÄã¥ì¥Ù¥ëœÐÎπ΀¿€á€ÎÊž»úœÐÎÏ
147 */
148void
149target_fput_log(char c)
150{
151        if (c == '\n') {
152                dve68k_putc('\r');
153        }
154        dve68k_putc(c);
155}
156
157/*
158 *  ³ä¹þ€ßÍ×µá¥é¥€¥ó€Î°À­€ÎÀßÄê
159 *
160 *  ASP¥«¡Œ¥Í¥ë€Ç€ÎÍøÍÑ€òÁÛÄꀷ€Æ¡€¥Ñ¥é¥á¡Œ¥¿¥š¥é¡Œ€Ï¥¢¥µ¡Œ¥·¥ç¥ó€Ç¥Á¥§¥Ã
161 *  ¥¯€·€Æ€€€ë¡¥cfg_int¥µ¡Œ¥Ó¥¹¥³¡Œ¥ë€òÀ߀±€ëŸì¹ç€Ë€Ï¡€¥š¥é¡Œ€òÊÖ€¹€è€Š
162 *  €Ë€¹€Ù€­€Ç€¢€í€Š¡¥
163 */
164void
165x_config_int(INTNO intno, ATR intatr, PRI intpri)
166{
167        uint32_t        bitpat = DGA_INT_BITPAT(intno);
168
169        assert(VALID_INTNO_CFGINT(intno));
170        assert(TIRQ_NMI <= intpri && intpri <= TIRQ_LEVEL1);
171
172        /*
173         *  ³ä¹þ€ß€Î¥Þ¥¹¥¯
174         *
175         *  ³ä¹þ€ß€òŒõ€±ÉÕ€±€¿€Þ€Þ¡€¥ì¥Ù¥ë¥È¥ê¥¬¡¿¥š¥Ã¥ž¥È¥ê¥¬€ÎÀßÄê€ä¡€³ä
176         *  ¹þ€ßÍ¥ÀèÅÙ€ÎÀßÄê€ò¹Ô€Š€Î€ÏŽíž±€Ê€¿€á¡€³ä¹þ€ß°À­€Ë€«€«€ï€é€º¡€
177         *  °ìö¥Þ¥¹¥¯€¹€ë¡¥
178         */
179        (void) x_disable_int(intno);
180
181        /*
182         *  ¥ì¥Ù¥ë¥È¥ê¥¬¡¿¥š¥Ã¥ž¥È¥ê¥¬€ÎÀßÄê
183         */
184        if ((bitpat & DGA_INT_TRG_CONF) != 0U) {
185                /*
186                 *  €€€º€ì€Ë€âÀßÄê€Ç€­€ëŸì¹ç
187                 */
188                if ((intatr & TA_EDGE) != 0U) {
189                        dga_bit_or((void *) TADR_DGA_CSR18, (1U << (24 - (intno))));
190                        x_clear_int(intno);
191                }
192                else {
193                        dga_bit_and((void *) TADR_DGA_CSR18, ~(1U << (24 - (intno))));
194                }
195        }
196        else if ((bitpat & DGA_INT_TRG_EDGE) != 0U) {
197                /*
198                 *  ¥š¥Ã¥ž¥È¥ê¥¬€ËžÇÄꀵ€ì€Æ€€€ëŸì¹ç
199                 */
200                assert((intatr & TA_EDGE) != 0U);
201                x_clear_int(intno);
202        }
203        else {
204                /*
205                 *  ¥ì¥Ù¥ë¥È¥ê¥¬€ËžÇÄꀵ€ì€Æ€€€ëŸì¹ç
206                 */
207                assert((intatr & TA_EDGE) == 0U);
208        }
209
210        /*
211         *  ³ä¹þ€ßÍ¥ÀèÅÙ€ÎÀßÄê
212         */
213        dga_set_ilv((void *)(TADR_DGA_CSR24 + (intno - 1) / 8 * 4),
214                                (uint_t)(((32 - intno) % 8) * 4), (uint_t)(7 + intpri));
215
216        /*
217         *  ³ä¹þ€ß€Î¥Þ¥¹¥¯²òœü¡ÊɬÍ׀ʟì¹ç¡Ë
218         */
219        if ((intatr & TA_ENAINT) != 0U) {
220                (void) x_enable_int(intno);
221        }
222}
詳しい使い方は TracBrowser を参照してください。