source: EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/mpcore.h@ 439

Last change on this file since 439 was 439, checked in by coas-nagasima, 4 years ago

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 8.0 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2006-2018 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17 * の無保証規定を掲載すること.
18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20 * と.
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24 * 報告すること.
25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29 * 免責すること.
30 *
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35 * の責任を負わない.
36 *
37 * $Id$
38 */
39
40/*
41 * MPCoreサポートモジュール
42 */
43
44#ifndef TOPPERS_MPCORE_H
45#define TOPPERS_MPCORE_H
46
47#include <sil.h>
48#include "arm.h"
49
50/*
51 * CP15の補助制御レジスタ(ACTLR)の設定値
52 */
53#if __TARGET_ARCH_ARM == 6
54#define CP15_ACTLR_SMP UINT_C(0x00000020)
55#else /* __TARGET_ARCH_ARM == 6 */
56#define CP15_ACTLR_SMP UINT_C(0x00000040)
57#endif /* __TARGET_ARCH_ARM == 6 */
58
59/*
60 * SCU(スヌープ制御ユニット)関連の定義
61 */
62
63/*
64 * SCUレジスタの番地の定義
65 */
66#define MPCORE_SCU_BASE (MPCORE_PMR_BASE + 0x0000U)
67#define MPCORE_SCU_CTRL ((uint32_t *)(MPCORE_SCU_BASE + 0x00U))
68#define MPCORE_SCU_CONFIG ((uint32_t *)(MPCORE_SCU_BASE + 0x04U))
69#define MPCORE_SCU_CPUSTAT ((uint32_t *)(MPCORE_SCU_BASE + 0x08U))
70#define MPCORE_SCU_INVALL ((uint32_t *)(MPCORE_SCU_BASE + 0x0cU))
71
72/*
73 * SCU制御レジスタ(MPCORE_SCU_CTRL)の設定値
74 */
75#define MPCORE_SCU_CTRL_ENABLE UINT_C(0x00000001)
76
77/*
78 * SCUパワーステータスレジスタ(MPCORE_SCU_CPUSTAT)の設定値
79 */
80#define MPCORE_SCU_CPUSTAT_ALLNORMAL UINT_C(0x00000000)
81
82/*
83 * SCUインバリデートオールレジスタ(MPCORE_SCU_INVALL)の設定値
84 */
85#define MPCORE_SCU_INVALL_ALLWAYS UINT_C(0x0000ffff)
86
87/*
88 * GIC関連の定義
89 */
90
91/*
92 * GICレジスタのベースアドレスの定義
93 */
94#ifndef GICC_BASE
95#define GICC_BASE (MPCORE_PMR_BASE + UINT_C(0x0100))
96#endif /* GICC_BASE */
97
98#ifndef GICD_BASE
99#define GICD_BASE (MPCORE_PMR_BASE + UINT_C(0x1000))
100#endif /* GICD_BASE */
101
102/*
103 * 割込み番号の定義
104 */
105#define MPCORE_IRQNO_GTC 27U /* グローバルタイマの割込み番号 */
106#define MPCORE_IRQNO_TMR 29U /* プライベートタイマの割込み番号 */
107#define MPCORE_IRQNO_WDG 30U /* ウォッチドッグの割込み番号 */
108
109/*
110 * プライベートタイマとウォッチドッグ関連の定義
111 */
112
113/*
114 * プライベートタイマとウォッチドッグレジスタの番地の定義
115 */
116#define MPCORE_TMR_BASE (MPCORE_PMR_BASE + 0x0600U)
117#define MPCORE_TMR_LR ((uint32_t *)(MPCORE_TMR_BASE + 0x00U))
118#define MPCORE_TMR_CNT ((uint32_t *)(MPCORE_TMR_BASE + 0x04U))
119#define MPCORE_TMR_CTRL ((uint32_t *)(MPCORE_TMR_BASE + 0x08U))
120#define MPCORE_TMR_ISR ((uint32_t *)(MPCORE_TMR_BASE + 0x0cU))
121#define MPCORE_WDG_LR ((uint32_t *)(MPCORE_TMR_BASE + 0x20U))
122#define MPCORE_WDG_CNT ((uint32_t *)(MPCORE_TMR_BASE + 0x24U))
123#define MPCORE_WDG_CTRL ((uint32_t *)(MPCORE_TMR_BASE + 0x28U))
124#define MPCORE_WDG_ISR ((uint32_t *)(MPCORE_TMR_BASE + 0x2cU))
125#define MPCORE_WDG_RST ((uint32_t *)(MPCORE_TMR_BASE + 0x30U))
126#define MPCORE_WDG_DIS ((uint32_t *)(MPCORE_TMR_BASE + 0x34U))
127
128/*
129 * プライベートタイマ制御レジスタ(MPCORE_TMR_CTRL)の設定値
130 */
131#define MPCORE_TMR_CTRL_DISABLE 0x00U
132#define MPCORE_TMR_CTRL_ENABLE 0x01U
133#define MPCORE_TMR_CTRL_AUTORELOAD 0x02U
134#define MPCORE_TMR_CTRL_ENAINT 0x04U
135#define MPCORE_TMR_CTRL_PS_SHIFT 8
136
137/*
138 * プライベートタイマ割込みステータスレジスタ(MPCORE_TMR_ISR)の設定値
139 */
140#define MPCORE_TMR_ISR_EVENTFLAG 0x01U
141
142/*
143 * ウォッチドッグ制御レジスタ(MPCORE_WDG_CTRL)の参照値
144 */
145#define MPCORE_WDG_CTRL_DISABLE 0x00U
146#define MPCORE_WDG_CTRL_ENABLE 0x01U
147#define MPCORE_WDG_CTRL_AUTORELOAD 0x02U
148#define MPCORE_WDG_CTRL_ENAINT 0x04U
149#define MPCORE_WDG_CTRL_WDGMODE 0x08U
150#define MPCORE_WDG_CTRL_PS_SHIFT 8
151
152/*
153 * ウォッチドッグ割込みステータスレジスタ(MPCORE_WDG_ISR)の参照値
154 */
155#define MPCORE_WDG_ISR_EVENTFLAG 0x01U
156
157/*
158 * グローバルタイマ関連の定義
159 */
160#if __TARGET_ARCH_ARM == 7
161
162/*
163 * グローバルタイマレジスタの番地の定義
164 */
165#define MPCORE_GTC_BASE (MPCORE_PMR_BASE + 0x0200U)
166#define MPCORE_GTC_COUNT_L ((uint32_t *)(MPCORE_GTC_BASE + 0x00U))
167#define MPCORE_GTC_COUNT_U ((uint32_t *)(MPCORE_GTC_BASE + 0x04U))
168#define MPCORE_GTC_CTRL ((uint32_t *)(MPCORE_GTC_BASE + 0x08U))
169#define MPCORE_GTC_ISR ((uint32_t *)(MPCORE_GTC_BASE + 0x0cU))
170#define MPCORE_GTC_CVR_L ((uint32_t *)(MPCORE_GTC_BASE + 0x10U))
171#define MPCORE_GTC_CVR_U ((uint32_t *)(MPCORE_GTC_BASE + 0x14U))
172#define MPCORE_GTC_AUTOINCR ((uint32_t *)(MPCORE_GTC_BASE + 0x18U))
173
174/*
175 * グローバルタイマ制御レジスタ(MPCORE_GTC_CTRL)の設定値
176 */
177#define MPCORE_GTC_CTRL_DISABLE 0x00U
178#define MPCORE_GTC_CTRL_ENABLE 0x01U
179#define MPCORE_GTC_CTRL_ENACOMP 0x02U
180#define MPCORE_GTC_CTRL_ENAINT 0x04U
181#define MPCORE_GTC_CTRL_AUTOINCR 0x08U
182#define MPCORE_GTC_CTRL_PS_SHIFT 8
183
184/*
185 * グローバルタイマ割込みステータスレジスタ(MPCORE_GTC_ISR)の設定値
186 */
187#define MPCORE_GTC_ISR_EVENTFLAG 0x01U
188
189#endif /* __TARGET_ARCH_ARM == 7 */
190
191#ifndef TOPPERS_MACRO_ONLY
192
193/*
194 * SMPモードに設定
195 */
196Inline void
197mpcore_enable_smp(void)
198{
199 uint32_t reg;
200
201 CP15_READ_ACTLR(reg);
202 reg |= CP15_ACTLR_SMP;
203 CP15_WRITE_ACTLR(reg);
204}
205
206/*
207 * SCU(スヌープ制御ユニット)の操作
208 */
209
210/*
211 * SCUのイネーブル
212 */
213Inline void
214mpcore_enable_scu(void)
215{
216 uint32_t reg;
217
218 /*
219 * すべてのプロセッサをノーマルモードにする.
220 */
221 sil_wrw_mem(MPCORE_SCU_CPUSTAT, MPCORE_SCU_CPUSTAT_ALLNORMAL);
222
223 /*
224 * SCUのすべてのタグを無効化する.
225 */
226 sil_wrw_mem(MPCORE_SCU_INVALL, MPCORE_SCU_INVALL_ALLWAYS);
227
228 /*
229 * SCUを有効にする.
230 */
231 reg = sil_rew_mem(MPCORE_SCU_CTRL);
232 reg |= MPCORE_SCU_CTRL_ENABLE;
233 sil_wrw_mem(MPCORE_SCU_CTRL, reg);
234 data_sync_barrier();
235}
236
237#endif /* TOPPERS_MACRO_ONLY */
238#endif /* TOPPERS_MPCORE_H */
Note: See TracBrowser for help on using the repository browser.