Name

HAL Port — Implementation Details

Overview

This documentation explains how the eCos HAL specification has been mapped onto the M5282EVB hardware, and should be read in conjunction with that specification. The M5282EVB platform HAL package complements the M68K architectural HAL, the MCFxxxx variant HAL, and the MCF5282 processor HAL. It provides functionality which is specific to the target board.

Startup

Following a hard or soft reset the HAL will initialize or reinitialize most of the on-chip peripherals. There is an exception for RAM startup applications which depend on a ROM monitor for certain services: the UARTs and the ethernet device will not be reinitialized because they may be in use by RedBoot for communication with the host. Full details of this initialization can be found in the function hal_m68k_m5282evb_init in platform.c.

For a ROM or ROMFFE startup the HAL will perform additional initialization, setting up the external DRAM and programming the various internal registers. The values used for some of these registers are configurable. Full details can be found in the exported header cyg/hal/plf.inc.

Linker Scripts and Memory Maps

The platform HAL package provides the memory layout information needed to generate the linker script. The key memory locations are as follows:

External SDRAM
This is mapped to location 0x00000000. Most of the first kilobyte is used for hardware exception vectors. The eCos virtual vectors are also placed here, allowing RAM-based applications to use services provided by the ROM monitor. For ROM and ROMFFE startup all remaining SDRAM is available. For RAM and DBUG startup available SDRAM starts at location 0x00010000, with the bottom 64K reserved for use by either the RedBoot or dBUG ROM monitors.
Internal RAM
The 64K of internal RAM are normally mapped at location 0x20000000. Neither eCos nor RedBoot use the internal RAM so all of it is available to application code.
On-chip Peripherals

These are accessible at location 0x40000000 onwards, as per the defined symbol HAL_MCF5282_ISPBAR.

[Note]Note

On some other coldfire processors the equivalent register is known as %mbar. The symbol HAL_MCFxxxx_MBAR is an alias for HAL_MCF5282_ISPBAR, making it easier to share device drivers.

On-chip Flash
The 512K of internal flash are normally mapped at location 0xF0000000. Currently this is not used by eCos or RedBoot.
External Flash

This is located at the top of memory, location 0xFFE00000 onwards. For ROM startup it is assumed that a jumper is used to disable the bottom half of the flash, so location 0xFFE00000 is actually a mirror of 0xFFF00000. For ROMFFE and DBUG startups all of the flash is visible. RAM startup will work irrespective of the jumper setting.

In a typical setup the first two 64K flash blocks at location 0xFFF00000 are used to hold RedBoot, and the block at location 0xFFFF0000 is used to hold flash management data and the RedBoot fconfig variables. The remaining blocks can be used by application code.

Clock Support

The platform HAL provides configuration options for the eCos system clock. This always uses the hardware timer PIT3, which should not be used directly by application code. The actual HAL macros for managing the clock are provided by the MCF5282 processor HAL. The specific numbers used are a characteristic of the platform because they depend on the processor speed. The gprof-based profiling code uses PIT2. Timers PIT0 and PIT1 are not used by eCos so application code is free to manipulate these as required.

Other Issues

The M5282EVB platform HAL does not affect the implementation of other parts of the eCos HAL specification. The MCF5282 processor HAL, the MCFxxxx variant HAL, and the M68K architectural HAL documentation should be consulted for further details.

Other Functionality

The platform HAL package also provides a flash driver for the off-chip AMD AM29LV160 flash chip. This driver is inactive by default, and only becomes active if the configuration includes the generic flash support CYGPKG_IO_FLASH.

The platform HAL provides one additional function to manipulate the on-board LEDs: void hal_m5282evb_led_set(which, what). The which argument specifies the LED and should be either 0 or 1. The what argument should be non-zero to switch the LED on, zero to switch it off. Note that only two of the four user LEDs can be manipulated in this way: the other two are normally connected to signals needed by one of the uarts.