285 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			285 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * File      : x1000.h
 | |
|  * This file is part of RT-Thread RTOS
 | |
|  * COPYRIGHT (C) 2008 - 2012, RT-Thread Development Team
 | |
|  *
 | |
|  *  This program is free software; you can redistribute it and/or modify
 | |
|  *  it under the terms of the GNU General Public License as published by
 | |
|  *  the Free Software Foundation; either version 2 of the License, or
 | |
|  *  (at your option) any later version.
 | |
|  *
 | |
|  *  This program is distributed in the hope that it will be useful,
 | |
|  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | |
|  *  GNU General Public License for more details.
 | |
|  *
 | |
|  *  You should have received a copy of the GNU General Public License along
 | |
|  *  with this program; if not, write to the Free Software Foundation, Inc.,
 | |
|  *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 | |
|  *
 | |
|  * Change Logs:
 | |
|  * Date           Author       Notes
 | |
|  * 2015-11-19     Urey         the first version
 | |
|  */
 | |
| 
 | |
| #ifndef __X1000_H__
 | |
| #define __X1000_H__
 | |
| 
 | |
| #include "../common/mips.h"
 | |
| 
 | |
| #ifndef __ASSEMBLY__
 | |
| 
 | |
| #define cache_unroll(base,op)               \
 | |
|     __asm__ __volatile__("                  \
 | |
|         .set noreorder;                     \
 | |
|         .set mips3;                         \
 | |
|         cache %1, (%0);                     \
 | |
|         .set mips0;                         \
 | |
|         .set reorder"                       \
 | |
|         :                                   \
 | |
|         : "r" (base),                       \
 | |
|           "i" (op));
 | |
| 
 | |
| /* cpu pipeline flush */
 | |
| static inline void jz_sync(void)
 | |
| {
 | |
|     __asm__ volatile ("sync");
 | |
| }
 | |
| 
 | |
| static inline void writeb(u8 value, u32 address)
 | |
| {
 | |
|     *((volatile u8 *) address) = value;
 | |
| }
 | |
| static inline void writew( u16 value, u32 address)
 | |
| {
 | |
|     *((volatile u16 *) address) = value;
 | |
| }
 | |
| static inline void writel(u32 value, u32 address)
 | |
| {
 | |
|     *((volatile u32 *) address) = value;
 | |
| }
 | |
| 
 | |
| static inline u8 readb(u32 address)
 | |
| {
 | |
|     return *((volatile u8 *)address);
 | |
| }
 | |
| 
 | |
| static inline u16 readw(u32 address)
 | |
| {
 | |
|     return *((volatile u16 *)address);
 | |
| }
 | |
| 
 | |
| static inline u32 readl(u32 address)
 | |
| {
 | |
|     return *((volatile u32 *)address);
 | |
| }
 | |
| 
 | |
| static inline void jz_writeb(u32 address, u8 value)
 | |
| {
 | |
|     *((volatile u8 *)address) = value;
 | |
| }
 | |
| 
 | |
| static inline void jz_writew(u32 address, u16 value)
 | |
| {
 | |
|     *((volatile u16 *)address) = value;
 | |
| }
 | |
| 
 | |
| static inline void jz_writel(u32 address, u32 value)
 | |
| {
 | |
|     *((volatile u32 *)address) = value;
 | |
| }
 | |
| 
 | |
| static inline u8 jz_readb(u32 address)
 | |
| {
 | |
|     return *((volatile u8 *)address);
 | |
| }
 | |
| 
 | |
| static inline u16 jz_readw(u32 address)
 | |
| {
 | |
|     return *((volatile u16 *)address);
 | |
| }
 | |
| 
 | |
| static inline u32 jz_readl(u32 address)
 | |
| {
 | |
|     return *((volatile u32 *)address);
 | |
| }
 | |
| 
 | |
| #define BIT(n)          (0x01u << (n))
 | |
| #define BIT0            (0x01u <<  0)
 | |
| #define BIT1            (0x01u <<  1)
 | |
| #define BIT2            (0x01u <<  2)
 | |
| #define BIT3            (0x01u <<  3)
 | |
| #define BIT4            (0x01u <<  4)
 | |
| #define BIT5            (0x01u <<  5)
 | |
| #define BIT6            (0x01u <<  6)
 | |
| #define BIT7            (0x01u <<  7)
 | |
| #define BIT8            (0x01u <<  8)
 | |
| #define BIT9            (0x01u <<  9)
 | |
| #define BIT10           (0x01u << 10)
 | |
| #define BIT11           (0x01u << 11)
 | |
| #define BIT12           (0x01u << 12)
 | |
| #define BIT13           (0x01u << 13)
 | |
| #define BIT14           (0x01u << 14)
 | |
| #define BIT15           (0x01u << 15)
 | |
| #define BIT16           (0x01u << 16)
 | |
| #define BIT17           (0x01u << 17)
 | |
| #define BIT18           (0x01u << 18)
 | |
| #define BIT19           (0x01u << 19)
 | |
| #define BIT20           (0x01u << 20)
 | |
| #define BIT21           (0x01u << 21)
 | |
| #define BIT22           (0x01u << 22)
 | |
| #define BIT23           (0x01u << 23)
 | |
| #define BIT24           (0x01u << 24)
 | |
| #define BIT25           (0x01u << 25)
 | |
| #define BIT26           (0x01u << 26)
 | |
| #define BIT27           (0x01u << 27)
 | |
| #define BIT28           (0x01u << 28)
 | |
| #define BIT29           (0x01u << 29)
 | |
| #define BIT30           (0x01u << 30)
 | |
| #define BIT31           (0x01u << 31)
 | |
| 
 | |
| /* Generate the bit field mask from msb to lsb */
 | |
| #define BITS_H2L(msb, lsb)  ((0xFFFFFFFF >> (32-((msb)-(lsb)+1))) << (lsb))
 | |
| 
 | |
| 
 | |
| /* Get the bit field value from the data which is read from the register */
 | |
| #define get_bf_value(data, lsb, mask)  (((data) & (mask)) >> (lsb))
 | |
| 
 | |
| #endif /* !ASSEMBLY */
 | |
| 
 | |
| 
 | |
| //----------------------------------------------------------------------
 | |
| // Register Definitions
 | |
| //
 | |
| /* AHB0 BUS Devices Base */
 | |
| #define HARB0_BASE  0xB3000000
 | |
| #define EMC_BASE    0xB3010000
 | |
| #define DDRC_BASE   0xB3020000
 | |
| #define MDMAC_BASE  0xB3030000
 | |
| #define LCD_BASE    0xB3050000
 | |
| #define TVE_BASE    0xB3050000
 | |
| #define SLCD_BASE   0xB3050000
 | |
| #define CIM_BASE    0xB3060000
 | |
| #define IPU_BASE    0xB3080000
 | |
| /* AHB1 BUS Devices Base */
 | |
| #define HARB1_BASE  0xB3200000
 | |
| #define DMAGP0_BASE 0xB3210000
 | |
| #define DMAGP1_BASE 0xB3220000
 | |
| #define DMAGP2_BASE 0xB3230000
 | |
| #define MC_BASE     0xB3250000
 | |
| #define ME_BASE     0xB3260000
 | |
| #define DEBLK_BASE  0xB3270000
 | |
| #define IDCT_BASE   0xB3280000
 | |
| #define CABAC_BASE  0xB3290000
 | |
| #define TCSM0_BASE  0xB32B0000
 | |
| #define TCSM1_BASE  0xB32C0000
 | |
| #define SRAM_BASE   0xB32D0000
 | |
| /* AHB2 BUS Devices Base */
 | |
| #define HARB2_BASE  0xB3400000
 | |
| #define NEMC_BASE   0xB3410000
 | |
| #define DMAC_BASE   0xB3420000
 | |
| #define UHC_BASE    0xB3430000
 | |
| //#define UDC_BASE    0xB3440000
 | |
| #define SFC_BASE	 0xB3440000
 | |
| #define GPS_BASE    0xB3480000
 | |
| #define ETHC_BASE   0xB34B0000
 | |
| #define BCH_BASE    0xB34D0000
 | |
| #define MSC0_BASE   0xB3450000
 | |
| #define MSC1_BASE   0xB3460000
 | |
| #define MSC2_BASE   0xB3470000
 | |
| #define OTG_BASE    0xb3500000
 | |
| 
 | |
| /* APB BUS Devices Base */
 | |
| #define CPM_BASE    0xB0000000
 | |
| #define INTC_BASE   0xB0001000
 | |
| #define TCU_BASE    0xB0002000
 | |
| #define WDT_BASE    0xB0002000
 | |
| #define OST_BASE    0xB2000000      /* OS Timer */
 | |
| #define RTC_BASE    0xB0003000
 | |
| #define GPIO_BASE   0xB0010000
 | |
| #define AIC_BASE    0xB0020000
 | |
| #define DMIC_BASE   0xB0021000
 | |
| #define ICDC_BASE   0xB0020000
 | |
| #define UART0_BASE  0xB0030000
 | |
| #define UART1_BASE  0xB0031000
 | |
| #define UART2_BASE  0xB0032000
 | |
| #define SCC_BASE    0xB0040000
 | |
| #define SSI0_BASE   0xB0043000
 | |
| #define SSI1_BASE   0xB0044000
 | |
| #define SSI2_BASE   0xB0045000
 | |
| #define I2C0_BASE   0xB0050000
 | |
