⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hal_platform_setup.h

📁 开放源码实时操作系统源码.
💻 H
📖 第 1 页 / 共 2 页
字号:
	str	r2,[r1]				
	ldr	r1,=MEMCFG2			
	ldr	r2,=0x00001F13			
	str	r2,[r1]
        .endm
#else
#ifdef CYGHWR_HAL_ARM_EDB7XXX_VARIANT_EP7209
// No DRAM controller
        .macro  INIT_MEMORY_CONFIG
/* Initialize memory configuration */
	ldr	r1,=MEMCFG1
	ldr	r2,=0x8200A080
	str	r2,[r1]
	ldr	r1,=MEMCFG2
	ldr	r2,=0xFEFC0000
	str	r2,[r1]
        .endm
#else // CYGHWR_HAL_ARM_EDB7XXX_VARIANT = EP7211, EP7212
        .macro  INIT_MEMORY_CONFIG
/* Initialize memory configuration */
	ldr	r1,=MEMCFG1
	ldr	r2,=0x8200A080
	str	r2,[r1]
	ldr	r1,=MEMCFG2
	ldr	r2,=0xFEFC0000
	str	r2,[r1]
	ldr	r1,=DRFPR
	ldr	r2,=0x81	/* DRAM refresh = 64KHz */
	strb	r2,[r1]
        .endm
#endif
#endif

#if defined(CYGSEM_HAL_STATIC_MMU_TABLES)
#define PLATFORM_SETUP1                          \
        INIT_MEMORY_CONFIG                      ;\
        ldr     r1,=_MMU_table-0xE0000000       ;\
        MMU_INITIALIZE                          ;\
        RELOCATE_TEXT_SEGMENT

#define PLATFORM_EXTRAS <cyg/hal/hal_platform_extras.h>

#else
// MMU tables placed in DRAM

#if (CYGHWR_HAL_ARM_EDB7XXX_DRAM_SIZE == 2)
// Note: The DRAM on this board is very irregular in that every
// other 256K piece is missing.  E.g. only these [physical]
// addresses are valid:
//   0xC0000000..0xC003FFFF
//   0xC0080000..0xC00BFFFF
//   0xC0200000..0xC023FFFF    Note the additional GAP!
//      etc.
//   0xC0800000..0xC083FFFF    Note the additional GAP!
//   0xC0880000..0xC08CFFFF
//   0xC0A00000..0xC0A3FFFF
//      etc.
// The MMU mapping code takes this into consideration and creates
// a continuous logical map for the DRAM.
        .macro  MAP_DRAM
/* Map DRAM */
	ldr	r3,=DRAM_LA_START
	ldr	r4,=DRAM_LA_END
	ldr	r5,=DRAM_PA
/* 0x00000000..0x000FFFFF */
	mov	r6,r2		/* Set up page table descriptor */
	ldr	r7,=MMU_L1_TYPE_Page
	orr	r6,r6,r7
	str	r6,[r1],#4	/* Store PTE, update pointer */
10:	mov	r6,r5		/* Build page table entry */
	ldr	r7,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable
	orr	r6,r6,r7
	ldr	r7,=MMU_PAGE_SIZE
	str	r6,[r2],#4	/* Next page */
	add	r3,r3,r7
	add	r5,r5,r7
	ldr	r8,=DRAM_LA_START+MMU_SECTION_SIZE
	cmp	r3,r8		/* Done with first 1M? */
	beq	20f
	ldr	r7,=0x40000	/* Special check for 256K boundary */
	and	r7,r7,r5
	cmp	r7,#0
	beq	10b
	add	r5,r5,r7	/* Skip 256K hole */
	ldr	r7,=0x100000
	and	r7,r5,r7
	beq	10b
	add	r5,r5,r7	/* Nothing at 0xC0100000 */
	ldr	r7,=0x400000	/* Also nothing at 0xC0400000 */
	and	r7,r5,r7
	beq	10b
	add	r5,r5,r7
	b	10b
