forked from Imagelibrary/rtems
score: Add MicroBlaze port
This commit is contained in:
@@ -0,0 +1,38 @@
|
|||||||
|
/* Copyright (c) 2001, 2009 Xilinx, Inc. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
1. Redistributions source code must retain the above copyright notice,
|
||||||
|
this list of conditions and the following disclaimer.
|
||||||
|
|
||||||
|
2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer in the
|
||||||
|
documentation and/or other materials provided with the distribution.
|
||||||
|
|
||||||
|
3. Neither the name of Xilinx nor the names of its contributors may be
|
||||||
|
used to endorse or promote products derived from this software without
|
||||||
|
specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS
|
||||||
|
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||||
|
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||||
|
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||||
|
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
.text
|
||||||
|
.globl _hw_exception_handler # HW Exception Handler Label
|
||||||
|
.align 2
|
||||||
|
|
||||||
|
_hw_exception_handler:
|
||||||
|
rted r17, 0
|
||||||
|
nop
|
||||||
168
cpukit/score/cpu/microblaze/cpu.c
Normal file
168
cpukit/score/cpu/microblaze/cpu.c
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
/*
|
||||||
|
* MicroBlaze CPU Dependent Source
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-2011.
|
||||||
|
* 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: cpu.c,v 1.24 2010/03/27 15:02:26 joel Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAVE_CONFIG_H
|
||||||
|
#include "config.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <rtems/system.h>
|
||||||
|
#include <rtems/score/isr.h>
|
||||||
|
#include <rtems/score/wkspace.h>
|
||||||
|
|
||||||
|
/* _CPU_Initialize
|
||||||
|
*
|
||||||
|
* This routine performs processor dependent initialization.
|
||||||
|
*
|
||||||
|
* INPUT PARAMETERS: NONE
|
||||||
|
*
|
||||||
|
* NO_CPU Specific Information:
|
||||||
|
*
|
||||||
|
* XXX document implementation including references if appropriate
|
||||||
|
*/
|
||||||
|
|
||||||
|
void _CPU_Initialize(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* If there is not an easy way to initialize the FP context
|
||||||
|
* during Context_Initialize, then it is usually easier to
|
||||||
|
* save an "uninitialized" FP context here and copy it to
|
||||||
|
* the task's during Context_Initialize.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* FP context initialization support goes here */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* _CPU_ISR_Get_level
|
||||||
|
*
|
||||||
|
* NO_CPU Specific Information:
|
||||||
|
*
|
||||||
|
* XXX document implementation including references if appropriate
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint32_t _CPU_ISR_Get_level( void )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* This routine returns the current interrupt level.
|
||||||
|
*/
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* _CPU_ISR_install_raw_handler
|
||||||
|
*
|
||||||
|
* NO_CPU Specific Information:
|
||||||
|
*
|
||||||
|
* XXX document implementation including references if appropriate
|
||||||
|
*/
|
||||||
|
|
||||||
|
void _CPU_ISR_install_raw_handler(
|
||||||
|
uint32_t vector,
|
||||||
|
proc_ptr new_handler,
|
||||||
|
proc_ptr *old_handler
|
||||||
|
)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* This is where we install the interrupt handler into the "raw" interrupt
|
||||||
|
* table used by the CPU to dispatch interrupt handlers.
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* _CPU_ISR_install_vector
|
||||||
|
*
|
||||||
|
* This kernel routine installs the RTEMS handler for the
|
||||||
|
* specified vector.
|
||||||
|
*
|
||||||
|
* Input parameters:
|
||||||
|
* vector - interrupt vector number
|
||||||
|
* old_handler - former ISR for this vector number
|
||||||
|
* new_handler - replacement ISR for this vector number
|
||||||
|
*
|
||||||
|
* Output parameters: NONE
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* NO_CPU Specific Information:
|
||||||
|
*
|
||||||
|
* XXX document implementation including references if appropriate
|
||||||
|
*/
|
||||||
|
|
||||||
|
void _CPU_ISR_install_vector(
|
||||||
|
uint32_t vector,
|
||||||
|
proc_ptr new_handler,
|
||||||
|
proc_ptr *old_handler
|
||||||
|
)
|
||||||
|
{
|
||||||
|
*old_handler = _ISR_Vector_table[ vector ];
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the interrupt vector table is a table of pointer to isr entry
|
||||||
|
* points, then we need to install the appropriate RTEMS interrupt
|
||||||
|
* handler for this vector number.
|
||||||
|
*/
|
||||||
|
|
||||||
|
_CPU_ISR_install_raw_handler( vector, new_handler, old_handler );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We put the actual user ISR address in '_ISR_vector_table'. This will
|
||||||
|
* be used by the _ISR_Handler so the user gets control.
|
||||||
|
*/
|
||||||
|
|
||||||
|
_ISR_Vector_table[ vector ] = new_handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* _CPU_Install_interrupt_stack
|
||||||
|
*
|
||||||
|
* NO_CPU Specific Information:
|
||||||
|
*
|
||||||
|
* XXX document implementation including references if appropriate
|
||||||
|
*/
|
||||||
|
|
||||||
|
void _CPU_Install_interrupt_stack( void )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*PAGE
|
||||||
|
*
|
||||||
|
* _CPU_Thread_Idle_body
|
||||||
|
*
|
||||||
|
* NOTES:
|
||||||
|
*
|
||||||
|
* 1. This is the same as the regular CPU independent algorithm.
|
||||||
|
*
|
||||||
|
* 2. If you implement this using a "halt", "idle", or "shutdown"
|
||||||
|
* instruction, then don't forget to put it in an infinite loop.
|
||||||
|
*
|
||||||
|
* 3. Be warned. Some processors with onboard DMA have been known
|
||||||
|
* to stop the DMA if the CPU were put in IDLE mode. This might
|
||||||
|
* also be a problem with other on-chip peripherals. So use this
|
||||||
|
* hook with caution.
|
||||||
|
*
|
||||||
|
* NO_CPU Specific Information:
|
||||||
|
*
|
||||||
|
* XXX document implementation including references if appropriate
|
||||||
|
*/
|
||||||
|
|
||||||
|
void *_CPU_Thread_Idle_body( uintptr_t ignored )
|
||||||
|
{
|
||||||
|
|
||||||
|
for( ; ; )
|
||||||
|
/* insert your "halt" instruction here */ ;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
125
cpukit/score/cpu/microblaze/rtems/asm.h
Normal file
125
cpukit/score/cpu/microblaze/rtems/asm.h
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
/**
|
||||||
|
* @file rtems/asm.h
|
||||||
|
*
|
||||||
|
* This include file attempts to address the problems
|
||||||
|
* caused by incompatible flavors of assemblers and
|
||||||
|
* toolsets. It primarily addresses variations in the
|
||||||
|
* use of leading underscores on symbols and the requirement
|
||||||
|
* that register names be preceded by a %.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* NOTE: The spacing in the use of these macros
|
||||||
|
* is critical to them working as advertised.
|
||||||
|
*
|
||||||
|
* COPYRIGHT:
|
||||||
|
*
|
||||||
|
* This file is based on similar code found in newlib available
|
||||||
|
* from ftp.cygnus.com. The file which was used had no copyright
|
||||||
|
* notice. This file is freely distributable as long as the source
|
||||||
|
* of the file is noted. This file is:
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1994-2006.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
*
|
||||||
|
* $Id: asm.h,v 1.16 2006/01/16 15:12:12 joel Exp $
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _RTEMS_ASM_H
|
||||||
|
#define _RTEMS_ASM_H
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Indicate we are in an assembly file and get the basic CPU definitions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ASM
|
||||||
|
#define ASM
|
||||||
|
#endif
|
||||||
|
#include <rtems/score/cpuopts.h>
|
||||||
|
#include <rtems/score/no_cpu.h>
|
||||||
|
|
||||||
|
#ifndef __USER_LABEL_PREFIX__
|
||||||
|
/**
|
||||||
|
* Recent versions of GNU cpp define variables which indicate the
|
||||||
|
* need for underscores and percents. If not using GNU cpp or
|
||||||
|
* the version does not support this, then you will obviously
|
||||||
|
* have to define these as appropriate.
|
||||||
|
*
|
||||||
|
* This symbol is prefixed to all C program symbols.
|
||||||
|
*/
|
||||||
|
#define __USER_LABEL_PREFIX__ _
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __REGISTER_PREFIX__
|
||||||
|
/**
|
||||||
|
* Recent versions of GNU cpp define variables which indicate the
|
||||||
|
* need for underscores and percents. If not using GNU cpp or
|
||||||
|
* the version does not support this, then you will obviously
|
||||||
|
* have to define these as appropriate.
|
||||||
|
*
|
||||||
|
* This symbol is prefixed to all register names.
|
||||||
|
*/
|
||||||
|
#define __REGISTER_PREFIX__
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <rtems/concat.h>
|
||||||
|
|
||||||
|
/** Use the right prefix for global labels. */
|
||||||
|
#define SYM(x) CONCAT1 (__USER_LABEL_PREFIX__, x)
|
||||||
|
|
||||||
|
/** Use the right prefix for registers. */
|
||||||
|
#define REG(x) CONCAT1 (__REGISTER_PREFIX__, x)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* define macros for all of the registers on this CPU
|
||||||
|
*
|
||||||
|
* EXAMPLE: #define d0 REG (d0)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define macros to handle section beginning and ends.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** This macro is used to denote the beginning of a code declaration. */
|
||||||
|
#define BEGIN_CODE_DCL .text
|
||||||
|
/** This macro is used to denote the end of a code declaration. */
|
||||||
|
#define END_CODE_DCL
|
||||||
|
/** This macro is used to denote the beginning of a data declaration section. */
|
||||||
|
#define BEGIN_DATA_DCL .data
|
||||||
|
/** This macro is used to denote the end of a data declaration section. */
|
||||||
|
#define END_DATA_DCL
|
||||||
|
/** This macro is used to denote the beginning of a code section. */
|
||||||
|
#define BEGIN_CODE .text
|
||||||
|
/** This macro is used to denote the end of a code section. */
|
||||||
|
#define END_CODE
|
||||||
|
/** This macro is used to denote the beginning of a data section. */
|
||||||
|
#define BEGIN_DATA
|
||||||
|
/** This macro is used to denote the end of a data section. */
|
||||||
|
#define END_DATA
|
||||||
|
/** This macro is used to denote the beginning of the
|
||||||
|
* unitialized data section.
|
||||||
|
*/
|
||||||
|
#define BEGIN_BSS
|
||||||
|
/** This macro is used to denote the end of the unitialized data section. */
|
||||||
|
#define END_BSS
|
||||||
|
/** This macro is used to denote the end of the assembly file. */
|
||||||
|
#define END
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This macro is used to declare a public global symbol.
|
||||||
|
*
|
||||||
|
* @note This must be tailored for a particular flavor of the C compiler.
|
||||||
|
* They may need to put underscores in front of the symbols.
|
||||||
|
*/
|
||||||
|
#define PUBLIC(sym) .globl SYM (sym)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This macro is used to prototype a public global symbol.
|
||||||
|
*
|
||||||
|
* @note This must be tailored for a particular flavor of the C compiler.
|
||||||
|
* They may need to put underscores in front of the symbols.
|
||||||
|
*/
|
||||||
|
#define EXTERN(sym) .globl SYM (sym)
|
||||||
|
|
||||||
|
#endif
|
||||||
1263
cpukit/score/cpu/microblaze/rtems/score/cpu.h
Normal file
1263
cpukit/score/cpu/microblaze/rtems/score/cpu.h
Normal file
File diff suppressed because it is too large
Load Diff
70
cpukit/score/cpu/microblaze/rtems/score/microblaze.h
Normal file
70
cpukit/score/cpu/microblaze/rtems/score/microblaze.h
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* This file sets up basic CPU dependency settings based on
|
||||||
|
* compiler settings. For example, it can determine if
|
||||||
|
* floating point is available. This particular implementation
|
||||||
|
* is specified to the NO CPU port.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-2011.
|
||||||
|
* 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: no_cpu.h,v 1.9 2009/12/02 09:48:25 ralf Exp $
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _RTEMS_SCORE_NO_CPU_H
|
||||||
|
#define _RTEMS_SCORE_NO_CPU_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This file contains the information required to build
|
||||||
|
* RTEMS for a particular member of the NO CPU family.
|
||||||
|
* It does this by setting variables to indicate which
|
||||||
|
* implementation dependent features are present in a particular
|
||||||
|
* member of the family.
|
||||||
|
*
|
||||||
|
* This is a good place to list all the known CPU models
|
||||||
|
* that this port supports and which RTEMS CPU model they correspond
|
||||||
|
* to.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined(rtems_multilib)
|
||||||
|
/*
|
||||||
|
* Figure out all CPU Model Feature Flags based upon compiler
|
||||||
|
* predefines.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CPU_MODEL_NAME "rtems_multilib"
|
||||||
|
#define NOCPU_HAS_FPU 1
|
||||||
|
|
||||||
|
#else
|
||||||
|
/* if defined(__MICROBLAZE__) */
|
||||||
|
|
||||||
|
#define CPU_MODEL_NAME "MicroBlaze"
|
||||||
|
#define NOCPU_HAS_FPU 1
|
||||||
|
|
||||||
|
/*
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error "Unsupported CPU Model"
|
||||||
|
*/
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Define the name of the CPU family.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define CPU_NAME "MicroBlaze CPU"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _RTEMS_SCORE_NO_CPU_H */
|
||||||
Reference in New Issue
Block a user