diff options
| author | wdenk <wdenk> | 2004-01-03 19:43:48 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2004-01-03 19:43:48 +0000 | 
| commit | c935d3bd8b1c7f681ad58e64bd0548e1b26a7d2f (patch) | |
| tree | 2529369b185098e6d38627b7500d7450d9bab8f5 /board/altera | |
| parent | 3a473b2a6523db9cdf2b5aed22d9730b4ebc5693 (diff) | |
| download | olio-uboot-2014.01-c935d3bd8b1c7f681ad58e64bd0548e1b26a7d2f.tar.xz olio-uboot-2014.01-c935d3bd8b1c7f681ad58e64bd0548e1b26a7d2f.zip | |
Patches by Stephan Linz, 11 Dec 2003:
- more documentation for NIOS port
- new struct nios_pio_t, struct nios_spi_t
- Reconfiguration for NIOS Development Kit DK1C20:
  o move board related code from board/dk1c20
    to board/altera/dk1c20
  o create a new common source path board/altera/common
    and move generic flash access stuff into it
  o change/expand configuration file DK1C20.h
- Add support for NIOS Development Kit DK1S10
- Add status LED support for NIOS systems
- Add dual 7-segment LED support for Altera NIOS DevKits
Diffstat (limited to 'board/altera')
| -rw-r--r-- | board/altera/common/flash.c | 192 | ||||
| -rw-r--r-- | board/altera/common/sevenseg.c | 220 | ||||
| -rw-r--r-- | board/altera/common/sevenseg.h | 142 | ||||
| -rw-r--r-- | board/altera/dk1c20/Makefile | 48 | ||||
| -rw-r--r-- | board/altera/dk1c20/config.mk | 29 | ||||
| -rw-r--r-- | board/altera/dk1c20/dk1c20.c | 50 | ||||
| -rw-r--r-- | board/altera/dk1c20/flash.c | 62 | ||||
| -rw-r--r-- | board/altera/dk1c20/misc.c | 33 | ||||
| -rw-r--r-- | board/altera/dk1c20/u-boot.lds | 69 | ||||
| -rw-r--r-- | board/altera/dk1c20/vectors.S | 122 | ||||
| -rw-r--r-- | board/altera/dk1s10/Makefile | 48 | ||||
| -rw-r--r-- | board/altera/dk1s10/config.mk | 29 | ||||
| -rw-r--r-- | board/altera/dk1s10/dk1s10.c | 50 | ||||
| -rw-r--r-- | board/altera/dk1s10/flash.c | 62 | ||||
| -rw-r--r-- | board/altera/dk1s10/misc.c | 33 | ||||
| -rw-r--r-- | board/altera/dk1s10/u-boot.lds | 69 | ||||
| -rw-r--r-- | board/altera/dk1s10/vectors.S | 122 | 
17 files changed, 1380 insertions, 0 deletions
| diff --git a/board/altera/common/flash.c b/board/altera/common/flash.c new file mode 100644 index 000000000..0fa74abfd --- /dev/null +++ b/board/altera/common/flash.c @@ -0,0 +1,192 @@ +/* + * (C) Copyright 2000-2004 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + + +#include <common.h> +#include <nios.h> + +flash_info_t flash_info[CFG_MAX_FLASH_BANKS]; + +/*--------------------------------------------------------------------*/ +void flash_print_info (flash_info_t * info) +{ +	int i, k; +	unsigned long size; +	int erased; +	volatile unsigned char *flash; + +	printf ("  Size: %ld KB in %d Sectors\n", +		info->size >> 10, info->sector_count); +	printf ("  Sector Start Addresses:"); +	for (i = 0; i < info->sector_count; ++i) { + +		/* Check if whole sector is erased */ +		if (i != (info->sector_count - 1)) +			size = info->start[i + 1] - info->start[i]; +		else +			size = info->start[0] + info->size - info->start[i]; +		erased = 1; +		flash = (volatile unsigned char *) info->start[i]; +		for (k = 0; k < size; k++) { +			if (*flash++ != 0xff) { +				erased = 0; +				break; +			} +		} + +		/* Print the info */ +		if ((i % 5) == 0) +			printf ("\n   "); +		printf (" %08lX%s%s", info->start[i], erased ? " E" : "  ", +			info->protect[i] ? "RO " : "   "); +	} +	printf ("\n"); +} + +/*-------------------------------------------------------------------*/ + + +int flash_erase (flash_info_t * info, int s_first, int s_last) +{ +	volatile CFG_FLASH_WORD_SIZE *addr = (CFG_FLASH_WORD_SIZE *) (info->start[0]); +	volatile CFG_FLASH_WORD_SIZE *addr2; +	int prot, sect; +	int any = 0; +	unsigned oldpri; +	ulong start; + +	/* Some sanity checking */ +	if ((s_first < 0) || (s_first > s_last)) { +		printf ("- no sectors to erase\n"); +		return 1; +	} + +	prot = 0; +	for (sect = s_first; sect <= s_last; ++sect) { +		if (info->protect[sect]) { +			prot++; +		} +	} +	if (prot) { +		printf ("- Warning: %d protected sectors will not be erased!\n", +			prot); +	} else { +		printf ("\n"); +	} + +	/* NOTE: disabling interrupts on Nios can be very bad since it +	 * also disables the LO_LIMIT exception. It's better here to +	 * set the interrupt priority to 3 & restore it when we're done. +	 */ +	oldpri = ipri (3); + +	/* It's ok to erase multiple sectors provided we don't delay more +	 * than 50 usec between cmds ... at which point the erase time-out +	 * occurs. So don't go and put printf() calls in the loop ... it +	 * won't be very helpful ;-) +	 */ +	for (sect = s_first; sect <= s_last; sect++) { +		if (info->protect[sect] == 0) {	/* not protected */ +			addr2 = (CFG_FLASH_WORD_SIZE *) (info->start[sect]); +			*addr = 0xaa; +			*addr = 0x55; +			*addr = 0x80; +			*addr = 0xaa; +			*addr = 0x55; +			*addr2 = 0x30; +			any = 1; +		} +	} + +	/* Now just wait for 0xff & provide some user feedback while +	 * we wait. +	 */ +	if (any) { +		addr2 = (CFG_FLASH_WORD_SIZE *) (info->start[sect]); +		start = get_timer (0); +		while (*addr2 != 0xff) { +			udelay (1000 * 1000); +			putc ('.'); +			if (get_timer (start) > CFG_FLASH_ERASE_TOUT) { +				printf ("timeout\n"); +				return 1; +			} +		} +		printf ("\n"); +	} + +	/* Restore interrupt priority */ +	ipri (oldpri); + +	return 0; +} + +/*----------------------------------------------------------------------- + * Copy memory to flash, returns: + * 0 - OK + * 1 - write timeout + * 2 - Flash not erased + */ + +int write_buff (flash_info_t * info, uchar * src, ulong addr, ulong cnt) +{ + +	vu_char *cmd = (vu_char *) info->start[0]; +	vu_char *dst = (vu_char *) addr; +	unsigned char b; +	unsigned oldpri; +	ulong start; + +	while (cnt) { +		/* Check for sufficient erase */ +		b = *src; +		if ((*dst & b) != b) { +			printf ("%02x : %02x\n", *dst, b); +			return (2); +		} + +		/* Disable interrupts other than window underflow +		 * (interrupt priority 2) +		 */ +		oldpri = ipri (3); +		*cmd = 0xaa; +		*cmd = 0x55; +		*cmd = 0xa0; +		*dst = b; + +		/* Verify write */ +		start = get_timer (0); +		while (*dst != b) { +			if (get_timer (start) > CFG_FLASH_WRITE_TOUT) { +				ipri (oldpri); +				return 1; +			} +		} +		dst++; +		src++; +		cnt--; +		ipri (oldpri); +	} + +	return (0); +} diff --git a/board/altera/common/sevenseg.c b/board/altera/common/sevenseg.c new file mode 100644 index 000000000..fecfbd388 --- /dev/null +++ b/board/altera/common/sevenseg.c @@ -0,0 +1,220 @@ +/* + * (C) Copyright 2003, Li-Pro.Net <www.li-pro.net> + * Stephan Linz <linz@li-pro.net> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * common/sevenseg.c + * + * NIOS PIO based seven segment led support functions + */ + +#include <common.h> +#include <nios-io.h> + +#ifdef	CONFIG_SEVENSEG + +#define SEVENDEG_MASK_DP	((SEVENSEG_DIGIT_DP << 8) | SEVENSEG_DIGIT_DP) + +#ifdef	SEVENSEG_WRONLY	/* emulate read access */ +#if (SEVENSEG_ACTIVE == 0) +static unsigned int sevenseg_portval = ~0; +#else +static unsigned int sevenseg_portval = 0; +#endif +#endif + +static int sevenseg_init_done = 0; + +static inline void __sevenseg_set_masked (unsigned int mask, int value) +{ +	nios_pio_t *piop = (nios_pio_t*)SEVENSEG_BASE; + +#ifdef	SEVENSEG_WRONLY	/* emulate read access */ + +#if (SEVENSEG_ACTIVE == 0) +	if (value) +		sevenseg_portval &= ~mask; +	else +		sevenseg_portval |= mask; +#else +	if (value) +		sevenseg_portval |= mask; +	else +		sevenseg_portval &= ~mask; +#endif + +	piop->data = sevenseg_portval; + +#else	/* !SEVENSEG_WRONLY */ + +#if (SEVENSEG_ACTIVE == 0) +	if (value) +		piop->data &= ~mask; +	else +		piop->data |= mask; +#else +	if (value) +		piop->data |= mask; +	else +		piop->data &= ~mask; +#endif + +#endif	/* SEVENSEG_WRONLY */ +} + +static inline void __sevenseg_toggle_masked (unsigned int mask) +{ +	nios_pio_t *piop = (nios_pio_t*)SEVENSEG_BASE; + +#ifdef	SEVENSEG_WRONLY	/* emulate read access */ + +	sevenseg_portval ^= mask; +	piop->data = sevenseg_portval; + +#else	/* !SEVENSEG_WRONLY */ + +	piop->data ^= mask; + +#endif	/* SEVENSEG_WRONLY */ +} + +static inline void __sevenseg_set (unsigned int value) +{ +	nios_pio_t *piop = (nios_pio_t*)SEVENSEG_BASE; + +#ifdef	SEVENSEG_WRONLY	/* emulate read access */ + +#if (SEVENSEG_ACTIVE == 0) +	sevenseg_portval = (sevenseg_portval &   SEVENDEG_MASK_DP) +		         | ((~value)         & (~SEVENDEG_MASK_DP)); +#else +	sevenseg_portval = (sevenseg_portval & SEVENDEG_MASK_DP) +		         | (value); +#endif + +	piop->data = sevenseg_portval; + +#else	/* !SEVENSEG_WRONLY */ + +#if (SEVENSEG_ACTIVE == 0) +	piop->data = (piop->data &   SEVENDEG_MASK_DP) +		   | ((~value)   & (~SEVENDEG_MASK_DP)); +#else +	piop->data = (piop->data & SEVENDEG_MASK_DP) +		   | (value); +#endif + +#endif	/* SEVENSEG_WRONLY */ +} + +static inline void __sevenseg_init (void) +{ +	nios_pio_t *piop = (nios_pio_t*)SEVENSEG_BASE; + +	__sevenseg_set(0); + +#ifndef	SEVENSEG_WRONLY	/* setup direction */ + +	piop->direction |= mask; + +#endif	/* SEVENSEG_WRONLY */ +} + + +void sevenseg_set(int value) +{ +	unsigned char	digits[] = { +		SEVENSEG_DIGITS_0, +		SEVENSEG_DIGITS_1, +		SEVENSEG_DIGITS_2, +		SEVENSEG_DIGITS_3, +		SEVENSEG_DIGITS_4, +		SEVENSEG_DIGITS_5, +		SEVENSEG_DIGITS_6, +		SEVENSEG_DIGITS_7, +		SEVENSEG_DIGITS_8, +		SEVENSEG_DIGITS_9, +		SEVENSEG_DIGITS_A, +		SEVENSEG_DIGITS_B, +		SEVENSEG_DIGITS_C, +		SEVENSEG_DIGITS_D, +		SEVENSEG_DIGITS_E, +		SEVENSEG_DIGITS_F +	}; + +	if (!sevenseg_init_done) { +		__sevenseg_init(); +		sevenseg_init_done++; +	} + +	switch (value & SEVENSEG_MASK_CTRL) { + +		case SEVENSEG_RAW: +			__sevenseg_set( ( +				(digits[((value & SEVENSEG_MASK_VAL) >>  4)] << 8) | +				digits[((value & SEVENSEG_MASK_VAL) & 0xf)] ) ); +			return; +			break;	/* paranoia */ + +		case SEVENSEG_OFF: +			__sevenseg_set(0); +			__sevenseg_set_masked(SEVENDEG_MASK_DP, 0); +			return; +			break;	/* paranoia */ + +		case SEVENSEG_SET_DPL: +			__sevenseg_set_masked(SEVENSEG_DIGIT_DP, 1); +			return; +			break;	/* paranoia */ + +		case SEVENSEG_SET_DPH: +			__sevenseg_set_masked((SEVENSEG_DIGIT_DP << 8), 1); +			return; +			break;	/* paranoia */ + +		case SEVENSEG_RES_DPL: +			__sevenseg_set_masked(SEVENSEG_DIGIT_DP, 0); +			return; +			break;	/* paranoia */ + +		case SEVENSEG_RES_DPH: +			__sevenseg_set_masked((SEVENSEG_DIGIT_DP << 8), 0); +			return; +			break;	/* paranoia */ + +		case SEVENSEG_TOG_DPL: +			__sevenseg_toggle_masked(SEVENSEG_DIGIT_DP); +			return; +			break;	/* paranoia */ + +		case SEVENSEG_TOG_DPH: +			__sevenseg_toggle_masked((SEVENSEG_DIGIT_DP << 8)); +			return; +			break;	/* paranoia */ + +		case SEVENSEG_LO: +		case SEVENSEG_HI: +		case SEVENSEG_STR: +		default: +			break; +	} +} + +#endif	/* CONFIG_SEVENSEG */ diff --git a/board/altera/common/sevenseg.h b/board/altera/common/sevenseg.h new file mode 100644 index 000000000..cbfd2e74a --- /dev/null +++ b/board/altera/common/sevenseg.h @@ -0,0 +1,142 @@ +/* + * (C) Copyright 2003, Li-Pro.Net <www.li-pro.net> + * Stephan Linz <linz@li-pro.net> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * common/sevenseg.h + * + * NIOS PIO based seven segment led support functions + */ + +#ifndef __DK1S10_SEVENSEG_H__ +#define __DK1S10_SEVENSEG_H__ + +#ifdef	CONFIG_SEVENSEG + +/* + *  15                    8 7      0 + * |-----------------------|--------| + * |   controll value      |  value | + * ---------------------------------- + */ +#define	SEVENSEG_RAW		(int)(0)	/* write out byte value (hex) */ +#define	SEVENSEG_OFF		(int)( 1 << 8)	/* display switch off */ +#define	SEVENSEG_SET_DPL	(int)( 2 << 8)	/* set dp low  nibble */ +#define	SEVENSEG_SET_DPH	(int)( 3 << 8)	/* set dp high nibble */ +#define	SEVENSEG_RES_DPL	(int)( 4 << 8)	/* reset dp low  nibble */ +#define	SEVENSEG_RES_DPH	(int)( 5 << 8)	/* reset dp high nibble */ +#define	SEVENSEG_TOG_DPL	(int)( 6 << 8)	/* toggle dp low  nibble */ +#define	SEVENSEG_TOG_DPH	(int)( 7 << 8)	/* toggle dp high nibble */ +#define	SEVENSEG_LO		(int)( 8 << 8)	/* write out low nibble only */ +#define	SEVENSEG_HI		(int)( 9 << 8)	/* write out high nibble only */ +#define	SEVENSEG_STR		(int)(10 << 8)	/* write out a string */ + +#define	SEVENSEG_MASK_VAL	(0xff)		/* only used by SEVENSEG_RAW */ +#define	SEVENSEG_MASK_CTRL	(~SEVENSEG_MASK_VAL) + +#ifdef	SEVENSEG_DIGIT_HI_LO_EQUAL + +#define	SEVENSEG_DIGITS_0	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_F	) +#define	SEVENSEG_DIGITS_1	(	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_C	) +#define	SEVENSEG_DIGITS_2	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_3	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_4	(	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_F	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_5	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_F	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_6	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_F	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_7	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_C	) +#define	SEVENSEG_DIGITS_8	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_F	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_9	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_F	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_A	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_F	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_B	(	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_F	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_C	(	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_D	(	SEVENSEG_DIGIT_B	\ +				|	SEVENSEG_DIGIT_C	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_E	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_D	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_F	\ +				|	SEVENSEG_DIGIT_G	) +#define	SEVENSEG_DIGITS_F	(	SEVENSEG_DIGIT_A	\ +				|	SEVENSEG_DIGIT_E	\ +				|	SEVENSEG_DIGIT_F	\ +				|	SEVENSEG_DIGIT_G	) + +#else	/* !SEVENSEG_DIGIT_HI_LO_EQUAL */ +#error SEVENSEG: different pin asssignments not supported +#endif + +void sevenseg_set(int value); + +#endif	/* CONFIG_SEVENSEG */ + +#endif	/* __DK1S10_SEVENSEG_H__ */ diff --git a/board/altera/dk1c20/Makefile b/board/altera/dk1c20/Makefile new file mode 100644 index 000000000..9182a4ecf --- /dev/null +++ b/board/altera/dk1c20/Makefile @@ -0,0 +1,48 @@ +# +# (C) Copyright 2001-2004 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# See file CREDITS for list of people who contributed to this +# project. +# +# 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., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB	= lib$(BOARD).a + +OBJS	:= $(BOARD).o flash.o misc.o + +SOBJS  = vectors.o + +$(LIB):	$(OBJS) $(SOBJS) +	$(AR) crv $@ $^ + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +.depend:	Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) +		$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +-include .depend + +######################################################################### diff --git a/board/altera/dk1c20/config.mk b/board/altera/dk1c20/config.mk new file mode 100644 index 000000000..d200715f5 --- /dev/null +++ b/board/altera/dk1c20/config.mk @@ -0,0 +1,29 @@ +# +# (C) Copyright 2003 +# Psyent Corporation +# Scott McNutt <smcnutt@psyent.com> +# +# See file CREDITS for list of people who contributed to this +# project. +# +# 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., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +TEXT_BASE = 0x018c0000 + +ifeq ($(debug),1) +PLATFORM_CPPFLAGS += -DDEBUG +endif diff --git a/board/altera/dk1c20/dk1c20.c b/board/altera/dk1c20/dk1c20.c new file mode 100644 index 000000000..96f1ecef6 --- /dev/null +++ b/board/altera/dk1c20/dk1c20.c @@ -0,0 +1,50 @@ +/* + * (C) Copyright 2003, Psyent Corporation <www.psyent.com> + * Scott McNutt <smcnutt@psyent.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#if	defined(CONFIG_SEVENSEG) +#include "../common/sevenseg.h" +#endif + +void _default_hdlr (void) +{ +	printf ("default_hdlr\n"); +} + +int board_pre_init (void) +{ +	/* init seven segment led display and switch off */ +	sevenseg_set(SEVENSEG_OFF); +	return 0; +} + +int checkboard (void) +{ +	puts ("Board: Altera Nios 1C20 Development Kit\n"); +	return 0; +} + +long int initdram (int board_type) +{ +	return (0); +} diff --git a/board/altera/dk1c20/flash.c b/board/altera/dk1c20/flash.c new file mode 100644 index 000000000..1f344dd33 --- /dev/null +++ b/board/altera/dk1c20/flash.c @@ -0,0 +1,62 @@ +/* + * (C) Copyright 2000 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + + +#include <common.h> +#include <nios.h> + +/* + * include common flash code (for altera boards) + */ +#include "../common/flash.c" + +/*----------------------------------------------------------------------*/ +#define BANKSZ		CFG_FLASH_SIZE +#define SECTSZ		(64 * 1024) +#define USERFLASH	(2 * 1024 * 1024)	/* bottom 2 MB for user	*/ + +/*----------------------------------------------------------------------*/ +unsigned long flash_init (void) +{ +	int i; +	unsigned long addr; +	flash_info_t *fli = &flash_info[0]; + +	fli->size = BANKSZ; +	fli->sector_count = CFG_MAX_FLASH_SECT; +	fli->flash_id = FLASH_MAN_AMD + FLASH_AMDLV065D; + +	addr = CFG_FLASH_BASE; +	for (i = 0; i < fli->sector_count; ++i) { +		fli->start[i] = addr; +		addr += SECTSZ; + +		/* Protect all but 2 MByte user area */ +		if (addr < (CFG_FLASH_BASE + USERFLASH)) +			fli->protect[i] = 0; +		else +			fli->protect[i] = 1; +	} + +	return (BANKSZ); +} diff --git a/board/altera/dk1c20/misc.c b/board/altera/dk1c20/misc.c new file mode 100644 index 000000000..f25cdebd7 --- /dev/null +++ b/board/altera/dk1c20/misc.c @@ -0,0 +1,33 @@ +/* + * (C) Copyright 2003, Li-Pro.Net <www.li-pro.net> + * Stephan Linz <linz@li-pro.net> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * board/altera/dk1s10/misc.c + * + * miscellaneous board interfaces / drivers + */ + +#include <common.h> + +#if	defined(CONFIG_SEVENSEG) +#include "../common/sevenseg.h" +#include "../common/sevenseg.c" +#endif diff --git a/board/altera/dk1c20/u-boot.lds b/board/altera/dk1c20/u-boot.lds new file mode 100644 index 000000000..a7d35af3f --- /dev/null +++ b/board/altera/dk1c20/u-boot.lds @@ -0,0 +1,69 @@ +/* + * (C) Copyright 2003, Psyent Corporation <www.psyent.com> + * Scott McNutt <smcnutt@psyent.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + + +OUTPUT_FORMAT("elf32-nios") +OUTPUT_ARCH(nios) +ENTRY(_start) + +SECTIONS +{ +	.text : +	{ +	  cpu/nios/start.o (.text) +	  *(.text) +	} +	__text_end = .; + +	. = ALIGN(4); +	.rodata : +	{ +		*(.rodata) +	} +	__rodata_end = .; + +	. = ALIGN(4); +	.data : +	{ +		*(.data) +	} +	. = ALIGN(4); +	__data_end = .; + +	__u_boot_cmd_start = .; +	.u_boot_cmd : +	{ +		*(.u_boot_cmd) +	} +	. = ALIGN(4); +	__u_boot_cmd_end = .; + +	__bss_start = .; +	. = ALIGN(4); +	.bss : +	{ +		*(.bss) +	} +	. = ALIGN(4); +	__bss_end = .; +} diff --git a/board/altera/dk1c20/vectors.S b/board/altera/dk1c20/vectors.S new file mode 100644 index 000000000..7094eb63e --- /dev/null +++ b/board/altera/dk1c20/vectors.S @@ -0,0 +1,122 @@ +/* + * (C) Copyright 2003, Psyent Corporation <www.psyent.com> + * Scott McNutt <smcnutt@psyent.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + + +/************************************************************************* + * Exception Vector Table + * + * This could have gone in the cpu soure tree, but the whole point of + * Nios is customization -- and polluting the cpu source tree with + * board-specific ifdef's really defeats the purpose, no? With this in + * the board-specific tree, each board has the freedom to organize + * vectors/traps, etc anyway it wants. The init code copies this table + * to the proper location. + * + * Each board can do what it likes here. But there are four "standard" + * handlers availble: + * + *	_cwp_lolimit	-Handles register window underflows. + *	_cwp_hilimit	-Handles register window overflows. + *	_timebase_int	-Increments the timebase. + *	_def_xhandler	-Default exception handler. + * + * _timebase_int handles a Nios Timer interrupt and increments the + * timestamp used for the get_timer(), reset_timer(), etc. routines. It + * expects the timer to be configured like the standard-32 low priority + * timer. + * + * _def_xhandler dispatches exceptions/traps via the external_interrupt() + * routine. This lets you use the irq_install_handler() and handle your + * interrupts/traps with code written in C. + ************************************************************************/ + +	.data +	.global _vectors +	.align	4 +_vectors: + +	.long	_def_xhandler@h		/* Vector 0  - NMI */ +	.long	_cwp_lolimit@h		/* Vector 1  -  underflow */ +	.long	_cwp_hilimit@h		/* Vector 2  - overflow	*/ + +	.long	_def_xhandler@h		/* Vector 3 - GNUPro debug */ +	.long	_def_xhandler@h		/* Vector 4 - GNUPro debug */ +	.long	_def_xhandler@h		/* Vector 5 - GNUPro debug */ +	.long	_def_xhandler@h		/* Vector 6 - future reserved */ +	.long	_def_xhandler@h		/* Vector 7 - future reserved */ +	.long	_def_xhandler@h		/* Vector 8 - future reserved */ +	.long	_def_xhandler@h		/* Vector 9 - future reserved */ +	.long	_def_xhandler@h		/* Vector 10 - future reserved */ +	.long	_def_xhandler@h		/* Vector 11 - future reserved */ +	.long	_def_xhandler@h		/* Vector 12 - future reserved */ +	.long	_def_xhandler@h		/* Vector 13 - future reserved */ +	.long	_def_xhandler@h		/* Vector 14 - future reserved */ +	.long	_def_xhandler@h		/* Vector 15 - future reserved */ +	.long	_def_xhandler@h		/* Vector 16 */ +	.long	_def_xhandler@h		/* Vector 17 */ +	.long	_def_xhandler@h		/* Vector 18 */ +	.long	_def_xhandler@h		/* Vector 19 */ +	.long	_def_xhandler@h		/* Vector 20 */ +	.long	_def_xhandler@h		/* Vector 21 */ +	.long	_def_xhandler@h		/* Vector 22 */ +	.long	_def_xhandler@h		/* Vector 23 */ +	.long	_def_xhandler@h		/* Vector 24 */ +	.long	_def_xhandler@h		/* Vector 25 */ +	.long	_def_xhandler@h		/* Vector 26 */ +	.long	_def_xhandler@h		/* Vector 27 */ +	.long	_def_xhandler@h		/* Vector 28 */ +	.long	_def_xhandler@h		/* Vector 29 */ +	.long	_def_xhandler@h		/* Vector 30 */ +	.long	_def_xhandler@h		/* Vector 31 */ +	.long	_def_xhandler@h		/* Vector 32 */ +	.long	_def_xhandler@h		/* Vector 33 */ +	.long	_def_xhandler@h		/* Vector 34 */ +	.long	_def_xhandler@h		/* Vector 35 */ +	.long	_def_xhandler@h		/* Vector 36 */ +	.long	_def_xhandler@h		/* Vector 37 */ +	.long	_def_xhandler@h		/* Vector 38 */ +	.long	_def_xhandler@h		/* Vector 39 */ +	.long	_def_xhandler@h		/* Vector 40 */ +	.long	_def_xhandler@h		/* Vector 41 */ +	.long	_def_xhandler@h		/* Vector 42 */ +	.long	_def_xhandler@h		/* Vector 43 */ +	.long	_def_xhandler@h		/* Vector 44 */ +	.long	_def_xhandler@h		/* Vector 45 */ +	.long	_def_xhandler@h		/* Vector 46 */ +	.long	_def_xhandler@h		/* Vector 47 */ +	.long	_def_xhandler@h		/* Vector 48 */ +	.long	_def_xhandler@h		/* Vector 49 */ +	.long	_timebase_int@h		/* Vector 50 - lopri timer*/ +	.long	_def_xhandler@h		/* Vector 51 */ +	.long	_def_xhandler@h		/* Vector 52 */ +	.long	_def_xhandler@h		/* Vector 53 */ +	.long	_def_xhandler@h		/* Vector 54 */ +	.long	_def_xhandler@h		/* Vector 55 */ +	.long	_def_xhandler@h		/* Vector 56 */ +	.long	_def_xhandler@h		/* Vector 57 */ +	.long	_def_xhandler@h		/* Vector 58 */ +	.long	_def_xhandler@h		/* Vector 59 */ +	.long	_def_xhandler@h		/* Vector 60 */ +	.long	_def_xhandler@h		/* Vector 61 */ +	.long	_def_xhandler@h		/* Vector 62 */ +	.long	_def_xhandler@h		/* Vector 63 */ diff --git a/board/altera/dk1s10/Makefile b/board/altera/dk1s10/Makefile new file mode 100644 index 000000000..9182a4ecf --- /dev/null +++ b/board/altera/dk1s10/Makefile @@ -0,0 +1,48 @@ +# +# (C) Copyright 2001-2004 +# Wolfgang Denk, DENX Software Engineering, wd@denx.de. +# +# See file CREDITS for list of people who contributed to this +# project. +# +# 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., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +include $(TOPDIR)/config.mk + +LIB	= lib$(BOARD).a + +OBJS	:= $(BOARD).o flash.o misc.o + +SOBJS  = vectors.o + +$(LIB):	$(OBJS) $(SOBJS) +	$(AR) crv $@ $^ + +clean: +	rm -f $(SOBJS) $(OBJS) + +distclean:	clean +	rm -f $(LIB) core *.bak .depend + +######################################################################### + +.depend:	Makefile $(SOBJS:.o=.S) $(OBJS:.o=.c) +		$(CC) -M $(CPPFLAGS) $(SOBJS:.o=.S) $(OBJS:.o=.c) > $@ + +-include .depend + +######################################################################### diff --git a/board/altera/dk1s10/config.mk b/board/altera/dk1s10/config.mk new file mode 100644 index 000000000..d200715f5 --- /dev/null +++ b/board/altera/dk1s10/config.mk @@ -0,0 +1,29 @@ +# +# (C) Copyright 2003 +# Psyent Corporation +# Scott McNutt <smcnutt@psyent.com> +# +# See file CREDITS for list of people who contributed to this +# project. +# +# 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., 59 Temple Place, Suite 330, Boston, +# MA 02111-1307 USA +# + +TEXT_BASE = 0x018c0000 + +ifeq ($(debug),1) +PLATFORM_CPPFLAGS += -DDEBUG +endif diff --git a/board/altera/dk1s10/dk1s10.c b/board/altera/dk1s10/dk1s10.c new file mode 100644 index 000000000..6d7be2d7c --- /dev/null +++ b/board/altera/dk1s10/dk1s10.c @@ -0,0 +1,50 @@ +/* + * (C) Copyright 2003, Psyent Corporation <www.psyent.com> + * Scott McNutt <smcnutt@psyent.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#if	defined(CONFIG_SEVENSEG) +#include "../common/sevenseg.h" +#endif + +void _default_hdlr (void) +{ +	printf ("default_hdlr\n"); +} + +int board_pre_init (void) +{ +	/* init seven segment led display and switch off */ +	sevenseg_set(SEVENSEG_OFF); +	return 0; +} + +int checkboard (void) +{ +	puts ("Board: Altera Nios 1S10 Development Kit\n"); +	return 0; +} + +long int initdram (int board_type) +{ +	return (0); +} diff --git a/board/altera/dk1s10/flash.c b/board/altera/dk1s10/flash.c new file mode 100644 index 000000000..5c7093352 --- /dev/null +++ b/board/altera/dk1s10/flash.c @@ -0,0 +1,62 @@ +/* + * (C) Copyright 2000-2004 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + + +#include <common.h> +#include <nios.h> + +/* + * include common flash code (for altera boards) + */ +#include "../common/flash.c" + +/*---------------------------------------------------------------------*/ +#define BANKSZ	(8 * 1024 * 1024) +#define SECTSZ	(64 * 1024) +#define USERFLASH (2 * 1024 * 1024)	/* bottom 2 MB for user */ + +/*---------------------------------------------------------------------*/ +unsigned long flash_init (void) +{ +	int i; +	unsigned long addr; +	flash_info_t *fli = &flash_info[0]; + +	fli->size = BANKSZ; +	fli->sector_count = CFG_MAX_FLASH_SECT; +	fli->flash_id = FLASH_MAN_AMD + FLASH_AMDLV065D; + +	addr = CFG_FLASH_BASE; +	for (i = 0; i < fli->sector_count; ++i) { +		fli->start[i] = addr; +		addr += SECTSZ; + +		/* Protect all but 2 MByte user area */ +		if (addr < (CFG_FLASH_BASE + USERFLASH)) +			fli->protect[i] = 0; +		else +			fli->protect[i] = 1; +	} + +	return (BANKSZ); +} diff --git a/board/altera/dk1s10/misc.c b/board/altera/dk1s10/misc.c new file mode 100644 index 000000000..f25cdebd7 --- /dev/null +++ b/board/altera/dk1s10/misc.c @@ -0,0 +1,33 @@ +/* + * (C) Copyright 2003, Li-Pro.Net <www.li-pro.net> + * Stephan Linz <linz@li-pro.net> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * board/altera/dk1s10/misc.c + * + * miscellaneous board interfaces / drivers + */ + +#include <common.h> + +#if	defined(CONFIG_SEVENSEG) +#include "../common/sevenseg.h" +#include "../common/sevenseg.c" +#endif diff --git a/board/altera/dk1s10/u-boot.lds b/board/altera/dk1s10/u-boot.lds new file mode 100644 index 000000000..a7d35af3f --- /dev/null +++ b/board/altera/dk1s10/u-boot.lds @@ -0,0 +1,69 @@ +/* + * (C) Copyright 2003, Psyent Corporation <www.psyent.com> + * Scott McNutt <smcnutt@psyent.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + + +OUTPUT_FORMAT("elf32-nios") +OUTPUT_ARCH(nios) +ENTRY(_start) + +SECTIONS +{ +	.text : +	{ +	  cpu/nios/start.o (.text) +	  *(.text) +	} +	__text_end = .; + +	. = ALIGN(4); +	.rodata : +	{ +		*(.rodata) +	} +	__rodata_end = .; + +	. = ALIGN(4); +	.data : +	{ +		*(.data) +	} +	. = ALIGN(4); +	__data_end = .; + +	__u_boot_cmd_start = .; +	.u_boot_cmd : +	{ +		*(.u_boot_cmd) +	} +	. = ALIGN(4); +	__u_boot_cmd_end = .; + +	__bss_start = .; +	. = ALIGN(4); +	.bss : +	{ +		*(.bss) +	} +	. = ALIGN(4); +	__bss_end = .; +} diff --git a/board/altera/dk1s10/vectors.S b/board/altera/dk1s10/vectors.S new file mode 100644 index 000000000..7094eb63e --- /dev/null +++ b/board/altera/dk1s10/vectors.S @@ -0,0 +1,122 @@ +/* + * (C) Copyright 2003, Psyent Corporation <www.psyent.com> + * Scott McNutt <smcnutt@psyent.com> + * + * See file CREDITS for list of people who contributed to this + * project. + * + * 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., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + + +/************************************************************************* + * Exception Vector Table + * + * This could have gone in the cpu soure tree, but the whole point of + * Nios is customization -- and polluting the cpu source tree with + * board-specific ifdef's really defeats the purpose, no? With this in + * the board-specific tree, each board has the freedom to organize + * vectors/traps, etc anyway it wants. The init code copies this table + * to the proper location. + * + * Each board can do what it likes here. But there are four "standard" + * handlers availble: + * + *	_cwp_lolimit	-Handles register window underflows. + *	_cwp_hilimit	-Handles register window overflows. + *	_timebase_int	-Increments the timebase. + *	_def_xhandler	-Default exception handler. + * + * _timebase_int handles a Nios Timer interrupt and increments the + * timestamp used for the get_timer(), reset_timer(), etc. routines. It + * expects the timer to be configured like the standard-32 low priority + * timer. + * + * _def_xhandler dispatches exceptions/traps via the external_interrupt() + * routine. This lets you use the irq_install_handler() and handle your + * interrupts/traps with code written in C. + ************************************************************************/ + +	.data +	.global _vectors +	.align	4 +_vectors: + +	.long	_def_xhandler@h		/* Vector 0  - NMI */ +	.long	_cwp_lolimit@h		/* Vector 1  -  underflow */ +	.long	_cwp_hilimit@h		/* Vector 2  - overflow	*/ + +	.long	_def_xhandler@h		/* Vector 3 - GNUPro debug */ +	.long	_def_xhandler@h		/* Vector 4 - GNUPro debug */ +	.long	_def_xhandler@h		/* Vector 5 - GNUPro debug */ +	.long	_def_xhandler@h		/* Vector 6 - future reserved */ +	.long	_def_xhandler@h		/* Vector 7 - future reserved */ +	.long	_def_xhandler@h		/* Vector 8 - future reserved */ +	.long	_def_xhandler@h		/* Vector 9 - future reserved */ +	.long	_def_xhandler@h		/* Vector 10 - future reserved */ +	.long	_def_xhandler@h		/* Vector 11 - future reserved */ +	.long	_def_xhandler@h		/* Vector 12 - future reserved */ +	.long	_def_xhandler@h		/* Vector 13 - future reserved */ +	.long	_def_xhandler@h		/* Vector 14 - future reserved */ +	.long	_def_xhandler@h		/* Vector 15 - future reserved */ +	.long	_def_xhandler@h		/* Vector 16 */ +	.long	_def_xhandler@h		/* Vector 17 */ +	.long	_def_xhandler@h		/* Vector 18 */ +	.long	_def_xhandler@h		/* Vector 19 */ +	.long	_def_xhandler@h		/* Vector 20 */ +	.long	_def_xhandler@h		/* Vector 21 */ +	.long	_def_xhandler@h		/* Vector 22 */ +	.long	_def_xhandler@h		/* Vector 23 */ +	.long	_def_xhandler@h		/* Vector 24 */ +	.long	_def_xhandler@h		/* Vector 25 */ +	.long	_def_xhandler@h		/* Vector 26 */ +	.long	_def_xhandler@h		/* Vector 27 */ +	.long	_def_xhandler@h		/* Vector 28 */ +	.long	_def_xhandler@h		/* Vector 29 */ +	.long	_def_xhandler@h		/* Vector 30 */ +	.long	_def_xhandler@h		/* Vector 31 */ +	.long	_def_xhandler@h		/* Vector 32 */ +	.long	_def_xhandler@h		/* Vector 33 */ +	.long	_def_xhandler@h		/* Vector 34 */ +	.long	_def_xhandler@h		/* Vector 35 */ +	.long	_def_xhandler@h		/* Vector 36 */ +	.long	_def_xhandler@h		/* Vector 37 */ +	.long	_def_xhandler@h		/* Vector 38 */ +	.long	_def_xhandler@h		/* Vector 39 */ +	.long	_def_xhandler@h		/* Vector 40 */ +	.long	_def_xhandler@h		/* Vector 41 */ +	.long	_def_xhandler@h		/* Vector 42 */ +	.long	_def_xhandler@h		/* Vector 43 */ +	.long	_def_xhandler@h		/* Vector 44 */ +	.long	_def_xhandler@h		/* Vector 45 */ +	.long	_def_xhandler@h		/* Vector 46 */ +	.long	_def_xhandler@h		/* Vector 47 */ +	.long	_def_xhandler@h		/* Vector 48 */ +	.long	_def_xhandler@h		/* Vector 49 */ +	.long	_timebase_int@h		/* Vector 50 - lopri timer*/ +	.long	_def_xhandler@h		/* Vector 51 */ +	.long	_def_xhandler@h		/* Vector 52 */ +	.long	_def_xhandler@h		/* Vector 53 */ +	.long	_def_xhandler@h		/* Vector 54 */ +	.long	_def_xhandler@h		/* Vector 55 */ +	.long	_def_xhandler@h		/* Vector 56 */ +	.long	_def_xhandler@h		/* Vector 57 */ +	.long	_def_xhandler@h		/* Vector 58 */ +	.long	_def_xhandler@h		/* Vector 59 */ +	.long	_def_xhandler@h		/* Vector 60 */ +	.long	_def_xhandler@h		/* Vector 61 */ +	.long	_def_xhandler@h		/* Vector 62 */ +	.long	_def_xhandler@h		/* Vector 63 */ |