Thanks James, I have checked-in with a slightly modified commit message and regenerated the preinstall.am. (If you did that manually, note that the correct way is to use bootstrap -p from the rtems.git root directory). http://git.rtems.org/rtems/commit/?id=89aa1ec87da68b8a6cff2233552a739173e676a4
It would be good to investigate how to condition optimization flags on whether or not BSP_SMALL_MEMORY is defined. -Gedare On Mon, Mar 24, 2014 at 5:32 AM, James Fitzsimons <[email protected]> wrote: > Changed console driver to use interrupts instead of polling. > Change to avoid overwriting CPU32Bug interrupt vector when setting up the Sci > interrupt handler. > Fixed type for boolean flag in bsp.h. > Changed mrm332.h to use 25Mhz clock. > Fixes to mrm332.cfg to use correct mcpu32 value for RTEMS_CPU_MODEL instead > of m68332 which is no longer supported. > Added -mcpu=cpu32 to compiler options. > Removed broken ROM linker script and replaced broken RAM linker script with > working ROM linker script. > Removed no longer required file except_vect_332_ROM.S. > Enabled 0xbeefbeef magic string in start.S to allow MRM version of CPU32Bug > to auto run RTEMS. > Removed old code from start.S > Changed compiler optimization flag to optimize for size. > --- > c/src/lib/libbsp/m68k/mrm332/Makefile.am | 5 +- > c/src/lib/libbsp/m68k/mrm332/console/console.c | 2 +- > c/src/lib/libbsp/m68k/mrm332/console/sci.c | 19 +- > c/src/lib/libbsp/m68k/mrm332/include/bsp.h | 2 +- > c/src/lib/libbsp/m68k/mrm332/include/mrm332.h | 7 +- > .../lib/libbsp/m68k/mrm332/make/custom/mrm332.cfg | 34 +-- > c/src/lib/libbsp/m68k/mrm332/preinstall.am | 3 - > c/src/lib/libbsp/m68k/mrm332/start/start.S | 125 ++------- > .../m68k/mrm332/startup/except_vect_332_ROM.S | 289 -------------------- > c/src/lib/libbsp/m68k/mrm332/startup/linkcmds | 302 > +++++++++++---------- > c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM | 212 --------------- > c/src/lib/libbsp/m68k/mrm332/startup/start_c.c | 185 ++++++------- > 12 files changed, 296 insertions(+), 889 deletions(-) > delete mode 100644 c/src/lib/libbsp/m68k/mrm332/startup/except_vect_332_ROM.S > delete mode 100644 c/src/lib/libbsp/m68k/mrm332/startup/linkcmds_ROM > > diff --git a/c/src/lib/libbsp/m68k/mrm332/Makefile.am > b/c/src/lib/libbsp/m68k/mrm332/Makefile.am > index 29b9b4a..9de7cee 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 ce1547e..94fb803 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 4b67c33..a671fb0 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 456b315..8f2c7cf 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 58e5b20..1b86727 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 bf55e4f..de07e73 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 4a71e7d..19e184f 100644 > --- a/c/src/lib/libbsp/m68k/mrm332/preinstall.am > +++ b/c/src/lib/libbsp/m68k/mrm332/preinstall.am > @@ -69,7 +69,4 @@ $(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 e8f7514..5e2bbeb 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 6a2e679..0000000 > --- 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 651fc9f..378559c 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 48b2f3f..0000000 > --- 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 5c3c38c..060c96b 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. > -- > 1.8.3.2 > > _______________________________________________ > rtems-devel mailing list > [email protected] > http://www.rtems.org/mailman/listinfo/rtems-devel _______________________________________________ rtems-devel mailing list [email protected] http://www.rtems.org/mailman/listinfo/rtems-devel
