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

📄 platform.s

📁 eCos1.31版
💻 S
📖 第 1 页 / 共 2 页
字号:
	bal	map_tlb4000	nop		addi	ix,ix,1	li	tmp,PADDR_INC	add	vaddr,vaddr,tmp	add	paddr0,paddr0,tmp	li	tmp,NUMB_PG	bne	ix,tmp,loop	nop	# Go back via a jump, not a return	lar	k0,hal_mmu_setup_return	jr	k0	nop		FUNC_END(hal_mmu_setup)			## Invalidate the TLB entry specified by index#### resettlb(index) ##	a0  =  index#### Uses : t0, t2, v0, a0 FUNC_START(resettlb)	li	t2,K0BASE & TLBHI_VPN2MASK	mfc0	t0,tlbhi		# save current TLBHI	mfc0	v0,status		# save SR and disable interrupts	mtc0	zero,status		# clear interrupts	mtc0	t2,tlbhi		# invalidate entry	mtc0	zero,tlblo0	mtc0	zero,tlblo1	mtc0	a0,index	nop; nop; nop; nop; nop; nop; nop; nop	tlbwi	nop; nop; nop; nop; nop; nop; nop; nop	mtc0	t0,tlbhi	mtc0	v0,status	j	ra	nop	FUNC_END(resettlb)## Setup R4000 TLB entry#### map_tlb4000(mask_index, tlbhi, pte_even, pte_odd)## 	a0  =  TLB entry index and page mask##	a1  =  virtual page number and PID##      a2  =  pte -- contents of even pte##      a3  =  pte -- contents of odd pte######## Uses : t0, t1, t2, v0, a0, a1, a2, a3 FUNC_START(map_tlb4000)	and	t2,a0,TLBPGMASK_MASK	and	a0,TLBINX_INXMASK	mfc0	t1,tlbhi		# save current TLBPID	mfc0	v0,status		# save SR and disable interrupts	mtc0	zero,status		# clear interrupts	mtc0	t2,pagemask		# set 	mtc0	a1,tlbhi		# set VPN and TLBPID	mtc0	a2,tlblo0		# set PPN and access bits	mtc0	a3,tlblo1		# set PPN and access bits	mtc0	a0,index		# set INDEX to wired entry	nop; nop; nop; nop; nop; nop; nop; nop	tlbwi				# drop it in	nop; nop; nop; nop; nop; nop; nop; nop	mtc0	t1,tlbhi		# restore TLBPID	mtc0	v0,status		# restore SR	j	ra	nopFUNC_END(map_tlb4000)#endif	##-----------------------------------------------------------------------------## MEMC initialization.## This also initializes the PCI bus and ISA bus bridge, so at the end of this## we should have full access to all the memory and devices we need.## This code is table driven, which is somewhat more compact that coding it all.## Table entries consist of an address and a value to store in that address.## A zero address terminates the table. Two special address values modify the## behaviour:	## DELAY_LOOP	loops for the number of iterations in the value field.## WRITE16	treats the next 2 words as an address and value to be written ##        	with a 16 bit write cycle.	#if defined(CYG_HAL_STARTUP_ROM) || defined(CYG_HAL_STARTUP_ROMRAM)	#define	DELAY_LOOP	1#define WRITE16		2			FUNC_START(hal_memc_setup)	lar	t0,hal_memc_setup_table	la	t1,0xbfc00000	la	t2,DELAY_LOOP	la	t3,WRITE161:		lw	a0,0(t0)	# next table entry	lw	a1,4(t0)	# value to write	addiu	t0,8		# go to next entry	beq	a0,t2,2f	# Check for delay	nop	beq	a0,t3,3f	# Check for 16 bit write	nop	beqz	a0,9f		# zero terminates loop	nop	sw	a1,0(a0)	# write it	lw	zero,0(t1)	# uncached read to flush write buffer	b	1b	nop2:	lw	zero,0(t1)	# uncached read to flush write buffer		bnez	a1,2b		# count down by value in a1	addiu	a1,-1		# decrement in delay slot	b	1b		# go back to loop	nop3:		lw	a3,0(t0)	# get next word	addiu	t0,4		# skip it	sh	a3,0(a1)	# store halfword		lw	zero,0(t1)	# uncached read to flush write buffer	b	1b	nop9:	jr	ra	nopFUNC_END(hal_memc_setup)	##-----------------------------------------------------------------------------	## Definitions for the VRC4373, also known as the Nile I, ## and maybe the Nile III as well.	#define N1_BASE		0xAF000000#define N2_BASE		0xBC000000		#define BMCTRL         (N1_BASE + 0x00)#define S1CTRL         (N1_BASE + 0x04)#define S2CTRL         (N1_BASE + 0x08)#define S3CTRL         (N1_BASE + 0x0C)#define S4CTRL         (N1_BASE + 0x10)#define PCIMSTRADDR1   (N1_BASE + 0x14)#define PCIMSTRADDR2   (N1_BASE + 0x18)#define PCISLAVADDR1   (N1_BASE + 0x1C)#define PCISLAVADDR2   (N1_BASE + 0x20)#define PCIMSTRIO      (N1_BASE + 0x24)#define PCICNFGDATA    (N1_BASE + 0x28)#define PCICNFGADDR    (N1_BASE + 0x2C)#define PCIMBOX1       (N1_BASE + 0x30)#define PCIMBOX2       (N1_BASE + 0x34)#define DMACTRL1       (N1_BASE + 0x38)#define DMALCLADDR1    (N1_BASE + 0x3C)#define DMAPCIADDR1    (N1_BASE + 0x40)#define DMACTRL2       (N1_BASE + 0x44)#define DMALCLADDR2    (N1_BASE + 0x48)#define DMAPCIADDR2    (N1_BASE + 0x4C)#define BUSERRSTAT     (N1_BASE + 0x50)#define INTCNTRL       (N1_BASE + 0x54)#define REFRESHRATE    (N1_BASE + 0x58)#define BOOTROMWPRTCT  (N1_BASE + 0x5C)#define PCI_EXCL_ACC   (N1_BASE + 0x60)#define PCI_ENABLE_REG (N1_BASE + 0x74)#define N3_POM_INIT    (N1_BASE + 0x78)/*#define N1RESERVED1    (N1_BASE + 0x60)*/#define N1PCIHEADER    (N1_BASE + 0x100)#define N1PCICMD       (N1PCIHEADER + 0x04)#define MBOXPCIADDR    (N1PCIHEADER + 0x10)#define N1CLSIZE       (N1PCIHEADER + 0x0c)  /* Cache Line Size */#define N1MLTIM        (N1PCIHEADER + 0x0d)#define N1MBADD        (N1PCIHEADER + 0x10)#define N1RSVD2        (N1PCIHEADER + 0x40)  /* Word boundary */#define N1RTYTIM       (N1PCIHEADER + 0x41)##-----------------------------------------------------------------------------	## Definitions for the VRC4372, also known as the Nile II.	#define PCI_N2_DEV		0x00010000 	/* PCI Device # - Nile 2 */#define N2CLSIZE		( 0x0c)  /* Cache Line Size */#define N2IOADD			( 0x14)#define N2DSCTIM		( 0x40)#define IOCON             (N2_BASE + 0x0000)  /* GPIO Bus   Controller Registers    */#define GPDIR             (IOCON + 0x0100)#define GPOUT             (IOCON + 0x0104)#define GPIN              (IOCON + 0x0108)  /* Interrupt  Controller Registers    */#define INTPOL            (IOCON + 0x200)#define INTTRIG           (IOCON + 0x204)#define INTPINS           (IOCON + 0x208)#define INTMASK0          (IOCON + 0x20C)#define INTSTAT0          (IOCON + 0x210)#define INTMASK1          (IOCON + 0x214)#define INTSTAT1          (IOCON + 0x218)#define INTMASK2          (IOCON + 0x21C)#define INTSTAT2          (IOCON + 0x220)		  /* IO Bus     Controller Registers    */#if defined(CYGPKG_HAL_MIPS_MSBFIRST)// The 16 bit registers are swapped pairwise in each word.	#define IOPROF_00         (IOCON + 0x0402)#define IOPROF_01         (IOCON + 0x0400)#define IOPROF_02         (IOCON + 0x0406)#define IOPROF_03         (IOCON + 0x0404)#define IOPROF_04         (IOCON + 0x040A)#define IOPROF_05         (IOCON + 0x0408)#define IOPROF_06         (IOCON + 0x040E)#define IOPROF_07         (IOCON + 0x040C)#define IOPROF_08         (IOCON + 0x0412)#define IOPROF_09         (IOCON + 0x0410)#define IOPROF_0A         (IOCON + 0x0416)#define IOPROF_0B         (IOCON + 0x0414)#define IOPROF_0C         (IOCON + 0x041a)#define IOPROF_10         (IOCON + 0x0422)#define IOPROF_11         (IOCON + 0x0420)#define IOPROF_12         (IOCON + 0x0426)#define IOPROF_13         (IOCON + 0x0424)	#elif defined(CYGPKG_HAL_MIPS_LSBFIRST)#define IOPROF_00         (IOCON + 0x0400)#define IOPROF_01         (IOCON + 0x0402)#define IOPROF_02         (IOCON + 0x0404)#define IOPROF_03         (IOCON + 0x0406)#define IOPROF_04         (IOCON + 0x0408)#define IOPROF_05         (IOCON + 0x040A)#define IOPROF_06         (IOCON + 0x040C)#define IOPROF_07         (IOCON + 0x040E)#define IOPROF_08         (IOCON + 0x0410)#define IOPROF_09         (IOCON + 0x0412)#define IOPROF_0A         (IOCON + 0x0414)#define IOPROF_0B         (IOCON + 0x0416)#define IOPROF_0C         (IOCON + 0x0418)#define IOPROF_10         (IOCON + 0x0420)#define IOPROF_11         (IOCON + 0x0422)#define IOPROF_12         (IOCON + 0x0424)#define IOPROF_13         (IOCON + 0x0426)#else#error MIPS endianness not define by configuration		#endif	#define IOTOUT            (IOCON + 0x0430)#define IOPOL             (IOCON + 0x0434)	##-----------------------------------------------------------------------------			## PCI definitions	#define PCI_IOSPACE_BASE	0x0c		/* PCI I/O Space Adr */#define PCIADR_REGNO 	0x000000fc  /* Register # mask 		 */	#define PCI_CONFIG( dev, func, reg ) ( dev | ( reg  & PCIADR_REGNO) ) 	#define	PCI_COMMAND_STATUS_REG		0x04#define	PCI_MAP_REG_START		0x10#define	PCI_INTERRUPT_REG		0x3c##-----------------------------------------------------------------------------## The initialization table	hal_memc_setup_table:		.long	DELAY_LOOP,	0x00010000	# Wait for HW to settle		# Set up SDRAM and SIMM1	.long	BMCTRL,		0x0000803b	# Base memory setup	.long	S1CTRL,		0x0402013f	# SIMM1 	# Set up power-on memory state	.long	N3_POM_INIT,	0x00000002	# Power-on memory init	.long	DELAY_LOOP,	0x00000100	# wait a bit	.long	N3_POM_INIT,	0x00000004	# Power-on memory init	.long	DELAY_LOOP,	0x00000100	# wait a bit	.long	N3_POM_INIT,	0x00000001	# Power-on memory init	.long	DELAY_LOOP,	0x00000100	# wait a bit	.long	REFRESHRATE,	0x00000300	# DRAM refresh rate	.long	BOOTROMWPRTCT,	0xffffff3e	# Write protect boot ROM	# Set up PCI master address window	.long	PCIMSTRADDR1,	0x1c0fd01c	.long	PCIMSTRADDR2,	0x80081080	# Set up PCI slave address window	.long	PCISLAVADDR1,	0x00081000	.long	PCISLAVADDR2,	0x10081080	# Map PCI IO space Phys == Local	.long	PCIMSTRIO,	(0x000fd000 | ( PCI_IOSPACE_BASE << 24) | PCI_IOSPACE_BASE)	# VRC4373 Bridge config space	.long	N1PCICMD,	0x00000006	# Memory space enable, bus master	.long	N1CLSIZE,	0x00003000	# Master latency time	.long	N1MBADD,	0x20000000	# Mailbox base address	.long	N1RSVD2,	0x0000f000	# Retry value	.long	PCI_EXCL_ACC,	0x00000020	# PCI exclusive access register	.long	PCI_ENABLE_REG,	0x00000005	# PCI config done, enable arbitration	# Set up 4372. This is configured entirely through its PCI	# configuration space. Hence the following all consist of	# writing an address to the PCICNFGADDR register followed	# by a write of the data to the PCICNFGDATA register.	.long	PCICNFGADDR,	PCI_CONFIG( PCI_N2_DEV, 0, PCI_COMMAND_STATUS_REG)	.long	PCICNFGDATA,	0x00000146	.long	PCICNFGADDR,	PCI_CONFIG( PCI_N2_DEV, 0, N2CLSIZE)	.long	PCICNFGDATA,	0x00003000	.long	PCICNFGADDR,	PCI_CONFIG( PCI_N2_DEV, 0, PCI_MAP_REG_START)	.long	PCICNFGDATA,	0x1c000000	.long	PCICNFGADDR,	PCI_CONFIG( PCI_N2_DEV, 0, N2IOADD)	.long	PCICNFGDATA,	0x80000000	.long	PCICNFGADDR,	PCI_CONFIG( PCI_N2_DEV, 0, PCI_INTERRUPT_REG)	.long	PCICNFGDATA,	0x00000000	.long	PCICNFGADDR,	PCI_CONFIG( PCI_N2_DEV, 0, N2DSCTIM)	.long	PCICNFGDATA,	0x0070f000	# Set up IO bus controller chip select profile registers to	# allow access to the devices.	.long	WRITE16,	IOPROF_00,	0x04d1	# RTC - DS1386	.long	WRITE16,	IOPROF_01,	0x007f	# DUART - Z8530	.long	WRITE16,	IOPROF_02,	0x007f	# Timer - Z8536	.long	WRITE16,	IOPROF_03,	0x00d9	# Parallel = 8255	.long	WRITE16,	IOPROF_06,	0x007f	# 7 segment display	.long	WRITE16,	IOPROF_07,	0x007f	# 7 segment display	# Configure the rest of the 4372	.long	IOTOUT,		0x200003c0	# IO timout control	.long	IOPOL,		0x00000000	# IO bus pin polarity	.long	GPDIR,		0x000007c0	# GPIO pins 6-10 output	.long	INTPOL,		0x00003fff	# Interrupt polarity	.long	INTTRIG,	0x00003fff	# Interrupt trigger	.long	INTSTAT0,	0x00000000	# Zero all int status regs	.long	INTSTAT1,	0x00000000	.long	INTSTAT2,	0x00000000	.long	DELAY_LOOP,	0x00010000	# Wait for HW to settle			.long	0,		0#endif		##-----------------------------------------------------------------------------## end of platform.S	

⌨️ 快捷键说明

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