                                                  ARM Port of uC/OS-II

Date         : 09.05.2004
Version      : 1.16
uC/OS-II     : Version 2.61 or lesser
Tool-chain   : SDT 2.51, ADS 1.2 or GCC

ported by  Michael Anburaj
Homepage: http://geocities.com/michaelanburaj/
e-mail  : michaelanburaj@hotmail.com


Installation : UNZIP to desired drive (C:\ is recommended)

Note: All paths & build reference made to uC/OS-II files are relative. So uC/OS-II source & ARM_UCOS must be extracted to the same path.

Folders:
   arm_ucos     : Contains the generic code files required for a project development on the ARM core.
                  common   : Contains the uC/OS-II ARM platform port code.
                  ep73xx   : Contains the EP7312 BSP code.
                  lpc2xxx  : Contains the LPC210x & LPC213x BSP code.
                  s3c2410x : Contains the S3c2410x BSP code.
   Ex1_EP73XX   : Sample uC/OS-II application (Ex1) code & build files for EP7312.
   Ex1_LPC2xxx  : Sample uC/OS-II application (Ex1) code & build files for LPC2xxx.
   Ex2_LPC2xxx  : Sample uC/OS-II application (Ex2) code & build files for LPC2xxx.
   Ex1_S3c2410x : Sample uC/OS-II application (Ex1) code & build files for S3c2410x.
   Ex2_S3c2410x : Sample uC/OS-II application (Ex2) code & build files for S3c2410x.

Building & Running the project:
Refer to the notes.doc in the respective doc folder under the ARM processor example projects.


Important!!!

ARM_UCOS based applications can either run standalone or in conjunction with some of the following software:

1. ICE boot - For ICE booted applications. The ice boot provided with the package must be burnt at RESET (0x00000000)
2. TMON - For TMON booted RAM & ROM applications. TMON must be burnt at RESET (0x00000000). Samsungs monitor can be used for their processor based boards.

Very important: This port cannot work with other monitors (like Angel) or HALs!!! There should not be any other monitor program other than TMON underneath the ARM_UCOS ported code.



Notes:
1. Critical section manipulation methods 2 & 3 are implemented for SDT. When built using ADS or GCC use only method #3 (very important)
2. All interrupts are under the control of the OS (uC/OS-II). And the main IRQ handler is C_IRQHandler() function in FRMWRK.c
3. Interrupts operate purely in the IRQ/FIQ stack.
4. Porting this to other processors is very simple. Just modify the following functions:
        a. C_IRQHandler() in FRMWRK.c
        b. FRMWRK_vStartTicker() in FRMWRK.c
        c. Init.s
        d. CONSOL.c (not important)


What's new in ver 1.xx:
1. It also builds under ADS 1.x & GCC (windows & Linux).
2. Thumb mode tasks have been added.
Build configs for various Target / Task modes:

 TARGET   | TASK  | Comments
----------+-------+---------------------------------------
*arm      | arm   | Arm image with Arm mode tasks (pure arm code)
 armthumb | arm   | Arm-thumb image with Arm mode tasks (not supported in the GCC make)
 arm      | thumb | Illegal
*armthumb | thumb | Arm-thumb image with Thumb mode tasks (99% thumb code)

* Most useful build types.

Note:
Arm or Thumb mode tasks can later change modes in the case of Arm-Thumb interworked images.

3. Common Batch/make build files added for both SDT & ADS.
4. JTAG Target type added. Also ice_boot for the same is provided.
5. Optimized some parts of the assembly code.
6. Added ports for S3c2410x -ARM920T from Samsung & LPC210x - ARM7TDMI-S from Philips.
7. Fixed a major bug that was causing chaos with ARM-THUMB interworked images.
8. OS_TASK_SW_INFO_LEVEL flag added to os_cfg.h to print some useful info. during context switch.
9. GDB stubs added to TMON included for LPC210x port.
10.HALT exception handlers moded into ARM mode file.


Note: About the EP73xx port
ADS 1.2 has an assembler bug that causes mmu.o to bloat (increased to 16KB). Because of which the executable also increases in size. This bug is not seen in SDT or RVCT tools.

Image          Size (approx.)    Tools
r-ex1.bin      49KB              ADS
r-ex1.bin      33KB              SDT



Untested ports for the following ARM processors are available with me:
1. CS89712 from CIRRUS Logic
2. KS32C41000 (S3C44A0X) from Samsung
3. S3c4510 (SNDS100 Board version 1.0)
4. S3c4530 (SNDS300 Board)

If you need any of these, please email me at michaelanburaj@hotmail.com


This port can be modified very easily to make it work on any ARM core (ARM7, ARM9) based microprocessor or microcontroller. Please feel free to get in touch with me if you have difficulties doing this.

Shortcomings:
1. Run-time C library initialization code is not added with the port (ctype functions & malloc need this). Please contact me if you need it.
2. uC/OS-II tasks run in SVC mode right from the beginning with full privileges.
3. The SPSR_task is just a bogus placeholder. It is there to maintain the design consistence. Therefore it is assumed that no context switch occurs in any other mode than SVC. So please do not change the processor operating mode. Also, all IRQs & FIQs should loop through the uC/OS-II function calls (OSIntEnter() & OSIntExit()). This will prevent context switched taking place from IRQ or FIQ modes.



Cheers,
Michael Anburaj.