/********************************************************************* | |
°æÈ¨ËùÓÐ (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*/ | |