20:
/* 0x00100000..0x001FFFFF */
	mov	r6,r2		/* Set up page table descriptor */
	ldr	r7,=MMU_L1_TYPE_Page
	orr	r6,r6,r7
	str	r6,[r1],#4	/* Store PTE, update pointer */
10:	mov	r6,r5		/* Build page table entry */
	ldr	r7,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable
	orr	r6,r6,r7
	ldr	r7,=MMU_PAGE_SIZE
	str	r6,[r2],#4	/* Next page */
	add	r3,r3,r7
	cmp	r3,r4		/* Done with first DRAM? */
	beq	20f
	add	r5,r5,r7
	ldr	r7,=0x40000	/* Special check for 256K boundary */
	and	r7,r7,r5
	cmp	r7,#0
	beq	10b
	add	r5,r5,r7	/* Skip 256K hole */
	ldr	r7,=0x100000
	and	r7,r5,r7
	beq	10b
	add	r5,r5,r7	/* Nothing at 0xC0300000 */
	ldr	r7,=0x400000	/* Also nothing at 0xC0400000 */
	and	r7,r5,r7
	beq	10b
	add	r5,r5,r7
	b	10b
20:

#elif (CYGHWR_HAL_ARM_EDB7XXX_DRAM_SIZE == 16)
// The 16M EDB72xx boards are arranged as:
//   0xC0000000..0xC07FFFFF
//   0xC1000000..0xC17FFFFF
// The 16M EDB7312 board is arranged as:
//   0xC0000000..0xC0FFFFFF
        .macro  MAP_DRAM
/* Map DRAM */
	ldr	r3,=DRAM_LA_START
	ldr	r4,=DRAM_LA_END
	ldr	r5,=DRAM_PA
/* 0xXXX00000..0xXXXFFFFF */
10:	mov	r6,r2		/* Set up page table descriptor */
	ldr	r7,=MMU_L1_TYPE_Page
	orr	r6,r6,r7
	str	r6,[r1],#4	/* Store PTE, update pointer */
        ldr     r8,=MMU_SECTION_SIZE/MMU_PAGE_SIZE
#if !defined(__EDB7312)
// EDB7312 has contiguous SDRAM
	ldr	r9,=DRAM_PA_START+0x00800000   /* Skip at 8M boundary */
12:     cmp     r5,r9
        bne     15f
	ldr	r5,=DRAM_PA_START+0x01000000   /* Next chunk of DRAM */
#else
12:
#endif
15:	mov	r6,r5		/* Build page table entry */
	ldr	r7,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable
	orr	r6,r6,r7
	ldr	r7,=MMU_PAGE_SIZE
	str	r6,[r2],#4	/* Next page */
	add	r3,r3,r7
	add	r5,r5,r7
        cmp     r3,r4           /* End of DRAM? */
        beq     20f
        sub     r8,r8,#1        /* End of 1M section? */
        cmp     r8,#0
        bne     12b             /* Next page */
        b       10b             /* Next section */
20:
        .endm
#else
#error Invalid DRAM size select
#endif

        .macro  MAP_L1_SEGMENT start end phys prot
	ldr	r3,=0x3FF	/* Page tables need 2K boundary */
	add	r2,r2,r3
	ldr	r3,=~0x3FF
	and	r2,r2,r3
	ldr	r3,=\start
	ldr	r4,=\end
	ldr	r5,=\phys
	ldr	r6,=\prot
	ldr	r7,=MMU_SECTION_SIZE
10:	orr	r0,r5,r6
	str	r0,[r1],#4
	add	r5,r5,r7
	add	r3,r3,r7
	cmp	r3,r4
	bne	10b
        .endm

        .macro  PLATFORM_SETUP1
        INIT_MEMORY_CONFIG
#ifdef CYG_HAL_STARTUP_RAM
        RELOCATE_RAM_IMAGE
#endif        
/* Initialize MMU to create new memory map */
	ldr	r1,=MMU_BASE
	ldr	r2,=PTE_BASE
	MAP_DRAM
/* Nothing until PCMCIA0 */
        MAP_L1_SEGMENT (DRAM_LA_END+0x000FFFFF)&0xFFF00000 EXPANSION2_LA_START 0 MMU_L1_TYPE_Fault
