source: ssp_rpi3/trunk/arch/arm64_gcc/bcm283x/bcm2837.h@ 386

Last change on this file since 386 was 386, checked in by nmir-saito, 5 years ago

modify svn:mimetype of files

  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/plain; charset=utf-8
File size: 8.1 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 * Copyright (C) 2018,2019 by Naoki Saito
8 * Nagoya Municipal Industrial Research Institute, JAPAN
9 *
10 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19 * の無保証規定を掲載すること.
20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22 * と.
23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26 * 報告すること.
27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31 * 免責すること.
32 *
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37 * の責任を負わない.
38 *
39 * $Id: bcm2837.h 386 2019-04-17 03:13:00Z nmir-saito $
40 */
41#ifndef TOPPERS_BCM2837_H
42#define TOPPERS_BCM2837_H
43
44#include <sil.h>
45
46/*
47 * 割込み番号(intno)の定義
48 */
49// Core interrupts
50#define TINTNO_CNTPS 0 // CNTPSIRQ
51#define TINTNO_CNTPNS 1 // CNTPNSIRQ
52#define TINTNO_CNTHP 2 // CNTHPIRQ
53#define TINTNO_CNTV 3 // CNTVIRQ
54#define TINTNO_MBOX0 4 // Mailbox 0
55#define TINTNO_MBOX1 5 // Mailbox 1
56#define TINTNO_MBOX2 6 // Mailbox 2
57#define TINTNO_MBOX3 7 // Mailbox 3
58#define TINTNO_PMU 9 // PMU
59#define TINTNO_AXI 10 // AXI-outstanding
60#define TINTNO_LTIMER 11 // Local timer
61
62// Basic interrupts
63#define TINTNO_ARMTIMER 32 // ARM timer
64#define TINTNO_MBOX 33 // ARM mailbox
65#define TINTNO_ARMDRBELL0 34 // ARM doorbell 0
66#define TINTNO_ARMDRBELL1 35 // ARM doorbell 1
67#define TINTNO_GPU0HALTED 36 // GPU0 halted
68#define TINTNO_GPU1HALTED 37 // GPU1 halted
69#define TINTNO_ILACSS0 38 // Illegal access type 1
70#define TINTNO_ILACSS1 39 // Illegal access type 0
71
72// GPU0 interrupts
73#define TINTNO_AUX 93 // Aux
74
75// GPU1 interrupts
76#define TINTNO_I2CSPISLV 107
77#define TINTNO_PWA0 109
78#define TINTNO_PWA1 110
79#define TINTNO_SMI 112
80#define TINTNO_GPIO0 113
81#define TINTNO_GPIO1 114
82#define TINTNO_GPIO2 115
83#define TINTNO_GPIO3 116
84#define TINTNO_I2C 117
85#define TINTNO_SPI 118
86#define TINTNO_PCM 119
87#define TINTNO_UART 121
88
89
90/*
91 * 割込み番号の最小値と最大値
92 */
93#define TMIN_INTNO UINT_C(0)
94#define TMAX_INTNO UINT_C(127)
95
96/*
97 * メモリマップドI/Oのベースアドレス
98 */
99#define MMIO_BASE 0x3F000000
100
101/*
102 * 割込み関連レジスタ
103 */
104#define IRQ_PEND_B 0x3f00b200
105#define IRQ_PEND_1 0x3f00b204
106#define IRQ_PEND_2 0x3f00b208
107#define ENABLE_IRQ_1 0x3f00b210
108#define ENABLE_IRQ_2 0x3f00b214
109#define ENABLE_IRQ_B 0x3f00b218
110#define DISABLE_IRQ_1 0x3f00b21C
111#define DISABLE_IRQ_2 0x3f00b220
112#define DISABLE_IRQ_B 0x3f00b224
113
114#define CORE0_IRQ_SRC 0x40000060
115
116
117/*
118 * GPIO
119 */
120#define GPFSEL0 (MMIO_BASE+0x00200000)
121#define GPFSEL1 (MMIO_BASE+0x00200004)
122#define GPFSEL2 (MMIO_BASE+0x00200008)
123#define GPFSEL3 (MMIO_BASE+0x0020000C)
124#define GPFSEL4 (MMIO_BASE+0x00200010)
125#define GPFSEL5 (MMIO_BASE+0x00200014)
126#define GPSET0 (MMIO_BASE+0x0020001C)
127#define GPSET1 (MMIO_BASE+0x00200020)
128#define GPCLR0 (MMIO_BASE+0x00200028)
129#define GPLEV0 (MMIO_BASE+0x00200034)
130#define GPLEV1 (MMIO_BASE+0x00200038)
131#define GPEDS0 (MMIO_BASE+0x00200040)
132#define GPEDS1 (MMIO_BASE+0x00200044)
133#define GPHEN0 (MMIO_BASE+0x00200064)
134#define GPHEN1 (MMIO_BASE+0x00200068)
135#define GPPUD (MMIO_BASE+0x00200094)
136#define GPPUDCLK0 (MMIO_BASE+0x00200098)
137#define GPPUDCLK1 (MMIO_BASE+0x0020009C)
138
139
140/*
141 * UARTレジスタのベースアドレス
142 */
143#define RPI_UART0_BASE (MMIO_BASE + 0x00201000)
144
145/*
146 * ボーレート設定
147 */
148#define RPI_UART_IBRD_38400 0x27U // 38400bps
149#define RPI_UART_FBRD_38400 0x04U
150#define RPI_UART_IBRD_115200 0x2U // 115200bps
151#define RPI_UART_FBRD_115200 0xbU
152
153/*
154 * メールボックス関連
155 * https://github.com/raspberrypi/firmware/wiki/Mailbox-property-interface
156 */
157#define VIDEOCORE_MBOX (MMIO_BASE+0x0000B880)
158
159#define MBOX_READ (VIDEOCORE_MBOX+0x0)
160#define MBOX_POLL (VIDEOCORE_MBOX+0x10)
161#define MBOX_SENDER (VIDEOCORE_MBOX+0x14)
162#define MBOX_STATUS (VIDEOCORE_MBOX+0x18)
163#define MBOX_CONFIG (VIDEOCORE_MBOX+0x1C)
164#define MBOX_WRITE (VIDEOCORE_MBOX+0x20)
165#define MBOX_RESPONSE 0x80000000
166#define MBOX_FULL 0x80000000
167#define MBOX_EMPTY 0x40000000
168
169#define MBOX_REQUEST 0
170
171/* チャネル */
172#define MBOX_CH_POWER 0
173#define MBOX_CH_FB 1
174#define MBOX_CH_VUART 2
175#define MBOX_CH_VCHIQ 3
176#define MBOX_CH_LEDS 4
177#define MBOX_CH_BTNS 5
178#define MBOX_CH_TOUCH 6
179#define MBOX_CH_COUNT 7
180#define MBOX_CH_PROP 8
181
182/* tags */
183#define MBOX_TAG_GETSERIAL 0x10004
184#define MBOX_TAG_LAST 0
185
186#define MBOX_REQUEST 0
187
188/* channels */
189#define MBOX_CH_POWER 0
190#define MBOX_CH_FB 1
191#define MBOX_CH_VUART 2
192#define MBOX_CH_VCHIQ 3
193#define MBOX_CH_LEDS 4
194#define MBOX_CH_BTNS 5
195#define MBOX_CH_TOUCH 6
196#define MBOX_CH_COUNT 7
197#define MBOX_CH_PROP 8
198
199/* tags */
200#define MBOX_TAG_GETSERIAL 0x10004
201#define MBOX_TAG_SETCLKRATE 0x38002
202#define MBOX_TAG_LAST 0
203
204#ifndef TOPPERS_MACRO_ONLY
205
206/*
207 * mailbox 呼び出し
208 * 注意:第2引数のアドレスは16バイトアライメントであること
209 */
210Inline int_t mbox_call(unsigned char ch, volatile uint32_t *mbox)
211{
212 uint32_t r = (((uint32_t)((uint64_t)mbox) & ~0xF) | (ch & 0xF));
213
214 // 使えるようになるまで待つ
215 do{
216 Asm("nop");
217 } while(sil_rew_mem((uint32_t *)MBOX_STATUS) & MBOX_FULL);
218
219 // チャネルの識別子を付加してメッセージのアドレスを書き込み
220 sil_wrw_mem((uint32_t *)MBOX_WRITE , r);
221
222 while(1) {
223 // 応答があるまで待つ
224 do{
225 Asm("nop");
226 } while(sil_rew_mem((uint32_t *)MBOX_STATUS) & MBOX_EMPTY);
227
228 if(r == sil_rew_mem((uint32_t *)MBOX_READ))
229 return mbox[1] == MBOX_RESPONSE;
230 }
231 return 0;
232}
233
234#endif /* TOPPERS_MACRO_ONLY */
235#endif /* TOPPERS_BCM2837_H */
Note: See TracBrowser for help on using the repository browser.