forked from Imagelibrary/rtems
2009-02-27 Joel Sherrill <joel.sherrill@OARcorp.com>
* Makefile.am: Remove unnecessary copy of cpu_asm.S * console/Modif_cpu_asm.S: Removed.
This commit is contained in:
@@ -1,3 +1,8 @@
|
|||||||
|
2009-02-27 Joel Sherrill <joel.sherrill@OARcorp.com>
|
||||||
|
|
||||||
|
* Makefile.am: Remove unnecessary copy of cpu_asm.S
|
||||||
|
* console/Modif_cpu_asm.S: Removed.
|
||||||
|
|
||||||
2008-12-08 Ralf Corsépius <ralf.corsepius@rtems.org>
|
2008-12-08 Ralf Corsépius <ralf.corsepius@rtems.org>
|
||||||
|
|
||||||
* bsp_specs: Backport from CVS-HEAD.
|
* bsp_specs: Backport from CVS-HEAD.
|
||||||
|
|||||||
@@ -37,8 +37,8 @@ startup_SOURCES = startup/bspclean.c ../../shared/bsplibc.c \
|
|||||||
../../shared/sbrk.c ../../m68k/shared/setvec.c \
|
../../shared/sbrk.c ../../m68k/shared/setvec.c \
|
||||||
startup/dumpanic.c ../../shared/gnatinstallhandler.c
|
startup/dumpanic.c ../../shared/gnatinstallhandler.c
|
||||||
clock_SOURCES = clock/ckinit.c
|
clock_SOURCES = clock/ckinit.c
|
||||||
console_SOURCES = console/Modif_cpu_asm.S console/console.c \
|
console_SOURCES = console/console.c console/m340uart.c \
|
||||||
console/m340uart.c ../../shared/dummy_printk_support.c
|
../../shared/dummy_printk_support.c
|
||||||
timer_SOURCES = timer/timer.c
|
timer_SOURCES = timer/timer.c
|
||||||
|
|
||||||
noinst_LIBRARIES = libbsp.a
|
noinst_LIBRARIES = libbsp.a
|
||||||
|
|||||||
@@ -1,178 +0,0 @@
|
|||||||
/* cpu_asm.s
|
|
||||||
*
|
|
||||||
* This file contains all assembly code for the MC68020 implementation
|
|
||||||
* of RTEMS.
|
|
||||||
*
|
|
||||||
* ATTENTION: Modified for benchmarks
|
|
||||||
*
|
|
||||||
* COPYRIGHT (c) 1989-1999.
|
|
||||||
* On-Line Applications Research Corporation (OAR).
|
|
||||||
*
|
|
||||||
* The license and distribution terms for this file may be
|
|
||||||
* found in the file LICENSE in this distribution or at
|
|
||||||
* http://www.rtems.com/license/LICENSE.
|
|
||||||
*
|
|
||||||
* $Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <rtems/asm.h>
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
/*PAGE
|
|
||||||
* void _Debug_ISR_Handler_Console()
|
|
||||||
*
|
|
||||||
* This routine provides the RTEMS interrupt management.
|
|
||||||
*
|
|
||||||
* NOTE:
|
|
||||||
* Upon entry, the master stack will contain an interrupt stack frame
|
|
||||||
* back to the interrupted thread and the interrupt stack will contain
|
|
||||||
* a throwaway interrupt stack frame. If dispatching is enabled, this
|
|
||||||
* is the outer most interrupt, and (a context switch is necessary or
|
|
||||||
* the current thread has signals), then set up the master stack to
|
|
||||||
* transfer control to the interrupt dispatcher.
|
|
||||||
* NOTE:
|
|
||||||
* USED TO MESURE THE TIME SPENT IN THE INTERRUPT SUBROUTINE
|
|
||||||
* CS5 - CS8 are linked to an oscilloscope so that you can mesure
|
|
||||||
* RTEMS overhead (BTW it's very short :) )
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* With this approach, lower priority interrupts may
|
|
||||||
* execute twice if a higher priority interrupt is
|
|
||||||
* acknowledged before _Thread_Dispatch_disable is
|
|
||||||
* increamented and the higher priority interrupt
|
|
||||||
* preforms a context switch after executing. The lower
|
|
||||||
* priority intterrupt will execute (1) at the end of the
|
|
||||||
* higher priority interrupt in the new context if
|
|
||||||
* permitted by the new interrupt level mask, and (2) when
|
|
||||||
* the original context regains the cpu.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if ( M68K_HAS_VBR == 1)
|
|
||||||
.set SR_OFFSET, 0 | Status register offset
|
|
||||||
.set PC_OFFSET, 2 | Program Counter offset
|
|
||||||
.set FVO_OFFSET, 6 | Format/vector offset
|
|
||||||
#else
|
|
||||||
.set SR_OFFSET, 2 | Status register offset
|
|
||||||
.set PC_OFFSET, 4 | Program Counter offset
|
|
||||||
.set FVO_OFFSET, 0 | Format/vector offset placed in the stack
|
|
||||||
#endif /* M68K_HAS_VBR */
|
|
||||||
|
|
||||||
.set SAVED, 16 | space for saved registers
|
|
||||||
|
|
||||||
.align 4
|
|
||||||
.global SYM (_Debug_ISR_Handler_Console)
|
|
||||||
|
|
||||||
SYM (_Debug_ISR_Handler_Console):
|
|
||||||
|
|
||||||
|
|
|
||||||
tst.w 0x14000000 | ALLUME CS5
|
|
||||||
|
|
|
||||||
|
|
||||||
addql #1,SYM (_Thread_Dispatch_disable_level) | disable multitasking
|
|
||||||
moveml d0-d1/a0-a1,a7@- | save d0-d1,a0-a1
|
|
||||||
movew a7@(SAVED+FVO_OFFSET),d0 | d0 = F/VO
|
|
||||||
andl #0x0fff,d0 | d0 = vector offset in vbr
|
|
||||||
|
|
||||||
#if ( CPU_HAS_SOFTWARE_INTERRUPT_STACK == 1 )
|
|
||||||
movew sr,d1 | Save status register
|
|
||||||
oriw #0x700,sr | Disable interrupts
|
|
||||||
tstl SYM (_ISR_Nest_level) | Interrupting an interrupt handler?
|
|
||||||
bne 1f | Yes, just skip over stack switch code
|
|
||||||
movel SYM(_CPU_Interrupt_stack_high),a0 | End of interrupt stack
|
|
||||||
movel a7,a0@- | Save task stack pointer
|
|
||||||
movel a0,a7 | Switch to interrupt stack
|
|
||||||
1:
|
|
||||||
addql #1,SYM(_ISR_Nest_level) | one nest level deeper
|
|
||||||
movew d1,sr | Restore status register
|
|
||||||
#else
|
|
||||||
addql #1,SYM (_ISR_Nest_level) | one nest level deeper
|
|
||||||
#endif /* CPU_HAS_SOFTWARE_INTERRUPT_STACK == 1 */
|
|
||||||
|
|
||||||
#if ( M68K_HAS_PREINDEXING == 1 )
|
|
||||||
movel @( SYM (_ISR_Vector_table),d0:w:1),a0| fetch the ISR
|
|
||||||
#else
|
|
||||||
movel # SYM (_ISR_Vector_table),a0 | a0 = base of RTEMS table
|
|
||||||
addal d0,a0 | a0 = address of vector
|
|
||||||
movel (a0),a0 | a0 = address of user routine
|
|
||||||
#endif
|
|
||||||
|
|
||||||
lsrl #2,d0 | d0 = vector number
|
|
||||||
movel d0,a7@- | push vector number
|
|
||||||
|
|
||||||
|
|
|
||||||
tst.w 0x18000000 | ALLUME CS6
|
|
||||||
|
|
|
||||||
|
|
||||||
jbsr a0@ | invoke the user ISR
|
|
||||||
|
|
||||||
|
|
|
||||||
tst.w 0x18000000 | ALLUME CS6
|
|
||||||
|
|
|
||||||
|
|
||||||
addql #4,a7 | remove vector number
|
|
||||||
|
|
||||||
#if ( CPU_HAS_SOFTWARE_INTERRUPT_STACK == 1 )
|
|
||||||
movew sr,d0 | Save status register
|
|
||||||
oriw #0x700,sr | Disable interrupts
|
|
||||||
subql #1,SYM(_ISR_Nest_level) | Reduce interrupt-nesting count
|
|
||||||
bne 1f | Skip if return to interrupt
|
|
||||||
movel (a7),a7 | Restore task stack pointer
|
|
||||||
1:
|
|
||||||
movew d0,sr | Restore status register
|
|
||||||
#else
|
|
||||||
subql #1,SYM (_ISR_Nest_level) | one less nest level
|
|
||||||
#endif /* CPU_HAS_SOFTWARE_INTERRUPT_STACK == 1 */
|
|
||||||
|
|
||||||
subql #1,SYM (_Thread_Dispatch_disable_level)
|
|
||||||
| unnest multitasking
|
|
||||||
bne Debug_exit | If dispatch disabled, Debug_exit
|
|
||||||
|
|
||||||
#if ( M68K_HAS_SEPARATE_STACKS == 1 )
|
|
||||||
movew #0xf000,d0 | isolate format nibble
|
|
||||||
andw a7@(SAVED+FVO_OFFSET),d0 | get F/VO
|
|
||||||
cmpiw #0x1000,d0 | is it a throwaway isf?
|
|
||||||
bne Debug_exit | NOT outer level, so branch
|
|
||||||
#endif
|
|
||||||
|
|
||||||
tstl SYM (_Context_Switch_necessary)
|
|
||||||
| Is thread switch necessary?
|
|
||||||
bne bframe | Yes, invoke dispatcher
|
|
||||||
|
|
||||||
tstl SYM (_ISR_Signals_to_thread_executing)
|
|
||||||
| signals sent to Run_thread
|
|
||||||
| while in interrupt handler?
|
|
||||||
beq Debug_exit | No, then Debug_exit
|
|
||||||
|
|
||||||
bframe: clrl SYM (_ISR_Signals_to_thread_executing)
|
|
||||||
| If sent, will be processed
|
|
||||||
#if ( M68K_HAS_SEPARATE_STACKS == 1 )
|
|
||||||
movec msp,a0 | a0 = master stack pointer
|
|
||||||
movew #0,a0@- | push format word
|
|
||||||
movel # SYM (_ISR_Dispatch),a0@- | push return addr
|
|
||||||
| filter out the trace bit to stop single step debugging breaking
|
|
||||||
movew a0@(6+SR_OFFSET),d0
|
|
||||||
andw #0x7FFF,d0
|
|
||||||
movew d0,a0@- | push thread sr
|
|
||||||
movec a0,msp | set master stack pointer
|
|
||||||
#else
|
|
||||||
|
|
||||||
| filter out the trace bit to stop single step debugging breaking
|
|
||||||
movew a7@(16+SR_OFFSET),d0
|
|
||||||
andw #0x7FFF,d0
|
|
||||||
movew d0,sr
|
|
||||||
jsr SYM (_Thread_Dispatch)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Debug_exit: moveml a7@+,d0-d1/a0-a1 | restore d0-d1,a0-a1
|
|
||||||
#if ( M68K_HAS_VBR == 0 )
|
|
||||||
addql #2,a7 | pop format/id
|
|
||||||
#endif /* M68K_HAS_VBR */
|
|
||||||
|
|
||||||
|
|
|
||||||
tst.w 0x1C000000 | ALLUME CS7
|
|
||||||
|
|
|
||||||
|
|
||||||
rte | return to thread
|
|
||||||
| OR _Isr_dispatch
|
|
||||||
Reference in New Issue
Block a user