Name
Options — Configuring the MIPS Architectural HAL Package
Description
The MIPS architectural HAL is included in all ecos.db entries for MIPS targets, so the package will be loaded automatically when creating a configuration. It should never be necessary to load the package explicitly or to unload it.
The MIPS architectural HAL contains a number of configuration points. Few of these should be altered by the user, they are mainly present for the variant and platform HALs to select different architectural features.
-
CYGINT_HAL_MIPS_VARIANT
- This interface is implemented by each variant HAL and acts as a check on the number of variants included in the configuration.
-
CYGPKG_HAL_MIPS_MIPS16_SUPPORT
- This option is usually set with a requires statement by the variant or platform HAL to enable support for MIPS16 applications. The eCos operating system and library remains in the MIPS32 instruction set.
-
CYGINT_HAL_MIPS_MICROMIPS_SUPPORT
- This interface is implemented by the variant or platform HAL to enable support for the microMIPS instruction set.
-
CYGPKG_HAL_MIPS_MICROMIPS_SUPPORT
-
This option is usually enabled implicitly by the variant or
platform HAL
implementing
CYGINT_HAL_MIPS_MICROMIPS_SUPPORT
. Its value controls the level of support for the microMIPS instruction set. If set toAPP
then only application code may be compiled in the microMIPS instruction set, eCos remains in the MIPS32 instruction set. If set toECOS
then the whole of eCos is also compiled to the microMIPS instruction set, although those parts of the HAL involved in startup and exception handling remain in MIPS32 instructions. If set toFULL
then all code is compiled or assembled to microMIPS. This latter option is only applicable to CPU variants that only execute microMIPS instructions and is not currently supported. -
CYGNUM_HAL_MIPS_RELEASE
- This option defines the architecture release that the processor supports. It is usually set by the variant or platform HAL to enable various configuration changes in the architecture HAL.
-
CYGINT_HAL_MIPS_DEBUG_MODE
- This interface is implemented by the variant or platform HAL to enable support for Debug Mode. Debug Mode is only available on Release 2 devices that have EJTAG support. It is used primarily to support single step and breakpoints.
-
CYGHWR_HAL_MIPS_CPU_FREQ
- This option contains the frequency of the CPU in MegaHertz. This will usually be set from the variant or platform HAL, which may define additional clock related options. This may affect thing like serial device, interval clock and memory access speed settings.
-
CYGSEM_HAL_MIPS_EMULATE_UNIMPLEMENTED_FPU_OPS
- Enabling this option will include a hook in the exception processing so that Unimplemented Operation FPU exceptions may be handled. This option has no effect if there is no hardware floating-point unit. Note that not all situations in which an exception is raised may be handled. If not, the exception will be passed on as normal through the standard exception delivery mechanism.
-
CYGINT_HAL_MIPS_STUB_REPRESENT_32BIT_AS_64BIT
- This interface may be implemented by MIPS variant or platform HALs to instruct the MIPS stub to interwork correctly with GDB which expects 64-bit register values, even in application code which has been compiled as 32-bit. Do not use this for real 64-bit code.
-
CYGINT_HAL_MIPS_INTERRUPT_RETURN_KEEP_SR_IM
- On some MIPS variants, the status register (SR) contains a number of interrupt mask bits (IM\[0..7\]). Default behaviour is to restore the whole SR over an interrupt. This means that if the ISR modifies those bits, the change is lost when the interrupt returns. If this interface is implemented, changes made to the SR IM bits by an ISR will instead be preserved. Variants whose HAL_INTERRUPT_MASK() routines (et al) modify the IM bits in the SR should implement this interface to get the necessary preserving behaviour.
Redefinable Macros
In addition to the CDL configuration points above, there are a
number of assembler macros that may be redefined. The assembler
header cyg/hal/arch.inc
contains default
implementations of most of these. Variant or platform HALs may
supply alternative definitions of these and define the matching
preprocessor macro. For example, the default implementation of
the hal_intc_init
macro sets up the default
interrupt mechanism using the Status register. By
defining CYGPKG_HAL_MIPS_INTC_INIT_DEFINED
,
this macro may be
redefined. Defining CYGPKG_HAL_MIPS_INTC_DEFINED
allows all the hal_intc_*
macros to be
redefined. This same approach is applicable to most other macros
or macro groups in arch.inc
.
The same approach is also applicable to C-level macros for
controlling interrupts, the timer, caches, bit
indexing. A ..._DEFINED
macro is tested to
determine whether a macro, or group of macros, have been defined
in the variant or platform and if not then a default
implementation is defined.
Compiler Flags
It is normally the responsibility of the platform HAL to define the default compiler and linker flags for all packages, although it is possible to override these on a per-package basis. Most of the flags used are the same as for other architectures supported by eCos.
Linker Scripts
The linker script, supplied by either the variant or platform HALs, must define some symbols that the architecture HAL depends on:
- hal_vsr_table
- This defines the location of the VSR table. First level interrupt and exception trampolines use the value of the Cause register ExcCode field to index this table and vector to a VSR routine. Generally this table should be placed in RAM close to the vector trampolines. This table should be 64 entries in length, although not all will be used.
- hal_virtual_vector_table
- This defines the location of the virtual vector table used to communicate between a ROM monitor and an eCos application. This table needs to be word aligned. It is usually placed in internal SRAM just after the VSR table, perhaps aligned to a convenient boundary. This table should be 64 entries in length.
2024-03-18 | eCosPro Non-Commercial Public License |