
==========================================================================
                   Template Project for MB91F467D 
==========================================================================
                   Fujitsu Microelectronics Europe GmbH                       
                 http://emea.fujitsu.com/microelectronics 
                                                            
The  following  software  is for  demonstration  purposes only.  It is not
fully  tested, nor validated  in  order  to fullfill  its task  under  all
circumstances.  Therefore,  this software  or  any part of it must only be
used in an evaluation laboratory environment.                        
This software is subject to  the rules of our standard DISCLAIMER, that is
delivered  with  our  SW-tools  on  the  Fujitsu  Microcontrollers CD /DVD
(V3.4 or higher "\START.HTM").
==========================================================================
               
History
Date        Ver     Author  Softune     Description
2007-11-12  1.0     MPi     V60L06		original version
2007-11-12  1.1     MPi     V60L06		Changed the version for consistency
										with SVN
2007-11-23  1.2     MPi     V60L06		Seperated Watchdog functionality
										added watchdog.c and watchdog.h
2007-12-13  1.3     MPi     V60L06		Tested with the FreeRTOS version 4.6.1.
2007-12-13  1.4     MPi     V60L06		Tested with the FreeRTOS version 4.7.0.
2007-01-07  1.5     MPi     V60L06		Removed watchdog.c, watchdog.h, port.c 
										and portmacro.h from directory
										\FreeRTOS_Port_FR\91467d_FreeRTOS\SRC
2007-01-18  1.6     MPi     V60L06		Tested with monitor debugger
==========================================================================
1.0.
This is a project is to test the FreeRTOS port for FR (91467D) and the demo 
application which runs on SK-91F467-Felxray V1.1.

1.1.
This FreeRTOS port uses the Task Stack pointed by User Stack pointer (USP) for
tasks and the system stack pointed by System Stack pointer (SSP) for everything
else. 

1.2.
In this port, the functionality is added to initialize and clear the watchdog in 
the dedicated task, Tick Hook or the Idle Hook. The place exactly where the 
watchdog can be cleared can be configured. Though Idle Hook is not an approproiate
place to clear the watchdog, its done here for demonstration purpose only.

Also from Main function vTaskStartScheduler() function is called instead of 
xPortStartScheduler(). After doing this change now no more IDLE task is required
to be added seperately as vTaskStartScheduler() adds prvIdleTask() on its own.

The System Stack required by each of the RLT0 and Delayed Interrupt ISR is around 100 
bytes. This is considering no interrupts has higher priority than the RLT0 and Delayed 
interrupt (23). If an application has interrupt whose priority is higher than these 
interrupts, which is very likely, then for each such interrupt the user has to increase 
the stack size at least by 50 bytes, though this is not an optimum figure and very well 
depends upon the application.
Hence though the STACK_SYS_SIZE is defined as 2000, its optimum value would be very well
dependent on the application where the port would be used.

1.3.
Tested with the FreeRTOS version 4.6.1.

Changed portBYTE_ALIGNMENT to 4 from 1.

Added portYIELDFromISR() which uses delayed interrupt. This macro needs to be used from the
application ISRs in order to force a context switch from them if required. It should be noted
that the interrupt priority of such application ISRs MUST be always higher than the dealyed 
interrupt (currently 23) in order to perform the context switch correctly.

It should be also noted that the RLT0 and Delayed Interrupt priority MUST be always same in order 
to assure correct working of this port.

Now portYIELD() used software interrupt INT #40H instead of delayed interrupt.

Now all the queue functions works ok.

Tested with the heap_1.c, heap_2.c and heap_3.c.

Added the __STD_LIB_sbrk.c file in order to define the *sbrk() function. This is required while using
heap_3.c file which uses the dynamic memory allocation.

Made changes to the demo application files crflash.c and crhook.c. Please refer those file
and grep for "Added by MPi" to find the changes.

Added taskutility.c file. This file contains vUART4Task() which calls vTaskList() and vTaskStartTrace()
functions.

If vCreateBlockTimeTasks() is not called then the LED at PDR25_D7 blinks at normal rate (3s).

1.4.
Tested with the FreeRTOS version 4.6.1.

At one time, either of heap_1.c or heap_2.c or heap_3.c needs to be used. Hence the files those are not 
required to be used should be removed from the target of the build.

1.5.
Removed watchdog.c, watchdog.h, port.c and portmacro.h from directory \FreeRTOS_Port_FR\91467d_FreeRTOS\SRC, 
since they are moved to folders watchdog and port respectively.

1.6.
It should be noted that the readme, appnote and SVN tag version numbers may be different for the same release.

Used relative path to include files instead of absolute.

Created config, MemMang, serial and utility subdirectories and moved corresponding functionlaity there.

Updated taskuitlity.c, vectors.c in oredr to use UART 5 instead of UART 4

Updated flash.c to increase LEDs to 4 from 3.

Clock settings:
---------------
Crystal:  4 MHz
CPU:     64 MHz
CLKP:    16 MHz
