xref: /nrf52832-nimble/rt-thread/libcpu/mips/xburst/x1000.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * File      : x1000.h
3*10465441SEvalZero  * This file is part of RT-Thread RTOS
4*10465441SEvalZero  * COPYRIGHT (C) 2008 - 2012, RT-Thread Development Team
5*10465441SEvalZero  *
6*10465441SEvalZero  *  This program is free software; you can redistribute it and/or modify
7*10465441SEvalZero  *  it under the terms of the GNU General Public License as published by
8*10465441SEvalZero  *  the Free Software Foundation; either version 2 of the License, or
9*10465441SEvalZero  *  (at your option) any later version.
10*10465441SEvalZero  *
11*10465441SEvalZero  *  This program is distributed in the hope that it will be useful,
12*10465441SEvalZero  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
13*10465441SEvalZero  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14*10465441SEvalZero  *  GNU General Public License for more details.
15*10465441SEvalZero  *
16*10465441SEvalZero  *  You should have received a copy of the GNU General Public License along
17*10465441SEvalZero  *  with this program; if not, write to the Free Software Foundation, Inc.,
18*10465441SEvalZero  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*10465441SEvalZero  *
20*10465441SEvalZero  * Change Logs:
21*10465441SEvalZero  * Date           Author       Notes
22*10465441SEvalZero  * 2015-11-19     Urey         the first version
23*10465441SEvalZero  */
24*10465441SEvalZero 
25*10465441SEvalZero #ifndef X1000_H__
26*10465441SEvalZero #define X1000_H__
27*10465441SEvalZero 
28*10465441SEvalZero #ifndef __ASSEMBLY__
29*10465441SEvalZero 
30*10465441SEvalZero // typedef unsigned int size_t;
31*10465441SEvalZero #define u64 unsigned long long
32*10465441SEvalZero #define u32 unsigned int
33*10465441SEvalZero #define u16 unsigned short
34*10465441SEvalZero #define u8  unsigned char
35*10465441SEvalZero 
36*10465441SEvalZero #define U64 unsigned long long
37*10465441SEvalZero #define U32 unsigned int
38*10465441SEvalZero #define U16 unsigned short
39*10465441SEvalZero #define U8  unsigned char
40*10465441SEvalZero 
41*10465441SEvalZero #define S64 signed long long
42*10465441SEvalZero #define S32 int
43*10465441SEvalZero #define S16 short int
44*10465441SEvalZero #define S8  signed char
45*10465441SEvalZero 
46*10465441SEvalZero #define cache_unroll(base,op)               \
47*10465441SEvalZero     __asm__ __volatile__("                  \
48*10465441SEvalZero         .set noreorder;                     \
49*10465441SEvalZero         .set mips3;                         \
50*10465441SEvalZero         cache %1, (%0);                     \
51*10465441SEvalZero         .set mips0;                         \
52*10465441SEvalZero         .set reorder"                       \
53*10465441SEvalZero         :                                   \
54*10465441SEvalZero         : "r" (base),                       \
55*10465441SEvalZero           "i" (op));
56*10465441SEvalZero 
57*10465441SEvalZero /* cpu pipeline flush */
jz_sync(void)58*10465441SEvalZero static inline void jz_sync(void)
59*10465441SEvalZero {
60*10465441SEvalZero     __asm__ volatile ("sync");
61*10465441SEvalZero }
62*10465441SEvalZero 
writeb(u8 value,u32 address)63*10465441SEvalZero static inline void writeb(u8 value, u32 address)
64*10465441SEvalZero {
65*10465441SEvalZero     *((volatile u8 *) address) = value;
66*10465441SEvalZero }
writew(u16 value,u32 address)67*10465441SEvalZero static inline void writew( u16 value, u32 address)
68*10465441SEvalZero {
69*10465441SEvalZero     *((volatile u16 *) address) = value;
70*10465441SEvalZero }
writel(u32 value,u32 address)71*10465441SEvalZero static inline void writel(u32 value, u32 address)
72*10465441SEvalZero {
73*10465441SEvalZero     *((volatile u32 *) address) = value;
74*10465441SEvalZero }
75*10465441SEvalZero 
readb(u32 address)76*10465441SEvalZero static inline u8 readb(u32 address)
77*10465441SEvalZero {
78*10465441SEvalZero     return *((volatile u8 *)address);
79*10465441SEvalZero }
80*10465441SEvalZero 
readw(u32 address)81*10465441SEvalZero static inline u16 readw(u32 address)
82*10465441SEvalZero {
83*10465441SEvalZero     return *((volatile u16 *)address);
84*10465441SEvalZero }
85*10465441SEvalZero 
readl(u32 address)86*10465441SEvalZero static inline u32 readl(u32 address)
87*10465441SEvalZero {
88*10465441SEvalZero     return *((volatile u32 *)address);
89*10465441SEvalZero }
90*10465441SEvalZero 
jz_writeb(u32 address,u8 value)91*10465441SEvalZero static inline void jz_writeb(u32 address, u8 value)
92*10465441SEvalZero {
93*10465441SEvalZero     *((volatile u8 *)address) = value;
94*10465441SEvalZero }
95*10465441SEvalZero 
jz_writew(u32 address,u16 value)96*10465441SEvalZero static inline void jz_writew(u32 address, u16 value)
97*10465441SEvalZero {
98*10465441SEvalZero     *((volatile u16 *)address) = value;
99*10465441SEvalZero }
100*10465441SEvalZero 
jz_writel(u32 address,u32 value)101*10465441SEvalZero static inline void jz_writel(u32 address, u32 value)
102*10465441SEvalZero {
103*10465441SEvalZero     *((volatile u32 *)address) = value;
104*10465441SEvalZero }
105*10465441SEvalZero 
jz_readb(u32 address)106*10465441SEvalZero static inline u8 jz_readb(u32 address)
107*10465441SEvalZero {
108*10465441SEvalZero     return *((volatile u8 *)address);
109*10465441SEvalZero }
110*10465441SEvalZero 
jz_readw(u32 address)111*10465441SEvalZero static inline u16 jz_readw(u32 address)
112*10465441SEvalZero {
113*10465441SEvalZero     return *((volatile u16 *)address);
114*10465441SEvalZero }
115*10465441SEvalZero 
jz_readl(u32 address)116*10465441SEvalZero static inline u32 jz_readl(u32 address)
117*10465441SEvalZero {
118*10465441SEvalZero     return *((volatile u32 *)address);
119*10465441SEvalZero }
120*10465441SEvalZero 
121*10465441SEvalZero #define REG8(addr)      *((volatile u8 *)(addr))
122*10465441SEvalZero #define REG16(addr)     *((volatile u16 *)(addr))
123*10465441SEvalZero #define REG32(addr)     *((volatile u32 *)(addr))
124*10465441SEvalZero 
125*10465441SEvalZero #define BIT(n)          (0x01u << (n))
126*10465441SEvalZero 
127*10465441SEvalZero #else
128*10465441SEvalZero 
129*10465441SEvalZero #define REG8(addr)  (addr)
130*10465441SEvalZero #define REG16(addr) (addr)
131*10465441SEvalZero #define REG32(addr) (addr)
132*10465441SEvalZero 
133*10465441SEvalZero #endif /* !ASSEMBLY */
134*10465441SEvalZero 
135*10465441SEvalZero 
136*10465441SEvalZero //----------------------------------------------------------------------
137*10465441SEvalZero // Register Definitions
138*10465441SEvalZero //
139*10465441SEvalZero /* AHB0 BUS Devices Base */
140*10465441SEvalZero #define HARB0_BASE  0xB3000000
141*10465441SEvalZero #define EMC_BASE    0xB3010000
142*10465441SEvalZero #define DDRC_BASE   0xB3020000
143*10465441SEvalZero #define MDMAC_BASE  0xB3030000
144*10465441SEvalZero #define LCD_BASE    0xB3050000
145*10465441SEvalZero #define TVE_BASE    0xB3050000
146*10465441SEvalZero #define SLCD_BASE   0xB3050000
147*10465441SEvalZero #define CIM_BASE    0xB3060000
148*10465441SEvalZero #define IPU_BASE    0xB3080000
149*10465441SEvalZero /* AHB1 BUS Devices Base */
150*10465441SEvalZero #define HARB1_BASE  0xB3200000
151*10465441SEvalZero #define DMAGP0_BASE 0xB3210000
152*10465441SEvalZero #define DMAGP1_BASE 0xB3220000
153*10465441SEvalZero #define DMAGP2_BASE 0xB3230000
154*10465441SEvalZero #define MC_BASE     0xB3250000
155*10465441SEvalZero #define ME_BASE     0xB3260000
156*10465441SEvalZero #define DEBLK_BASE  0xB3270000
157*10465441SEvalZero #define IDCT_BASE   0xB3280000
158*10465441SEvalZero #define CABAC_BASE  0xB3290000
159*10465441SEvalZero #define TCSM0_BASE  0xB32B0000
160*10465441SEvalZero #define TCSM1_BASE  0xB32C0000
161*10465441SEvalZero #define SRAM_BASE   0xB32D0000
162*10465441SEvalZero /* AHB2 BUS Devices Base */
163*10465441SEvalZero #define HARB2_BASE  0xB3400000
164*10465441SEvalZero #define NEMC_BASE   0xB3410000
165*10465441SEvalZero #define DMAC_BASE   0xB3420000
166*10465441SEvalZero #define UHC_BASE    0xB3430000
167*10465441SEvalZero #define UDC_BASE    0xB3440000
168*10465441SEvalZero #define GPS_BASE    0xB3480000
169*10465441SEvalZero #define ETHC_BASE   0xB34B0000
170*10465441SEvalZero #define BCH_BASE    0xB34D0000
171*10465441SEvalZero #define MSC0_BASE   0xB3450000
172*10465441SEvalZero #define MSC1_BASE   0xB3460000
173*10465441SEvalZero #define MSC2_BASE   0xB3470000
174*10465441SEvalZero 
175*10465441SEvalZero /* APB BUS Devices Base */
176*10465441SEvalZero #define CPM_BASE    0xB0000000
177*10465441SEvalZero #define INTC_BASE   0xB0001000
178*10465441SEvalZero #define TCU_BASE    0xB0002000
179*10465441SEvalZero #define WDT_BASE    0xB0002000
180*10465441SEvalZero #define OST_BASE    0xB2000000      /* OS Timer */
181*10465441SEvalZero #define RTC_BASE    0xB0003000
182*10465441SEvalZero #define GPIO_BASE   0xB0010000
183*10465441SEvalZero #define AIC_BASE    0xB0020000
184*10465441SEvalZero #define DMIC_BASE   0xB0021000
185*10465441SEvalZero #define ICDC_BASE   0xB0020000
186*10465441SEvalZero #define UART0_BASE  0xB0030000
187*10465441SEvalZero #define UART1_BASE  0xB0031000
188*10465441SEvalZero #define UART2_BASE  0xB0032000
189*10465441SEvalZero #define UART3_BASE  0xB0033000
190*10465441SEvalZero #define SCC_BASE    0xB0040000
191*10465441SEvalZero #define SSI0_BASE   0xB0043000
192*10465441SEvalZero #define SSI1_BASE   0xB0044000
193*10465441SEvalZero #define SSI2_BASE   0xB0045000
194*10465441SEvalZero #define I2C0_BASE   0xB0050000
195*10465441SEvalZero #define I2C1_BASE   0xB0051000
196*10465441SEvalZero #define PS2_BASE    0xB0060000
197*10465441SEvalZero #define SADC_BASE   0xB0070000
198*10465441SEvalZero #define OWI_BASE    0xB0072000
199*10465441SEvalZero #define TSSI_BASE   0xB0073000
200*10465441SEvalZero 
201*10465441SEvalZero /* NAND CHIP Base Address*/
202*10465441SEvalZero #define NEMC_CS1_IOBASE 0Xbb000000
203*10465441SEvalZero #define NEMC_CS2_IOBASE 0Xba000000
204*10465441SEvalZero #define NEMC_CS3_IOBASE 0Xb9000000
205*10465441SEvalZero #define NEMC_CS4_IOBASE 0Xb8000000
206*10465441SEvalZero #define NEMC_CS5_IOBASE 0Xb7000000
207*10465441SEvalZero #define NEMC_CS6_IOBASE 0Xb6000000
208*10465441SEvalZero 
209*10465441SEvalZero /*********************************************************************************************************
210*10465441SEvalZero **   WDT
211*10465441SEvalZero *********************************************************************************************************/
212*10465441SEvalZero #define WDT_TDR         (WDT_BASE + 0x00)
213*10465441SEvalZero #define WDT_TCER        (WDT_BASE + 0x04)
214*10465441SEvalZero #define WDT_TCNT        (WDT_BASE + 0x08)
215*10465441SEvalZero #define WDT_TCSR        (WDT_BASE + 0x0C)
216*10465441SEvalZero 
217*10465441SEvalZero #define REG_WDT_TDR     REG16(WDT_TDR)
218*10465441SEvalZero #define REG_WDT_TCER    REG8(WDT_TCER)
219*10465441SEvalZero #define REG_WDT_TCNT    REG16(WDT_TCNT)
220*10465441SEvalZero #define REG_WDT_TCSR    REG16(WDT_TCSR)
221*10465441SEvalZero 
222*10465441SEvalZero #define WDT_TSCR_WDTSC          (1 << 16)
223*10465441SEvalZero 
224*10465441SEvalZero #define WDT_TCSR_PRESCALE_1         (0 << 3)
225*10465441SEvalZero #define WDT_TCSR_PRESCALE_4         (1 << 3)
226*10465441SEvalZero #define WDT_TCSR_PRESCALE_16        (2 << 3)
227*10465441SEvalZero #define WDT_TCSR_PRESCALE_64        (3 << 3)
228*10465441SEvalZero #define WDT_TCSR_PRESCALE_256       (4 << 3)
229*10465441SEvalZero #define WDT_TCSR_PRESCALE_1024      (5 << 3)
230*10465441SEvalZero 
231*10465441SEvalZero #define WDT_TCSR_EXT_EN         (1 << 2)
232*10465441SEvalZero #define WDT_TCSR_RTC_EN         (1 << 1)
233*10465441SEvalZero #define WDT_TCSR_PCK_EN         (1 << 0)
234*10465441SEvalZero 
235*10465441SEvalZero #define WDT_TCER_TCEN           (1 << 0)
236*10465441SEvalZero 
237*10465441SEvalZero /*********************************************************************************************************
238*10465441SEvalZero **   �ж�Դ
239*10465441SEvalZero *********************************************************************************************************/
240*10465441SEvalZero /* INTC (Interrupt Controller) */
241*10465441SEvalZero #define INTC_ISR(n)             (INTC_BASE + 0x00 + (n) * 0x20)
242*10465441SEvalZero #define INTC_IMR(n)             (INTC_BASE + 0x04 + (n) * 0x20)
243*10465441SEvalZero #define INTC_IMSR(n)            (INTC_BASE + 0x08 + (n) * 0x20)
244*10465441SEvalZero #define INTC_IMCR(n)            (INTC_BASE + 0x0c + (n) * 0x20)
245*10465441SEvalZero #define INTC_IPR(n)             (INTC_BASE + 0x10 + (n) * 0x20)
246*10465441SEvalZero 
247*10465441SEvalZero #define REG_INTC_ISR(n)         REG32(INTC_ISR((n)))
248*10465441SEvalZero #define REG_INTC_IMR(n)         REG32(INTC_IMR((n)))
249*10465441SEvalZero #define REG_INTC_IMSR(n)        REG32(INTC_IMSR((n)))
250*10465441SEvalZero #define REG_INTC_IMCR(n)        REG32(INTC_IMCR((n)))
251*10465441SEvalZero #define REG_INTC_IPR(n)         REG32(INTC_IPR((n)))
252*10465441SEvalZero 
253*10465441SEvalZero // interrupt controller interrupts
254*10465441SEvalZero #define IRQ_DMIC                0
255*10465441SEvalZero #define IRQ_AIC0                1
256*10465441SEvalZero #define IRQ_RESERVED2           2
257*10465441SEvalZero #define IRQ_RESERVED3           3
258*10465441SEvalZero #define IRQ_RESERVED4           4
259*10465441SEvalZero #define IRQ_RESERVED5           5
260*10465441SEvalZero #define IRQ_RESERVED6           6
261*10465441SEvalZero #define IRQ_SFC                 7
262*10465441SEvalZero #define IRQ_SSI0                8
263*10465441SEvalZero #define IRQ_RESERVED9           9
264*10465441SEvalZero #define IRQ_PDMA                10
265*10465441SEvalZero #define IRQ_PDMAD               11
266*10465441SEvalZero #define IRQ_RESERVED12          12
267*10465441SEvalZero #define IRQ_RESERVED13          13
268*10465441SEvalZero #define IRQ_GPIO3               14
269*10465441SEvalZero #define IRQ_GPIO2               15
270*10465441SEvalZero #define IRQ_GPIO1               16
271*10465441SEvalZero #define IRQ_GPIO0               17
272*10465441SEvalZero #define IRQ_RESERVED18          18
273*10465441SEvalZero #define IRQ_RESERVED19          19
274*10465441SEvalZero #define IRQ_RESERVED20          20
275*10465441SEvalZero #define IRQ_OTG                 21
276*10465441SEvalZero #define IRQ_RESERVED22          22
277*10465441SEvalZero #define IRQ_AES                 23
278*10465441SEvalZero #define IRQ_RESERVED24          24
279*10465441SEvalZero #define IRQ_TCU2                25
280*10465441SEvalZero #define IRQ_TCU1                26
281*10465441SEvalZero #define IRQ_TCU0                27
282*10465441SEvalZero #define IRQ_RESERVED28          28
283*10465441SEvalZero #define IRQ_RESERVED29          29
284*10465441SEvalZero #define IRQ_CIM                 30
285*10465441SEvalZero #define IRQ_LCD                 31
286*10465441SEvalZero #define IRQ_RTC                 32
287*10465441SEvalZero #define IRQ_RESERVED33          33
288*10465441SEvalZero #define IRQ_RESERVED34          34
289*10465441SEvalZero #define IRQ_RESERVED35          35
290*10465441SEvalZero #define IRQ_MSC1                36
291*10465441SEvalZero #define IRQ_MSC0                37
292*10465441SEvalZero #define IRQ_SCC                 38
293*10465441SEvalZero #define IRQ_RESERVED39          39
294*10465441SEvalZero #define IRQ_PCM0                40
295*10465441SEvalZero #define IRQ_RESERVED41          41
296*10465441SEvalZero #define IRQ_RESERVED42          42
297*10465441SEvalZero #define IRQ_RESERVED43          43
298*10465441SEvalZero #define IRQ_HARB2               44
299*10465441SEvalZero #define IRQ_RESERVED45          45
300*10465441SEvalZero #define IRQ_HARB0               46
301*10465441SEvalZero #define IRQ_CPM                 47
302*10465441SEvalZero #define IRQ_RESERVED48          48
303*10465441SEvalZero #define IRQ_UART2               49
304*10465441SEvalZero #define IRQ_UART1               50
305*10465441SEvalZero #define IRQ_UART0               51
306*10465441SEvalZero #define IRQ_DDR                 52
307*10465441SEvalZero #define IRQ_RESERVED53          53
308*10465441SEvalZero #define IRQ_EFUSE               54
309*10465441SEvalZero #define IRQ_MAC                 55
310*10465441SEvalZero #define IRQ_RESERVED56          56
311*10465441SEvalZero #define IRQ_RESERVED57          57
312*10465441SEvalZero #define IRQ_I2C2                58
313*10465441SEvalZero #define IRQ_I2C1                59
314*10465441SEvalZero #define IRQ_I2C0                60
315*10465441SEvalZero #define IRQ_PDMAM               61
316*10465441SEvalZero #define IRQ_JPEG                62
317*10465441SEvalZero #define IRQ_RESERVED63          63
318*10465441SEvalZero 
319*10465441SEvalZero #define IRQ_INTC_MAX            63
320*10465441SEvalZero 
321*10465441SEvalZero #ifndef __ASSEMBLY__
322*10465441SEvalZero 
323*10465441SEvalZero #define __intc_unmask_irq(n)    (REG_INTC_IMCR((n)/32) = (1 << ((n)%32)))
324*10465441SEvalZero #define __intc_mask_irq(n)      (REG_INTC_IMSR((n)/32) = (1 << ((n)%32)))
325*10465441SEvalZero #define __intc_ack_irq(n)       (REG_INTC_IPR((n)/32) = (1 << ((n)%32)))        /* A dummy ack, as the Pending Register is Read Only. Should we remove __intc_ack_irq() */
326*10465441SEvalZero 
327*10465441SEvalZero #endif /* !__ASSEMBLY__ */
328*10465441SEvalZero 
329*10465441SEvalZero #endif /* _JZ_M150_H_ */
330