/* EXPANSION2, EXPANSION3, PCMCIA0, PCMCIA1 */
        MAP_L1_SEGMENT EXPANSION2_LA_START SRAM_LA_START EXPANSION2_PA MMU_L1_TYPE_Section|MMU_AP_Any
/* SRAM */
	ldr	r3,=SRAM_LA_START
	ldr	r4,=MMU_L1_TYPE_Page|MMU_DOMAIN(0)
	orr	r4,r4,r2
	str	r4,[r1],#4
	ldr	r7,=MMU_PAGE_SIZE
        ldr     r5,=SRAM_LA_END
05:	ldr	r4,=MMU_L2_TYPE_Small|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable
	orr	r4,r3,r4
	str	r4,[r2],#4
        add     r3,r3,r7
        cmp     r3,r5
        bne     05b
	ldr	r4,=SRAM_LA_START+MMU_SECTION_SIZE
	ldr	r5,=MMU_L2_TYPE_Fault
10:	str	r5,[r2],#4
	add	r3,r3,r7
	cmp	r3,r4
	bne	10b
	ldr	r4,=IO_LA_START
	ldr	r5,=MMU_L1_TYPE_Fault
	ldr	r7,=MMU_SECTION_SIZE
20:	str	r5,[r1],#4
	add	r3,r3,r7
	cmp	r3,r4
	bne	20b
/* I/O */
	ldr	r3,=0x3FF	/* Page tables need 2K boundary */
	add	r2,r2,r3
	ldr	r3,=~0x3FF
	and	r2,r2,r3
	ldr	r4,=MMU_L1_TYPE_Page|MMU_DOMAIN(0)
	orr	r4,r4,r2
	str	r4,[r1],#4
	ldr	r3,=IO_LA_START
	ldr	r4,=IO_LA_END
	ldr	r7,=MMU_PAGE_SIZE
	ldr	r5,=IO_PA|MMU_L2_TYPE_Small|MMU_AP_All
10:	str	r5,[r2],#4
	add	r5,r5,r7
	add	r3,r3,r7
	cmp	r3,r4
	bne	10b
	ldr	r4,=IO_LA_START+MMU_SECTION_SIZE
	ldr	r5,=MMU_L2_TYPE_Fault
	ldr	r7,=MMU_PAGE_SIZE
10:	str	r5,[r2],#4
	add	r3,r3,r7
	cmp	r3,r4
	bne	10b
	ldr	r4,=LCD_LA_START
	ldr	r5,=MMU_L1_TYPE_Fault
	ldr	r7,=MMU_SECTION_SIZE
20:	str	r5,[r1],#4
	add	r3,r3,r7
	cmp	r3,r4
	bne	20b
/* LCD Buffer & Unmapped DRAM (holes and all) */
        MAP_L1_SEGMENT LCD_LA_START ROM0_LA_START LCD_PA MMU_L1_TYPE_Section|MMU_AP_Any|MMU_Bufferable|MMU_Cacheable
/* ROM0 */
        MAP_L1_SEGMENT ROM0_LA_START ROM0_LA_END ROM0_PA MMU_L1_TYPE_Section|MMU_AP_Any
/* ROM1 */
        MAP_L1_SEGMENT ROM1_LA_START ROM1_LA_END ROM1_PA MMU_L1_TYPE_Section|MMU_AP_Any
/* Now initialize the MMU to use this new page table */
	ldr	r1,=MMU_BASE
        MMU_INITIALIZE
#ifdef CYG_HAL_STARTUP_ROMRAM                                                  
        RELOCATE_TEXT_SEGMENT
#endif // CYG_HAL_STARTUP_ROM                                                          
        .endm
#endif // CYGSEM_HAL_STATIC_MMU_TABLES

#else  // CYGSEM_HAL_INSTALL_MMU_TABLES

#define PLATFORM_SETUP1
#endif
#endif //_CYGHWR_LAYOUT_ONLY

/*---------------------------------------------------------------------------*/
/* end of hal_platform_setup.h                                               */
#endif /* CYGONCE_HAL_PLATFORM_SETUP_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -