blob: 97ce46e6aaedd75477843644919893a2a39fbf48 [file] [log] [blame]
/*********************************************************************
°æÈ¨ËùÓÐ (C)2003, ÉîÛÚÊÐÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾¡£
ÎļþÃû³Æ£º zx2802.a
ÄÚÈÝÕªÒª£º ¶¨Òåinit.sʹÓõij£Á¿
×÷ Õߣº ÖÐÐËͨѶ £º¹Ù»ª²®
Íê³ÉÈÕÆÚ£º 2006Äê04ÔÂ02ÈÕ
**********************************************************************/
/*ÐÞ¸ÄÀúÊ·£º
2003-06-30: hbguan,´´½¨
2003-12-22: hbguan,Ôö¼ÓSDRAM¿ØÖÆÆ÷¼Ä´æÆ÷µØÖ·µÄ¶¨Òå¡£
2006.04.02 hbguan, Ð޸ģ¬ÓÃÓÚÖ§³Özx2802µÄ²âÊÔ¹¦ÄÜ
2007.04.02 hbguan, Ð޸ģ¬Ö§³Özx2802 ´Ónor flashÖÐboot
*/
/*------- Stacks config ------------------------------------
TOTAL_STACK_LEN EQU 0x10000 ; stack length in bytes
STACK_SIZE_UNDEF EQU 24
STACK_SIZE_ABORT EQU 48
STACK_SIZE_IRQ EQU 0x1000
STACK_SIZE_FIQ EQU 0x1000
STACK_SIZE_SVC EQU (TOTAL_STACK_LEN -STACK_SIZE_UNDEF -STACK_SIZE_ABORT -STACK_SIZE_IRQ -STACK_SIZE_FIQ)
ARM926E-J CP15 control register 1
Register Function
bit
----------------------------------------------------------
[31:19] - Reserved.
When read returns an UNPREDICTABLE value.
When written SHOULD BE ZERO, or a value read from bits [31:19] on
the same processor.Using a read-modify-write sequence when modifying
this register provides the greatest future compatibility.
[18] - Reserved, SBO. Read = 1, write = 1.
[17] - Reserved, SBZ. Read = 0, write = 0.
[16] - Reserved, SBO. Read = 1, write = 1.
[15] L4 bit Determines if the T bit is set when load instructions change the PC:
0 = loads to PC set the T bit
1 = loads to PC do not set T bit (ARMv4 behavior).
For more details see the ARM Architecture Reference Manual.
[14] RR bit Replacement strategy for ICache and DCache:
0 = Random replacement
1 = Round-robin replacement.
[13] V bit Location of exception vectors:
0 = Normal exception vectors selected, address range = 0x0000 0000 to
0x0000 001C
1 = High exception vectors selected, address range = 0xFFFF 0000 to
0xFFFF 001C.
Set to the value of VINITHI on reset.
[12] I bit ICache enable/disable:
0 = ICache disabled
1 = ICache enabled.
[11:10] - SBZ.
[9] R bit ROM protection.
This bit modifies the ROM protection system. See Domain access
control on page 3-23.
[8] S bit System protection.
This bit modifies the MMU protection system. See Domain access
control register r3 on page 2-17.
[7] B bit Endianness: 0 = Little-endian operation 1 = Big-endian operation. Set to
the value of BIGENDINIT on reset.
[6:3] - Reserved. SBO.
[2] C bit DCache enable/disable: 0 = Cache disabled 1 = Cache enabled.
[1] A bit Alignment fault enable/disable: 0 = Data address alignment fault
checking disabled 1 = Data address alignment fault checking enabled.
[0] M bit MMU enable/disable: 0 = disabled 1 = enabled.
*/
#ifndef _ZX2802_H
#define _ZX2802_H
#define DONT_SET_T (0x1<<15)
#define ROUND_ROBIN (0x1<<14)
#define HIGH_VECTOR (0x1<<13)
#define ICACHE_ENABLE (0x1<<12)
#ifndef LITTLE_ENDIAN
#define LITTLE_ENDIAN (0x0<<7)
#endif
#define BIG_ENDIAN (0x1<<7)
#define DCACHE_ENABLE (0x1<<2) /*bit2*/
#define MMU_ENABLE (0x1) /*bit0*/
/*Pre-defined constants*/
#define MODEMASK 0x1f
#define USERMODE 0x10
#define FIQMODE 0x11
#define IRQMODE 0x12
#define SVCMODE 0x13
#define ABORTMODE 0x17
#define UNDEFMODE 0x1b
#define SYSMODE 0x1f
#define NOINT 0xc0
#define I_BIT 0x80
#define F_BIT 0x40
#define MMU_I 0x1000 /*I-cache enable/disable*/
/*Clock configure regs*/
#define ARM_CONTROL_BASE (0x6000C000)
#define ARM_CLK_CONFIG (ARM_CONTROL_BASE +4)
#define ARM_PLL_CONFIG (ARM_CONTROL_BASE +8)
#define ARM_RST_CONFIG (ARM_CONTROL_BASE +0x18)
#define ZSP_SVT_ADDRESS (ARM_CONTROL_BASE +0x20)
/*ARM_CLK_CONFIG*/
#define CORE_CLOCK_DIV_MASK (0x3 <<6)
#define CORE_CLOCK_DIV_1 (0x0 <<6)
#define CORE_CLOCK_DIV_2 (0x1 <<6)
#define CORE_CLOCK_DIV_3 (0x2 <<6)
#define CORE_CLOCK_DIV_4 (0x3 <<6)
#define BUS_CLOCK_DIV_MASK (0x3 <<4)
#define BUS_CLOCK_DIV_1 (0x0 <<4)
#define BUS_CLOCK_DIV_2 (0x1 <<4)
#define BUS_CLOCK_DIV_3 (0x2 <<4)
#define BUS_CLOCK_DIV_4 (0x3 <<4)
#define CORE_CLOCK_SELECT_MASK (0x1 <<2)
#define CORE_CLOCK_SELECT_MAIN (0x0 <<2)
#define CORE_CLOCK_SELECT_32KHZ (0x1 <<2)
#define CORE_CLOCK_SELECT_PLL (0x2 <<2)
#define CORE_CLOCK_SELECT_RESERVED (0x3 <<2)
#define UART_CLOCK_MASK (0x1 <<1)
#define UART_CLOCK_MAIN_CLOCK (0x0 <<1)
#define UART_CLOCK_BUS_CLOCK (0x1 <<1)
#define TC_CLOCK_MASK (0x1 <<0)
#define TC_CLOCK_MAIN_CLOCK (0x0 <<0)
#define TC_CLOCK_BUS_CLOCK (0x1 <<0)
/*interrupt controller register*/
#define IC_BASE (0x60005000)
#define INT_REQ_REG_ADDR (IC_BASE +0x00) /*ÖжÏÇëÇó¼Ä´æ*/
#define INT_VEC_REG_ADDR (IC_BASE +0x04) /*ÆÕͨÖжÏÏòÁ¿¼Ä´æÆ÷*/
#define INT_FIQ_VEC_REG_ADDR (IC_BASE +0x08) /*ÖжÏÏÖ³¡¼Ä´æ*/
#define INT_STA_REG_ADDR (IC_BASE +0x10) /*ÖжÏ״̬¼Ä´æÆ÷*/
#define INT_MASK_REG_ADDR (IC_BASE +0x14) /*ÖÐ¶ÏÆÁ±Î¼Ä´æÆ÷(1:¿ª·ÅÖжϣ¬0£ºÆÁ±ÎÖжÏ)*/
#define INT_TEST_REG_ADDR (IC_BASE +0x18) /*ÖжϲâÊԼĴæÆ÷*/
#define INT_EN_REG_ADDR (IC_BASE +0x1c) /*ÖжÏʹÄܼĴæ*/
#define INT_DIS_EN_REG_ADDR (IC_BASE +0x20) /*ÖжÏȥʹÄܼĴæÆ÷*/
#define INT_SET_REG_ADDR (IC_BASE +0x24) /*ÖжÏÖÃλ¼Ä´æÆ÷*/
#define INT_CLEAR_REG_ADDR (IC_BASE +0x28) /*ÖжÏÇåλ¼Ä´æ*/
#define NEST_BIT (0x1 <<10)
/*CS configure*/
#define SMC_BASE (0x40000000)
#define SMC_CS0 (SMC_BASE + 0x200)
#define SMC_CS1 (SMC_BASE + 0x220)
#define SMC_CS2 (SMC_BASE + 0x240)
/*nand flash*/
#define SMC_CS0_VALUE (0x00) /* write enable &8bits*/
/*nor flash*/
#define SMC_CS1_VALUE (0x81) /* write enable &8 bits*/
/*SDRAM*/
#define SMC_CS2_VALUE (0x0081) /*write enable &16 bits*/
#define SDRAM0_BASEADDR (0x10000000)
#define REMAP_ADDR (0x40000000)
#define REMAP_DEFAULT_VALUE (0x11)
#define REMAP_SDRAM_TO_0x0 (0x31)
/*GPIO regs*/
#define ARMIO_BASE (0x60007000)
#define GPIOADATA (ARMIO_BASE +0x0) /*0xc002ec00*/
#define GPIOBDATA (ARMIO_BASE +0x4) /*0xc002ec04*/
#define GPIODIRECTA (ARMIO_BASE +0x8) /*0xC002EC08*/
#define GPIODIRECTB (ARMIO_BASE +0xc) /*0xC002EC0c*/
/*watchdog configure*/
#define WD_BASE 0x60000000
#define WD_CTRL_REG (WD_BASE + 0x00000000) /* watchdog timer Control register */
#define WD_LOAD_REG (WD_BASE + 0x00000004) /* Watchdog timer load register */
#define WD_COUNTER_REG (WD_BASE + 0x00000008) /* Watchdog timer counter register */
#define WD_STATE_REG (WD_BASE + 0x0000000C) /* Watchdog timer state register */
#define WD_ST_FILL (0x01<<0) /*Æô¶¯¶¨Ê±Æ÷¹¤*/
#define WD_PTV_FILL (0xff<<8) /* ÍⲿʱÖÓ·ÖÆµÏµÊý*/
/*write key:µ±¿ØÖƼĴæÆ÷µÄ¸ß16λΪ16'h1234£¬¶Ô¸Ã¼Ä´æÆ÷дÓÐЧ£¬¶ÁʱΪ0 */
#define WD_WRITE_KEY (0x1234<<16)
#define WD_ST_POS 0 /* Æô¶¯¶¨Ê±Æ÷¹¤×÷*/
#define WD_PTV_POS 8 /* ÍⲿʱÖÓ·ÖÆµ*/
/*Òý½Å¸´ÓÃ*/
#define ARM_PMM_IOCONF1 (0x6000b000)
#define ARM_PMM_IOCONF2 (0x6000b004)
/*ARM_PMM_IOCONF1*/
#define USED_ARM_UART2_PINS (0x3 <<14)
#define USED_ARM_UART1_PINS (0xf <<10)
/*ARM_PMM_IOCONF2*/
#define USED_DSP_UART_PINS (0x3 <<14)
/*Mode_Stack_Area EQU (0x100000)*/
#define reg(addr) (*(volatile unsigned *)(addr))
#define reg8(addr) (*(volatile unsigned char*)(addr))
#define reg16(addr) (*(volatile unsigned short*)(addr))
#define reg32(addr) (*(volatile unsigned long*)(addr))
#ifndef ERROR
#define ERROR (-1)
#endif
#define READ_DEFAULT_WORDS 8
#endif/*_ZX2802_H*/