source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/arch/arm_gcc/mpcore/mpcore.h@ 352

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

arm向けASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-chdr;charset=UTF-8
File size: 7.2 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2006-2015 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制御レジスタ(SCU_CTRL)の設定値
74 */
75#define MPCORE_SCU_CTRL_ENABLE UINT_C(0x00000001)
76
77/*
78 * SCUインバリデートオールレジスタ(SCU_INVALL)の設定値
79 */
80#define MPCORE_SCU_INVALL_ALLWAYS UINT_C(0x0000ffff)
81
82/*
83 * GIC関連の定義
84 */
85
86/*
87 * GICレジスタのベースアドレスの定義
88 */
89#define GICC_BASE (MPCORE_PMR_BASE + UINT_C(0x0100))
90#define GICD_BASE (MPCORE_PMR_BASE + UINT_C(0x1000))
91
92/*
93 * プライベートタイマとウォッチドッグ関連の定義
94 */
95
96/*
97 * プライベートタイマとウォッチドッグの割込み番号
98 */
99#define MPCORE_IRQNO_TMR 29U /* プライベートタイマの割込み番号 */
100#define MPCORE_IRQNO_WDG 30U /* ウォッチドッグの割込み番号 */
101
102/*
103 * プライベートタイマとウォッチドッグレジスタの番地の定義
104 */
105#define MPCORE_TMR_BASE (MPCORE_PMR_BASE + 0x0600U)
106#define MPCORE_TMR_LR ((uint32_t *)(MPCORE_TMR_BASE + 0x00U))
107#define MPCORE_TMR_CNT ((uint32_t *)(MPCORE_TMR_BASE + 0x04U))
108#define MPCORE_TMR_CTRL ((uint32_t *)(MPCORE_TMR_BASE + 0x08U))
109#define MPCORE_TMR_ISR ((uint32_t *)(MPCORE_TMR_BASE + 0x0cU))
110#define MPCORE_WDG_LR ((uint32_t *)(MPCORE_TMR_BASE + 0x20U))
111#define MPCORE_WDG_CNT ((uint32_t *)(MPCORE_TMR_BASE + 0x24U))
112#define MPCORE_WDG_CTRL ((uint32_t *)(MPCORE_TMR_BASE + 0x28U))
113#define MPCORE_WDG_ISR ((uint32_t *)(MPCORE_TMR_BASE + 0x2cU))
114#define MPCORE_WDG_RST ((uint32_t *)(MPCORE_TMR_BASE + 0x30U))
115#define MPCORE_WDG_DIS ((uint32_t *)(MPCORE_TMR_BASE + 0x34U))
116
117/*
118 * プライベートタイマ制御レジスタ(MPCORE_TMR_CTRL)の設定値
119 */
120#define MPCORE_TMR_CTRL_DISABLE 0x00U
121#define MPCORE_TMR_CTRL_ENABLE 0x01U
122#define MPCORE_TMR_CTRL_AUTORELOAD 0x02U
123#define MPCORE_TMR_CTRL_ENAINT 0x04U
124#define MPCORE_TMR_CTRL_PS_SHIFT 8
125
126/*
127 * プライベートタイマ割込みステータスレジスタ(MPCORE_TMR_ISR)の設定値
128 */
129#define MPCORE_TMR_ISR_EVENTFLAG 0x01U
130
131/*
132 * ウォッチドッグ制御レジスタ(MPCORE_WDG_CTRL)の参照値
133 */
134#define MPCORE_WDG_CTRL_DISABLE 0x00U
135#define MPCORE_WDG_CTRL_ENABLE 0x01U
136#define MPCORE_WDG_CTRL_AUTORELOAD 0x02U
137#define MPCORE_WDG_CTRL_ENAINT 0x04U
138#define MPCORE_WDG_CTRL_WDGMODE 0x08U
139#define MPCORE_WDG_CTRL_PS_SHIFT 8
140
141/*
142 * ウォッチドッグ割込みステータスレジスタ(MPCORE_WDG_ISR)の参照値
143 */
144#define MPCORE_WDG_ISR_EVENTFLAG 0x01U
145
146/*
147 * グローバルタイマ関連の定義
148 */
149#if __TARGET_ARCH_ARM == 7
150
151/*
152 * グローバルタイマレジスタの番地の定義
153 */
154#define MPCORE_GTC_BASE (MPCORE_PMR_BASE + 0x0200U)
155#define MPCORE_GTC_COUNT_L ((uint32_t *)(MPCORE_GTC_BASE + 0x00U))
156#define MPCORE_GTC_COUNT_U ((uint32_t *)(MPCORE_GTC_BASE + 0x04U))
157#define MPCORE_GTC_CTRL ((uint32_t *)(MPCORE_GTC_BASE + 0x08U))
158#define MPCORE_GTC_ISR ((uint32_t *)(MPCORE_GTC_BASE + 0x0cU))
159#define MPCORE_GTC_CVR_L ((uint32_t *)(MPCORE_PMR_BASE + 0x10U))
160#define MPCORE_GTC_CVR_U ((uint32_t *)(MPCORE_PMR_BASE + 0x14U))
161
162/*
163 * グローバルタイマ制御レジスタ(MPCORE_GTC_CTRL)の設定値
164 */
165#define MPCORE_GTC_CTRL_ENABLE 0x01U
166
167#endif /* __TARGET_ARCH_ARM == 7 */
168
169#ifndef TOPPERS_MACRO_ONLY
170
171/*
172 * SMPモードに設定
173 */
174Inline void
175mpcore_enable_smp(void)
176{
177 uint32_t reg;
178
179 CP15_READ_ACTLR(reg);
180 reg |= CP15_ACTLR_SMP;
181 CP15_WRITE_ACTLR(reg);
182}
183
184/*
185 * SCU(スヌープ制御ユニット)の操作
186 */
187
188/*
189 * SCUのイネーブル
190 */
191Inline void
192mpcore_enable_scu(void)
193{
194 uint32_t reg;
195
196 /*
197 * SCUのすべてのタグを無効化する.
198 */
199 sil_wrw_mem(MPCORE_SCU_INVALL, MPCORE_SCU_INVALL_ALLWAYS);
200
201 /*
202 * SCUを有効にする.
203 */
204 reg = sil_rew_mem(MPCORE_SCU_CTRL);
205 reg |= MPCORE_SCU_CTRL_ENABLE;
206 sil_wrw_mem(MPCORE_SCU_CTRL, reg);
207 data_sync_barrier();
208}
209
210#endif /* TOPPERS_MACRO_ONLY */
211#endif /* TOPPERS_MPCORE_H */
Note: See TracBrowser for help on using the repository browser.