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

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

add target dependent files of ssp for rpi3

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