ARM Kernels

Before control is transferred to the kernel, the boot loader calls the StartUp routine to put the CPU into an initialized state. You may also have to perform BSP/CPU specific initializations as mentioned in the BSP user manual. The following table shows the two ARM-based BSPs and source file locations included in Platform Builder for which the StartUp function is specified.

BSP Source file
ARM Integrator %_WINCEROOT%\Platform\ARMIntegrator\Kernel\Hal\ARM
Intel XScale DBPXA250 %_WINCEROOT%\Platform\XSC1BD\Kernel\Hal\ARM

OEMs developing for the ARM processor using the ARM kernel are expected to perform the following tasks:

  • Put the processor in supervisor mode.
  • Disable the interrupt request (IRQ) and fast interrupt request (FIQ) inputs at the CPU.
  • Disable the memory management unit (MMU) and both the instruction and data caches.
  • Flush or invalidate the instruction and data caches and the translation look-aside buffer (TLB) and empty the write buffers.
  • Determine the reason you are in the startup code, such as cold reset, watchdog reset, GPIO reset, and sleep reset.
  • Configure the GPIO lines per the requirements of the board. GPIO lines must be enabled for on-board features like LED.
  • Configure the memory controller, set refresh frequency, and enable clocks. Program data width and memory timing values and power up the banks.
  • Configure the interrupt controller. Mask and clear any pending interrupts.
  • Initialize the real-time clock count register to 0 and enable the real-time clock.
  • Set up the power management/monitoring registers. Set conditions during sleep modes.
  • Turn on all board-level clocks and on chip peripheral clocks.
  • Get the physical base address of the OEMAddressTable and store in r0.
  • Jump to KernelStart.

To enable floating-point support, see ARM Vector Floating-Point Unit Support.

OEMs developing for the XScale processor can do the following to improve performance:

XScale performance can be improved by changing the Branch Target Buffer Enable bit. To enable this, have the OAL change the bit in OEMInit. The branch target buffer enable bit is bit 11 of the ARM control register.

See Also

CPU Initialization | OAL StartUp Function Implementation

Last updated on Wednesday, April 13, 2005

© 2005 Microsoft Corporation. All rights reserved.