diff options
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/Makefile.am | 5 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/console/console.c | 2 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/console/sci.c | 19 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/include/bsp.h | 2 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/include/mrm332.h | 7 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg | 34 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/preinstall.am | 4 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/start/start.S | 125 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/startup/except_vect_332_ROM.S | 289 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/startup/linkcmds | 302 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM | 212 | ||||
-rw-r--r-- | c/src/lib/libbsp/m68k/mrm332/startup/start_c.c | 185 |
12 files changed, 296 insertions, 890 deletions
diff --git a/c/src/lib/libbsp/m68k/mrm332/Makefile.am b/c/src/lib/libbsp/m68k/mrm332/Makefile.am index 29b9b4aecc..9de7cee5ed 100644 --- a/c/src/lib/libbsp/m68k/mrm332/Makefile.am +++ b/c/src/lib/libbsp/m68k/mrm332/Makefile.am @@ -22,7 +22,7 @@ noinst_LIBRARIES = libbspstart.a libbspstart_a_SOURCES = start/start.S project_lib_DATA = start.$(OBJEXT) -dist_project_lib_DATA += startup/linkcmds startup/linkcmds_ROM +dist_project_lib_DATA += startup/linkcmds noinst_LIBRARIES += libbsp.a libbsp_a_SOURCES = @@ -33,8 +33,7 @@ libbsp_a_SOURCES += startup/start_c.c ../../shared/bsplibc.c \ ../../shared/bootcard.c ../../shared/sbrk.c \ ../../shared/bspclean.c \ ../../shared/setvec.c ../../shared/bsppretaskinghook.c \ - ../../shared/bspgetworkarea.c ../../shared/gnatinstallhandler.c \ - startup/except_vect_332_ROM.S + ../../shared/bspgetworkarea.c ../../shared/gnatinstallhandler.c # clock libbsp_a_SOURCES += clock/ckinit.c # console diff --git a/c/src/lib/libbsp/m68k/mrm332/console/console.c b/c/src/lib/libbsp/m68k/mrm332/console/console.c index ce1547e603..94fb8032bb 100644 --- a/c/src/lib/libbsp/m68k/mrm332/console/console.c +++ b/c/src/lib/libbsp/m68k/mrm332/console/console.c @@ -42,7 +42,7 @@ rtems_device_driver console_open( /* SCI internal uart */ - status = rtems_termios_open( major, minor, arg, SciGetTermiosHandlers( TRUE ) ); + status = rtems_termios_open( major, minor, arg, SciGetTermiosHandlers( FALSE ) ); return status; } diff --git a/c/src/lib/libbsp/m68k/mrm332/console/sci.c b/c/src/lib/libbsp/m68k/mrm332/console/sci.c index 4b67c33f5b..a671fb0f6b 100644 --- a/c/src/lib/libbsp/m68k/mrm332/console/sci.c +++ b/c/src/lib/libbsp/m68k/mrm332/console/sci.c @@ -351,8 +351,8 @@ rtems_isr SciIsr( rtems_vector_number vector ) if ( (*SCSR) & SCI_ERROR_OVERRUN ) SciErrorsOverrun ++; /* see if it was a transmit interrupt */ - - if ( (*SCSR) & SCI_XMTR_AVAILABLE ) /* data reg empty, xmt complete */ + /* data reg empty, xmt complete */ + if ( ( *SCCR1 & SCI_ENABLE_INT_TX ) && ( (*SCSR) & SCI_XMTR_AVAILABLE ) ) { SciDisableTransmitInterrupts(); @@ -554,12 +554,17 @@ int SciInterruptOpen( SciSetDataBits(SCI_8_DATA_BITS); /* set data bits to 8 */ - /* Install our interrupt handler into RTEMS, where does 66 come from? */ + /* Install our interrupt handler into RTEMS. */ + /* 68 is an unused user-defined vector. Note that the vector must be */ + /* even - it sets the low bit for SPI interrupts, and clears it for */ + /* SCI interrupts. Also note that vector 66 is used by CPU32bug on */ + /* the mrm332. */ - rtems_interrupt_catch( SciIsr, 66, &old_vector ); + rtems_interrupt_catch( SciIsr, 68, &old_vector ); - *QIVR = 66; - *QIVR &= 0xf8; + *QSMCR = (*QSMCR & ~IARB) | 1; // Is 1 a good value for qsm iarb? + *QIVR = 68; + *QILR &= 0xf8; *QILR |= 0x06 & 0x07; SciEnableTransmitter(); /* enable the transmitter */ @@ -1382,7 +1387,7 @@ void SciWriteCharWait(uint8_t c) { /* poll the fifo, waiting for room for another character */ - while ( ( *SCSR & SCI_XMTR_AVAILABLE ) == 0 ) + while ( ( *SCSR & SCI_XMTR_AVAILABLE ) != SCI_XMTR_AVAILABLE ) { /* Either we are writing to the fifo faster than * the uart can clock bytes out onto the cable, diff --git a/c/src/lib/libbsp/m68k/mrm332/include/bsp.h b/c/src/lib/libbsp/m68k/mrm332/include/bsp.h index 456b315430..8f2c7cf093 100644 --- a/c/src/lib/libbsp/m68k/mrm332/include/bsp.h +++ b/c/src/lib/libbsp/m68k/mrm332/include/bsp.h @@ -42,7 +42,7 @@ extern char _copy_start[]; extern char _edata[]; extern char _clear_start[]; extern char end[]; -extern char _copy_data_from_rom[]; +extern bool _copy_data_from_rom; /* constants */ diff --git a/c/src/lib/libbsp/m68k/mrm332/include/mrm332.h b/c/src/lib/libbsp/m68k/mrm332/include/mrm332.h index 58e5b2035a..1b8672752d 100644 --- a/c/src/lib/libbsp/m68k/mrm332/include/mrm332.h +++ b/c/src/lib/libbsp/m68k/mrm332/include/mrm332.h @@ -27,6 +27,8 @@ /* System Clock definitions */ #define XTAL 32768.0 /* crystal frequency in Hz */ +/* Specify the CPU frequency. Do not specify a faster clock than your */ +/* CPU is rated for! */ #if 0 /* Default MRM clock rate (8.388688 MHz) set by CPU32: */ #define MRM_W 0 /* system clock parameters */ @@ -34,18 +36,19 @@ #define MRM_Y 0x3f #endif -#if 1 +#if 0 /* 16.77722 MHz: */ #define MRM_W 1 /* system clock parameters */ #define MRM_X 1 #define MRM_Y 0x0f #endif -#if 0 +#if 1 /* 25.16582 MHz: */ #define MRM_W 1 /* system clock parameters */ #define MRM_X 1 #define MRM_Y 0x17 +#define SET_EDIV #endif #define SYS_CLOCK (XTAL*4.0*(MRM_Y+1)*(1 << (2*MRM_W+MRM_X))) diff --git a/c/src/lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg b/c/src/lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg index bf55e4fe02..de07e73786 100644 --- a/c/src/lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg +++ b/c/src/lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg @@ -5,41 +5,15 @@ include $(RTEMS_ROOT)/make/custom/default.cfg RTEMS_CPU=m68k -RTEMS_CPU_MODEL=m68332 +RTEMS_CPU_MODEL=mcpu32 # This contains the compiler options necessary to select the CPU model # and (hopefully) optimize for it. CPU_CFLAGS = -mcpu=cpu32 -# optimize flag: typically -O2 -CFLAGS_OPTIMIZE_V = -O2 -g -fomit-frame-pointer +# using optimise for size due to small memory on target board. +CFLAGS_OPTIMIZE_V = -Os -g -fomit-frame-pointer -ifeq ($(MRM_IN_ROM),yes) -# Build a rommable image - move the .data section after the .text section -# in the image. -CPU_CFLAGS += -qnolinkcmds -T $(exec_prefix)/mrm332/lib/linkcmds_ROM -endif - -ifeq ($(MRM_IN_ROM),yes) -define bsp-post-link - $(OBJCOPY) --adjust-section-vma \ - .data=`m68k-rtems-objdump --section-headers $(basename $@).pxe | \ - awk 'function h2d(x) { x=toupper(x); digits=length(x); s=0 ; \ - for (p=digits; p>0; p--) \ - s += (16^(p-1)) * ( index("0123456789ABCDEF",\ - substr(x,1+digits-p,1)) -1 );\ - return s } ;\ - /\.text/ { base = $$4 ; size = $$3 };\ - END { printf("0x%x", h2d(base) + h2d(size)) }'\ - ` $(basename $@).pxe $(basename $@)$(EXEEXT) - $(OBJCOPY) -O srec $(basename $@)$(EXEEXT) $(basename $@).srec - sed -e 's/.$$//' -e '/^S0/d' $(basename $@).srec | \ - $(PACKHEX) > $(basename $@)$(DOWNEXT) - $(NM) -g -n $(basename $@).pxe > $(basename $@).pnum - rm -f $(basename $@).srec $(basename $@).srec - $(default-bsp-post-link) -endef -else define bsp-post-link $(OBJCOPY) -O srec $(basename $@)$(EXEEXT) $(basename $@).srec sed -e 's/.$$//' -e '/^S0/d' $(basename $@).srec | \ @@ -47,4 +21,4 @@ define bsp-post-link rm -f $(basename $@).srec $(default-bsp-post-link) endef -endif + diff --git a/c/src/lib/libbsp/m68k/mrm332/preinstall.am b/c/src/lib/libbsp/m68k/mrm332/preinstall.am index 4a71e7df99..4ab583c554 100644 --- a/c/src/lib/libbsp/m68k/mrm332/preinstall.am +++ b/c/src/lib/libbsp/m68k/mrm332/preinstall.am @@ -69,7 +69,3 @@ $(PROJECT_LIB)/linkcmds: startup/linkcmds $(PROJECT_LIB)/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds -$(PROJECT_LIB)/linkcmds_ROM: startup/linkcmds_ROM $(PROJECT_LIB)/$(dirstamp) - $(INSTALL_DATA) $< $(PROJECT_LIB)/linkcmds_ROM -PREINSTALL_FILES += $(PROJECT_LIB)/linkcmds_ROM - diff --git a/c/src/lib/libbsp/m68k/mrm332/start/start.S b/c/src/lib/libbsp/m68k/mrm332/start/start.S index e8f75140ff..5e2bbebc8e 100644 --- a/c/src/lib/libbsp/m68k/mrm332/start/start.S +++ b/c/src/lib/libbsp/m68k/mrm332/start/start.S @@ -22,7 +22,7 @@ BEGIN_CODE /* Put the header necessary for the modified CPU32bug to automatically start up rtems: */ -#if 0 +#if 1 .long 0xbeefbeef ; #endif .long 0 ; @@ -31,11 +31,16 @@ BEGIN_CODE .global start start: - oriw #0x0700,sr - movel #end, d0 - addl #_StackSize,d0 + oriw #0x0700,sr /* Mask off interupts */ + + // Set VBR to CPU32Bug vector table address + movel #0x0,d0 /* Use the initial vectors until we get going */ + movecl d0,vbr + + movel #end, d0 /* Next 3 instructions set stack pointer */ + addl #_StackSize,d0 /* sp = end + _StackSize from linker script */ movel d0,sp - movel d0,a6 + movel d0,a6 /* include in ram_init.S */ /* @@ -46,6 +51,13 @@ BEGIN_CODE /* Module Configuration Register */ /* see section(s) 3.1.3-3.1.6 of the SIM Reference Manual */ + /* SIMCR etc and SAM macro all defined in sim.h found at */ + /* /cpukit/score/cpu/m68k/rtems/m68k/sim.h */ + /* The code below does the following: */ + /* - Sets Freeze Software Enable */ + /* - Turns off Show Cycle Enable */ + /* - Sets the location of SIM module mapping */ + /* - Sets the SIM Interrupt Arbitration Field */ lea SIMCR, a0 movew #FRZSW,d0 oriw #SAM(0,8,SHEN),d0 @@ -57,106 +69,3 @@ BEGIN_CODE END_CODE -#if 0 - - /* Synthesizer Control Register */ - /* see section(s) 4.8 */ - /* end include in ram_init.S */ - *SYNCR = (unsigned short int) - ( SAM(MRM_W,15,VCO) | SAM(0x0,14,PRESCALE) | SAM(MRM_Y,8,COUNTER) ); - while (! (*SYNCR & SLOCK)); /* protect from clock overshoot */ - /* include in ram_init.S */ - *SYNCR = (unsigned short int) - ( SAM(MRM_W,15,VCO) | SAM(MRM_X,14,PRESCALE) | SAM(MRM_Y,8,COUNTER) ); - - /* System Protection Control Register */ - /* !!! can only write to once after reset !!! */ - /* see section 3.8.4 of the SIM Reference Manual */ - *SYPCR = (unsigned char)( HME | BME ); - - /* Periodic Interrupr Control Register */ - /* see section 3.8.2 of the SIM Reference Manual */ - *PICR = (unsigned short int) - ( SAM(0,8,PIRQL) | SAM(MRM_PIV,0,PIV) ); - /* ^^^ zero disables interrupt, don't enable here or ram_init will - be wrong. It's enabled below. */ - - /* Periodic Interrupt Timer Register */ - /* see section 3.8.3 of the SIM Reference Manual */ - *PITR = (unsigned short int)( SAM(0x09,0,PITM) ); - /* 1.098mS interrupt, assuming 32.768 KHz input clock */ - - /* Port C Data */ - /* load values before enabled */ - *PORTC = (unsigned char) 0x0; - - /* Port E and F Data Register */ - /* see section 9 of the SIM Reference Manual */ - *PORTE0 = (unsigned char) 0; - *PORTF0 = (unsigned char) 0; - - /* Port E and F Data Direction Register */ - /* see section 9 of the SIM Reference Manual */ - *DDRE = (unsigned char) 0xff; - *DDRF = (unsigned char) 0xfd; - - /* Port E and F Pin Assignment Register */ - /* see section 9 of the SIM Reference Manual */ - *PEPAR = (unsigned char) 0; - *PFPAR = (unsigned char) 0; - - /* end of SIM initalization code */ - /* end include in ram_init.S */ - - /* - * Initialize RAM by copying the .data section out of ROM (if - * needed) and "zero-ing" the .bss section. - */ - { - register char *src = _etext; - register char *dst = _copy_start; - - if (_copy_data_from_rom) - /* ROM has data at end of text; copy it. */ - while (dst < _edata) - *dst++ = *src++; - - /* Zero bss */ - for (dst = _clear_start; dst< end; dst++) - { - *dst = 0; - } - } - - /* - * Initialize vector table. - */ - { - rtems_isr_entry *monitors_vector_table; - - m68k_get_vbr(monitors_vector_table); - - M68Kvec[ 4 ] = monitors_vector_table[ 4 ]; /* breakpoints vector */ - M68Kvec[ 9 ] = monitors_vector_table[ 9 ]; /* trace vector */ - M68Kvec[ 31 ] = monitors_vector_table[ 31 ]; /* level 7 interrupt */ - M68Kvec[ 47 ] = monitors_vector_table[ 47 ]; /* system call vector */ - M68Kvec[ 66 ] = monitors_vector_table[ 66 ]; /* user defined */ - - m68k_set_vbr(&M68Kvec); - } - - /* - * Initalize the board. - */ - Spurious_Initialize(); - console_init(); - - /* - * Execute main with arguments argc and agrv. - */ - boot_card((void*)0); - reboot(); - -} - -#endif diff --git a/c/src/lib/libbsp/m68k/mrm332/startup/except_vect_332_ROM.S b/c/src/lib/libbsp/m68k/mrm332/startup/except_vect_332_ROM.S deleted file mode 100644 index 6a2e6796c0..0000000000 --- a/c/src/lib/libbsp/m68k/mrm332/startup/except_vect_332_ROM.S +++ /dev/null @@ -1,289 +0,0 @@ -/* Exception Vector definitions follow */ - - /* !!! Warning !!! This table is not tested, and - the user must make sure it is complete. */ - - /* If we use TRAP #15 for reboot, note that group 0 and 1 exceptions - will have priority. */ - - /* This is the "magic word" that CPU32bug uses to indicate that - there is a bootable image here. */ - .long 0xBEEFBEEF - - /* Vector 0: RESET: Initial SSP */ - .long _RamEnd - /* Vector 1: RESET: Initial PC */ - .long start - - /* default action for undefined vectors is to re-boot */ - - /* Note group 0 and 1 exception (like trace) have priority - over other exceptions (like trap #15) that may call this. */ - - /* Vectors 2-255 */ - .long reboot /* exception vector: 2 */ - .long reboot /* exception vector: 3 */ - .long reboot /* exception vector: 4 */ - .long reboot /* exception vector: 5 */ - .long reboot /* exception vector: 6 */ - .long reboot /* exception vector: 7 */ - .long reboot /* exception vector: 8 */ - .long reboot /* exception vector: 9 */ - .long reboot /* exception vector: 10 */ - .long reboot /* exception vector: 11 */ - .long reboot /* exception vector: 12 */ - .long reboot /* exception vector: 13 */ - .long reboot /* exception vector: 14 */ - .long reboot /* exception vector: 15 */ - .long reboot /* exception vector: 16 */ - .long reboot /* exception vector: 17 */ - .long reboot /* exception vector: 18 */ - .long reboot /* exception vector: 19 */ - .long reboot /* exception vector: 20 */ - .long reboot /* exception vector: 21 */ - .long reboot /* exception vector: 22 */ - .long reboot /* exception vector: 23 */ - .long reboot /* exception vector: 24 */ - .long reboot /* exception vector: 25 */ - .long reboot /* exception vector: 26 */ - .long reboot /* exception vector: 27 */ - .long reboot /* exception vector: 28 */ - .long reboot /* exception vector: 29 */ - .long reboot /* exception vector: 30 */ - .long reboot /* exception vector: 31 */ - .long reboot /* exception vector: 32 */ - .long reboot /* exception vector: 33 */ - .long reboot /* exception vector: 34 */ - .long reboot /* exception vector: 35 */ - .long reboot /* exception vector: 36 */ - .long reboot /* exception vector: 37 */ - .long reboot /* exception vector: 38 */ - .long reboot /* exception vector: 39 */ - .long reboot /* exception vector: 40 */ - .long reboot /* exception vector: 41 */ - .long reboot /* exception vector: 42 */ - .long reboot /* exception vector: 43 */ - .long reboot /* exception vector: 44 */ - .long reboot /* exception vector: 45 */ - .long reboot /* exception vector: 46 */ - .long _reboot /* the reboot trap: 47 */ - .long reboot /* exception vector: 48 */ - .long reboot /* exception vector: 49 */ - .long reboot /* exception vector: 50 */ - .long reboot /* exception vector: 51 */ - .long reboot /* exception vector: 52 */ - .long reboot /* exception vector: 53 */ - .long reboot /* exception vector: 54 */ - .long reboot /* exception vector: 55 */ - .long reboot /* exception vector: 56 */ - .long reboot /* exception vector: 57 */ - .long reboot /* exception vector: 58 */ - .long reboot /* exception vector: 59 */ - .long reboot /* exception vector: 60 */ - .long reboot /* exception vector: 61 */ - .long reboot /* exception vector: 62 */ - .long reboot /* exception vector: 63 */ - .long reboot /* exception vector: 64 */ - .long reboot /* exception vector: 65 */ - .long reboot /* exception vector: 66 */ - .long reboot /* exception vector: 67 */ - .long reboot /* exception vector: 68 */ - .long reboot /* exception vector: 69 */ - .long reboot /* exception vector: 70 */ - .long reboot /* exception vector: 71 */ - .long reboot /* exception vector: 72 */ - .long reboot /* exception vector: 73 */ - .long reboot /* exception vector: 74 */ - .long reboot /* exception vector: 75 */ - .long reboot /* exception vector: 76 */ - .long reboot /* exception vector: 77 */ - .long reboot /* exception vector: 78 */ - .long reboot /* exception vector: 79 */ - .long reboot /* exception vector: 80 */ - .long reboot /* exception vector: 81 */ - .long reboot /* exception vector: 82 */ - .long reboot /* exception vector: 83 */ - .long reboot /* exception vector: 84 */ - .long reboot /* exception vector: 85 */ - .long reboot /* exception vector: 86 */ - .long reboot /* exception vector: 87 */ - .long reboot /* exception vector: 88 */ - .long reboot /* exception vector: 89 */ - .long reboot /* exception vector: 90 */ - .long reboot /* exception vector: 91 */ - .long reboot /* exception vector: 92 */ - .long reboot /* exception vector: 93 */ - .long reboot /* exception vector: 94 */ - .long reboot /* exception vector: 95 */ - .long reboot /* exception vector: 96 */ - .long reboot /* exception vector: 97 */ - .long reboot /* exception vector: 98 */ - .long reboot /* exception vector: 99 */ - .long reboot /* exception vector: 100 */ - .long reboot /* exception vector: 101 */ - .long reboot /* exception vector: 102 */ - .long reboot /* exception vector: 103 */ - .long reboot /* exception vector: 104 */ - .long reboot /* exception vector: 105 */ - .long reboot /* exception vector: 106 */ - .long reboot /* exception vector: 107 */ - .long reboot /* exception vector: 108 */ - .long reboot /* exception vector: 109 */ - .long reboot /* exception vector: 110 */ - .long reboot /* exception vector: 111 */ - .long reboot /* exception vector: 112 */ - .long reboot /* exception vector: 113 */ - .long reboot /* exception vector: 114 */ - .long reboot /* exception vector: 115 */ - .long reboot /* exception vector: 116 */ - .long reboot /* exception vector: 117 */ - .long reboot /* exception vector: 118 */ - .long reboot /* exception vector: 119 */ - .long reboot /* exception vector: 120 */ - .long reboot /* exception vector: 121 */ - .long reboot /* exception vector: 122 */ - .long reboot /* exception vector: 123 */ - .long reboot /* exception vector: 124 */ - .long reboot /* exception vector: 125 */ - .long reboot /* exception vector: 126 */ - .long reboot /* exception vector: 127 */ - .long reboot /* exception vector: 128 */ - .long reboot /* exception vector: 129 */ - .long reboot /* exception vector: 130 */ - .long reboot /* exception vector: 131 */ - .long reboot /* exception vector: 132 */ - .long reboot /* exception vector: 133 */ - .long reboot /* exception vector: 134 */ - .long reboot /* exception vector: 135 */ - .long reboot /* exception vector: 136 */ - .long reboot /* exception vector: 137 */ - .long reboot /* exception vector: 138 */ - .long reboot /* exception vector: 139 */ - .long reboot /* exception vector: 140 */ - .long reboot /* exception vector: 141 */ - .long reboot /* exception vector: 142 */ - .long reboot /* exception vector: 143 */ - .long reboot /* exception vector: 144 */ - .long reboot /* exception vector: 145 */ - .long reboot /* exception vector: 146 */ - .long reboot /* exception vector: 147 */ - .long reboot /* exception vector: 148 */ - .long reboot /* exception vector: 149 */ - .long reboot /* exception vector: 150 */ - .long reboot /* exception vector: 151 */ - .long reboot /* exception vector: 152 */ - .long reboot /* exception vector: 153 */ - .long reboot /* exception vector: 154 */ - .long reboot /* exception vector: 155 */ - .long reboot /* exception vector: 156 */ - .long reboot /* exception vector: 157 */ - .long reboot /* exception vector: 158 */ - .long reboot /* exception vector: 159 */ - .long reboot /* exception vector: 160 */ - .long reboot /* exception vector: 161 */ - .long reboot /* exception vector: 162 */ - .long reboot /* exception vector: 163 */ - .long reboot /* exception vector: 164 */ - .long reboot /* exception vector: 165 */ - .long reboot /* exception vector: 166 */ - .long reboot /* exception vector: 167 */ - .long reboot /* exception vector: 168 */ - .long reboot /* exception vector: 169 */ - .long reboot /* exception vector: 170 */ - .long reboot /* exception vector: 171 */ - .long reboot /* exception vector: 172 */ - .long reboot /* exception vector: 173 */ - .long reboot /* exception vector: 174 */ - .long reboot /* exception vector: 175 */ - .long reboot /* exception vector: 176 */ - .long reboot /* exception vector: 177 */ - .long reboot /* exception vector: 178 */ - .long reboot /* exception vector: 179 */ - .long reboot /* exception vector: 180 */ - .long reboot /* exception vector: 181 */ - .long reboot /* exception vector: 182 */ - .long reboot /* exception vector: 183 */ - .long reboot /* exception vector: 184 */ - .long reboot /* exception vector: 185 */ - .long reboot /* exception vector: 186 */ - .long reboot /* exception vector: 187 */ - .long reboot /* exception vector: 188 */ - .long reboot /* exception vector: 189 */ - .long reboot /* exception vector: 190 */ - .long reboot /* exception vector: 191 */ - .long reboot /* exception vector: 192 */ - .long reboot /* exception vector: 193 */ - .long reboot /* exception vector: 194 */ - .long reboot /* exception vector: 195 */ - .long reboot /* exception vector: 196 */ - .long reboot /* exception vector: 197 */ - .long reboot /* exception vector: 198 */ - .long reboot /* exception vector: 199 */ - .long reboot /* exception vector: 200 */ - .long reboot /* exception vector: 201 */ - .long reboot /* exception vector: 202 */ - .long reboot /* exception vector: 203 */ - .long reboot /* exception vector: 204 */ - .long reboot /* exception vector: 205 */ - .long reboot /* exception vector: 206 */ - .long reboot /* exception vector: 207 */ - .long reboot /* exception vector: 208 */ - .long reboot /* exception vector: 209 */ - .long reboot /* exception vector: 210 */ - .long reboot /* exception vector: 211 */ - .long reboot /* exception vector: 212 */ - .long reboot /* exception vector: 213 */ - .long reboot /* exception vector: 214 */ - .long reboot /* exception vector: 215 */ - .long reboot /* exception vector: 216 */ - .long reboot /* exception vector: 217 */ - .long reboot /* exception vector: 218 */ - .long reboot /* exception vector: 219 */ - .long reboot /* exception vector: 220 */ - .long reboot /* exception vector: 221 */ - .long reboot /* exception vector: 222 */ - .long reboot /* exception vector: 223 */ - .long reboot /* exception vector: 224 */ - .long reboot /* exception vector: 225 */ - .long reboot /* exception vector: 226 */ - .long reboot /* exception vector: 227 */ - .long reboot /* exception vector: 228 */ - .long reboot /* exception vector: 229 */ - .long reboot /* exception vector: 230 */ - .long reboot /* exception vector: 231 */ - .long reboot /* exception vector: 232 */ - .long reboot /* exception vector: 233 */ - .long reboot /* exception vector: 234 */ - .long reboot /* exception vector: 235 */ - .long reboot /* exception vector: 236 */ - .long reboot /* exception vector: 237 */ - .long reboot /* exception vector: 238 */ - .long reboot /* exception vector: 239 */ - .long reboot /* exception vector: 240 */ - .long reboot /* exception vector: 241 */ - .long reboot /* exception vector: 242 */ - .long reboot /* exception vector: 243 */ - .long reboot /* exception vector: 244 */ - .long reboot /* exception vector: 245 */ - .long reboot /* exception vector: 246 */ - .long reboot /* exception vector: 247 */ - .long reboot /* exception vector: 248 */ - .long reboot /* exception vector: 249 */ - .long reboot /* exception vector: 250 */ - .long reboot /* exception vector: 251 */ - .long reboot /* exception vector: 252 */ - .long reboot /* exception vector: 253 */ - .long reboot /* exception vector: 254 */ - .long reboot /* exception vector: 255 */ - -_reboot: - move #0x2700,%sr /* mask interrupts */ - movea.l (0x0).w,%a7 /* load stack */ - movea.l (0x4).w,%a0 /* jmp to location of reset vector */ - jmp (%a0) - -reboot: - trap #15 /* use trap exception to enter supervisor - state. Trace mode ( and other group 0 - and 1 exceptions) *could* screw this up if - not vectored to reboot or did not return. */ diff --git a/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds b/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds index 651fc9f88b..378559c99d 100644 --- a/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds +++ b/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds @@ -5,20 +5,26 @@ OUTPUT_ARCH(m68k) __DYNAMIC = 0; /* - * The memory map looks like this: + * ROM: * +--------------------+ <- low memory * | .text | * | etext | * | ctor list | the ctor and dtor lists are for * | dtor list | C++ support * | _endtext | - * +--------------------+ + * | temporary .data | .data is moved to RAM by crt0 + * | | + * +--------------------+ <- high memory + * + * + * RAM: + * +--------------------+ <- low memory * | .data | initialized data goes here * | _sdata | * | _edata | * +--------------------+ * | .bss | - * | _clear_start| start of bss, cleared by crt0 + * | __bss_start | start of bss, cleared by crt0 * | _end | start of heap, used by sbrk() * +--------------------+ * | heap space | @@ -31,150 +37,170 @@ __DYNAMIC = 0; /* * Declare some sizes. */ -RamBase = DEFINED(RamBase) ? RamBase : 0x10000; -RamSize = DEFINED(RamSize) ? RamSize : 0x70000; +RomBase = DEFINED(RomBase) ? RomBase : 0x90000; +RamBase = DEFINED(RamBase) ? RamBase : 0x03000; +RamSize = DEFINED(RamSize) ? RamSize : 0x7d000; _RamEnd = RamBase + RamSize; -HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0; -_StackSize = DEFINED(_StackSize) ? _StackSize : 0x2000; MEMORY { - ram : ORIGIN = 0x10000, LENGTH = 0x70000 + rom : ORIGIN = 0x90000, LENGTH = 0x70000 + ram : ORIGIN = 0x03000, LENGTH = 0x7d000 } -_copy_data_from_rom = 0; +_copy_data_from_rom = 1; +HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0; +_StackSize = DEFINED(_StackSize) ? _StackSize : 0x2000; + /* - * stick everything in ram (of course) + * */ SECTIONS { - ram : { - . = .; - } >ram - - /* - * Text, data and bss segments - */ - .text : { - *(.text*) - - /* - * C++ constructors/destructors - */ - *(.gnu.linkonce.t.*) - - /* - * Initialization and finalization code. - * - * Various files can provide initialization and finalization - * functions. crtbegin.o and crtend.o are two instances. The - * body of these functions are in .init and .fini sections. We - * accumulate the bodies here, and prepend function prologues - * from crti.o and function epilogues from crtn.o. crti.o must - * be linked first; crtn.o must be linked last. Because these - * are wildcards, it doesn't matter if the user does not - * actually link against crti.o and crtn.o; the linker won't - * look for a file to match a wildcard. The wildcard also - * means that it doesn't matter which directory crti.o and - * crtn.o are in. - */ - PROVIDE (_init = .); - *crti.o(.init) - *(.init) - *crtn.o(.init) - PROVIDE (_fini = .); - *crti.o(.fini) - *(.fini) - *crtn.o(.fini) - - /* - * Special FreeBSD sysctl sections. - */ - . = ALIGN (16); - __start_set_sysctl_set = .; - *(set_sysctl_*); - __stop_set_sysctl_set = ABSOLUTE(.); - *(set_domain_*); - *(set_pseudo_*); - - /* - * C++ constructors/destructors - * - * gcc uses crtbegin.o to find the start of the constructors - * and destructors so we make sure it is first. Because this - * is a wildcard, it doesn't matter if the user does not - * actually link against crtbegin.o; the linker won't look for - * a file to match a wildcard. The wildcard also means that - * it doesn't matter which directory crtbegin.o is in. The - * constructor and destructor list are terminated in - * crtend.o. The same comments apply to it. - */ - . = ALIGN (16); - *crtbegin.o(.ctors) - *(.ctors) - *crtend.o(.ctors) - *crtbegin.o(.dtors) - *(.dtors) - *crtend.o(.dtors) - - /* - * Exception frame info - */ - . = ALIGN (16); - *(.eh_frame) - - /* - * Read-only data - */ - . = ALIGN (16); - _rodata_start = .; - *(.rodata*) - *(.gnu.linkonce.r*) - - . = ALIGN (16); - PROVIDE (_etext = .); - } >ram - - .tdata : { - _TLS_Data_begin = .; - *(.tdata .tdata.* .gnu.linkonce.td.*) - _TLS_Data_end = .; - } >ram - - .tbss : { - _TLS_BSS_begin = .; - *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) - _TLS_BSS_end = .; - } >ram - - _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin; - _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin; - _TLS_Size = _TLS_BSS_end - _TLS_Data_begin; - _TLS_Alignment = ALIGNOF (.tdata); - - .data : { - PROVIDE (_copy_start = .); - *(.data*) - *(.gnu.linkonce.d*) - *(.gcc_except_table*) - *(.jcr) - . = ALIGN (16); - PROVIDE (_edata = .); - PROVIDE (_copy_end = .); - } >ram - .bss : { - _clear_start = .; - *(.dynbss) - *(.bss* .gnu.linkonce.b.*) - *(COMMON) - . = ALIGN (16); - PROVIDE (end = .); - . += _StackSize; - . = ALIGN (16); - _stack_init = .; - _clear_end = .; - - WorkAreaBase = .; - } >ram + .text : + { + . = .; + text_start = .; + _text_start = .; + *(.text*) + . = ALIGN (16); + + /* + * C++ constructors/destructors + */ + *(.gnu.linkonce.t.*) + + /* + * Initialization and finalization code. + * + * Various files can provide initialization and finalization + * functions. crtbegin.o and crtend.o are two instances. The + * body of these functions are in .init and .fini sections. We + * accumulate the bodies here, and prepend function prologues + * from crti.o and function epilogues from crtn.o. crti.o must + * be linked first; crtn.o must be linked last. Because these + * are wildcards, it doesn't matter if the user does not + * actually link against crti.o and crtn.o; the linker won't + * look for a file to match a wildcard. The wildcard also + * means that it doesn't matter which directory crti.o and + * crtn.o are in. + */ + PROVIDE (_init = .); + *crti.o(.init) + *(.init) + *crtn.o(.init) + PROVIDE (_fini = .); + *crti.o(.fini) + *(.fini) + *crtn.o(.fini) + + /* + * Special FreeBSD sysctl sections. + */ + . = ALIGN (16); + __start_set_sysctl_set = .; + *(set_sysctl_*); + __stop_set_sysctl_set = ABSOLUTE(.); + *(set_domain_*); + *(set_pseudo_*); + + /* + * C++ constructors/destructors + * + * gcc uses crtbegin.o to find the start of the constructors + * and destructors so we make sure it is first. Because this + * is a wildcard, it doesn't matter if the user does not + * actually link against crtbegin.o; the linker won't look for + * a file to match a wildcard. The wildcard also means that + * it doesn't matter which directory crtbegin.o is in. The + * constructor and destructor list are terminated in + * crtend.o. The same comments apply to it. + */ + . = ALIGN (16); + *crtbegin.o(.ctors) + *(.ctors) + *crtend.o(.ctors) + *crtbegin.o(.dtors) + *(.dtors) + *crtend.o(.dtors) + + /* + * Exception frame info + */ + . = ALIGN (16); + *(.eh_frame) + + /* + * Read-only data + */ + . = ALIGN (16); + _rodata_start = . ; + *(.rodata*) + *(.gnu.linkonce.r*) + + . = ALIGN (16); + PROVIDE (_etext = .); + _endtext = .; + __data_start_rom = .; + } > rom + .tdata : { + _TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + _TLS_Data_end = .; + } > rom + .tbss : { + _TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + _TLS_BSS_end = .; + } > rom + _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin; + _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin; + _TLS_Size = _TLS_BSS_end - _TLS_Data_begin; + _TLS_Alignment = ALIGNOF (.tdata); + .gcc_exc : + AT ( ADDR(.tdata) + SIZEOF( .tdata ) ) + { + *(.gcc_exc) + } > ram + .data : AT(__data_start_rom) + { + PROVIDE (_copy_start = .); + *(.data*) + *(.gnu.linkonce.d*) + *(.gcc_except_table*) + *(.jcr) + . = ALIGN (16); + PROVIDE (_edata = .); + PROVIDE (_copy_end = .); + } > ram + .shbss : + { + *(.shbss) + } > ram + .bss : + { + M68Kvec = .; + . += (256 * 4); + _clear_start = .; + *(.dynbss) + *(.bss* .gnu.linkonce.b.*) + *(COMMON) + . = ALIGN (16); + PROVIDE (end = .); + . += _StackSize; + . = ALIGN (16); + _stack_init = .; + _clear_end = .; + + WorkAreaBase = .; + } > ram + .stab . (NOLOAD) : + { + [ .stab ] + } + .stabstr . (NOLOAD) : + { + [ .stabstr ] + } } diff --git a/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM b/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM deleted file mode 100644 index 48b2f3f46e..0000000000 --- a/c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM +++ /dev/null @@ -1,212 +0,0 @@ -/* linkcmds - */ - -OUTPUT_ARCH(m68k) -STARTUP(except_vect_332_ROM.o) -__DYNAMIC = 0; - -/* - * ROM: - * +--------------------+ <- low memory - * | .text | - * | etext | - * | ctor list | the ctor and dtor lists are for - * | dtor list | C++ support - * | _endtext | - * | temporary .data | .data is moved to RAM by crt0 - * | | - * +--------------------+ <- high memory - * - * - * RAM: - * +--------------------+ <- low memory - * | .data | initialized data goes here - * | _sdata | - * | _edata | - * +--------------------+ - * | .bss | - * | __bss_start | start of bss, cleared by crt0 - * | _end | start of heap, used by sbrk() - * +--------------------+ - * | heap space | - * | _ENDHEAP | - * | stack space | - * | __stack | top of stack - * +--------------------+ <- high memory - */ - -MEMORY -{ - rom : ORIGIN = 0x90000, LENGTH = 0x70000 - ram : ORIGIN = 0x03000, LENGTH = 0x7d000 -} - -RamBase = DEFINED(RamBase) ? RamBase : 0x003000; -RamSize = DEFINED(RamSize) ? RamSize : 0x7d000; -_RamEnd = RamBase + RamSize; - -__end_of_ram = 0x080000; -_copy_data_from_rom = 1; -HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0; -_StackSize = DEFINED(_StackSize) ? _StackSize : 0x2000; - -/* - * - */ -SECTIONS -{ - .text : - { - . = .; - CREATE_OBJECT_SYMBOLS - text_start = .; - _text_start = .; - *(.text*) - . = ALIGN (16); - - - /* - * Initialization and finalization code. - * - * Various files can provide initialization and finalization - * functions. crtbegin.o and crtend.o are two instances. The - * body of these functions are in .init and .fini sections. We - * accumulate the bodies here, and prepend function prologues - * from crti.o and function epilogues from crtn.o. crti.o must - * be linked first; crtn.o must be linked last. Because these - * are wildcards, it doesn't matter if the user does not - * actually link against crti.o and crtn.o; the linker won't - * look for a file to match a wildcard. The wildcard also - * means that it doesn't matter which directory crti.o and - * crtn.o are in. - */ - PROVIDE (_init = .); - *crti.o(.init) - *(.init) - *crtn.o(.init) - PROVIDE (_fini = .); - *crti.o(.fini) - *(.fini) - *crtn.o(.fini) - - /* - * Special FreeBSD sysctl sections. - */ - . = ALIGN (16); - __start_set_sysctl_set = .; - *(set_sysctl_*); - __stop_set_sysctl_set = ABSOLUTE(.); - *(set_domain_*); - *(set_pseudo_*); - - /* - * C++ constructors/destructors - * - * gcc uses crtbegin.o to find the start of the constructors - * and destructors so we make sure it is first. Because this - * is a wildcard, it doesn't matter if the user does not - * actually link against crtbegin.o; the linker won't look for - * a file to match a wildcard. The wildcard also means that - * it doesn't matter which directory crtbegin.o is in. The - * constructor and destructor list are terminated in - * crtend.o. The same comments apply to it. - */ - . = ALIGN (16); - *crtbegin.o(.ctors) - *(.ctors) - *crtend.o(.ctors) - *crtbegin.o(.dtors) - *(.dtors) - *crtend.o(.dtors) - - *(.eh_frame) - . = ALIGN (16); - - /* - * Read-only data - */ - . = ALIGN (16); - _rodata_start = . ; - *(.rodata*) - *(.gnu.linkonce.r*) - - etext = ALIGN(0x10); - __CTOR_LIST__ = .; - LONG((__CTOR_END__ - __CTOR_LIST__) / 4 - 2) - *(.ctors) - LONG(0) - __CTOR_END__ = .; - __DTOR_LIST__ = .; - LONG((__DTOR_END__ - __DTOR_LIST__) / 4 - 2) - *(.dtors) - LONG(0) - __DTOR_END__ = .; - *(.lit) - *(.shdata) - _etext = .; - _endtext = .; - } > rom - .tdata : { - _TLS_Data_begin = .; - *(.tdata .tdata.* .gnu.linkonce.td.*) - _TLS_Data_end = .; - } > rom - .tbss : { - _TLS_BSS_begin = .; - *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) - _TLS_BSS_end = .; - } > rom - _TLS_Data_size = _TLS_Data_end - _TLS_Data_begin; - _TLS_BSS_size = _TLS_BSS_end - _TLS_BSS_begin; - _TLS_Size = _TLS_BSS_end - _TLS_Data_begin; - _TLS_Alignment = ALIGNOF (.tdata); - .gcc_exc : - AT ( ADDR(.tdata) + SIZEOF( .tdata ) ) - { - *(.gcc_exc) - } > ram - .data : - { - data_start = .; - _data_start = .; - _copy_start = .; - _sdata = . ; - *(.data) - *(.gnu.linkonce.d*) - *(.gcc_except_table*) - *(.jcr) - - CONSTRUCTORS - edata = ALIGN(0x10); - _edata = .; - } > ram - .shbss : - { - *(.shbss) - } > ram - .bss : - { - __bss_start = ALIGN(0x8); - bss_start = .; - _bss_start = .; - _clear_start = .; - *(.shbss) - *(.dynbss) - *(.bss* .gnu.linkonce.b.*) - *(COMMON) - . = ALIGN (16); - end = .; - _end = ALIGN(0x8); - __end = ALIGN(0x8); - - WorkAreaBase = . + _StackSize; - } > ram - .stab . (NOLOAD) : - { - [ .stab ] - } - .stabstr . (NOLOAD) : - { - [ .stabstr ] - } -} diff --git a/c/src/lib/libbsp/m68k/mrm332/startup/start_c.c b/c/src/lib/libbsp/m68k/mrm332/startup/start_c.c index 5c3c38caab..060c96b004 100644 --- a/c/src/lib/libbsp/m68k/mrm332/startup/start_c.c +++ b/c/src/lib/libbsp/m68k/mrm332/startup/start_c.c @@ -14,14 +14,11 @@ * */ +#include <bsp.h> +#include <bsp/bootcard.h> #include <mrm332.h> #include <rtems/m68k/sim.h> #define __START_C__ -#include "bsp.h" -#include <bsp/bootcard.h> - -rtems_isr_entry M68Kvec[256]; -rtems_isr_entry vectors[256]; /* * This prototype really should have the noreturn attribute but @@ -32,99 +29,97 @@ void start_c(void); void start_c(void) { - /* Synthesizer Control Register */ - /* see section(s) 4.8 */ - /* end include in ram_init.S */ - *SYNCR = (unsigned short int) - ( SAM(MRM_W,15,VCO) | SAM(0x0,14,PRESCALE) | SAM(MRM_Y,8,COUNTER) ); - while (! (*SYNCR & SLOCK)); /* protect from clock overshoot */ - /* include in ram_init.S */ - *SYNCR = (unsigned short int) - ( SAM(MRM_W,15,VCO) | SAM(MRM_X,14,PRESCALE) | SAM(MRM_Y,8,COUNTER) ); - - /* System Protection Control Register */ - /* !!! can only write to once after reset !!! */ - /* see section 3.8.4 of the SIM Reference Manual */ - *SYPCR = (unsigned char)( HME | BME ); - - /* Periodic Interrupr Control Register */ - /* see section 3.8.2 of the SIM Reference Manual */ - *PICR = (unsigned short int) - ( SAM(0,8,PIRQL) | SAM(MRM_PIV,0,PIV) ); - /* ^^^ zero disables interrupt, don't enable here or ram_init will +#ifdef SET_EDIV +#define OPTIONAL_EDIV EDIV +#else +#define OPTIONAL_EDIV 0 +#endif + + /* Synthesizer Control Register */ + /* see section(s) 4.8 */ + /* end include in ram_init.S */ + *SYNCR = (unsigned short int) (SAM(MRM_W, 15, VCO) | SAM(0x0, 14, PRESCALE) + | SAM(MRM_Y, 8, COUNTER) | OPTIONAL_EDIV); + while (!(*SYNCR & SLOCK)) + ; /* protect from clock overshoot */ + /* include in ram_init.S */ + *SYNCR = (unsigned short int) (SAM(MRM_W, 15, VCO) | SAM(MRM_X, 14, + PRESCALE) | SAM(MRM_Y, 8, COUNTER) | OPTIONAL_EDIV); + + /* System Protection Control Register */ + /* !!! can only write to once after reset !!! */ + /* see section 3.8.4 of the SIM Reference Manual */ + *SYPCR = (unsigned char) (HME | BME); + + /* Periodic Interrupr Control Register */ + /* see section 3.8.2 of the SIM Reference Manual */ + *PICR = (unsigned short int) (SAM(0, 8, PIRQL) | SAM(MRM_PIV, 0, PIV)); + /* ^^^ zero disables interrupt, don't enable here or ram_init will be wrong. It's enabled below. */ - /* Periodic Interrupt Timer Register */ - /* see section 3.8.3 of the SIM Reference Manual */ - *PITR = (unsigned short int)( SAM(0x09,0,PITM) ); - /* 1.098mS interrupt, assuming 32.768 KHz input clock */ - - /* Port C Data */ - /* load values before enabled */ - *PORTC = (unsigned char) 0x0; - - /* Port E and F Data Register */ - /* see section 9 of the SIM Reference Manual */ - *PORTE0 = (unsigned char) 0; - *PORTF0 = (unsigned char) 0; - - /* Port E and F Data Direction Register */ - /* see section 9 of the SIM Reference Manual */ - *DDRE = (unsigned char) 0xff; - *DDRF = (unsigned char) 0xfd; - - /* Port E and F Pin Assignment Register */ - /* see section 9 of the SIM Reference Manual */ - *PEPAR = (unsigned char) 0; - *PFPAR = (unsigned char) 0; - - /* end of SIM initalization code */ - /* end include in ram_init.S */ - - /* - * Initialize RAM by copying the .data section out of ROM (if - * needed) and "zero-ing" the .bss section. - */ - { - register char *src = _etext; - register char *dst = _copy_start; - - if (_copy_data_from_rom) - /* ROM has data at end of text; copy it. */ - while (dst < _edata) - *dst++ = *src++; - - /* Zero bss */ - for (dst = _clear_start; dst< end; dst++) - { - *dst = 0; - } - } - - /* - * Initialize vector table. - */ - { - rtems_isr_entry *monitors_vector_table; - - m68k_get_vbr(monitors_vector_table); - - M68Kvec[ 4 ] = monitors_vector_table[ 4 ]; /* breakpoints vector */ - M68Kvec[ 9 ] = monitors_vector_table[ 9 ]; /* trace vector */ - M68Kvec[ 31 ] = monitors_vector_table[ 31 ]; /* level 7 interrupt */ - M68Kvec[ 47 ] = monitors_vector_table[ 47 ]; /* system call vector */ - M68Kvec[ 66 ] = monitors_vector_table[ 66 ]; /* user defined */ - - m68k_set_vbr(&M68Kvec); - } - - /* - * Initalize the board. - */ + /* Periodic Interrupt Timer Register */ + /* see section 3.8.3 of the SIM Reference Manual */ + *PITR = (unsigned short int) (SAM(0x09, 0, PITM)); + /* 1.098mS interrupt, assuming 32.768 KHz input clock */ + + /* Port C Data */ + /* load values before enabled */ + *PORTC = (unsigned char) 0x0; + + /* Port E and F Data Register */ + /* see section 9 of the SIM Reference Manual */ + *PORTE0 = (unsigned char) 0; + *PORTF0 = (unsigned char) 0; + + /* Port E and F Data Direction Register */ + /* see section 9 of the SIM Reference Manual */ + *DDRE = (unsigned char) 0xff; + *DDRF = (unsigned char) 0xfd; + + /* Port E and F Pin Assignment Register. Set up Port E and F as I/O */ + /* see section 9 of the SIM Reference Manual */ + *PEPAR = (unsigned char) 0; + *PFPAR = (unsigned char) 0; + + /* end of SIM initalization code */ + /* end include in ram_init.S */ + + /* + * Initialize RAM by copying the .data section out of ROM (if + * needed) and "zero-ing" the .bss section. + */ + { + register char *src = _etext; + register char *dst = _copy_start; + + if (_copy_data_from_rom) { + /* ROM has data at end of text; copy it. */ + while (dst < _edata) + *dst++ = *src++; + } + /* Zero bss */ + for (dst = _clear_start; dst < end; dst++) { + *dst = 0; + } + } + + /* + * Initialize vector table. + */ + { + rtems_isr_entry *monitors_vector_table; + + m68k_get_vbr(monitors_vector_table); + + M68Kvec[4] = monitors_vector_table[4]; /* breakpoints vector */ + M68Kvec[9] = monitors_vector_table[9]; /* trace vector */ + M68Kvec[31] = monitors_vector_table[31]; /* level 7 interrupt */ + M68Kvec[47] = monitors_vector_table[47]; /* system call vector */ + M68Kvec[66] = monitors_vector_table[66]; /* user defined */ + + m68k_set_vbr(&M68Kvec); + } - /* Spurious should be called in the predriver hook */ - /* Spurious_Initialize(); */ - /*console_init(); */ /* * Execute main with arguments argc and agrv. |