source: atk2-sc3_fl850f1l/target/fl850f1l_gcc/target_config.c@ 117

Last change on this file since 117 was 117, checked in by ertl-ishikawa, 9 years ago

ATK2-SC3 1.3.2 FL850F1L(RH850F1L)依存部(GCC/GHS/CCRH)を追加

File size: 7.3 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2012-2014 by Center for Embedded Computing Systems
7 * Graduate School of Information Science, Nagoya Univ., JAPAN
8 * Copyright (C) 2012-2014 by FUJI SOFT INCORPORATED, JAPAN
9 * Copyright (C) 2012-2013 by Spansion LLC, USA
10 * Copyright (C) 2012-2013 by NEC Communication Systems, Ltd., JAPAN
11 * Copyright (C) 2012-2014 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
12 * Copyright (C) 2012-2014 by Renesas Electronics Corporation, JAPAN
13 * Copyright (C) 2012-2014 by Sunny Giken Inc., JAPAN
14 * Copyright (C) 2012-2014 by TOSHIBA CORPORATION, JAPAN
15 * Copyright (C) 2012-2014 by Witz Corporation, JAPAN
16 *
17 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
18 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
19 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
20 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
21 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
22 * スコード中に含まれていること.
23 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
24 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
25 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
29 * と.
30 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
31 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
32 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
33 * 報告すること.
34 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
35 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
36 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
37 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
38 * 免責すること.
39 *
40 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
41 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
42 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
43 * 用する者に対して,AUTOSARパートナーになることを求めている.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
47 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
48 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
49 * の責任を負わない.
50 *
51 * $Id: target_config.c 164 2015-06-03 01:22:29Z t_ishikawa $
52 */
53
54/*
55 * ターゲット依存モジュール(FL-850/F1L用)
56 */
57
58#include "kernel_impl.h"
59#include "v850_gcc/uart_rlin.h"
60#include "v850_gcc/prc_sil.h"
61#include "target_sysmod.h"
62#ifdef ENABLE_RETURN_MAIN
63#include "interrupt.h"
64#endif /* ENABLE_RETURN_MAIN */
65#ifdef TOPPERS_ENABLE_TRACE
66#include "logtrace/trace_config.h"
67#endif /* TOPPERS_ENABLE_TRACE */
68
69/*
70 * 文字列の出力
71 */
72void
73target_fput_str(const char8 *c)
74{
75 while (*c != '\0') {
76 uart_putc(*c);
77 c++;
78 }
79 uart_putc('\n');
80}
81
82void
83fl850_led_output(uint8 pattern)
84{
85 uint16 wk;
86
87 pattern = ~pattern;
88 wk = sil_reh_mem((void *) P(8));
89 wk &= ~LED_P8_MASK;
90 wk |= (pattern & LED_P8_MASK);
91 sil_wrh_mem((void *) P(8), wk);
92}
93
94/*
95 * ポートの初期設定
96 */
97void
98target_port_initialize(void)
99{
100 uint16 wk;
101
102 /*
103 * PORT8(LED)
104 */
105 /* PM8 設定 */
106 wk = sil_reh_mem((void *) PM(8));
107 wk &= ~LED_P8_MASK;
108 wk |= (LED_PM8_INIT & LED_P8_MASK);
109 sil_wrh_mem((void *) PM(8), wk);
110
111 /* P8 設定 */
112 wk = sil_reh_mem((void *) P(8));
113 wk &= ~LED_P8_MASK;
114 wk |= (LED_P8_INIT & LED_P8_MASK);
115 sil_wrh_mem((void *) P(8), wk);
116
117#ifndef _PIN_100_
118 /*
119 * PORT1(RLIN35)
120 */
121 /* PFC1 設定 */
122 wk = sil_reh_mem((void *) PFC(1));
123 wk &= ~RLIN35_P1_MASK;
124 wk |= (RLIN35_PFC1_INIT & RLIN35_P1_MASK);
125 sil_wrh_mem((void *) PFC(1), wk);
126
127 /* PMC1 設定 */
128 wk = sil_reh_mem((void *) PMC(1));
129 wk &= ~RLIN35_P1_MASK;
130 wk |= (RLIN35_PMC1_INIT & RLIN35_P1_MASK);
131 sil_wrh_mem((void *) PMC(1), wk);
132
133 /* PM1 設定 */
134 wk = sil_reh_mem((void *) PM(1));
135 wk &= ~RLIN35_P1_MASK;
136 wk |= (RLIN35_PM1_INIT & RLIN35_P1_MASK);
137 sil_wrh_mem((void *) PM(1), wk);
138
139 /* PIBC1 設定 */
140 wk = sil_reh_mem((void *) PIBC(1));
141 wk &= ~RLIN35_P1_MASK;
142 wk |= (RLIN35_PIBC1_INIT & RLIN35_P1_MASK);
143 sil_wrh_mem((void *) PIBC(1), wk);
144
145#else /* _PIN_100_ */
146
147 /*
148 * PORT0(RLIN32)
149 */
150 /* PFCAE0 設定 */
151 wk = sil_reh_mem((void *) PFCAE(0));
152 wk &= ~RLIN32_P0_MASK;
153 wk |= (RLIN32_PFCAE0_INIT & RLIN32_P0_MASK);
154 sil_wrh_mem((void *) PFCAE(0), wk);
155
156 /* PFCE0 設定 */
157 wk = sil_reh_mem((void *) PFCE(0));
158 wk &= ~RLIN32_P0_MASK;
159 wk |= (RLIN32_PFCE0_INIT & RLIN32_P0_MASK);
160 sil_wrh_mem((void *) PFCE(0), wk);
161
162 /* PFC0 設定 */
163 wk = sil_reh_mem((void *) PFC(0));
164 wk &= ~RLIN32_P0_MASK;
165 wk |= (RLIN32_PFC0_INIT & RLIN32_P0_MASK);
166 sil_wrh_mem((void *) PFC(0), wk);
167
168 /* PMC0 設定 */
169 wk = sil_reh_mem((void *) PMC(0));
170 wk &= ~RLIN32_P0_MASK;
171 wk |= (RLIN32_PMC0_INIT & RLIN32_P0_MASK);
172 sil_wrh_mem((void *) PMC(0), wk);
173
174 /* PM0 設定 */
175 wk = sil_reh_mem((void *) PM(0));
176 wk &= ~RLIN32_P0_MASK;
177 wk |= (RLIN32_PM0_INIT & RLIN32_P0_MASK);
178 sil_wrh_mem((void *) PM(0), wk);
179
180 /* PIBC0 設定 */
181 wk = sil_reh_mem((void *) PIBC(0));
182 wk &= ~RLIN32_P0_MASK;
183 wk |= (RLIN32_PIBC0_INIT & RLIN32_P0_MASK);
184 sil_wrh_mem((void *) PIBC(0), wk);
185
186#endif /* _PIN_100_ */
187}
188
189/*
190 * クロック関係の初期化
191 */
192void
193target_clock_initialize(void)
194{
195 uint32 errcnt = 0;
196
197 /* Init Main Clock */
198 if (EnableMainOSC(MHz(MAINOSC_CLOCK_MHZ)) != UC_SUCCESS) {
199 errcnt++;
200 }
201
202 /* Init PLL */
203 if (EnablePLL() != UC_SUCCESS) {
204 errcnt++;
205 }
206
207 /* Set CPU Clock */
208 if (SetClockSelection(CKSC_CPUCLKS_CTL, CKSC_CPUCLKS_ACT,
209 PNO_CtrlProt1, 0x03, /* 80MHz f_CPUCLK */
210 CKSC_CPUCLKD_CTL, CKSC_CPUCLKD_ACT,
211 0x01) != UC_SUCCESS) {
212 errcnt++;
213 }
214
215 if (errcnt > 0) {
216 infinite_loop();
217 }
218}
219
220/*
221 * ターゲット依存のハードウェアの初期化
222 * スターアップルーチンから呼び出される.
223 */
224void
225target_hardware_initialize(void)
226{
227 /* クロックの初期設定 */
228 target_clock_initialize();
229
230 /* ポートの初期設定 */
231 target_port_initialize();
232}
233
234/*
235 * ターゲット依存の初期化
236 */
237void
238target_initialize(void)
239{
240 /*
241 * V850依存の初期化
242 */
243 prc_initialize();
244
245
246
247#ifdef TOPPERS_ENABLE_TRACE
248 /*
249 * トレースログ機能の初期化
250 */
251 trace_initialize((uintptr) (TRACE_AUTOSTOP));
252#endif /* TOPPERS_ENABLE_TRACE */
253}
254
255/*
256 * ターゲット依存の終了処理
257 */
258void
259target_exit(void)
260{
261#ifdef TOPPERS_ENABLE_TRACE
262 /*
263 * トレースログのダンプ
264 */
265 trace_dump(target_fput_log);
266#endif /* TOPPERS_ENABLE_TRACE */
267
268#ifndef ENABLE_RETURN_MAIN
269 /*
270 * シャットダウン処理の出力
271 */
272 target_fput_str("Kernel Exit...");
273#else
274 target_fput_str("Kernel Shutdown...");
275#endif /* ENABLE_RETURN_MAIN */
276
277 /*
278 * FL-850/F1L依存の終了処理
279 */
280 prc_terminate();
281
282#ifdef ENABLE_RETURN_MAIN
283 p_ctxosap = NULL;
284 kerflg = FALSE;
285 except_nest_cnt = 0U;
286 nested_lock_os_int_cnt = 0U;
287 hook_savedsp = 0U;
288 shutdown_hook_savedsp = 0U;
289 sus_all_cnt = 0U;
290 sus_all_cnt_ctx = 0U;
291 sus_os_cnt = 0U;
292 sus_os_cnt_ctx = 0U;
293
294 /* スタックポインタの初期化とmain()の呼び出し */
295 return_main();
296#endif /* ENABLE_RETURN_MAIN */
297
298 infinite_loop();
299}
300
301/*
302 * ターゲット依存の文字出力
303 */
304void
305target_fput_log(char8 c)
306{
307 if (c == '\n') {
308 uart_putc('\r');
309 }
310 uart_putc(c);
311}
Note: See TracBrowser for help on using the repository browser.