| #define I2C1_BASE   0xB0051000
 | |
| #define I2C2_BASE   0xB0052000
 | |
| #define PS2_BASE    0xB0060000
 | |
| #define SADC_BASE   0xB0070000
 | |
| #define OWI_BASE    0xB0072000
 | |
| #define TSSI_BASE   0xB0073000
 | |
| 
 | |
| /* NAND CHIP Base Address*/
 | |
| #define NEMC_CS1_IOBASE 0Xbb000000
 | |
| #define NEMC_CS2_IOBASE 0Xba000000
 | |
| #define NEMC_CS3_IOBASE 0Xb9000000
 | |
| #define NEMC_CS4_IOBASE 0Xb8000000
 | |
| #define NEMC_CS5_IOBASE 0Xb7000000
 | |
| #define NEMC_CS6_IOBASE 0Xb6000000
 | |
| 
 | |
| /*********************************************************************************************************
 | |
| **   WDT
 | |
| *********************************************************************************************************/
 | |
| #define WDT_TDR         (0x00)
 | |
| #define WDT_TCER        (0x04)
 | |
| #define WDT_TCNT        (0x08)
 | |
| #define WDT_TCSR        (0x0C)
 | |
| 
 | |
| #define REG_WDT_TDR     REG16(WDT_BASE + WDT_TDR)
 | |
| #define REG_WDT_TCER    REG8(WDT_BASE + WDT_TCER)
 | |
| #define REG_WDT_TCNT    REG16(WDT_BASE + WDT_TCNT)
 | |
| #define REG_WDT_TCSR    REG16(WDT_BASE + WDT_TCSR)
 | |
| 
 | |
| #define WDT_TSCR_WDTSC          (1 << 16)
 | |
| 
 | |
| #define WDT_TCSR_PRESCALE_1         (0 << 3)
 | |
| #define WDT_TCSR_PRESCALE_4         (1 << 3)
 | |
| #define WDT_TCSR_PRESCALE_16        (2 << 3)
 | |
| #define WDT_TCSR_PRESCALE_64        (3 << 3)
 | |
| #define WDT_TCSR_PRESCALE_256       (4 << 3)
 | |
| #define WDT_TCSR_PRESCALE_1024      (5 << 3)
 | |
| 
 | |
| #define WDT_TCSR_EXT_EN         (1 << 2)
 | |
| #define WDT_TCSR_RTC_EN         (1 << 1)
 | |
| #define WDT_TCSR_PCK_EN         (1 << 0)
 | |
| 
 | |
| #define WDT_TCER_TCEN           (1 << 0)
 | |
| 
 | |
| /* RTC Reg */
 | |
| #define RTC_RTCCR		(0x00)	/* rw, 32, 0x00000081 */
 | |
| #define RTC_RTCSR		(0x04)	/* rw, 32, 0x???????? */
 | |
| #define RTC_RTCSAR		(0x08)	/* rw, 32, 0x???????? */
 | |
| #define RTC_RTCGR		(0x0c)	/* rw, 32, 0x0??????? */
 | |
| #define RTC_HCR			(0x20)  /* rw, 32, 0x00000000 */
 | |
| #define RTC_HWFCR		(0x24)  /* rw, 32, 0x0000???0 */
 | |
| #define RTC_HRCR		(0x28)  /* rw, 32, 0x00000??0 */
 | |
| #define RTC_HWCR		(0x2c)  /* rw, 32, 0x00000008 */
 | |
| #define RTC_HWRSR		(0x30)  /* rw, 32, 0x00000000 */
 | |
| #define RTC_HSPR		(0x34)  /* rw, 32, 0x???????? */
 | |
| #define RTC_WENR		(0x3c)  /* rw, 32, 0x00000000 */
 | |
| #define RTC_CKPCR		(0x40)  /* rw, 32, 0x00000010 */
 | |
| #define RTC_OWIPCR		(0x44)  /* rw, 32, 0x00000010 */
 | |
| #define RTC_PWRONCR		(0x48)  /* rw, 32, 0x???????? */
 | |
| 
 | |
| #define RTCCR_WRDY				BIT(7)
 | |
| #define WENR_WEN                BIT(31)
 | |
| 
 | |
| #define RECOVERY_SIGNATURE	(0x001a1a)
 | |
| #define REBOOT_SIGNATURE	(0x003535)
 | |
| #define UNMSAK_SIGNATURE	(0x7c0000)//do not use these bits
 | |
| 
 | |
| 
 | |
| #include "x1000_cpm.h"
 | |
| #include "x1000_intc.h"
 | |
| #include "x1000_otg_dwc.h"
 | |
| #include "x1000_aic.h"
 | |
| #include "x1000_slcdc.h"
 | |
| 
 | |
| #endif /* _JZ_M150_H_ */
 |