/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
-# FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+# FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
#\r
# This file is part of the FreeRTOS.org distribution.\r
#\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
-# FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+# FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
#\r
# This file is part of the FreeRTOS.org distribution.\r
#\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
*****************************************************************************/\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
*----------------------------------------------------------*/\r
\r
#define configUSE_PREEMPTION 1\r
-#define configUSE_IDLE_HOOK 1\r
+#define configUSE_IDLE_HOOK 0\r
#define configUSE_TICK_HOOK 1\r
#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 50000000 )\r
#define configTICK_RATE_HZ ( ( portTickType ) 1000 )\r
-# FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+# FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
#\r
# This file is part of the FreeRTOS.org distribution.\r
#\r
# ***************************************************************************\r
\r
\r
+#/************************************************************************* \r
+# * Please ensure to read http://www.freertos.org/portLM3Sxxxx_Eclipse.html\r
+# * which provides information on configuring and running this demo for the\r
+# * various Luminary Micro EKs.\r
+# *************************************************************************/\r
+\r
RTOS_SOURCE_DIR=../../../Source\r
DEMO_COMMON_DIR=../../Common/Minimal\r
DEMO_INCLUDE_DIR=../../Common/include\r
./ParTest/ParTest.c \\r
rit128x96x4.c \\r
osram128x64x4.c \\r
+ formike128x128x16.c \\r
$(LUMINARY_DRIVER_DIR)/ustdlib.c \\r
$(DEMO_COMMON_DIR)/BlockQ.c \\r
$(DEMO_COMMON_DIR)/blocktim.c \\r
$(RTOS_SOURCE_DIR)/portable/GCC/ARM_CM3/port.c \\r
$(RTOS_SOURCE_DIR)/portable/MemMang/heap_2.c\r
\r
-LIBS= $(LUMINARY_DRIVER_DIR)/arm-none-eabi-gcc/libdriver.a\r
+LIBS= $(LUMINARY_DRIVER_DIR)/arm-none-eabi-gcc/libdriver.a $(LUMINARY_DRIVER_DIR)/arm-none-eabi-gcc/libgr.a\r
\r
OBJS = $(SOURCE:.c=.o)\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
#ifndef BITMAP_H\r
#define BITMAP_H\r
\r
-const unsigned char pucImage[] =\r
+#define bmpBITMAP_HEIGHT 50\r
+#define bmpBITMAP_WIDTH 128\r
+\r
+const unsigned char pucBasicBitmap[] =\r
{\r
0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,\r
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,\r
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00,\r
0x00 };\r
\r
-#define bmpBITMAP_HEIGHT 50\r
-#define bmpBITMAP_WIDTH 128\r
+const unsigned char pucGrLibBitmap[] =\r
+{\r
+ IMAGE_FMT_4BPP_COMP,\r
+ 124, 0,\r
+ 49, 0,\r
+\r
+ 15,\r
+ 0x00, 0x00, 0x00,\r
+ 0x00, 0x0c, 0x00,\r
+ 0x20, 0x44, 0x20,\r
+ 0x00, 0x75, 0x00,\r
+ 0x69, 0x69, 0x69,\r
+ 0x00, 0xc2, 0x00,\r
+ 0x00, 0xd2, 0x00,\r
+ 0x38, 0xb6, 0x38,\r
+ 0x00, 0xea, 0x00,\r
+ 0x00, 0xf2, 0x00,\r
+ 0xaa, 0xb2, 0xaa,\r
+ 0x65, 0xff, 0x65,\r
+ 0x69, 0xff, 0x69,\r
+ 0x6d, 0xff, 0x6d,\r
+ 0x71, 0xff, 0x71,\r
+ 0xff, 0xff, 0xff,\r
+\r
+ 0x03, 0x21, 0x33, 0x53, 0x33, 0x33, 0x33, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f,\r
+ 0x17, 0x07, 0x06, 0x35, 0x33, 0x12, 0x03, 0x23, 0x96, 0x68, 0x88, 0x88,\r
+ 0x88, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f, 0x17, 0x07, 0x06, 0x86, 0x69, 0x32,\r
+ 0x03, 0x29, 0x66, 0x65, 0x66, 0x66, 0x66, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f,\r
+ 0x17, 0x07, 0x06, 0x56, 0x66, 0x92, 0x07, 0x78, 0x63, 0x11, 0x11, 0x11,\r
+ 0xe9, 0xd4, 0xa7, 0xf0, 0x5f, 0x17, 0x07, 0x07, 0x11, 0x36, 0x87, 0x78,\r
+ 0x0f, 0x63, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xe0, 0x17, 0x07,\r
+ 0x07, 0x00, 0x36, 0x87, 0x78, 0x63, 0xfe, 0x07, 0x07, 0x77, 0x2f, 0x07,\r
+ 0x07, 0x02, 0x36, 0x1e, 0x87, 0x78, 0x63, 0x07, 0x07, 0x77, 0x2f, 0x00,\r
+ 0x10, 0x01, 0x22, 0x20, 0x07, 0x00, 0x00, 0x22, 0x21, 0x84, 0x03, 0x36,\r
+ 0x87, 0x78, 0x63, 0x02, 0x02, 0xaa, 0x01, 0xa2, 0x22, 0x20, 0x02, 0x77,\r
+ 0x77, 0x77, 0xe9, 0x3a, 0x22, 0x22, 0x7a, 0xa4, 0x71, 0x20, 0x0a, 0x27,\r
+ 0xb8, 0x29, 0x72, 0xb2, 0x9e, 0x93, 0x36, 0x87, 0x78, 0x40, 0x63, 0x62,\r
+ 0x2a, 0xff, 0xf2, 0xaa, 0x40, 0x07, 0x08, 0xad, 0xdd, 0xdd, 0xdd, 0xe9,\r
+ 0xd7, 0x72, 0x00, 0x40, 0x00, 0xa6, 0xdd, 0xda, 0x70, 0x00, 0x00, 0x02,\r
+ 0x00, 0x77, 0xdd, 0xdc, 0xcc, 0xcd, 0xde, 0xc7, 0x20, 0x00, 0x00, 0x00,\r
+ 0x00, 0x00, 0x01, 0x27, 0xde, 0xdc, 0x08, 0xcc, 0xcc, 0xdd, 0xea, 0x99,\r
+ 0x36, 0x87, 0x78, 0x40, 0x63, 0x69, 0x02, 0xaf, 0xaa, 0xf2, 0x2f, 0xa0,\r
+ 0x04, 0x02, 0xdb, 0xbb, 0xbb, 0xbb, 0xe9, 0xbc, 0xe7, 0x10, 0x20, 0x00,\r
+ 0x07, 0xa5, 0xbb, 0xbd, 0x70, 0x00, 0x10, 0x00, 0x27, 0xec, 0x3b, 0xcd,\r
+ 0xd7, 0x00, 0x00, 0x80, 0x9f, 0xbd, 0x20, 0x00, 0x00, 0x36, 0x87, 0x78,\r
+ 0x40, 0x63, 0x69, 0x02, 0xfa, 0x2a, 0xf2, 0x2f, 0xa0, 0x31, 0x02, 0xdb,\r
+ 0x43, 0x31, 0x42, 0x00, 0x07, 0xa7, 0x0a, 0x70, 0x00, 0x02, 0xdd, 0x41,\r
+ 0xcc, 0x21, 0xce, 0x04, 0x70, 0x00, 0x00, 0x02, 0x7d, 0x39, 0xbc, 0xcb,\r
+ 0x00, 0xbb, 0xbd, 0x20, 0x00, 0x00, 0x36, 0x87, 0x78, 0x20, 0x63, 0x00,\r
+ 0x69, 0xfa, 0x0a, 0xf2, 0x2f, 0xa0, 0x01, 0x02, 0xdb, 0xbb, 0xbb, 0xdd,\r
+ 0xdd, 0xdc, 0x11, 0x08, 0xe7, 0x00, 0x07, 0xad, 0xbb, 0xcd, 0xdd, 0xda,\r
+ 0x09, 0x70, 0x00, 0x2d, 0xcb, 0x41, 0xcc, 0xdd, 0xd1, 0x04, 0xe7, 0x00,\r
+ 0x00, 0x07, 0xeb, 0x51, 0xdc, 0xcd, 0x00, 0xdd, 0xdd, 0x20, 0x00, 0x00,\r
+ 0x36, 0x87, 0x78, 0x00, 0x63, 0x00, 0x00, 0x00, 0x02, 0xfa, 0x2a, 0xf2,\r
+ 0x00, 0xaf, 0xa0, 0x02, 0xdb, 0xbb, 0xbd, 0x72, 0x22, 0x00, 0x77, 0xdc,\r
+ 0xbb, 0xbb, 0xc7, 0x20, 0x07, 0x77, 0x04, 0x77, 0x77, 0xcb, 0xbb, 0xbc,\r
+ 0xd1, 0x20, 0x01, 0x28, 0x7d, 0xbb, 0x42, 0x27, 0x41, 0xcd, 0x20, 0x00,\r
+ 0x40, 0x27, 0x51, 0x72, 0x22, 0x22, 0x27, 0x7c, 0x20, 0x00, 0x00, 0x00,\r
+ 0x36, 0x87, 0x78, 0x63, 0x00, 0x00, 0x00, 0x00, 0x02, 0xaf, 0xaa, 0xfa,\r
+ 0xff, 0x20, 0x02, 0x10, 0xdb, 0xbb, 0xbe, 0x61, 0x2d, 0xbb, 0xbb, 0xcc,\r
+ 0xa8, 0x29, 0x00, 0x89, 0xbd, 0xc3, 0xeb, 0xbb, 0xbb, 0x00, 0xd7, 0x10,\r
+ 0x00, 0x00, 0x2c, 0xcb, 0xbb, 0xbd, 0x58, 0x70, 0x12, 0xc7, 0x13, 0x29,\r
+ 0x36, 0x87, 0x78, 0x40, 0x63, 0xa9, 0x00, 0xaf, 0xff, 0xff, 0xfa, 0x20,\r
+ 0x08, 0x02, 0xdb, 0xbb, 0xbd, 0x39, 0x07, 0xdb, 0xbb, 0x72, 0xcc, 0x03,\r
+ 0x8c, 0x82, 0xbd, 0x70, 0x84, 0xbc, 0x03, 0xd2, 0x00, 0x2d, 0xbb, 0xbb,\r
+ 0xd7, 0x19, 0x01, 0x02, 0x00, 0x00, 0x36, 0x87, 0x78, 0x63, 0xa2, 0x0a,\r
+ 0x10, 0xaf, 0xff, 0xa2, 0x0a, 0xbd, 0x20, 0x00, 0x00, 0x0c, 0x07, 0xdb,\r
+ 0xbb, 0xc7, 0xc9, 0x8e, 0x00, 0x2c, 0x40, 0xcb, 0xc4, 0x00, 0x7c, 0xbb,\r
+ 0xbb, 0xe7, 0x00, 0x06, 0x2d, 0xbb, 0xbb, 0xc7, 0x10, 0x92, 0x31, 0x36,\r
+ 0x10, 0x87, 0x78, 0x63, 0xab, 0x22, 0x22, 0x00, 0x00, 0x00, 0x02, 0xdb,\r
+ 0xbb, 0xbd, 0x20, 0x00, 0x00, 0x07, 0x18, 0xcb, 0xbb, 0xd7, 0x0a, 0x8d,\r
+ 0x00, 0x2d, 0xbb, 0x23, 0xbb, 0xc7, 0x82, 0x00, 0x2e, 0xbb, 0x39, 0x91,\r
+ 0x20, 0xbd, 0x72, 0x8b, 0x00, 0x00, 0x36, 0x87, 0x78, 0x48, 0x63, 0x33,\r
+ 0x02, 0x20, 0xe1, 0xdb, 0xbb, 0xbd, 0x01, 0x20, 0x00, 0x02, 0x7d, 0xbb,\r
+ 0xbb, 0xe2, 0x6b, 0x94, 0x8b, 0x00, 0x00, 0x81, 0xd7, 0x82, 0x00, 0x2d,\r
+ 0x00, 0xbb, 0xbb, 0xc7, 0x20, 0x2c, 0xcb, 0xbb, 0xbb, 0x10, 0xdd, 0x77,\r
+ 0x22, 0x7b, 0x36, 0x87, 0x78, 0x63, 0x80, 0x32, 0x02, 0xaa, 0xf2, 0x22,\r
+ 0x20, 0x02, 0xdb, 0x00, 0xbb, 0xbc, 0x77, 0x77, 0x77, 0xdb, 0xbb, 0xce,\r
+ 0x42, 0x71, 0x63, 0xdb, 0xbb, 0xbd, 0x20, 0x19, 0x7d, 0x10, 0xbb, 0xbb,\r
+ 0xd2, 0x82, 0x00, 0x27, 0xcb, 0xbb, 0x00, 0xc7, 0x20, 0x07, 0xeb, 0xbb,\r
+ 0xbb, 0xbb, 0xcd, 0x21, 0xd7, 0x72, 0x72, 0x36, 0x87, 0x78, 0x63, 0x32,\r
+ 0x01, 0x4f, 0xff, 0xf2, 0xaf, 0xa0, 0x02, 0xdb, 0x41, 0x03, 0xdd, 0xdc,\r
+ 0xbb, 0xbc, 0xd7, 0x20, 0x22, 0x89, 0x42, 0xbd, 0xba, 0x7d, 0xbb, 0xbb,\r
+ 0xd2, 0x82, 0x00, 0x02, 0x27, 0xcb, 0xbb, 0xcc, 0x20, 0x02, 0x89, 0xbb,\r
+ 0x08, 0xbb, 0xbc, 0xdd, 0x72, 0x31, 0x36, 0x87, 0x78, 0x40, 0x63, 0x31,\r
+ 0x02, 0xaf, 0xaa, 0xf2, 0x2f, 0xa0, 0x21, 0x02, 0xdb, 0x3a, 0xbb, 0xbb,\r
+ 0xc7, 0x20, 0x31, 0x88, 0x59, 0xdb, 0xbb, 0xbd, 0xb2, 0x7d, 0xbb, 0xbb,\r
+ 0x40, 0xd2, 0x7b, 0x27, 0xcb, 0xbb, 0xcc, 0x20, 0x00, 0x00, 0x27, 0xec,\r
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xe7, 0x84, 0x29, 0x36, 0x87, 0x78, 0x63,\r
+ 0x31, 0x02, 0xfa, 0x02, 0x0a, 0xf2, 0x2f, 0xa0, 0x02, 0xdb, 0x42, 0xbb,\r
+ 0x31, 0xbb, 0xc7, 0x39, 0x5a, 0xdb, 0xbb, 0xbd, 0xb2, 0x08, 0x7d, 0xbb,\r
+ 0xbb, 0xd2, 0x7b, 0x27, 0xcb, 0xbb, 0x00, 0xcc, 0x20, 0x00, 0x02, 0x77,\r
+ 0xed, 0xcb, 0xbb, 0x00, 0xbb, 0xbb, 0xbd, 0x71, 0x00, 0x00, 0x36, 0x87,\r
+ 0x20, 0x78, 0x63, 0x31, 0x02, 0xfa, 0x0a, 0xf2, 0x2f, 0x00, 0xa0, 0x02,\r
+ 0xdb, 0xbb, 0xbb, 0xcd, 0xdd, 0xcb, 0x18, 0xbb, 0xbc, 0xe2, 0x69, 0x59,\r
+ 0xdb, 0xbb, 0xbd, 0x42, 0x20, 0x19, 0x7d, 0xbb, 0xbb, 0xd2, 0x7b, 0x27,\r
+ 0x10, 0xcb, 0xbb, 0xcb, 0x79, 0x02, 0x27, 0x7d, 0xdc, 0x00, 0xbb, 0xbb,\r
+ 0xbb, 0xe2, 0x00, 0x00, 0x36, 0x87, 0x20, 0x78, 0x63, 0x31, 0x02, 0xfa,\r
+ 0x2a, 0xf2, 0xaf, 0x00, 0xa0, 0x02, 0xdb, 0xbb, 0xbd, 0x72, 0x27, 0x4c,\r
+ 0x1d, 0xbb, 0xbb, 0xd7, 0x69, 0x59, 0x89, 0x20, 0x19, 0x42, 0x7d, 0x7e,\r
+ 0x2c, 0xbb, 0xbb, 0xc7, 0x7a, 0x00, 0x10, 0x22, 0x7c, 0xcb, 0x63, 0x36,\r
+ 0x87, 0x78, 0x63, 0x80, 0x31, 0x02, 0xaf, 0xfa, 0xff, 0xff, 0x20, 0x02,\r
+ 0x00, 0xdb, 0xbb, 0xbd, 0x20, 0x00, 0x2c, 0xcb, 0xbb, 0x28, 0xcb, 0x20,\r
+ 0x61, 0x00, 0x8c, 0x00, 0x00, 0x2d, 0x12, 0xbb, 0xbb, 0xd7, 0x82, 0x00,\r
+ 0x2e, 0xbe, 0x00, 0x21, 0x02, 0x7c, 0x63, 0x36, 0x87, 0x78, 0x63, 0x32,\r
+ 0x00, 0x2f, 0xff, 0xff, 0xfa, 0x00, 0x02, 0xdb, 0xbb, 0x00, 0xbd, 0x20,\r
+ 0x00, 0x07, 0xdb, 0xbb, 0xbe, 0x20, 0xc2, 0x62, 0x8c, 0x00, 0x00, 0x2c,\r
+ 0xcb, 0xc4, 0x00, 0x0c, 0x7d, 0xbb, 0xbb, 0xe7, 0x3a, 0x19, 0x2d, 0xbb,\r
+ 0x00, 0xbb, 0xc7, 0x00, 0x00, 0x36, 0x87, 0x78, 0x63, 0x80, 0x3a, 0x02,\r
+ 0xaa, 0xaa, 0x40, 0x00, 0x02, 0xdb, 0x00, 0xbb, 0xbd, 0x20, 0x00, 0x02,\r
+ 0xcc, 0xbb, 0xbd, 0x63, 0x70, 0x63, 0x8b, 0x00, 0x00, 0x07, 0x49, 0x7a,\r
+ 0x98, 0x09, 0xbb, 0xd2, 0x3a, 0x19, 0x2d, 0xbb, 0xbb, 0x01, 0xd7, 0x00,\r
+ 0x00, 0x36, 0x87, 0x78, 0x63, 0x3a, 0x14, 0xaa, 0x22, 0x20, 0x0b, 0xbd,\r
+ 0xc9, 0x7d, 0xbb, 0x30, 0xbb, 0xd2, 0x61, 0x8e, 0x00, 0x02, 0xeb, 0xbb,\r
+ 0x20, 0xbb, 0xd7, 0x79, 0x27, 0xcb, 0xbb, 0xbd, 0x70, 0x24, 0x00, 0x02,\r
+ 0x6a, 0x00, 0x7d, 0x6b, 0x36, 0x87, 0x24, 0x78, 0x63, 0x39, 0x02, 0xff,\r
+ 0x62, 0x02, 0xdb, 0x21, 0xbb, 0xbd, 0x21, 0x2e, 0xbb, 0xbb, 0xe7, 0x61,\r
+ 0x80, 0x8e, 0x00, 0x02, 0x7d, 0xbb, 0xbb, 0xbd, 0x72, 0x00, 0x22, 0x27,\r
+ 0xcc, 0xbb, 0xbb, 0xcd, 0x20, 0x00, 0x08, 0x07, 0xe7, 0x72, 0x22, 0xa3,\r
+ 0xe2, 0x00, 0x00, 0x00, 0x36, 0x87, 0x78, 0x63, 0x00, 0x00, 0x00, 0x02,\r
+ 0x20, 0xaf, 0xa0, 0xd2, 0xdb, 0xbb, 0xbd, 0x20, 0x00, 0x03, 0x00, 0x2b,\r
+ 0xcb, 0xbb, 0xc7, 0x10, 0x8f, 0x11, 0x01, 0x2d, 0xcb, 0xbb, 0xbb, 0xdd,\r
+ 0xb7, 0xcd, 0xd1, 0x00, 0xe7, 0x00, 0x00, 0x07, 0xdc, 0xdd, 0xcb, 0x7b,\r
+ 0x00, 0xdd, 0xcb, 0xbb, 0xbc, 0x72, 0x00, 0x00, 0x36, 0x10, 0x87, 0x78,\r
+ 0x63, 0x01, 0x00, 0x2a, 0xfa, 0x42, 0x01, 0x22, 0x20, 0x02, 0xdb, 0xbb,\r
+ 0xbd, 0x20, 0x01, 0xb0, 0xcc, 0x00, 0x8d, 0xb9, 0xec, 0xbb, 0xbb, 0xbb,\r
+ 0x00, 0xcc, 0xcb, 0xbb, 0xbb, 0xbe, 0x71, 0x00, 0x00, 0x05, 0x27, 0xcb,\r
+ 0xbb, 0xcc, 0xcc, 0x81, 0xce, 0x29, 0x08, 0x36, 0x87, 0x78, 0x63, 0x02,\r
+ 0xaa, 0xff, 0xff, 0x02, 0xff, 0xa0, 0x02, 0xdb, 0xbb, 0xbd, 0x61, 0x02,\r
+ 0x0e, 0xeb, 0xbb, 0xbd, 0x70, 0x5a, 0x8c, 0x09, 0x27, 0x00, 0xec, 0xbb,\r
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xd7, 0x54, 0x10, 0xa1, 0xcb, 0xa4, 0xd2,\r
+ 0x31, 0x36, 0x87, 0x20, 0x78, 0x63, 0x01, 0x02, 0xff, 0xff, 0xff, 0xff,\r
+ 0x02, 0xa0, 0x07, 0xad, 0xdd, 0xda, 0x20, 0x99, 0xde, 0x1c, 0xdd, 0xde,\r
+ 0xc2, 0x21, 0x8d, 0x0a, 0x7c, 0xed, 0x04, 0xcc, 0xcc, 0xcc, 0xde, 0xd7,\r
+ 0x92, 0x2c, 0xed, 0x40, 0xdc, 0xa7, 0x36, 0x87, 0x78, 0x63, 0x00, 0x02,\r
+ 0x00, 0x22, 0x02, 0xaa, 0xaa, 0xaa, 0xaa, 0x20, 0x02, 0x1b, 0x77, 0x77,\r
+ 0x77, 0x5a, 0xc9, 0x72, 0x21, 0x8e, 0x88, 0xaa, 0x27, 0x77, 0x7b, 0x9d,\r
+ 0x12, 0x27, 0x77, 0x20, 0x77, 0xb7, 0x3d, 0x36, 0x87, 0x78, 0x63, 0x00,\r
+ 0x3e, 0x02, 0xaa, 0x43, 0x22, 0xc6, 0x87, 0x3e, 0x12, 0x21, 0x22, 0x22,\r
+ 0x06, 0x01, 0x22, 0x22, 0x21, 0x04, 0x00, 0x36, 0x87, 0x78, 0x63, 0x00,\r
+ 0x02, 0xfa, 0x22, 0x3f, 0xaa, 0x20, 0x26, 0xc6, 0x87, 0x3f, 0x07, 0x07,\r
+ 0x00, 0x36, 0x87, 0x78, 0x63, 0x00, 0x02, 0xfa, 0x02, 0x7e, 0xff, 0x07,\r
+ 0x07, 0x77, 0x2f, 0x07, 0x06, 0x36, 0x00, 0x87, 0x78, 0x63, 0x00, 0x02,\r
+ 0xff, 0xaa, 0xfa, 0x07, 0x44, 0x44, 0x44, 0x20, 0x02, 0xd9, 0xc1, 0xd4,\r
+ 0xf0, 0xa7, 0x5f, 0x17, 0x04, 0x42, 0x00, 0x00, 0x36, 0x00, 0x87, 0x78,\r
+ 0x63, 0x00, 0x02, 0xff, 0xff, 0xff, 0x9f, 0xe9, 0xa0, 0x0a, 0xc4, 0x94,\r
+ 0xa7, 0x5f, 0x17, 0x80, 0x04, 0xfa, 0x20, 0x00, 0x36, 0x87, 0x78, 0x63,\r
+ 0x13, 0x00, 0x00, 0xaf, 0x03, 0xa0, 0x0a, 0x07, 0xbf, 0xe0, 0x77, 0x2f,\r
+ 0x07, 0xfa, 0x20, 0x00, 0x36, 0x87, 0x00, 0x78, 0x63, 0x00, 0x00, 0x02,\r
+ 0xaa, 0xfa, 0xaa, 0x0f, 0xaa, 0xaa, 0x20, 0x02, 0xd9, 0xc1, 0xd4, 0xa7,\r
+ 0xe0, 0x5f, 0x17, 0x05, 0x00, 0x00, 0x36, 0x87, 0x78, 0x03, 0x63, 0x00,\r
+ 0x00, 0x00, 0x02, 0xff, 0xd9, 0xc1, 0xfc, 0xd4, 0xa7, 0x5f, 0x17, 0x07,\r
+ 0x03, 0x36, 0x87, 0x23, 0x78, 0x63, 0x01, 0x02, 0x44, 0x20, 0x07, 0x07,\r
+ 0xf0, 0x77, 0x2f, 0x07, 0x05, 0x36, 0x87, 0x78, 0x63, 0xfe, 0x07, 0x07,\r
+ 0x77, 0x2f, 0x07, 0x07, 0x02, 0x36, 0x1f, 0x87, 0x78, 0x63, 0x07, 0x07,\r
+ 0x77, 0x2f, 0x07, 0xc0, 0x07, 0x02, 0x36, 0x87, 0x78, 0x63, 0x11, 0x11,\r
+ 0x7f, 0x11, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x00, 0x11, 0x36,\r
+ 0x87, 0x29, 0x66, 0x55, 0x55, 0x55, 0xfe, 0xe9, 0xd4, 0xa7, 0x5f, 0x17,\r
+ 0x07, 0x07, 0x55, 0x00, 0x66, 0x92, 0x23, 0x96, 0x68, 0x88, 0x88, 0x88,\r
+ 0xfe, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x06, 0x86, 0x01, 0x69, 0x32,\r
+ 0x21, 0x33, 0x55, 0x55, 0x55, 0xe9, 0xfc, 0xd4, 0xa7, 0x5f, 0x17, 0x07,\r
+ 0x07, 0x55, 0x33, 0x00, 0x12,\r
+};\r
+\r
\r
#endif\r
--- /dev/null
+//*****************************************************************************\r
+//\r
+// formike128x128x16.c - Display driver for the Formike Electronic\r
+// KWH015C04-F01 CSTN panel with an ST7637 controller.\r
+//\r
+// Copyright (c) 2008 Luminary Micro, Inc. All rights reserved.\r
+// \r
+// Software License Agreement\r
+// \r
+// Luminary Micro, Inc. (LMI) is supplying this software for use solely and\r
+// exclusively on LMI's microcontroller products.\r
+// \r
+// The software is owned by LMI and/or its suppliers, and is protected under\r
+// applicable copyright laws. All rights are reserved. You may not combine\r
+// this software with "viral" open-source software in order to form a larger\r
+// program. Any use in violation of the foregoing restrictions may subject\r
+// the user to criminal sanctions under applicable laws, as well as to civil\r
+// liability for the breach of the terms and conditions of this license.\r
+// \r
+// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED\r
+// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF\r
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.\r
+// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR\r
+// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.\r
+// \r
+// This is part of revision 2523 of the Stellaris Peripheral Driver Library.\r
+//\r
+//*****************************************************************************\r
+\r
+//*****************************************************************************\r
+//\r
+//! \addtogroup ek_lm3s3748_api\r
+//! @{\r
+//\r
+//*****************************************************************************\r
+\r
+#include "hw_gpio.h"\r
+#include "hw_memmap.h"\r
+#include "hw_types.h"\r
+#include "gpio.h"\r
+#include "sysctl.h"\r
+#include "rom.h"\r
+#include "grlib.h"\r
+#include "formike128x128x16.h"\r
+#include <string.h>\r
+\r
+//*****************************************************************************\r
+//\r
+// Defines for the pins that are used to communicate with the ST7637.\r
+//\r
+//*****************************************************************************\r
+#define LCD_A0_BASE GPIO_PORTB_BASE\r
+#define LCD_A0_PIN GPIO_PIN_2\r
+#define LCD_WR_BASE GPIO_PORTC_BASE\r
+#define LCD_WR_PIN GPIO_PIN_4\r
+#define LCD_RD_BASE GPIO_PORTC_BASE\r
+#define LCD_RD_PIN GPIO_PIN_5\r
+#define LCD_BL_BASE GPIO_PORTF_BASE\r
+#define LCD_BL_PIN GPIO_PIN_1\r
+#define LCD_DATA_BASE GPIO_PORTG_BASE\r
+\r
+//*****************************************************************************\r
+//\r
+// Translates a 24-bit RGB color to a display driver-specific color.\r
+//\r
+// \param c is the 24-bit RGB color. The least-significant byte is the blue\r
+// channel, the next byte is the green channel, and the third byte is the red\r
+// channel.\r
+//\r
+// This macro translates a 24-bit RGB color into a value that can be written\r
+// into the display's frame buffer in order to reproduce that color, or the\r
+// closest possible approximation of that color.\r
+//\r
+// \return Returns the display-driver specific color.\r
+//\r
+//*****************************************************************************\r
+#define DPYCOLORTRANSLATE(c) ((((c) & 0x00ff0000) >> 19) | \\r
+ ((((c) & 0x0000ff00) >> 5) & 0x000007e0) | \\r
+ ((((c) & 0x000000ff) << 8) & 0x0000f800))\r
+\r
+//*****************************************************************************\r
+//\r
+// Writes a data word to the ST7637.\r
+//\r
+//*****************************************************************************\r
+static void\r
+WriteData(unsigned char ucData)\r
+{\r
+ //\r
+ // Write the data to the data bus.\r
+ //\r
+ HWREG(LCD_DATA_BASE + GPIO_O_DATA + (0xff << 2)) = ucData;\r
+\r
+ //\r
+ // Assert the write enable signal.\r
+ //\r
+ HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = 0;\r
+\r
+ //\r
+ // Deassert the write enable signal.\r
+ //\r
+ HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = LCD_WR_PIN;\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+// Writes a command to the ST7637.\r
+//\r
+//*****************************************************************************\r
+static void\r
+WriteCommand(unsigned char ucData)\r
+{\r
+ //\r
+ // Write the command to the data bus.\r
+ //\r
+ HWREG(LCD_DATA_BASE + GPIO_O_DATA + (0xff << 2)) = ucData;\r
+\r
+ //\r
+ // Set the A0 signal low, indicating a command.\r
+ //\r
+ HWREG(LCD_A0_BASE + GPIO_O_DATA + (LCD_A0_PIN << 2)) = 0;\r
+\r
+ //\r
+ // Assert the write enable signal.\r
+ //\r
+ HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = 0;\r
+\r
+ //\r
+ // Deassert the write enable signal.\r
+ //\r
+ HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = LCD_WR_PIN;\r
+\r
+ //\r
+ // Set the A0 signal high, indicating that following writes are data.\r
+ //\r
+ HWREG(LCD_A0_BASE + GPIO_O_DATA + (LCD_A0_PIN << 2)) = LCD_A0_PIN;\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Initializes the display driver.\r
+//!\r
+//! This function initializes the ST7637 display controller on the panel,\r
+//! preparing it to display data.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+void\r
+Formike128x128x16Init(void)\r
+{\r
+ unsigned long ulClockMS, ulCount;\r
+\r
+ //\r
+ // Get the value to pass to SysCtlDelay() in order to delay for 1 ms.\r
+ //\r
+ ulClockMS = SysCtlClockGet() / (3 * 1000);\r
+\r
+ //\r
+ // Enable the GPIO peripherals used to interface to the ST7637.\r
+ //\r
+ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);\r
+ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);\r
+ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);\r
+ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);\r
+\r
+ //\r
+ // Configure the pins that connect to the LCD as GPIO outputs.\r
+ //\r
+ GPIOPinTypeGPIOOutput(LCD_A0_BASE, LCD_A0_PIN);\r
+ GPIOPinTypeGPIOOutput(LCD_WR_BASE, LCD_WR_PIN);\r
+ GPIOPinTypeGPIOOutput(LCD_RD_BASE, LCD_RD_PIN);\r
+ GPIOPinTypeGPIOOutput(LCD_BL_BASE, LCD_BL_PIN);\r
+ GPIOPinTypeGPIOOutput(LCD_DATA_BASE, 0xff);\r
+\r
+ //\r
+ // Set the LCD control pins to their default values.\r
+ //\r
+ GPIOPinWrite(LCD_A0_BASE, LCD_A0_PIN, LCD_A0_PIN);\r
+ GPIOPinWrite(LCD_WR_BASE, LCD_WR_PIN | LCD_RD_PIN,\r
+ LCD_WR_PIN | LCD_RD_PIN);\r
+ GPIOPinWrite(LCD_BL_BASE, LCD_BL_PIN, 0);\r
+ GPIOPinWrite(LCD_DATA_BASE, 0xff, 0x00);\r
+\r
+ //\r
+ // Perform a software reset of the ST7637.\r
+ //\r
+ WriteCommand(0x01);\r
+\r
+ //\r
+ // Delay for 120ms.\r
+ //\r
+ SysCtlDelay(ulClockMS * 120);\r
+\r
+ //\r
+ // Disable auto-load of mask rom data.\r
+ //\r
+ WriteCommand(0xD7);\r
+ WriteData(0xBF);\r
+\r
+ //\r
+ // Set the OTP control mode to read.\r
+ //\r
+ WriteCommand(0xE0);\r
+ WriteData(0x00);\r
+\r
+ //\r
+ // Delay for 10ms.\r
+ //\r
+ SysCtlDelay(ulClockMS * 10);\r
+\r
+ //\r
+ // Start the OTP read.\r
+ //\r
+ WriteCommand(0xE3);\r
+\r
+ //\r
+ // Delay for 20ms.\r
+ //\r
+ SysCtlDelay(ulClockMS * 20);\r
+\r
+ //\r
+ // Cancel the OTP read (it should have finished by now).\r
+ //\r
+ WriteCommand(0xE1);\r
+\r
+ //\r
+ // Turn off the display.\r
+ //\r
+ WriteCommand(0x28);\r
+\r
+ //\r
+ // Exit sleep mode.\r
+ //\r
+ WriteCommand(0x11);\r
+\r
+ //\r
+ // Delay for 50ms.\r
+ //\r
+ SysCtlDelay(ulClockMS * 50);\r
+\r
+ //\r
+ // Program the LCD supply voltage V0 to 14V.\r
+ //\r
+ WriteCommand(0xC0);\r
+ WriteData(0x04);\r
+ WriteData(0x01);\r
+\r
+ //\r
+ // Select an LCD bias voltage ratio of 1/12.\r
+ //\r
+ WriteCommand(0xC3);\r
+ WriteData(0x00);\r
+\r
+ //\r
+ // Enable the x8 booster circuit.\r
+ //\r
+ WriteCommand(0xC4);\r
+ WriteData(0x07);\r
+\r
+ //\r
+ // Invert the column scan direction for the panel.\r
+ //\r
+ WriteCommand(0xB7);\r
+ WriteData(0xC0);\r
+\r
+ //\r
+ // Select 16bpp, 5-6-5 data input mode.\r
+ //\r
+ WriteCommand(0x3A);\r
+ WriteData(0x05);\r
+\r
+ //\r
+ // Select the memory scanning direction. The scanning mode does not matter\r
+ // for this driver since the row/column selects will constrain the writes\r
+ // to the desired area of the display.\r
+ //\r
+ WriteCommand(0x36);\r
+ WriteData(0x00);\r
+\r
+ //\r
+ // Turn on the display.\r
+ //\r
+ WriteCommand(0x29);\r
+\r
+ //\r
+ // Clear the contents of the display buffer.\r
+ //\r
+ WriteCommand(0x2A);\r
+ WriteData(0x00);\r
+ WriteData(0x7F);\r
+ WriteCommand(0x2B);\r
+ WriteData(0x01);\r
+ WriteData(0x80);\r
+ WriteCommand(0x2c);\r
+ for(ulCount = 0; ulCount < (128 * 128); ulCount++)\r
+ {\r
+ WriteData(0x00);\r
+ WriteData(0x00);\r
+ }\r
+\r
+ //\r
+ // Enable normal operation of the LCD.\r
+ //\r
+ WriteCommand(0x13);\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Turns on the backlight.\r
+//!\r
+//! This function turns on the backlight on the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+void\r
+Formike128x128x16BacklightOn(void)\r
+{\r
+ //\r
+ // Assert the signal that turns on the backlight.\r
+ //\r
+ HWREG(LCD_BL_BASE + GPIO_O_DATA + (LCD_BL_PIN << 2)) = LCD_BL_PIN;\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Turns off the backlight.\r
+//!\r
+//! This function turns off the backlight on the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+void\r
+Formike128x128x16BacklightOff(void)\r
+{\r
+ //\r
+ // Deassert the signal that turns on the backlight.\r
+ //\r
+ HWREG(LCD_BL_BASE + GPIO_O_DATA + (LCD_BL_PIN << 2)) = 0;\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Draws a pixel on the screen.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param lX is the X coordinate of the pixel.\r
+//! \param lY is the Y coordinate of the pixel.\r
+//! \param ulValue is the color of the pixel.\r
+//!\r
+//! This function sets the given pixel to a particular color. The coordinates\r
+//! of the pixel are assumed to be within the extents of the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16PixelDraw(void *pvDisplayData, long lX, long lY,\r
+ unsigned long ulValue)\r
+{\r
+ //\r
+ // Set the X address of the display cursor.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(lX);\r
+ WriteData(lX);\r
+\r
+ //\r
+ // Set the Y address of the display cursor.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(lY + 1);\r
+ WriteData(lY + 1);\r
+\r
+ //\r
+ // Write the pixel value.\r
+ //\r
+ WriteCommand(0x2c);\r
+ WriteData(ulValue >> 8);\r
+ WriteData(ulValue);\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Draws a horizontal sequence of pixels on the screen.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param lX is the X coordinate of the first pixel.\r
+//! \param lY is the Y coordinate of the first pixel.\r
+//! \param lX0 is sub-pixel offset within the pixel data, which is valid for 1\r
+//! or 4 bit per pixel formats.\r
+//! \param lCount is the number of pixels to draw.\r
+//! \param lBPP is the number of bits per pixel; must be 1, 4, or 8.\r
+//! \param pucData is a pointer to the pixel data. For 1 and 4 bit per pixel\r
+//! formats, the most significant bit(s) represent the left-most pixel.\r
+//! \param pucPalette is a pointer to the palette used to draw the pixels.\r
+//!\r
+//! This function draws a horizontal sequence of pixels on the screen, using\r
+//! the supplied palette. For 1 bit per pixel format, the palette contains\r
+//! pre-translated colors; for 4 and 8 bit per pixel formats, the palette\r
+//! contains 24-bit RGB values that must be translated before being written to\r
+//! the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16PixelDrawMultiple(void *pvDisplayData, long lX, long lY,\r
+ long lX0, long lCount, long lBPP,\r
+ const unsigned char *pucData,\r
+ const unsigned char *pucPalette)\r
+{\r
+ unsigned long ulByte;\r
+\r
+ //\r
+ // Set the extent of the line along the X axis.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(lX);\r
+ WriteData(lX + lCount - 1);\r
+\r
+ //\r
+ // Set the Y address of the display cursor.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(lY + 1);\r
+ WriteData(lY + 1);\r
+\r
+ //\r
+ // Write the data RAM write command.\r
+ //\r
+ WriteCommand(0x2c);\r
+\r
+ //\r
+ // Determine how to interpret the pixel data based on the number of bits\r
+ // per pixel.\r
+ //\r
+ switch(lBPP)\r
+ {\r
+ //\r
+ // The pixel data is in 1 bit per pixel format.\r
+ //\r
+ case 1:\r
+ {\r
+ //\r
+ // Loop while there are more pixels to draw.\r
+ //\r
+ while(lCount)\r
+ {\r
+ //\r
+ // Get the next byte of image data.\r
+ //\r
+ ulByte = *pucData++;\r
+\r
+ //\r
+ // Loop through the pixels in this byte of image data.\r
+ //\r
+ for(; (lX0 < 8) && lCount; lX0++, lCount--)\r
+ {\r
+ //\r
+ // Draw this pixel in the appropriate color.\r
+ //\r
+ lBPP = ((unsigned long *)pucPalette)[(ulByte >>\r
+ (7 - lX0)) & 1];\r
+ WriteData(lBPP >> 8);\r
+ WriteData(lBPP);\r
+ }\r
+\r
+ //\r
+ // Start at the beginning of the next byte of image data.\r
+ //\r
+ lX0 = 0;\r
+ }\r
+\r
+ //\r
+ // The image data has been drawn.\r
+ //\r
+ break;\r
+ }\r
+\r
+ //\r
+ // The pixel data is in 4 bit per pixel format.\r
+ //\r
+ case 4:\r
+ {\r
+ //\r
+ // Loop while there are more pixels to draw. "Duff's device" is\r
+ // used to jump into the middle of the loop if the first nibble of\r
+ // the pixel data should not be used. Duff's device makes use of\r
+ // the fact that a case statement is legal anywhere within a\r
+ // sub-block of a switch statement. See\r
+ // http://en.wikipedia.org/wiki/Duff's_device for detailed\r
+ // information about Duff's device.\r
+ //\r
+ switch(lX0 & 1)\r
+ {\r
+ case 0:\r
+ while(lCount)\r
+ {\r
+ //\r
+ // Get the upper nibble of the next byte of pixel data\r
+ // and extract the corresponding entry from the\r
+ // palette.\r
+ //\r
+ ulByte = (*pucData >> 4) * 3;\r
+ ulByte = (*(unsigned long *)(pucPalette + ulByte) &\r
+ 0x00ffffff);\r
+\r
+ //\r
+ // Translate this palette entry and write it to the\r
+ // screen.\r
+ //\r
+ ulByte = DPYCOLORTRANSLATE(ulByte);\r
+ WriteData(ulByte >> 8);\r
+ WriteData(ulByte);\r
+\r
+ //\r
+ // Decrement the count of pixels to draw.\r
+ //\r
+ lCount--;\r
+\r
+ //\r
+ // See if there is another pixel to draw.\r
+ //\r
+ if(lCount)\r
+ {\r
+ case 1:\r
+ //\r
+ // Get the lower nibble of the next byte of pixel\r
+ // data and extract the corresponding entry from\r
+ // the palette.\r
+ //\r
+ ulByte = (*pucData++ & 15) * 3;\r
+ ulByte = (*(unsigned long *)(pucPalette + ulByte) &\r
+ 0x00ffffff);\r
+\r
+ //\r
+ // Translate this palette entry and write it to the\r
+ // screen.\r
+ //\r
+ ulByte = DPYCOLORTRANSLATE(ulByte);\r
+ WriteData(ulByte >> 8);\r
+ WriteData(ulByte);\r
+\r
+ //\r
+ // Decrement the count of pixels to draw.\r
+ //\r
+ lCount--;\r
+ }\r
+ }\r
+ }\r
+\r
+ //\r
+ // The image data has been drawn.\r
+ //\r
+ break;\r
+ }\r
+\r
+ //\r
+ // The pixel data is in 8 bit per pixel format.\r
+ //\r
+ case 8:\r
+ {\r
+ //\r
+ // Loop while there are more pixels to draw.\r
+ //\r
+ while(lCount--)\r
+ {\r
+ //\r
+ // Get the next byte of pixel data and extract the\r
+ // corresponding entry from the palette.\r
+ //\r
+ ulByte = *pucData++ * 3;\r
+ ulByte = *(unsigned long *)(pucPalette + ulByte) & 0x00ffffff;\r
+\r
+ //\r
+ // Translate this palette entry and write it to the screen.\r
+ //\r
+ ulByte = DPYCOLORTRANSLATE(ulByte);\r
+ WriteData(ulByte >> 8);\r
+ WriteData(ulByte);\r
+ }\r
+\r
+ //\r
+ // The image data has been drawn.\r
+ //\r
+ break;\r
+ }\r
+ }\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Flushes any cached drawing operations.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//!\r
+//! This functions flushes any cached drawing operations to the display. This\r
+//! is useful when a local frame buffer is used for drawing operations, and the\r
+//! flush would copy the local frame buffer to the display. For the ST7637\r
+//! driver, the flush is a no operation.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16Flush(void *pvDisplayData)\r
+{\r
+ //\r
+ // There is nothing to be done.\r
+ //\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Draws a horizontal line.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param lX1 is the X coordinate of the start of the line.\r
+//! \param lX2 is the X coordinate of the end of the line.\r
+//! \param lY is the Y coordinate of the line.\r
+//! \param ulValue is the color of the line.\r
+//!\r
+//! This function draws a horizontal line on the display. The coordinates of\r
+//! the line are assumed to be within the extents of the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16LineDrawH(void *pvDisplayData, long lX1, long lX2, long lY,\r
+ unsigned long ulValue)\r
+{\r
+ //\r
+ // Set the extent of the line along the X axis.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(lX1);\r
+ WriteData(lX2);\r
+\r
+ //\r
+ // Set the Y address of the display cursor.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(lY + 1);\r
+ WriteData(lY + 1);\r
+\r
+ //\r
+ // Write the data RAM write command.\r
+ //\r
+ WriteCommand(0x2c);\r
+\r
+ //\r
+ // Loop through the pixels of this horizontal line.\r
+ //\r
+ while(lX1++ <= lX2)\r
+ {\r
+ //\r
+ // Write the pixel value.\r
+ //\r
+ WriteData(ulValue >> 8);\r
+ WriteData(ulValue);\r
+ }\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Draws a vertical line.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param lX is the X coordinate of the line.\r
+//! \param lY1 is the Y coordinate of the start of the line.\r
+//! \param lY2 is the Y coordinate of the end of the line.\r
+//! \param ulValue is the color of the line.\r
+//!\r
+//! This function draws a vertical line on the display. The coordinates of the\r
+//! line are assumed to be within the extents of the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16LineDrawV(void *pvDisplayData, long lX, long lY1, long lY2,\r
+ unsigned long ulValue)\r
+{\r
+ //\r
+ // Set the X address of the display cursor.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(lX);\r
+ WriteData(lX);\r
+\r
+ //\r
+ // Set the extent of the line along the Y axis.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(lY1 + 1);\r
+ WriteData(lY2 + 1);\r
+\r
+ //\r
+ // Write the data RAM write command.\r
+ //\r
+ WriteCommand(0x2c);\r
+\r
+ //\r
+ // Loop through the pixels of this vertical line.\r
+ //\r
+ while(lY1++ <= lY2)\r
+ {\r
+ //\r
+ // Write the pixel value.\r
+ //\r
+ WriteData(ulValue >> 8);\r
+ WriteData(ulValue);\r
+ }\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Fills a rectangle.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param pRect is a pointer to the structure describing the rectangle.\r
+//! \param ulValue is the color of the rectangle.\r
+//!\r
+//! This function fills a rectangle on the display. The coordinates of the\r
+//! rectangle are assumed to be within the extents of the display, and the\r
+//! rectangle specification is fully inclusive (i.e. both sXMin and sXMax are\r
+//! drawn, along with sYMin and sYMax).\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16RectFill(void *pvDisplayData, const tRectangle *pRect,\r
+ unsigned long ulValue)\r
+{\r
+ long lCount;\r
+\r
+ //\r
+ // Set the extent of the rectangle along the X axis.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(pRect->sXMin);\r
+ WriteData(pRect->sXMax);\r
+\r
+ //\r
+ // Set the extent of the rectangle along the Y axis.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(pRect->sYMin + 1);\r
+ WriteData(pRect->sYMax + 1);\r
+\r
+ //\r
+ // Write the data RAM write command.\r
+ //\r
+ WriteCommand(0x2c);\r
+\r
+ //\r
+ // Loop through the pixels in this rectangle.\r
+ //\r
+ for(lCount = ((pRect->sXMax - pRect->sXMin + 1) *\r
+ (pRect->sYMax - pRect->sYMin + 1)); lCount > 0; lCount--)\r
+ {\r
+ //\r
+ // Write the pixel value.\r
+ //\r
+ WriteData(ulValue >> 8);\r
+ WriteData(ulValue);\r
+ }\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Translates a 24-bit RGB color to a display driver-specific color.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param ulValue is the 24-bit RGB color. The least-significant byte is the\r
+//! blue channel, the next byte is the green channel, and the third byte is the\r
+//! red channel.\r
+//!\r
+//! This function translates a 24-bit RGB color into a value that can be\r
+//! written into the display's frame buffer in order to reproduce that color,\r
+//! or the closest possible approximation of that color.\r
+//!\r
+//! \return Returns the display-driver specific color.\r
+//\r
+//*****************************************************************************\r
+static unsigned long\r
+Formike128x128x16ColorTranslate(void *pvDisplayData, unsigned long ulValue)\r
+{\r
+ //\r
+ // Translate from a 24-bit RGB color to a 5-6-5 RGB color.\r
+ //\r
+ return(DPYCOLORTRANSLATE(ulValue));\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! The display structure that describes the driver for the Formike Electronic\r
+//! KWH015C04-F01 CSTN panel with an ST7637 controller.\r
+//\r
+//*****************************************************************************\r
+const tDisplay g_sFormike128x128x16 =\r
+{\r
+ sizeof(tDisplay),\r
+ 0,\r
+ 128,\r
+ 128,\r
+ Formike128x128x16PixelDraw,\r
+ Formike128x128x16PixelDrawMultiple,\r
+ Formike128x128x16LineDrawH,\r
+ Formike128x128x16LineDrawV,\r
+ Formike128x128x16RectFill,\r
+ Formike128x128x16ColorTranslate,\r
+ Formike128x128x16Flush\r
+};\r
+\r
+//*****************************************************************************\r
+//\r
+// Close the Doxygen group.\r
+//! @}\r
+//\r
+//*****************************************************************************\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+/* FreeRTOS.org demo wrappers. These are required so the prototypes for the\r
+functions are the same as for the display drivers used by other evaluation\r
+kits. */\r
+\r
+static tContext sContext;\r
+\r
+void vFormike128x128x16Clear( void )\r
+{\r
+const tRectangle xRectangle = { 0, 0, 127, 127 };\r
+\r
+ GrContextForegroundSet( &sContext, ClrBlack );\r
+ GrRectFill( &sContext, &xRectangle );\r
+ GrContextForegroundSet(&sContext, ClrWhite);\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vFormike128x128x16StringDraw( const char *pcString, unsigned long lX, unsigned long lY, unsigned char ucColor )\r
+{\r
+ GrContextForegroundSet(&sContext, ClrWhite);\r
+ GrStringDraw( &sContext, pcString, strlen( pcString ), lX, lY, false );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vFormike128x128x16Init( unsigned long ul )\r
+{\r
+tRectangle rectScreen;\r
+const unsigned char *pcAppName = "www.FreeRTOS.org";\r
+\r
+ ( void ) ul;\r
+ \r
+ Formike128x128x16Init();\r
+ Formike128x128x16BacklightOn();\r
+ GrContextInit(&sContext, &g_sFormike128x128x16);\r
+ GrContextFontSet(&sContext, &g_sFontCmss12);\r
+ rectScreen.sXMin = 0;\r
+\r
+ /* Fill the screen with a black rectangle. */\r
+ rectScreen.sYMin = 0;\r
+ rectScreen.sXMax = g_sFormike128x128x16.usWidth - 1;\r
+ rectScreen.sYMax = g_sFormike128x128x16.usHeight - 1;\r
+ GrContextForegroundSet(&sContext, ClrBlack);\r
+ GrRectFill(&sContext, &rectScreen);\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vFormike128x128x16ImageDraw( const unsigned char *pucImage, unsigned long ulX, unsigned long ulY, unsigned long ulWidth, unsigned long ulHeight )\r
+{\r
+ GrImageDraw( &sContext, pucImage, ( long ) ulX, ( long ) ulY);\r
+}\r
+\r
+\r
+\r
+\r
--- /dev/null
+//*****************************************************************************\r
+//\r
+// formike128x128x16.h - Prototypes for the Formike Electronic KWH015C04-F01\r
+// display driver.\r
+//\r
+// Copyright (c) 2008 Luminary Micro, Inc. All rights reserved.\r
+// \r
+// Software License Agreement\r
+// \r
+// Luminary Micro, Inc. (LMI) is supplying this software for use solely and\r
+// exclusively on LMI's microcontroller products.\r
+// \r
+// The software is owned by LMI and/or its suppliers, and is protected under\r
+// applicable copyright laws. All rights are reserved. You may not combine\r
+// this software with "viral" open-source software in order to form a larger\r
+// program. Any use in violation of the foregoing restrictions may subject\r
+// the user to criminal sanctions under applicable laws, as well as to civil\r
+// liability for the breach of the terms and conditions of this license.\r
+// \r
+// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED\r
+// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF\r
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.\r
+// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR\r
+// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.\r
+// \r
+// This is part of revision 2523 of the Stellaris Peripheral Driver Library.\r
+//\r
+//*****************************************************************************\r
+\r
+#ifndef __FORMIKE128X128X16_H__\r
+#define __FORMIKE128X128X16_H__\r
+\r
+//*****************************************************************************\r
+//\r
+// Prototypes for the globals exported by this driver.\r
+//\r
+//*****************************************************************************\r
+extern void Formike128x128x16Init(void);\r
+extern void Formike128x128x16BacklightOn(void);\r
+extern void Formike128x128x16BacklightOff(void);\r
+extern const tDisplay g_sFormike128x128x16;\r
+\r
+/* FreeRTOS.org demo wrappers. These are required so the prototypes for the\r
+functions are the same as for the display drivers used by other evaluation\r
+kits. */\r
+void vFormike128x128x16Clear( void );\r
+void vFormike128x128x16StringDraw( const char *pcString, unsigned long lX, unsigned long lY, unsigned char ucColor );\r
+void vFormike128x128x16Init( unsigned long ul );\r
+void vFormike128x128x16ImageDraw( const unsigned char *pucImage, unsigned long ulX, unsigned long ulY, unsigned long ulWidth, unsigned long ulHeight );\r
+\r
+#endif // __FORMIKE128X128X16_H__\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
\r
\r
\r
+\r
+/************************************************************************* \r
+ * Please ensure to read http://www.freertos.org/portLM3Sxxxx_Eclipse.html\r
+ * which provides information on configuring and running this demo for the\r
+ * various Luminary Micro EKs.\r
+ *************************************************************************/\r
+\r
+\r
+\r
+\r
/* Standard includes. */\r
#include <stdio.h>\r
\r
#include "queue.h"\r
#include "semphr.h"\r
\r
+/* Hardware library includes. */\r
+#include "hw_memmap.h"\r
+#include "hw_types.h"\r
+#include "hw_sysctl.h"\r
+#include "sysctl.h"\r
+#include "gpio.h"\r
+#include "grlib.h"\r
+#include "rit128x96x4.h"\r
+#include "osram128x64x4.h"\r
+#include "formike128x128x16.h"\r
+\r
/* Demo app includes. */\r
#include "BlockQ.h"\r
#include "death.h"\r
#include "QPeek.h"\r
#include "recmutex.h"\r
\r
-/* Hardware library includes. */\r
-#include "hw_memmap.h"\r
-#include "hw_types.h"\r
-#include "hw_sysctl.h"\r
-#include "sysctl.h"\r
-#include "gpio.h"\r
-#include "rit128x96x4.h"\r
-#include "osram128x64x4.h"\r
\r
/*-----------------------------------------------------------*/\r
\r
\r
/* Constants used when writing strings to the display. */\r
#define mainCHARACTER_HEIGHT ( 9 )\r
+#define mainMAX_ROWS_128 ( mainCHARACTER_HEIGHT * 14 )\r
#define mainMAX_ROWS_96 ( mainCHARACTER_HEIGHT * 10 )\r
#define mainMAX_ROWS_64 ( mainCHARACTER_HEIGHT * 7 )\r
#define mainFULL_SCALE ( 15 )\r
\r
/*-----------------------------------------------------------*/\r
\r
+/************************************************************************* \r
+ * Please ensure to read http://www.freertos.org/portLM3Sxxxx_Eclipse.html\r
+ * which provides information on configuring and running this demo for the\r
+ * various Luminary Micro EKs.\r
+ *************************************************************************/\r
int main( void )\r
{\r
prvSetupHardware();\r
{\r
static xOLEDMessage xMessage = { "PASS" };\r
static unsigned portLONG ulTicksSinceLastDisplay = 0;\r
+static portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
\r
/* Called from every tick interrupt. Have enough ticks passed to make it\r
time to perform our health status check again? */\r
}\r
\r
/* Send the message to the OLED gatekeeper for display. */\r
- xQueueSendFromISR( xOLEDQueue, &xMessage, pdFALSE );\r
+ xHigherPriorityTaskWoken = pdFALSE;\r
+ xQueueSendFromISR( xOLEDQueue, &xMessage, &xHigherPriorityTaskWoken );\r
}\r
}\r
/*-----------------------------------------------------------*/\r
static portCHAR cMessage[ mainMAX_MSG_LEN ];\r
extern unsigned portLONG ulMaxJitter;\r
unsigned portBASE_TYPE uxUnusedStackOnEntry, uxUnusedStackNow;\r
+const unsigned portCHAR *pucImage;\r
\r
/* Functions to access the OLED. The one used depends on the dev kit\r
being used. */\r
-void ( *vOLEDInit )( unsigned portLONG );\r
-void ( *vOLEDStringDraw )( const portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portCHAR );\r
-void ( *vOLEDImageDraw )( const unsigned portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portLONG, unsigned portLONG );\r
-void ( *vOLEDClear )( void );\r
+void ( *vOLEDInit )( unsigned portLONG ) = NULL;\r
+void ( *vOLEDStringDraw )( const portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portCHAR ) = NULL;\r
+void ( *vOLEDImageDraw )( const unsigned portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portLONG, unsigned portLONG ) = NULL;\r
+void ( *vOLEDClear )( void ) = NULL;\r
\r
/* Just for demo purposes. */\r
uxUnusedStackOnEntry = uxTaskGetStackHighWaterMark( NULL );\r
vOLEDImageDraw = OSRAM128x64x4ImageDraw;\r
vOLEDClear = OSRAM128x64x4Clear;\r
ulMaxY = mainMAX_ROWS_64;\r
+ pucImage = pucBasicBitmap;\r
break;\r
\r
- default : vOLEDInit = RIT128x96x4Init;\r
+ case SYSCTL_DID1_PRTNO_1968 : \r
+ case SYSCTL_DID1_PRTNO_8962 : vOLEDInit = RIT128x96x4Init;\r
vOLEDStringDraw = RIT128x96x4StringDraw;\r
vOLEDImageDraw = RIT128x96x4ImageDraw;\r
vOLEDClear = RIT128x96x4Clear;\r
- ulMaxY = mainMAX_ROWS_96; \r
+ ulMaxY = mainMAX_ROWS_96;\r
+ pucImage = pucBasicBitmap;\r
+ break;\r
+ \r
+ default : vOLEDInit = vFormike128x128x16Init;\r
+ vOLEDStringDraw = vFormike128x128x16StringDraw;\r
+ vOLEDImageDraw = vFormike128x128x16ImageDraw;\r
+ vOLEDClear = vFormike128x128x16Clear;\r
+ ulMaxY = mainMAX_ROWS_128;\r
+ pucImage = pucGrLibBitmap;\r
break;\r
}\r
\r
\r
/* Initialise the OLED and display a startup message. */\r
vOLEDInit( ulSSI_FREQUENCY ); \r
- vOLEDStringDraw( " POWERED BY FreeRTOS", 0, 0, mainFULL_SCALE );\r
+ vOLEDStringDraw( "POWERED BY FreeRTOS", 0, 0, mainFULL_SCALE );\r
vOLEDImageDraw( pucImage, 0, mainCHARACTER_HEIGHT + 1, bmpBITMAP_WIDTH, bmpBITMAP_HEIGHT );\r
\r
- uxUnusedStackNow = uxTaskGetStackHighWaterMark( NULL );\r
- \r
for( ;; )\r
{\r
/* Wait for a message to arrive that requires displaying. */\r
}\r
/*-----------------------------------------------------------*/\r
\r
-void vApplicationIdleHook( void )\r
-{\r
- /* This is just a sanity check function to test the port is\r
- functioning correctly. It can be removed from real applications.\r
- \r
- Fill the general purpose registers with known values. */\r
- __asm volatile( " mov r11, #10 \n"\r
- " add r0, r11, #1 \n"\r
- " add r1, r11, #2 \n"\r
- " add r2, r11, #3 \n"\r
- " add r3, r11, #4 \n"\r
- " add r4, r11, #5 \n"\r
- " add r5, r11, #6 \n"\r
- " add r6, r11, #7 \n"\r
- " add r7, r11, #8 \n"\r
- " add r8, r11, #9 \n"\r
- " add r9, r11, #10 \n"\r
- " add r10, r11, #11 \n"\r
- " add r12, r11, #12" );\r
- \r
- /* Check the values are as expected. A context switch might\r
- have occurred since setting the register values. */\r
- __asm volatile( " cmp r11, #10 \n"\r
- " bne set_error_flag \n"\r
- " cmp r0, #11 \n"\r
- " bne set_error_flag \n"\r
- " cmp r1, #12 \n"\r
- " bne set_error_flag \n"\r
- " cmp r2, #13 \n"\r
- " bne set_error_flag \n"\r
- " cmp r3, #14 \n"\r
- " bne set_error_flag \n"\r
- " cmp r4, #15 \n"\r
- " bne set_error_flag \n"\r
- " cmp r5, #16 \n"\r
- " bne set_error_flag \n"\r
- " cmp r6, #17 \n"\r
- " bne set_error_flag \n"\r
- " cmp r7, #18 \n"\r
- " bne set_error_flag \n"\r
- " cmp r8, #19 \n"\r
- " bne set_error_flag \n"\r
- " cmp r9, #20 \n"\r
- " bne set_error_flag \n"\r
- " cmp r10, #21 \n"\r
- " bne set_error_flag \n"\r
- " cmp r12, #22 \n"\r
- " bne set_error_flag \n"\r
- " bx r14 \n"\r
- " \n" /* If an error is detected in the */ \r
- "set_error_flag: \n" /* value of a register then the error */\r
- " ldr r1, ulIdleErrorConst\n" /* variable will be set to true. This */\r
- " mov r0, #1 \n" /* will cause an error message to be */\r
- " str r0, [r1] \n" /* written to the OLED. */\r
- " bx r14 \n"\r
- " \n"\r
- " .align 2 \n" \r
- "ulIdleErrorConst: .word ulIdleError" );\r
-}\r
-/*-----------------------------------------------------------*/\r
-\r
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed portCHAR *pcTaskName )\r
{\r
for( ;; );\r
}\r
\r
+\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
void Timer0IntHandler( void );\r
\r
/* Stores the value of the maximum recorded jitter between interrupts. */\r
-unsigned portLONG ulMaxJitter = 0;\r
+volatile unsigned portLONG ulMaxJitter = 0;\r
\r
/*-----------------------------------------------------------*/\r
\r
/* Just used to measure time. */\r
TimerLoadSet(TIMER1_BASE, TIMER_A, timerMAX_32BIT_VALUE );\r
\r
+ /* Ensure interrupts do not start until the scheduler is running. */\r
+ portDISABLE_INTERRUPTS();\r
+ \r
/* The rate at which the timer will interrupt. */\r
ulFrequency = configCPU_CLOCK_HZ / timerINTERRUPT_FREQUENCY; \r
TimerLoadSet( TIMER0_BASE, TIMER_A, ulFrequency );\r
\r
void Timer0IntHandler( void )\r
{\r
-unsigned portLONG ulDifference, ulCurrentCount;\r
+unsigned portLONG ulDifference;\r
+volatile unsigned portLONG ulCurrentCount;\r
static portLONG ulMaxDifference = 0, ulLastCount = 0;\r
\r
/* We use the timer 1 counter value to measure the clock cycles between\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
* FreeRTOS API DOCUMENTATION AVAILABLE ON THE FreeRTOS.org WEB SITE.\r
*----------------------------------------------------------*/\r
\r
-#define configUSE_PREEMPTION 1\r
-#define configUSE_IDLE_HOOK 0\r
-#define configUSE_TICK_HOOK 1\r
-#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 50000000 )\r
-#define configTICK_RATE_HZ ( ( portTickType ) 1000 )\r
-#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 70 )\r
-#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24000 ) )\r
-#define configMAX_TASK_NAME_LEN ( 12 )\r
-#define configUSE_TRACE_FACILITY 1\r
-#define configUSE_16_BIT_TICKS 0\r
-#define configIDLE_SHOULD_YIELD 0\r
-#define configUSE_CO_ROUTINES 0\r
-#define configUSE_MUTEXES 1\r
+#define configUSE_PREEMPTION 1\r
+#define configUSE_IDLE_HOOK 0\r
+#define configUSE_TICK_HOOK 1\r
+#define configCPU_CLOCK_HZ ( ( unsigned portLONG ) 50000000 )\r
+#define configTICK_RATE_HZ ( ( portTickType ) 1000 )\r
+#define configMINIMAL_STACK_SIZE ( ( unsigned portSHORT ) 70 )\r
+#define configTOTAL_HEAP_SIZE ( ( size_t ) ( 24000 ) )\r
+#define configMAX_TASK_NAME_LEN ( 12 )\r
+#define configUSE_TRACE_FACILITY 1\r
+#define configUSE_16_BIT_TICKS 0\r
+#define configIDLE_SHOULD_YIELD 0\r
+#define configUSE_CO_ROUTINES 0\r
+#define configUSE_MUTEXES 1\r
+#define configCHECK_FOR_STACK_OVERFLOW 2\r
\r
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 5 )\r
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
OPTFFF 1,2,1,0,0,0,0,0,<..\Common\Minimal\blocktim.c><blocktim.c> \r
OPTFFF 1,3,1,0,0,0,0,0,<..\Common\Minimal\death.c><death.c> \r
OPTFFF 1,4,1,0,0,0,0,0,<..\Common\Minimal\integer.c><integer.c> \r
-OPTFFF 1,5,1,0,0,0,0,0,<.\main.c><main.c> \r
+OPTFFF 1,5,1,2,0,1,1,0,<.\main.c><main.c> { 44,0,0,0,2,0,0,0,3,0,0,0,255,255,255,255,255,255,255,255,252,255,255,255,232,255,255,255,110,0,0,0,115,0,0,0,248,3,0,0,22,2,0,0 }\r
OPTFFF 1,6,1,0,0,0,0,0,<.\ParTest\ParTest.c><ParTest.c> \r
OPTFFF 1,7,1,0,0,0,0,0,<..\Common\Minimal\PollQ.c><PollQ.c> \r
OPTFFF 1,8,1,0,0,0,0,0,<..\Common\Minimal\semtest.c><semtest.c> \r
OPTFFF 1,9,2,0,0,0,0,0,<.\startup_rvmdk.S><startup_rvmdk.S> \r
OPTFFF 1,10,1,0,0,0,0,0,<.\timertest.c><timertest.c> \r
-OPTFFF 1,11,5,822083584,0,0,0,0,<.\FreeRTOSConfig.h><FreeRTOSConfig.h> \r
+OPTFFF 1,11,5,922746880,0,0,0,0,<.\FreeRTOSConfig.h><FreeRTOSConfig.h> \r
OPTFFF 1,12,1,0,0,0,0,0,<..\Common\Minimal\GenQTest.c><GenQTest.c> \r
OPTFFF 1,13,1,0,0,0,0,0,<..\Common\Minimal\QPeek.c><QPeek.c> \r
OPTFFF 2,14,1,0,0,0,0,0,<.\rit128x96x4.c><rit128x96x4.c> \r
OPTFFF 2,15,1,0,0,0,0,0,<.\osram128x64x4.c><osram128x64x4.c> \r
OPTFFF 2,16,4,0,0,0,0,0,<..\Common\drivers\LuminaryMicro\Keil\driverlib.lib><driverlib.lib> \r
-OPTFFF 3,17,1,0,0,0,0,0,<..\..\Source\tasks.c><tasks.c> \r
-OPTFFF 3,18,1,0,0,0,0,0,<..\..\Source\list.c><list.c> \r
-OPTFFF 3,19,1,0,0,0,0,0,<..\..\Source\queue.c><queue.c> \r
-OPTFFF 3,20,1,335544320,0,0,0,0,<..\..\Source\portable\RVDS\ARM_CM3\port.c><port.c> \r
-OPTFFF 3,21,1,0,0,0,0,0,<..\..\Source\portable\MemMang\heap_2.c><heap_2.c> \r
-OPTFFF 4,22,1,822083584,0,0,0,0,<.\webserver\uIP_Task.c><uIP_Task.c> \r
-OPTFFF 4,23,1,754974720,0,0,0,0,<.\webserver\emac.c><emac.c> \r
-OPTFFF 4,24,1,0,0,0,0,0,<.\webserver\httpd.c><httpd.c> \r
-OPTFFF 4,25,1,0,0,0,0,0,<.\webserver\httpd-cgi.c><httpd-cgi.c> \r
-OPTFFF 4,26,1,0,0,0,0,0,<.\webserver\httpd-fs.c><httpd-fs.c> \r
-OPTFFF 4,27,1,0,0,0,0,0,<.\webserver\http-strings.c><http-strings.c> \r
-OPTFFF 4,28,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c><uip_arp.c> \r
-OPTFFF 4,29,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\psock.c><psock.c> \r
-OPTFFF 4,30,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\timer.c><timer.c> \r
-OPTFFF 4,31,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\uip.c><uip.c> \r
+OPTFFF 2,17,1,0,0,0,0,0,<.\formike128x128x16.c><formike128x128x16.c> \r
+OPTFFF 2,18,4,0,0,0,0,0,<..\Common\drivers\LuminaryMicro\Keil\grlib.lib><grlib.lib> \r
+OPTFFF 3,19,1,0,0,0,0,0,<..\..\Source\tasks.c><tasks.c> \r
+OPTFFF 3,20,1,0,0,0,0,0,<..\..\Source\list.c><list.c> \r
+OPTFFF 3,21,1,0,0,0,0,0,<..\..\Source\queue.c><queue.c> \r
+OPTFFF 3,22,1,402653184,0,0,0,0,<..\..\Source\portable\RVDS\ARM_CM3\port.c><port.c> \r
+OPTFFF 3,23,1,0,0,0,0,0,<..\..\Source\portable\MemMang\heap_2.c><heap_2.c> \r
+OPTFFF 4,24,1,822083584,0,0,0,0,<.\webserver\uIP_Task.c><uIP_Task.c> \r
+OPTFFF 4,25,1,0,0,0,0,0,<.\webserver\emac.c><emac.c> \r
+OPTFFF 4,26,1,0,0,0,0,0,<.\webserver\httpd.c><httpd.c> \r
+OPTFFF 4,27,1,0,0,0,0,0,<.\webserver\httpd-cgi.c><httpd-cgi.c> \r
+OPTFFF 4,28,1,0,0,0,0,0,<.\webserver\httpd-fs.c><httpd-fs.c> \r
+OPTFFF 4,29,1,0,0,0,0,0,<.\webserver\http-strings.c><http-strings.c> \r
+OPTFFF 4,30,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\uip_arp.c><uip_arp.c> \r
+OPTFFF 4,31,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\psock.c><psock.c> \r
+OPTFFF 4,32,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\timer.c><timer.c> \r
+OPTFFF 4,33,1,0,0,0,0,0,<..\Common\ethernet\uIP\uip-1.0\uip\uip.c><uip.c> \r
\r
\r
TARGOPT 1, (FreeRTOS_Demo)\r
- ADSCLK=8000000\r
+ ADSCLK=6000000\r
OPTTT 1,1,1,0\r
OPTHX 1,65535,0,0,0\r
OPTLX 79,66,8,<.\rvmdk\>\r
OPTXL 1,1,1,1,1,1,1,0,0\r
OPTFL 1,0,1\r
OPTAX 255\r
- OPTBL 0,(Data Sheet)<DATASHTS\Luminary\LM3S6965.PDF>\r
- OPTDL (SARMCM3.DLL)()(DLM.DLL)(-pLM3S6965)(SARMCM3.DLL)()(TLM.DLL)(-pLM3S6965)\r
+ OPTBL 0,(Data Sheet)<DATASHTS\Luminary\LM3S2965.PDF>\r
+ OPTDL (SARMCM3.DLL)()(DLM.DLL)(-pLM3S2965)(SARMCM3.DLL)()(TLM.DLL)(-pLM3S2965)\r
OPTDBG 48126,4,()()()()()()()()()() (BIN\lmidk-agdi.dll)()()()\r
- OPTKEY 0,(DLGTARM)((1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1014=-1,-1,-1,-1,0)(1016=-1,-1,-1,-1,0))\r
+ OPTKEY 0,(DLGTARM)((1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(101=-1,-1,-1,-1,0)(102=-1,-1,-1,-1,0)(103=-1,-1,-1,-1,0)(104=-1,-1,-1,-1,0)(105=-1,-1,-1,-1,0)(106=-1,-1,-1,-1,0)(107=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(163=-1,-1,-1,-1,0)(164=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)(152=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(1012=-1,-1,-1,-1,0)(1014=-1,-1,-1,-1,0)(1016=-1,-1,-1,-1,0)(136=-1,-1,-1,-1,0))\r
OPTKEY 0,(ARMDBGFLAGS)()\r
OPTKEY 0,(lmidk-agdi)(-B0 -O1792)\r
OPTMM 1,2,(0)\r
File 2,1,<.\rit128x96x4.c><rit128x96x4.c>\r
File 2,1,<.\osram128x64x4.c><osram128x64x4.c>\r
File 2,4,<..\Common\drivers\LuminaryMicro\Keil\driverlib.lib><driverlib.lib>\r
+File 2,1,<.\formike128x128x16.c><formike128x128x16.c>\r
+File 2,4,<..\Common\drivers\LuminaryMicro\Keil\grlib.lib><grlib.lib>\r
File 3,1,<..\..\Source\tasks.c><tasks.c>\r
File 3,1,<..\..\Source\list.c><list.c>\r
File 3,1,<..\..\Source\queue.c><queue.c>\r
\r
\r
Options 1,0,0 // Target 'FreeRTOS_Demo'\r
- Device (LM3S6965)\r
+ Device (LM3S2965)\r
Vendor (Luminary Micro)\r
Cpu (IRAM(0x20000000-0x2000FFFF) IROM(0-0x3FFFF) CLOCK(6000000) CPUTYPE("Cortex-M3"))\r
FlashUt ()\r
StupF ("STARTUP\Luminary\Startup.s" ("Luminary Startup Code"))\r
FlashDR (UL2CM3(-UU0101L5E -O14 -S0 -C0 -N00("ARM Cortex-M3") -D00(1BA00477) -L00(4) -FO7 -FD20000000 -FC800 -FN1 -FF0LM3S_256 -FS00 -FL040000))\r
- DevID (4337)\r
+ DevID (4322)\r
Rgf (LM3Sxxxx.H)\r
Mem ()\r
C ()\r
ADSLDMC (--entry Reset_Handler)\r
ADSLDIF ()\r
ADSLDDW ()\r
- OPTDL (SARMCM3.DLL)()(DLM.DLL)(-pLM3S6965)(SARMCM3.DLL)()(TLM.DLL)(-pLM3S6965)\r
+ OPTDL (SARMCM3.DLL)()(DLM.DLL)(-pLM3S2965)(SARMCM3.DLL)()(TLM.DLL)(-pLM3S2965)\r
OPTDBG 48126,4,()()()()()()()()()() (BIN\lmidk-agdi.dll)()()()\r
FLASH1 { 1,0,0,0,1,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0 }\r
FLASH2 (BIN\lmidk-agdi.dll)\r
- FLASH3 ("" ())\r
+ FLASH3 ()\r
FLASH4 ()\r
EndOpt\r
\r
-Options 1,4,0 // Group 'uIP_Source'\r
- PropFld { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }\r
- IncBld=1\r
- AlwaysBuild=2\r
- GenAsm=2\r
- AsmAsm=2\r
- PublicsOnly=2\r
- StopCode=11\r
- CustArgs ()\r
- LibMods ()\r
- ADSCCFLG { 2,84,85,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }\r
- ADSCMISC ()\r
- ADSCDEFN ()\r
- ADSCUDEF ()\r
- ADSCINCD ()\r
- ADSASFLG { 170,42,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }\r
- ADSAMISC ()\r
- ADSADEFN ()\r
- ADSAUDEF ()\r
- ADSAINCD ()\r
-EndOpt\r
-\r
<option>\r
<name>IlinkAdditionalLibs</name>\r
<state>$PROJ_DIR$\..\Common\drivers\LuminaryMicro\IAR\driverlib.a</state>\r
+ <state>$PROJ_DIR$\..\Common\drivers\LuminaryMicro\IAR\grlib.a</state>\r
</option>\r
<option>\r
<name>IlinkOverrideProgramEntryLabel</name>\r
<group>\r
<name>Library files</name>\r
<file>\r
- <name>$PROJ_DIR$\..\Common\drivers\LuminaryMicro\IAR\driverlib.r79</name>\r
+ <name>$PROJ_DIR$\..\Common\drivers\LuminaryMicro\IAR\driverlib.a</name>\r
+ </file>\r
+ <file>\r
+ <name>$PROJ_DIR$\formike128x128x16.c</name>\r
+ </file>\r
+ <file>\r
+ <name>$PROJ_DIR$\..\Common\drivers\LuminaryMicro\IAR\grlib.a</name>\r
</file>\r
<file>\r
<name>$PROJ_DIR$\osram128x64x4.c</name>\r
#ifndef BITMAP_H\r
#define BITMAP_H\r
\r
-const unsigned char pucImage[] =\r
+#define bmpBITMAP_HEIGHT 50\r
+#define bmpBITMAP_WIDTH 128\r
+\r
+const unsigned char pucBasicBitmap[] =\r
{\r
0x00, 0x0a, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,\r
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa,\r
0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0x00,\r
0x00 };\r
\r
-#define bmpBITMAP_HEIGHT 50\r
-#define bmpBITMAP_WIDTH 128\r
+const unsigned char pucGrLibBitmap[] =\r
+{\r
+ IMAGE_FMT_4BPP_COMP,\r
+ 124, 0,\r
+ 49, 0,\r
+\r
+ 15,\r
+ 0x00, 0x00, 0x00,\r
+ 0x00, 0x0c, 0x00,\r
+ 0x20, 0x44, 0x20,\r
+ 0x00, 0x75, 0x00,\r
+ 0x69, 0x69, 0x69,\r
+ 0x00, 0xc2, 0x00,\r
+ 0x00, 0xd2, 0x00,\r
+ 0x38, 0xb6, 0x38,\r
+ 0x00, 0xea, 0x00,\r
+ 0x00, 0xf2, 0x00,\r
+ 0xaa, 0xb2, 0xaa,\r
+ 0x65, 0xff, 0x65,\r
+ 0x69, 0xff, 0x69,\r
+ 0x6d, 0xff, 0x6d,\r
+ 0x71, 0xff, 0x71,\r
+ 0xff, 0xff, 0xff,\r
+\r
+ 0x03, 0x21, 0x33, 0x53, 0x33, 0x33, 0x33, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f,\r
+ 0x17, 0x07, 0x06, 0x35, 0x33, 0x12, 0x03, 0x23, 0x96, 0x68, 0x88, 0x88,\r
+ 0x88, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f, 0x17, 0x07, 0x06, 0x86, 0x69, 0x32,\r
+ 0x03, 0x29, 0x66, 0x65, 0x66, 0x66, 0x66, 0xe9, 0xd4, 0xf8, 0xa7, 0x5f,\r
+ 0x17, 0x07, 0x06, 0x56, 0x66, 0x92, 0x07, 0x78, 0x63, 0x11, 0x11, 0x11,\r
+ 0xe9, 0xd4, 0xa7, 0xf0, 0x5f, 0x17, 0x07, 0x07, 0x11, 0x36, 0x87, 0x78,\r
+ 0x0f, 0x63, 0x00, 0x00, 0x00, 0xe9, 0xd4, 0xa7, 0x5f, 0xe0, 0x17, 0x07,\r
+ 0x07, 0x00, 0x36, 0x87, 0x78, 0x63, 0xfe, 0x07, 0x07, 0x77, 0x2f, 0x07,\r
+ 0x07, 0x02, 0x36, 0x1e, 0x87, 0x78, 0x63, 0x07, 0x07, 0x77, 0x2f, 0x00,\r
+ 0x10, 0x01, 0x22, 0x20, 0x07, 0x00, 0x00, 0x22, 0x21, 0x84, 0x03, 0x36,\r
+ 0x87, 0x78, 0x63, 0x02, 0x02, 0xaa, 0x01, 0xa2, 0x22, 0x20, 0x02, 0x77,\r
+ 0x77, 0x77, 0xe9, 0x3a, 0x22, 0x22, 0x7a, 0xa4, 0x71, 0x20, 0x0a, 0x27,\r
+ 0xb8, 0x29, 0x72, 0xb2, 0x9e, 0x93, 0x36, 0x87, 0x78, 0x40, 0x63, 0x62,\r
+ 0x2a, 0xff, 0xf2, 0xaa, 0x40, 0x07, 0x08, 0xad, 0xdd, 0xdd, 0xdd, 0xe9,\r
+ 0xd7, 0x72, 0x00, 0x40, 0x00, 0xa6, 0xdd, 0xda, 0x70, 0x00, 0x00, 0x02,\r
+ 0x00, 0x77, 0xdd, 0xdc, 0xcc, 0xcd, 0xde, 0xc7, 0x20, 0x00, 0x00, 0x00,\r
+ 0x00, 0x00, 0x01, 0x27, 0xde, 0xdc, 0x08, 0xcc, 0xcc, 0xdd, 0xea, 0x99,\r
+ 0x36, 0x87, 0x78, 0x40, 0x63, 0x69, 0x02, 0xaf, 0xaa, 0xf2, 0x2f, 0xa0,\r
+ 0x04, 0x02, 0xdb, 0xbb, 0xbb, 0xbb, 0xe9, 0xbc, 0xe7, 0x10, 0x20, 0x00,\r
+ 0x07, 0xa5, 0xbb, 0xbd, 0x70, 0x00, 0x10, 0x00, 0x27, 0xec, 0x3b, 0xcd,\r
+ 0xd7, 0x00, 0x00, 0x80, 0x9f, 0xbd, 0x20, 0x00, 0x00, 0x36, 0x87, 0x78,\r
+ 0x40, 0x63, 0x69, 0x02, 0xfa, 0x2a, 0xf2, 0x2f, 0xa0, 0x31, 0x02, 0xdb,\r
+ 0x43, 0x31, 0x42, 0x00, 0x07, 0xa7, 0x0a, 0x70, 0x00, 0x02, 0xdd, 0x41,\r
+ 0xcc, 0x21, 0xce, 0x04, 0x70, 0x00, 0x00, 0x02, 0x7d, 0x39, 0xbc, 0xcb,\r
+ 0x00, 0xbb, 0xbd, 0x20, 0x00, 0x00, 0x36, 0x87, 0x78, 0x20, 0x63, 0x00,\r
+ 0x69, 0xfa, 0x0a, 0xf2, 0x2f, 0xa0, 0x01, 0x02, 0xdb, 0xbb, 0xbb, 0xdd,\r
+ 0xdd, 0xdc, 0x11, 0x08, 0xe7, 0x00, 0x07, 0xad, 0xbb, 0xcd, 0xdd, 0xda,\r
+ 0x09, 0x70, 0x00, 0x2d, 0xcb, 0x41, 0xcc, 0xdd, 0xd1, 0x04, 0xe7, 0x00,\r
+ 0x00, 0x07, 0xeb, 0x51, 0xdc, 0xcd, 0x00, 0xdd, 0xdd, 0x20, 0x00, 0x00,\r
+ 0x36, 0x87, 0x78, 0x00, 0x63, 0x00, 0x00, 0x00, 0x02, 0xfa, 0x2a, 0xf2,\r
+ 0x00, 0xaf, 0xa0, 0x02, 0xdb, 0xbb, 0xbd, 0x72, 0x22, 0x00, 0x77, 0xdc,\r
+ 0xbb, 0xbb, 0xc7, 0x20, 0x07, 0x77, 0x04, 0x77, 0x77, 0xcb, 0xbb, 0xbc,\r
+ 0xd1, 0x20, 0x01, 0x28, 0x7d, 0xbb, 0x42, 0x27, 0x41, 0xcd, 0x20, 0x00,\r
+ 0x40, 0x27, 0x51, 0x72, 0x22, 0x22, 0x27, 0x7c, 0x20, 0x00, 0x00, 0x00,\r
+ 0x36, 0x87, 0x78, 0x63, 0x00, 0x00, 0x00, 0x00, 0x02, 0xaf, 0xaa, 0xfa,\r
+ 0xff, 0x20, 0x02, 0x10, 0xdb, 0xbb, 0xbe, 0x61, 0x2d, 0xbb, 0xbb, 0xcc,\r
+ 0xa8, 0x29, 0x00, 0x89, 0xbd, 0xc3, 0xeb, 0xbb, 0xbb, 0x00, 0xd7, 0x10,\r
+ 0x00, 0x00, 0x2c, 0xcb, 0xbb, 0xbd, 0x58, 0x70, 0x12, 0xc7, 0x13, 0x29,\r
+ 0x36, 0x87, 0x78, 0x40, 0x63, 0xa9, 0x00, 0xaf, 0xff, 0xff, 0xfa, 0x20,\r
+ 0x08, 0x02, 0xdb, 0xbb, 0xbd, 0x39, 0x07, 0xdb, 0xbb, 0x72, 0xcc, 0x03,\r
+ 0x8c, 0x82, 0xbd, 0x70, 0x84, 0xbc, 0x03, 0xd2, 0x00, 0x2d, 0xbb, 0xbb,\r
+ 0xd7, 0x19, 0x01, 0x02, 0x00, 0x00, 0x36, 0x87, 0x78, 0x63, 0xa2, 0x0a,\r
+ 0x10, 0xaf, 0xff, 0xa2, 0x0a, 0xbd, 0x20, 0x00, 0x00, 0x0c, 0x07, 0xdb,\r
+ 0xbb, 0xc7, 0xc9, 0x8e, 0x00, 0x2c, 0x40, 0xcb, 0xc4, 0x00, 0x7c, 0xbb,\r
+ 0xbb, 0xe7, 0x00, 0x06, 0x2d, 0xbb, 0xbb, 0xc7, 0x10, 0x92, 0x31, 0x36,\r
+ 0x10, 0x87, 0x78, 0x63, 0xab, 0x22, 0x22, 0x00, 0x00, 0x00, 0x02, 0xdb,\r
+ 0xbb, 0xbd, 0x20, 0x00, 0x00, 0x07, 0x18, 0xcb, 0xbb, 0xd7, 0x0a, 0x8d,\r
+ 0x00, 0x2d, 0xbb, 0x23, 0xbb, 0xc7, 0x82, 0x00, 0x2e, 0xbb, 0x39, 0x91,\r
+ 0x20, 0xbd, 0x72, 0x8b, 0x00, 0x00, 0x36, 0x87, 0x78, 0x48, 0x63, 0x33,\r
+ 0x02, 0x20, 0xe1, 0xdb, 0xbb, 0xbd, 0x01, 0x20, 0x00, 0x02, 0x7d, 0xbb,\r
+ 0xbb, 0xe2, 0x6b, 0x94, 0x8b, 0x00, 0x00, 0x81, 0xd7, 0x82, 0x00, 0x2d,\r
+ 0x00, 0xbb, 0xbb, 0xc7, 0x20, 0x2c, 0xcb, 0xbb, 0xbb, 0x10, 0xdd, 0x77,\r
+ 0x22, 0x7b, 0x36, 0x87, 0x78, 0x63, 0x80, 0x32, 0x02, 0xaa, 0xf2, 0x22,\r
+ 0x20, 0x02, 0xdb, 0x00, 0xbb, 0xbc, 0x77, 0x77, 0x77, 0xdb, 0xbb, 0xce,\r
+ 0x42, 0x71, 0x63, 0xdb, 0xbb, 0xbd, 0x20, 0x19, 0x7d, 0x10, 0xbb, 0xbb,\r
+ 0xd2, 0x82, 0x00, 0x27, 0xcb, 0xbb, 0x00, 0xc7, 0x20, 0x07, 0xeb, 0xbb,\r
+ 0xbb, 0xbb, 0xcd, 0x21, 0xd7, 0x72, 0x72, 0x36, 0x87, 0x78, 0x63, 0x32,\r
+ 0x01, 0x4f, 0xff, 0xf2, 0xaf, 0xa0, 0x02, 0xdb, 0x41, 0x03, 0xdd, 0xdc,\r
+ 0xbb, 0xbc, 0xd7, 0x20, 0x22, 0x89, 0x42, 0xbd, 0xba, 0x7d, 0xbb, 0xbb,\r
+ 0xd2, 0x82, 0x00, 0x02, 0x27, 0xcb, 0xbb, 0xcc, 0x20, 0x02, 0x89, 0xbb,\r
+ 0x08, 0xbb, 0xbc, 0xdd, 0x72, 0x31, 0x36, 0x87, 0x78, 0x40, 0x63, 0x31,\r
+ 0x02, 0xaf, 0xaa, 0xf2, 0x2f, 0xa0, 0x21, 0x02, 0xdb, 0x3a, 0xbb, 0xbb,\r
+ 0xc7, 0x20, 0x31, 0x88, 0x59, 0xdb, 0xbb, 0xbd, 0xb2, 0x7d, 0xbb, 0xbb,\r
+ 0x40, 0xd2, 0x7b, 0x27, 0xcb, 0xbb, 0xcc, 0x20, 0x00, 0x00, 0x27, 0xec,\r
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbc, 0xe7, 0x84, 0x29, 0x36, 0x87, 0x78, 0x63,\r
+ 0x31, 0x02, 0xfa, 0x02, 0x0a, 0xf2, 0x2f, 0xa0, 0x02, 0xdb, 0x42, 0xbb,\r
+ 0x31, 0xbb, 0xc7, 0x39, 0x5a, 0xdb, 0xbb, 0xbd, 0xb2, 0x08, 0x7d, 0xbb,\r
+ 0xbb, 0xd2, 0x7b, 0x27, 0xcb, 0xbb, 0x00, 0xcc, 0x20, 0x00, 0x02, 0x77,\r
+ 0xed, 0xcb, 0xbb, 0x00, 0xbb, 0xbb, 0xbd, 0x71, 0x00, 0x00, 0x36, 0x87,\r
+ 0x20, 0x78, 0x63, 0x31, 0x02, 0xfa, 0x0a, 0xf2, 0x2f, 0x00, 0xa0, 0x02,\r
+ 0xdb, 0xbb, 0xbb, 0xcd, 0xdd, 0xcb, 0x18, 0xbb, 0xbc, 0xe2, 0x69, 0x59,\r
+ 0xdb, 0xbb, 0xbd, 0x42, 0x20, 0x19, 0x7d, 0xbb, 0xbb, 0xd2, 0x7b, 0x27,\r
+ 0x10, 0xcb, 0xbb, 0xcb, 0x79, 0x02, 0x27, 0x7d, 0xdc, 0x00, 0xbb, 0xbb,\r
+ 0xbb, 0xe2, 0x00, 0x00, 0x36, 0x87, 0x20, 0x78, 0x63, 0x31, 0x02, 0xfa,\r
+ 0x2a, 0xf2, 0xaf, 0x00, 0xa0, 0x02, 0xdb, 0xbb, 0xbd, 0x72, 0x27, 0x4c,\r
+ 0x1d, 0xbb, 0xbb, 0xd7, 0x69, 0x59, 0x89, 0x20, 0x19, 0x42, 0x7d, 0x7e,\r
+ 0x2c, 0xbb, 0xbb, 0xc7, 0x7a, 0x00, 0x10, 0x22, 0x7c, 0xcb, 0x63, 0x36,\r
+ 0x87, 0x78, 0x63, 0x80, 0x31, 0x02, 0xaf, 0xfa, 0xff, 0xff, 0x20, 0x02,\r
+ 0x00, 0xdb, 0xbb, 0xbd, 0x20, 0x00, 0x2c, 0xcb, 0xbb, 0x28, 0xcb, 0x20,\r
+ 0x61, 0x00, 0x8c, 0x00, 0x00, 0x2d, 0x12, 0xbb, 0xbb, 0xd7, 0x82, 0x00,\r
+ 0x2e, 0xbe, 0x00, 0x21, 0x02, 0x7c, 0x63, 0x36, 0x87, 0x78, 0x63, 0x32,\r
+ 0x00, 0x2f, 0xff, 0xff, 0xfa, 0x00, 0x02, 0xdb, 0xbb, 0x00, 0xbd, 0x20,\r
+ 0x00, 0x07, 0xdb, 0xbb, 0xbe, 0x20, 0xc2, 0x62, 0x8c, 0x00, 0x00, 0x2c,\r
+ 0xcb, 0xc4, 0x00, 0x0c, 0x7d, 0xbb, 0xbb, 0xe7, 0x3a, 0x19, 0x2d, 0xbb,\r
+ 0x00, 0xbb, 0xc7, 0x00, 0x00, 0x36, 0x87, 0x78, 0x63, 0x80, 0x3a, 0x02,\r
+ 0xaa, 0xaa, 0x40, 0x00, 0x02, 0xdb, 0x00, 0xbb, 0xbd, 0x20, 0x00, 0x02,\r
+ 0xcc, 0xbb, 0xbd, 0x63, 0x70, 0x63, 0x8b, 0x00, 0x00, 0x07, 0x49, 0x7a,\r
+ 0x98, 0x09, 0xbb, 0xd2, 0x3a, 0x19, 0x2d, 0xbb, 0xbb, 0x01, 0xd7, 0x00,\r
+ 0x00, 0x36, 0x87, 0x78, 0x63, 0x3a, 0x14, 0xaa, 0x22, 0x20, 0x0b, 0xbd,\r
+ 0xc9, 0x7d, 0xbb, 0x30, 0xbb, 0xd2, 0x61, 0x8e, 0x00, 0x02, 0xeb, 0xbb,\r
+ 0x20, 0xbb, 0xd7, 0x79, 0x27, 0xcb, 0xbb, 0xbd, 0x70, 0x24, 0x00, 0x02,\r
+ 0x6a, 0x00, 0x7d, 0x6b, 0x36, 0x87, 0x24, 0x78, 0x63, 0x39, 0x02, 0xff,\r
+ 0x62, 0x02, 0xdb, 0x21, 0xbb, 0xbd, 0x21, 0x2e, 0xbb, 0xbb, 0xe7, 0x61,\r
+ 0x80, 0x8e, 0x00, 0x02, 0x7d, 0xbb, 0xbb, 0xbd, 0x72, 0x00, 0x22, 0x27,\r
+ 0xcc, 0xbb, 0xbb, 0xcd, 0x20, 0x00, 0x08, 0x07, 0xe7, 0x72, 0x22, 0xa3,\r
+ 0xe2, 0x00, 0x00, 0x00, 0x36, 0x87, 0x78, 0x63, 0x00, 0x00, 0x00, 0x02,\r
+ 0x20, 0xaf, 0xa0, 0xd2, 0xdb, 0xbb, 0xbd, 0x20, 0x00, 0x03, 0x00, 0x2b,\r
+ 0xcb, 0xbb, 0xc7, 0x10, 0x8f, 0x11, 0x01, 0x2d, 0xcb, 0xbb, 0xbb, 0xdd,\r
+ 0xb7, 0xcd, 0xd1, 0x00, 0xe7, 0x00, 0x00, 0x07, 0xdc, 0xdd, 0xcb, 0x7b,\r
+ 0x00, 0xdd, 0xcb, 0xbb, 0xbc, 0x72, 0x00, 0x00, 0x36, 0x10, 0x87, 0x78,\r
+ 0x63, 0x01, 0x00, 0x2a, 0xfa, 0x42, 0x01, 0x22, 0x20, 0x02, 0xdb, 0xbb,\r
+ 0xbd, 0x20, 0x01, 0xb0, 0xcc, 0x00, 0x8d, 0xb9, 0xec, 0xbb, 0xbb, 0xbb,\r
+ 0x00, 0xcc, 0xcb, 0xbb, 0xbb, 0xbe, 0x71, 0x00, 0x00, 0x05, 0x27, 0xcb,\r
+ 0xbb, 0xcc, 0xcc, 0x81, 0xce, 0x29, 0x08, 0x36, 0x87, 0x78, 0x63, 0x02,\r
+ 0xaa, 0xff, 0xff, 0x02, 0xff, 0xa0, 0x02, 0xdb, 0xbb, 0xbd, 0x61, 0x02,\r
+ 0x0e, 0xeb, 0xbb, 0xbd, 0x70, 0x5a, 0x8c, 0x09, 0x27, 0x00, 0xec, 0xbb,\r
+ 0xbb, 0xbb, 0xbb, 0xbb, 0xbd, 0xd7, 0x54, 0x10, 0xa1, 0xcb, 0xa4, 0xd2,\r
+ 0x31, 0x36, 0x87, 0x20, 0x78, 0x63, 0x01, 0x02, 0xff, 0xff, 0xff, 0xff,\r
+ 0x02, 0xa0, 0x07, 0xad, 0xdd, 0xda, 0x20, 0x99, 0xde, 0x1c, 0xdd, 0xde,\r
+ 0xc2, 0x21, 0x8d, 0x0a, 0x7c, 0xed, 0x04, 0xcc, 0xcc, 0xcc, 0xde, 0xd7,\r
+ 0x92, 0x2c, 0xed, 0x40, 0xdc, 0xa7, 0x36, 0x87, 0x78, 0x63, 0x00, 0x02,\r
+ 0x00, 0x22, 0x02, 0xaa, 0xaa, 0xaa, 0xaa, 0x20, 0x02, 0x1b, 0x77, 0x77,\r
+ 0x77, 0x5a, 0xc9, 0x72, 0x21, 0x8e, 0x88, 0xaa, 0x27, 0x77, 0x7b, 0x9d,\r
+ 0x12, 0x27, 0x77, 0x20, 0x77, 0xb7, 0x3d, 0x36, 0x87, 0x78, 0x63, 0x00,\r
+ 0x3e, 0x02, 0xaa, 0x43, 0x22, 0xc6, 0x87, 0x3e, 0x12, 0x21, 0x22, 0x22,\r
+ 0x06, 0x01, 0x22, 0x22, 0x21, 0x04, 0x00, 0x36, 0x87, 0x78, 0x63, 0x00,\r
+ 0x02, 0xfa, 0x22, 0x3f, 0xaa, 0x20, 0x26, 0xc6, 0x87, 0x3f, 0x07, 0x07,\r
+ 0x00, 0x36, 0x87, 0x78, 0x63, 0x00, 0x02, 0xfa, 0x02, 0x7e, 0xff, 0x07,\r
+ 0x07, 0x77, 0x2f, 0x07, 0x06, 0x36, 0x00, 0x87, 0x78, 0x63, 0x00, 0x02,\r
+ 0xff, 0xaa, 0xfa, 0x07, 0x44, 0x44, 0x44, 0x20, 0x02, 0xd9, 0xc1, 0xd4,\r
+ 0xf0, 0xa7, 0x5f, 0x17, 0x04, 0x42, 0x00, 0x00, 0x36, 0x00, 0x87, 0x78,\r
+ 0x63, 0x00, 0x02, 0xff, 0xff, 0xff, 0x9f, 0xe9, 0xa0, 0x0a, 0xc4, 0x94,\r
+ 0xa7, 0x5f, 0x17, 0x80, 0x04, 0xfa, 0x20, 0x00, 0x36, 0x87, 0x78, 0x63,\r
+ 0x13, 0x00, 0x00, 0xaf, 0x03, 0xa0, 0x0a, 0x07, 0xbf, 0xe0, 0x77, 0x2f,\r
+ 0x07, 0xfa, 0x20, 0x00, 0x36, 0x87, 0x00, 0x78, 0x63, 0x00, 0x00, 0x02,\r
+ 0xaa, 0xfa, 0xaa, 0x0f, 0xaa, 0xaa, 0x20, 0x02, 0xd9, 0xc1, 0xd4, 0xa7,\r
+ 0xe0, 0x5f, 0x17, 0x05, 0x00, 0x00, 0x36, 0x87, 0x78, 0x03, 0x63, 0x00,\r
+ 0x00, 0x00, 0x02, 0xff, 0xd9, 0xc1, 0xfc, 0xd4, 0xa7, 0x5f, 0x17, 0x07,\r
+ 0x03, 0x36, 0x87, 0x23, 0x78, 0x63, 0x01, 0x02, 0x44, 0x20, 0x07, 0x07,\r
+ 0xf0, 0x77, 0x2f, 0x07, 0x05, 0x36, 0x87, 0x78, 0x63, 0xfe, 0x07, 0x07,\r
+ 0x77, 0x2f, 0x07, 0x07, 0x02, 0x36, 0x1f, 0x87, 0x78, 0x63, 0x07, 0x07,\r
+ 0x77, 0x2f, 0x07, 0xc0, 0x07, 0x02, 0x36, 0x87, 0x78, 0x63, 0x11, 0x11,\r
+ 0x7f, 0x11, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x07, 0x00, 0x11, 0x36,\r
+ 0x87, 0x29, 0x66, 0x55, 0x55, 0x55, 0xfe, 0xe9, 0xd4, 0xa7, 0x5f, 0x17,\r
+ 0x07, 0x07, 0x55, 0x00, 0x66, 0x92, 0x23, 0x96, 0x68, 0x88, 0x88, 0x88,\r
+ 0xfe, 0xe9, 0xd4, 0xa7, 0x5f, 0x17, 0x07, 0x06, 0x86, 0x01, 0x69, 0x32,\r
+ 0x21, 0x33, 0x55, 0x55, 0x55, 0xe9, 0xfc, 0xd4, 0xa7, 0x5f, 0x17, 0x07,\r
+ 0x07, 0x55, 0x33, 0x00, 0x12,\r
+};\r
+\r
\r
#endif\r
--- /dev/null
+//*****************************************************************************\r
+//\r
+// formike128x128x16.c - Display driver for the Formike Electronic\r
+// KWH015C04-F01 CSTN panel with an ST7637 controller.\r
+//\r
+// Copyright (c) 2008 Luminary Micro, Inc. All rights reserved.\r
+// \r
+// Software License Agreement\r
+// \r
+// Luminary Micro, Inc. (LMI) is supplying this software for use solely and\r
+// exclusively on LMI's microcontroller products.\r
+// \r
+// The software is owned by LMI and/or its suppliers, and is protected under\r
+// applicable copyright laws. All rights are reserved. You may not combine\r
+// this software with "viral" open-source software in order to form a larger\r
+// program. Any use in violation of the foregoing restrictions may subject\r
+// the user to criminal sanctions under applicable laws, as well as to civil\r
+// liability for the breach of the terms and conditions of this license.\r
+// \r
+// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED\r
+// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF\r
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.\r
+// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR\r
+// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.\r
+// \r
+// This is part of revision 2523 of the Stellaris Peripheral Driver Library.\r
+//\r
+//*****************************************************************************\r
+\r
+//*****************************************************************************\r
+//\r
+//! \addtogroup ek_lm3s3748_api\r
+//! @{\r
+//\r
+//*****************************************************************************\r
+\r
+#include "hw_gpio.h"\r
+#include "hw_memmap.h"\r
+#include "hw_types.h"\r
+#include "gpio.h"\r
+#include "sysctl.h"\r
+#include "rom.h"\r
+#include "grlib.h"\r
+#include "formike128x128x16.h"\r
+#include <string.h>\r
+\r
+//*****************************************************************************\r
+//\r
+// Defines for the pins that are used to communicate with the ST7637.\r
+//\r
+//*****************************************************************************\r
+#define LCD_A0_BASE GPIO_PORTB_BASE\r
+#define LCD_A0_PIN GPIO_PIN_2\r
+#define LCD_WR_BASE GPIO_PORTC_BASE\r
+#define LCD_WR_PIN GPIO_PIN_4\r
+#define LCD_RD_BASE GPIO_PORTC_BASE\r
+#define LCD_RD_PIN GPIO_PIN_5\r
+#define LCD_BL_BASE GPIO_PORTF_BASE\r
+#define LCD_BL_PIN GPIO_PIN_1\r
+#define LCD_DATA_BASE GPIO_PORTG_BASE\r
+\r
+//*****************************************************************************\r
+//\r
+// Translates a 24-bit RGB color to a display driver-specific color.\r
+//\r
+// \param c is the 24-bit RGB color. The least-significant byte is the blue\r
+// channel, the next byte is the green channel, and the third byte is the red\r
+// channel.\r
+//\r
+// This macro translates a 24-bit RGB color into a value that can be written\r
+// into the display's frame buffer in order to reproduce that color, or the\r
+// closest possible approximation of that color.\r
+//\r
+// \return Returns the display-driver specific color.\r
+//\r
+//*****************************************************************************\r
+#define DPYCOLORTRANSLATE(c) ((((c) & 0x00ff0000) >> 19) | \\r
+ ((((c) & 0x0000ff00) >> 5) & 0x000007e0) | \\r
+ ((((c) & 0x000000ff) << 8) & 0x0000f800))\r
+\r
+//*****************************************************************************\r
+//\r
+// Writes a data word to the ST7637.\r
+//\r
+//*****************************************************************************\r
+static void\r
+WriteData(unsigned char ucData)\r
+{\r
+ //\r
+ // Write the data to the data bus.\r
+ //\r
+ HWREG(LCD_DATA_BASE + GPIO_O_DATA + (0xff << 2)) = ucData;\r
+\r
+ //\r
+ // Assert the write enable signal.\r
+ //\r
+ HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = 0;\r
+\r
+ //\r
+ // Deassert the write enable signal.\r
+ //\r
+ HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = LCD_WR_PIN;\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+// Writes a command to the ST7637.\r
+//\r
+//*****************************************************************************\r
+static void\r
+WriteCommand(unsigned char ucData)\r
+{\r
+ //\r
+ // Write the command to the data bus.\r
+ //\r
+ HWREG(LCD_DATA_BASE + GPIO_O_DATA + (0xff << 2)) = ucData;\r
+\r
+ //\r
+ // Set the A0 signal low, indicating a command.\r
+ //\r
+ HWREG(LCD_A0_BASE + GPIO_O_DATA + (LCD_A0_PIN << 2)) = 0;\r
+\r
+ //\r
+ // Assert the write enable signal.\r
+ //\r
+ HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = 0;\r
+\r
+ //\r
+ // Deassert the write enable signal.\r
+ //\r
+ HWREG(LCD_WR_BASE + GPIO_O_DATA + (LCD_WR_PIN << 2)) = LCD_WR_PIN;\r
+\r
+ //\r
+ // Set the A0 signal high, indicating that following writes are data.\r
+ //\r
+ HWREG(LCD_A0_BASE + GPIO_O_DATA + (LCD_A0_PIN << 2)) = LCD_A0_PIN;\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Initializes the display driver.\r
+//!\r
+//! This function initializes the ST7637 display controller on the panel,\r
+//! preparing it to display data.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+void\r
+Formike128x128x16Init(void)\r
+{\r
+ unsigned long ulClockMS, ulCount;\r
+\r
+ //\r
+ // Get the value to pass to SysCtlDelay() in order to delay for 1 ms.\r
+ //\r
+ ulClockMS = SysCtlClockGet() / (3 * 1000);\r
+\r
+ //\r
+ // Enable the GPIO peripherals used to interface to the ST7637.\r
+ //\r
+ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);\r
+ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC);\r
+ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);\r
+ SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);\r
+\r
+ //\r
+ // Configure the pins that connect to the LCD as GPIO outputs.\r
+ //\r
+ GPIOPinTypeGPIOOutput(LCD_A0_BASE, LCD_A0_PIN);\r
+ GPIOPinTypeGPIOOutput(LCD_WR_BASE, LCD_WR_PIN);\r
+ GPIOPinTypeGPIOOutput(LCD_RD_BASE, LCD_RD_PIN);\r
+ GPIOPinTypeGPIOOutput(LCD_BL_BASE, LCD_BL_PIN);\r
+ GPIOPinTypeGPIOOutput(LCD_DATA_BASE, 0xff);\r
+\r
+ //\r
+ // Set the LCD control pins to their default values.\r
+ //\r
+ GPIOPinWrite(LCD_A0_BASE, LCD_A0_PIN, LCD_A0_PIN);\r
+ GPIOPinWrite(LCD_WR_BASE, LCD_WR_PIN | LCD_RD_PIN,\r
+ LCD_WR_PIN | LCD_RD_PIN);\r
+ GPIOPinWrite(LCD_BL_BASE, LCD_BL_PIN, 0);\r
+ GPIOPinWrite(LCD_DATA_BASE, 0xff, 0x00);\r
+\r
+ //\r
+ // Perform a software reset of the ST7637.\r
+ //\r
+ WriteCommand(0x01);\r
+\r
+ //\r
+ // Delay for 120ms.\r
+ //\r
+ SysCtlDelay(ulClockMS * 120);\r
+\r
+ //\r
+ // Disable auto-load of mask rom data.\r
+ //\r
+ WriteCommand(0xD7);\r
+ WriteData(0xBF);\r
+\r
+ //\r
+ // Set the OTP control mode to read.\r
+ //\r
+ WriteCommand(0xE0);\r
+ WriteData(0x00);\r
+\r
+ //\r
+ // Delay for 10ms.\r
+ //\r
+ SysCtlDelay(ulClockMS * 10);\r
+\r
+ //\r
+ // Start the OTP read.\r
+ //\r
+ WriteCommand(0xE3);\r
+\r
+ //\r
+ // Delay for 20ms.\r
+ //\r
+ SysCtlDelay(ulClockMS * 20);\r
+\r
+ //\r
+ // Cancel the OTP read (it should have finished by now).\r
+ //\r
+ WriteCommand(0xE1);\r
+\r
+ //\r
+ // Turn off the display.\r
+ //\r
+ WriteCommand(0x28);\r
+\r
+ //\r
+ // Exit sleep mode.\r
+ //\r
+ WriteCommand(0x11);\r
+\r
+ //\r
+ // Delay for 50ms.\r
+ //\r
+ SysCtlDelay(ulClockMS * 50);\r
+\r
+ //\r
+ // Program the LCD supply voltage V0 to 14V.\r
+ //\r
+ WriteCommand(0xC0);\r
+ WriteData(0x04);\r
+ WriteData(0x01);\r
+\r
+ //\r
+ // Select an LCD bias voltage ratio of 1/12.\r
+ //\r
+ WriteCommand(0xC3);\r
+ WriteData(0x00);\r
+\r
+ //\r
+ // Enable the x8 booster circuit.\r
+ //\r
+ WriteCommand(0xC4);\r
+ WriteData(0x07);\r
+\r
+ //\r
+ // Invert the column scan direction for the panel.\r
+ //\r
+ WriteCommand(0xB7);\r
+ WriteData(0xC0);\r
+\r
+ //\r
+ // Select 16bpp, 5-6-5 data input mode.\r
+ //\r
+ WriteCommand(0x3A);\r
+ WriteData(0x05);\r
+\r
+ //\r
+ // Select the memory scanning direction. The scanning mode does not matter\r
+ // for this driver since the row/column selects will constrain the writes\r
+ // to the desired area of the display.\r
+ //\r
+ WriteCommand(0x36);\r
+ WriteData(0x00);\r
+\r
+ //\r
+ // Turn on the display.\r
+ //\r
+ WriteCommand(0x29);\r
+\r
+ //\r
+ // Clear the contents of the display buffer.\r
+ //\r
+ WriteCommand(0x2A);\r
+ WriteData(0x00);\r
+ WriteData(0x7F);\r
+ WriteCommand(0x2B);\r
+ WriteData(0x01);\r
+ WriteData(0x80);\r
+ WriteCommand(0x2c);\r
+ for(ulCount = 0; ulCount < (128 * 128); ulCount++)\r
+ {\r
+ WriteData(0x00);\r
+ WriteData(0x00);\r
+ }\r
+\r
+ //\r
+ // Enable normal operation of the LCD.\r
+ //\r
+ WriteCommand(0x13);\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Turns on the backlight.\r
+//!\r
+//! This function turns on the backlight on the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+void\r
+Formike128x128x16BacklightOn(void)\r
+{\r
+ //\r
+ // Assert the signal that turns on the backlight.\r
+ //\r
+ HWREG(LCD_BL_BASE + GPIO_O_DATA + (LCD_BL_PIN << 2)) = LCD_BL_PIN;\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Turns off the backlight.\r
+//!\r
+//! This function turns off the backlight on the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+void\r
+Formike128x128x16BacklightOff(void)\r
+{\r
+ //\r
+ // Deassert the signal that turns on the backlight.\r
+ //\r
+ HWREG(LCD_BL_BASE + GPIO_O_DATA + (LCD_BL_PIN << 2)) = 0;\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Draws a pixel on the screen.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param lX is the X coordinate of the pixel.\r
+//! \param lY is the Y coordinate of the pixel.\r
+//! \param ulValue is the color of the pixel.\r
+//!\r
+//! This function sets the given pixel to a particular color. The coordinates\r
+//! of the pixel are assumed to be within the extents of the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16PixelDraw(void *pvDisplayData, long lX, long lY,\r
+ unsigned long ulValue)\r
+{\r
+ //\r
+ // Set the X address of the display cursor.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(lX);\r
+ WriteData(lX);\r
+\r
+ //\r
+ // Set the Y address of the display cursor.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(lY + 1);\r
+ WriteData(lY + 1);\r
+\r
+ //\r
+ // Write the pixel value.\r
+ //\r
+ WriteCommand(0x2c);\r
+ WriteData(ulValue >> 8);\r
+ WriteData(ulValue);\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Draws a horizontal sequence of pixels on the screen.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param lX is the X coordinate of the first pixel.\r
+//! \param lY is the Y coordinate of the first pixel.\r
+//! \param lX0 is sub-pixel offset within the pixel data, which is valid for 1\r
+//! or 4 bit per pixel formats.\r
+//! \param lCount is the number of pixels to draw.\r
+//! \param lBPP is the number of bits per pixel; must be 1, 4, or 8.\r
+//! \param pucData is a pointer to the pixel data. For 1 and 4 bit per pixel\r
+//! formats, the most significant bit(s) represent the left-most pixel.\r
+//! \param pucPalette is a pointer to the palette used to draw the pixels.\r
+//!\r
+//! This function draws a horizontal sequence of pixels on the screen, using\r
+//! the supplied palette. For 1 bit per pixel format, the palette contains\r
+//! pre-translated colors; for 4 and 8 bit per pixel formats, the palette\r
+//! contains 24-bit RGB values that must be translated before being written to\r
+//! the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16PixelDrawMultiple(void *pvDisplayData, long lX, long lY,\r
+ long lX0, long lCount, long lBPP,\r
+ const unsigned char *pucData,\r
+ const unsigned char *pucPalette)\r
+{\r
+ unsigned long ulByte;\r
+\r
+ //\r
+ // Set the extent of the line along the X axis.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(lX);\r
+ WriteData(lX + lCount - 1);\r
+\r
+ //\r
+ // Set the Y address of the display cursor.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(lY + 1);\r
+ WriteData(lY + 1);\r
+\r
+ //\r
+ // Write the data RAM write command.\r
+ //\r
+ WriteCommand(0x2c);\r
+\r
+ //\r
+ // Determine how to interpret the pixel data based on the number of bits\r
+ // per pixel.\r
+ //\r
+ switch(lBPP)\r
+ {\r
+ //\r
+ // The pixel data is in 1 bit per pixel format.\r
+ //\r
+ case 1:\r
+ {\r
+ //\r
+ // Loop while there are more pixels to draw.\r
+ //\r
+ while(lCount)\r
+ {\r
+ //\r
+ // Get the next byte of image data.\r
+ //\r
+ ulByte = *pucData++;\r
+\r
+ //\r
+ // Loop through the pixels in this byte of image data.\r
+ //\r
+ for(; (lX0 < 8) && lCount; lX0++, lCount--)\r
+ {\r
+ //\r
+ // Draw this pixel in the appropriate color.\r
+ //\r
+ lBPP = ((unsigned long *)pucPalette)[(ulByte >>\r
+ (7 - lX0)) & 1];\r
+ WriteData(lBPP >> 8);\r
+ WriteData(lBPP);\r
+ }\r
+\r
+ //\r
+ // Start at the beginning of the next byte of image data.\r
+ //\r
+ lX0 = 0;\r
+ }\r
+\r
+ //\r
+ // The image data has been drawn.\r
+ //\r
+ break;\r
+ }\r
+\r
+ //\r
+ // The pixel data is in 4 bit per pixel format.\r
+ //\r
+ case 4:\r
+ {\r
+ //\r
+ // Loop while there are more pixels to draw. "Duff's device" is\r
+ // used to jump into the middle of the loop if the first nibble of\r
+ // the pixel data should not be used. Duff's device makes use of\r
+ // the fact that a case statement is legal anywhere within a\r
+ // sub-block of a switch statement. See\r
+ // http://en.wikipedia.org/wiki/Duff's_device for detailed\r
+ // information about Duff's device.\r
+ //\r
+ switch(lX0 & 1)\r
+ {\r
+ case 0:\r
+ while(lCount)\r
+ {\r
+ //\r
+ // Get the upper nibble of the next byte of pixel data\r
+ // and extract the corresponding entry from the\r
+ // palette.\r
+ //\r
+ ulByte = (*pucData >> 4) * 3;\r
+ ulByte = (*(unsigned long *)(pucPalette + ulByte) &\r
+ 0x00ffffff);\r
+\r
+ //\r
+ // Translate this palette entry and write it to the\r
+ // screen.\r
+ //\r
+ ulByte = DPYCOLORTRANSLATE(ulByte);\r
+ WriteData(ulByte >> 8);\r
+ WriteData(ulByte);\r
+\r
+ //\r
+ // Decrement the count of pixels to draw.\r
+ //\r
+ lCount--;\r
+\r
+ //\r
+ // See if there is another pixel to draw.\r
+ //\r
+ if(lCount)\r
+ {\r
+ case 1:\r
+ //\r
+ // Get the lower nibble of the next byte of pixel\r
+ // data and extract the corresponding entry from\r
+ // the palette.\r
+ //\r
+ ulByte = (*pucData++ & 15) * 3;\r
+ ulByte = (*(unsigned long *)(pucPalette + ulByte) &\r
+ 0x00ffffff);\r
+\r
+ //\r
+ // Translate this palette entry and write it to the\r
+ // screen.\r
+ //\r
+ ulByte = DPYCOLORTRANSLATE(ulByte);\r
+ WriteData(ulByte >> 8);\r
+ WriteData(ulByte);\r
+\r
+ //\r
+ // Decrement the count of pixels to draw.\r
+ //\r
+ lCount--;\r
+ }\r
+ }\r
+ }\r
+\r
+ //\r
+ // The image data has been drawn.\r
+ //\r
+ break;\r
+ }\r
+\r
+ //\r
+ // The pixel data is in 8 bit per pixel format.\r
+ //\r
+ case 8:\r
+ {\r
+ //\r
+ // Loop while there are more pixels to draw.\r
+ //\r
+ while(lCount--)\r
+ {\r
+ //\r
+ // Get the next byte of pixel data and extract the\r
+ // corresponding entry from the palette.\r
+ //\r
+ ulByte = *pucData++ * 3;\r
+ ulByte = *(unsigned long *)(pucPalette + ulByte) & 0x00ffffff;\r
+\r
+ //\r
+ // Translate this palette entry and write it to the screen.\r
+ //\r
+ ulByte = DPYCOLORTRANSLATE(ulByte);\r
+ WriteData(ulByte >> 8);\r
+ WriteData(ulByte);\r
+ }\r
+\r
+ //\r
+ // The image data has been drawn.\r
+ //\r
+ break;\r
+ }\r
+ }\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Flushes any cached drawing operations.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//!\r
+//! This functions flushes any cached drawing operations to the display. This\r
+//! is useful when a local frame buffer is used for drawing operations, and the\r
+//! flush would copy the local frame buffer to the display. For the ST7637\r
+//! driver, the flush is a no operation.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16Flush(void *pvDisplayData)\r
+{\r
+ //\r
+ // There is nothing to be done.\r
+ //\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Draws a horizontal line.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param lX1 is the X coordinate of the start of the line.\r
+//! \param lX2 is the X coordinate of the end of the line.\r
+//! \param lY is the Y coordinate of the line.\r
+//! \param ulValue is the color of the line.\r
+//!\r
+//! This function draws a horizontal line on the display. The coordinates of\r
+//! the line are assumed to be within the extents of the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16LineDrawH(void *pvDisplayData, long lX1, long lX2, long lY,\r
+ unsigned long ulValue)\r
+{\r
+ //\r
+ // Set the extent of the line along the X axis.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(lX1);\r
+ WriteData(lX2);\r
+\r
+ //\r
+ // Set the Y address of the display cursor.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(lY + 1);\r
+ WriteData(lY + 1);\r
+\r
+ //\r
+ // Write the data RAM write command.\r
+ //\r
+ WriteCommand(0x2c);\r
+\r
+ //\r
+ // Loop through the pixels of this horizontal line.\r
+ //\r
+ while(lX1++ <= lX2)\r
+ {\r
+ //\r
+ // Write the pixel value.\r
+ //\r
+ WriteData(ulValue >> 8);\r
+ WriteData(ulValue);\r
+ }\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Draws a vertical line.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param lX is the X coordinate of the line.\r
+//! \param lY1 is the Y coordinate of the start of the line.\r
+//! \param lY2 is the Y coordinate of the end of the line.\r
+//! \param ulValue is the color of the line.\r
+//!\r
+//! This function draws a vertical line on the display. The coordinates of the\r
+//! line are assumed to be within the extents of the display.\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16LineDrawV(void *pvDisplayData, long lX, long lY1, long lY2,\r
+ unsigned long ulValue)\r
+{\r
+ //\r
+ // Set the X address of the display cursor.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(lX);\r
+ WriteData(lX);\r
+\r
+ //\r
+ // Set the extent of the line along the Y axis.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(lY1 + 1);\r
+ WriteData(lY2 + 1);\r
+\r
+ //\r
+ // Write the data RAM write command.\r
+ //\r
+ WriteCommand(0x2c);\r
+\r
+ //\r
+ // Loop through the pixels of this vertical line.\r
+ //\r
+ while(lY1++ <= lY2)\r
+ {\r
+ //\r
+ // Write the pixel value.\r
+ //\r
+ WriteData(ulValue >> 8);\r
+ WriteData(ulValue);\r
+ }\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Fills a rectangle.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param pRect is a pointer to the structure describing the rectangle.\r
+//! \param ulValue is the color of the rectangle.\r
+//!\r
+//! This function fills a rectangle on the display. The coordinates of the\r
+//! rectangle are assumed to be within the extents of the display, and the\r
+//! rectangle specification is fully inclusive (i.e. both sXMin and sXMax are\r
+//! drawn, along with sYMin and sYMax).\r
+//!\r
+//! \return None.\r
+//\r
+//*****************************************************************************\r
+static void\r
+Formike128x128x16RectFill(void *pvDisplayData, const tRectangle *pRect,\r
+ unsigned long ulValue)\r
+{\r
+ long lCount;\r
+\r
+ //\r
+ // Set the extent of the rectangle along the X axis.\r
+ //\r
+ WriteCommand(0x2a);\r
+ WriteData(pRect->sXMin);\r
+ WriteData(pRect->sXMax);\r
+\r
+ //\r
+ // Set the extent of the rectangle along the Y axis.\r
+ //\r
+ WriteCommand(0x2b);\r
+ WriteData(pRect->sYMin + 1);\r
+ WriteData(pRect->sYMax + 1);\r
+\r
+ //\r
+ // Write the data RAM write command.\r
+ //\r
+ WriteCommand(0x2c);\r
+\r
+ //\r
+ // Loop through the pixels in this rectangle.\r
+ //\r
+ for(lCount = ((pRect->sXMax - pRect->sXMin + 1) *\r
+ (pRect->sYMax - pRect->sYMin + 1)); lCount > 0; lCount--)\r
+ {\r
+ //\r
+ // Write the pixel value.\r
+ //\r
+ WriteData(ulValue >> 8);\r
+ WriteData(ulValue);\r
+ }\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! Translates a 24-bit RGB color to a display driver-specific color.\r
+//!\r
+//! \param pvDisplayData is a pointer to the driver-specific data for this\r
+//! display driver.\r
+//! \param ulValue is the 24-bit RGB color. The least-significant byte is the\r
+//! blue channel, the next byte is the green channel, and the third byte is the\r
+//! red channel.\r
+//!\r
+//! This function translates a 24-bit RGB color into a value that can be\r
+//! written into the display's frame buffer in order to reproduce that color,\r
+//! or the closest possible approximation of that color.\r
+//!\r
+//! \return Returns the display-driver specific color.\r
+//\r
+//*****************************************************************************\r
+static unsigned long\r
+Formike128x128x16ColorTranslate(void *pvDisplayData, unsigned long ulValue)\r
+{\r
+ //\r
+ // Translate from a 24-bit RGB color to a 5-6-5 RGB color.\r
+ //\r
+ return(DPYCOLORTRANSLATE(ulValue));\r
+}\r
+\r
+//*****************************************************************************\r
+//\r
+//! The display structure that describes the driver for the Formike Electronic\r
+//! KWH015C04-F01 CSTN panel with an ST7637 controller.\r
+//\r
+//*****************************************************************************\r
+const tDisplay g_sFormike128x128x16 =\r
+{\r
+ sizeof(tDisplay),\r
+ 0,\r
+ 128,\r
+ 128,\r
+ Formike128x128x16PixelDraw,\r
+ Formike128x128x16PixelDrawMultiple,\r
+ Formike128x128x16LineDrawH,\r
+ Formike128x128x16LineDrawV,\r
+ Formike128x128x16RectFill,\r
+ Formike128x128x16ColorTranslate,\r
+ Formike128x128x16Flush\r
+};\r
+\r
+//*****************************************************************************\r
+//\r
+// Close the Doxygen group.\r
+//! @}\r
+//\r
+//*****************************************************************************\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+/* FreeRTOS.org demo wrappers. These are required so the prototypes for the\r
+functions are the same as for the display drivers used by other evaluation\r
+kits. */\r
+\r
+static tContext sContext;\r
+\r
+void vFormike128x128x16Clear( void )\r
+{\r
+const tRectangle xRectangle = { 0, 0, 127, 127 };\r
+\r
+ GrContextForegroundSet( &sContext, ClrBlack );\r
+ GrRectFill( &sContext, &xRectangle );\r
+ GrContextForegroundSet(&sContext, ClrWhite);\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vFormike128x128x16StringDraw( const char *pcString, unsigned long lX, unsigned long lY, unsigned char ucColor )\r
+{\r
+ GrContextForegroundSet(&sContext, ClrWhite);\r
+ GrStringDraw( &sContext, pcString, strlen( pcString ), lX, lY, false );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vFormike128x128x16Init( unsigned long ul )\r
+{\r
+tRectangle rectScreen;\r
+\r
+ ( void ) ul;\r
+ \r
+ Formike128x128x16Init();\r
+ Formike128x128x16BacklightOn();\r
+ GrContextInit(&sContext, &g_sFormike128x128x16);\r
+ GrContextFontSet(&sContext, &g_sFontCmss12);\r
+ rectScreen.sXMin = 0;\r
+\r
+ /* Fill the screen with a black rectangle. */\r
+ rectScreen.sYMin = 0;\r
+ rectScreen.sXMax = g_sFormike128x128x16.usWidth - 1;\r
+ rectScreen.sYMax = g_sFormike128x128x16.usHeight - 1;\r
+ GrContextForegroundSet(&sContext, ClrBlack);\r
+ GrRectFill(&sContext, &rectScreen);\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vFormike128x128x16ImageDraw( const unsigned char *pucImage, unsigned long ulX, unsigned long ulY, unsigned long ulWidth, unsigned long ulHeight )\r
+{\r
+ GrImageDraw( &sContext, pucImage, ( long ) ulX, ( long ) ulY);\r
+\r
+}\r
+\r
+\r
+\r
+\r
--- /dev/null
+//*****************************************************************************\r
+//\r
+// formike128x128x16.h - Prototypes for the Formike Electronic KWH015C04-F01\r
+// display driver.\r
+//\r
+// Copyright (c) 2008 Luminary Micro, Inc. All rights reserved.\r
+// \r
+// Software License Agreement\r
+// \r
+// Luminary Micro, Inc. (LMI) is supplying this software for use solely and\r
+// exclusively on LMI's microcontroller products.\r
+// \r
+// The software is owned by LMI and/or its suppliers, and is protected under\r
+// applicable copyright laws. All rights are reserved. You may not combine\r
+// this software with "viral" open-source software in order to form a larger\r
+// program. Any use in violation of the foregoing restrictions may subject\r
+// the user to criminal sanctions under applicable laws, as well as to civil\r
+// liability for the breach of the terms and conditions of this license.\r
+// \r
+// THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED\r
+// OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF\r
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE.\r
+// LMI SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR\r
+// CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.\r
+// \r
+// This is part of revision 2523 of the Stellaris Peripheral Driver Library.\r
+//\r
+//*****************************************************************************\r
+\r
+#ifndef __FORMIKE128X128X16_H__\r
+#define __FORMIKE128X128X16_H__\r
+\r
+//*****************************************************************************\r
+//\r
+// Prototypes for the globals exported by this driver.\r
+//\r
+//*****************************************************************************\r
+extern void Formike128x128x16Init(void);\r
+extern void Formike128x128x16BacklightOn(void);\r
+extern void Formike128x128x16BacklightOff(void);\r
+extern const tDisplay g_sFormike128x128x16;\r
+\r
+/* FreeRTOS.org demo wrappers. These are required so the prototypes for the\r
+functions are the same as for the display drivers used by other evaluation\r
+kits. */\r
+void vFormike128x128x16Clear( void );\r
+void vFormike128x128x16StringDraw( const char *pcString, unsigned long lX, unsigned long lY, unsigned char ucColor );\r
+void vFormike128x128x16Init( unsigned long ul );\r
+void vFormike128x128x16ImageDraw( const unsigned char *pucImage, unsigned long ulX, unsigned long ulY, unsigned long ulWidth, unsigned long ulHeight );\r
+\r
+#endif // __FORMIKE128X128X16_H__\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
\r
\r
\r
+\r
+/************************************************************************* \r
+ * Please ensure to read http://www.freertos.org/portlm3sx965.html\r
+ * which provides information on configuring and running this demo for the\r
+ * various Luminary Micro EKs.\r
+ *************************************************************************/\r
+\r
+\r
+\r
+\r
/* Standard includes. */\r
#include <stdio.h>\r
\r
#include "queue.h"\r
#include "semphr.h"\r
\r
+/* Hardware library includes. */\r
+#include "hw_memmap.h"\r
+#include "hw_types.h"\r
+#include "hw_sysctl.h"\r
+#include "sysctl.h"\r
+#include "gpio.h"\r
+#include "grlib.h"\r
+#include "rit128x96x4.h"\r
+#include "osram128x64x4.h"\r
+#include "formike128x128x16.h"\r
+\r
/* Demo app includes. */\r
#include "BlockQ.h"\r
#include "death.h"\r
#include "GenQTest.h"\r
#include "QPeek.h"\r
\r
-/* Hardware library includes. */\r
-#include "hw_memmap.h"\r
-#include "hw_types.h"\r
-#include "hw_sysctl.h"\r
-#include "sysctl.h"\r
-#include "gpio.h"\r
-#include "rit128x96x4.h"\r
-#include "osram128x64x4.h"\r
-\r
/*-----------------------------------------------------------*/\r
\r
/* The time between cycles of the 'check' functionality (defined within the\r
\r
/* Constants used when writing strings to the display. */\r
#define mainCHARACTER_HEIGHT ( 9 )\r
+#define mainMAX_ROWS_128 ( mainCHARACTER_HEIGHT * 14 )\r
#define mainMAX_ROWS_96 ( mainCHARACTER_HEIGHT * 10 )\r
#define mainMAX_ROWS_64 ( mainCHARACTER_HEIGHT * 7 )\r
#define mainFULL_SCALE ( 15 )\r
*/\r
extern void vSetupTimer( void );\r
\r
+/* \r
+ * Hook functions that can get called by the kernel.\r
+ */\r
+void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed portCHAR *pcTaskName );\r
+void vApplicationTickHook( void );\r
+\r
+\r
/*-----------------------------------------------------------*/\r
\r
/* The queue used to send messages to the OLED task. */\r
\r
/*-----------------------------------------------------------*/\r
\r
+\r
+/************************************************************************* \r
+ * Please ensure to read http://www.freertos.org/portlm3sx965.html\r
+ * which provides information on configuring and running this demo for the\r
+ * various Luminary Micro EKs.\r
+ *************************************************************************/\r
int main( void )\r
{\r
prvSetupHardware();\r
{\r
static xOLEDMessage xMessage = { "PASS" };\r
static unsigned portLONG ulTicksSinceLastDisplay = 0;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE;\r
\r
/* Called from every tick interrupt. Have enough ticks passed to make it\r
time to perform our health status check again? */\r
}\r
\r
/* Send the message to the OLED gatekeeper for display. */\r
- xQueueSendFromISR( xOLEDQueue, &xMessage, pdFALSE );\r
+ xHigherPriorityTaskWoken = pdFALSE;\r
+ xQueueSendFromISR( xOLEDQueue, &xMessage, &xHigherPriorityTaskWoken );\r
}\r
}\r
/*-----------------------------------------------------------*/\r
xOLEDMessage xMessage;\r
unsigned portLONG ulY, ulMaxY;\r
static portCHAR cMessage[ mainMAX_MSG_LEN ];\r
-extern unsigned portLONG ulMaxJitter;\r
+extern volatile unsigned portLONG ulMaxJitter;\r
+const unsigned portCHAR *pucImage;\r
\r
/* Functions to access the OLED. The one used depends on the dev kit\r
being used. */\r
-void ( *vOLEDInit )( unsigned portLONG );\r
-void ( *vOLEDStringDraw )( const portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portCHAR );\r
-void ( *vOLEDImageDraw )( const unsigned portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portLONG, unsigned portLONG );\r
-void ( *vOLEDClear )( void );\r
+void ( *vOLEDInit )( unsigned portLONG ) = NULL;\r
+void ( *vOLEDStringDraw )( const portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portCHAR ) = NULL;\r
+void ( *vOLEDImageDraw )( const unsigned portCHAR *, unsigned portLONG, unsigned portLONG, unsigned portLONG, unsigned portLONG ) = NULL;\r
+void ( *vOLEDClear )( void ) = NULL;\r
\r
/* Map the OLED access functions to the driver functions that are appropriate\r
for the evaluation kit being used. */ \r
vOLEDImageDraw = OSRAM128x64x4ImageDraw;\r
vOLEDClear = OSRAM128x64x4Clear;\r
ulMaxY = mainMAX_ROWS_64;\r
+ pucImage = pucBasicBitmap;\r
break;\r
\r
- default : vOLEDInit = RIT128x96x4Init;\r
+ case SYSCTL_DID1_PRTNO_1968 : \r
+ case SYSCTL_DID1_PRTNO_8962 : vOLEDInit = RIT128x96x4Init;\r
vOLEDStringDraw = RIT128x96x4StringDraw;\r
vOLEDImageDraw = RIT128x96x4ImageDraw;\r
vOLEDClear = RIT128x96x4Clear;\r
- ulMaxY = mainMAX_ROWS_96; \r
+ ulMaxY = mainMAX_ROWS_96;\r
+ pucImage = pucBasicBitmap;\r
break;\r
+ \r
+ default : vOLEDInit = vFormike128x128x16Init;\r
+ vOLEDStringDraw = vFormike128x128x16StringDraw;\r
+ vOLEDImageDraw = vFormike128x128x16ImageDraw;\r
+ vOLEDClear = vFormike128x128x16Clear;\r
+ ulMaxY = mainMAX_ROWS_128;\r
+ pucImage = pucGrLibBitmap;\r
+ break;\r
+ \r
}\r
\r
ulY = ulMaxY;\r
\r
/* Initialise the OLED and display a startup message. */\r
vOLEDInit( ulSSI_FREQUENCY ); \r
- vOLEDStringDraw( " POWERED BY FreeRTOS", 0, 0, mainFULL_SCALE );\r
+ vOLEDStringDraw( "POWERED BY FreeRTOS", 0, 0, mainFULL_SCALE );\r
vOLEDImageDraw( pucImage, 0, mainCHARACTER_HEIGHT + 1, bmpBITMAP_WIDTH, bmpBITMAP_HEIGHT );\r
\r
for( ;; )\r
vOLEDStringDraw( cMessage, 0, ulY, mainFULL_SCALE );\r
}\r
}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed portCHAR *pcTaskName )\r
+{\r
+ ( void ) pxTask;\r
+ ( void ) pcTaskName;\r
+\r
+ for( ;; );\r
+}\r
</Workspace>\r
<Disassembly>\r
<PreferedWindows>\r
- <Position>2</Position>\r
- <ScreenPosX>0</ScreenPosX>\r
- <ScreenPosY>0</ScreenPosY>\r
- <Windows/>\r
- </PreferedWindows>\r
+ \r
+ \r
+ \r
+ \r
+ <Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows>\r
\r
\r
<MixedMode>1</MixedMode><CodeCovShow>0</CodeCovShow></Disassembly>\r
- </Static>\r
+ <Watch><Format><struct_types/><watch_formats/></Format></Watch><QuickWatch><PreferedWindows><Position>2</Position><ScreenPosX>0</ScreenPosX><ScreenPosY>0</ScreenPosY><Windows/></PreferedWindows><Column0>100</Column0><Column1>100</Column1><Column2>100</Column2><Column3>100</Column3></QuickWatch></Static>\r
<Windows>\r
\r
\r
- <Wnd2>\r
+ <Wnd1>\r
<Tabs>\r
<Tab>\r
<Identity>TabID-10465-12018</Identity>\r
</Tab>\r
</Tabs>\r
\r
- <SelectedTab>0</SelectedTab></Wnd2><Wnd3>\r
+ <SelectedTab>0</SelectedTab></Wnd1><Wnd3>\r
<Tabs>\r
<Tab>\r
<Identity>TabID-21213-12021</Identity>\r
</Tab>\r
</Tabs>\r
\r
- <SelectedTab>0</SelectedTab></Wnd3><Wnd0><Tabs><Tab><Identity>TabID-2037-3837</Identity><TabName>Disassembly</TabName><Factory>Disassembly</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd0></Windows>\r
+ <SelectedTab>0</SelectedTab></Wnd3><Wnd0><Tabs><Tab><Identity>TabID-4412-20270</Identity><TabName>Disassembly</TabName><Factory>Disassembly</Factory><Session/></Tab></Tabs><SelectedTab>0</SelectedTab></Wnd0></Windows>\r
<Editor>\r
\r
\r
\r
\r
- <Pane><Tab><Factory>TextEditor</Factory><Filename>C:\E\Dev\FreeRTOS\WorkingCopy2\Demo\CORTEX_LM3Sxxxx_IAR_Keil\main.c</Filename><XPos>0</XPos><YPos>167</YPos><SelStart>7004</SelStart><SelEnd>7004</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+ <Pane><Tab><Factory>TextEditor</Factory><Filename>C:\E\Dev\FreeRTOS\WorkingCopy2\Demo\CORTEX_LM3Sxxxx_IAR_Keil\main.c</Filename><XPos>0</XPos><YPos>193</YPos><SelStart>8396</SelStart><SelEnd>8396</SelEnd></Tab><Tab><Factory>TextEditor</Factory><Filename>C:\E\Dev\FreeRTOS\WorkingCopy2\Demo\CORTEX_LM3Sxxxx_IAR_Keil\timertest.c</Filename><XPos>0</XPos><YPos>120</YPos><SelStart>5377</SelStart><SelEnd>5377</SelEnd></Tab><ActiveTab>1</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
<Positions>\r
\r
\r
\r
\r
\r
- <Top><Row0><Sizes><Toolbar-012825f0><key>iaridepm.enu1</key></Toolbar-012825f0><Toolbar-055365a8><key>debuggergui.enu1</key></Toolbar-055365a8></Sizes></Row0></Top><Left><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>198</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>142857</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>198</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>142857</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd0></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1402</Right><x>-2</x><y>-2</y><xscreen>1404</xscreen><yscreen>200</yscreen><sizeHorzCX>1002857</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd2></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+ <Top><Row0><Sizes><Toolbar-01282438><key>iaridepm.enu1</key></Toolbar-01282438><Toolbar-05fc2d28><key>debuggergui.enu1</key></Toolbar-05fc2d28></Sizes></Row0></Top><Left><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>198</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>142857</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd3></Sizes></Row0></Left><Right><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>740</Bottom><Right>488</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>142857</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>350000</sizeVertCX><sizeVertCY>755601</sizeVertCY></Rect></Wnd0></Sizes></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>198</Bottom><Right>1402</Right><x>-2</x><y>-2</y><xscreen>1404</xscreen><yscreen>200</yscreen><sizeHorzCX>1002857</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
</Desktop>\r
</Project>\r
\r
\r
<Column0>241</Column0><Column1>27</Column1><Column2>27</Column2><Column3>27</Column3></ColumnWidths>\r
</Workspace>\r
- <Find-in-Files><ColumnWidth0>482</ColumnWidth0><ColumnWidth1>68</ColumnWidth1><ColumnWidth2>826</ColumnWidth2></Find-in-Files><Build><ColumnWidth0>19</ColumnWidth0><ColumnWidth1>1007</ColumnWidth1><ColumnWidth2>268</ColumnWidth2><ColumnWidth3>67</ColumnWidth3></Build><TerminalIO/></Static>\r
+ <Find-in-Files><ColumnWidth0>482</ColumnWidth0><ColumnWidth1>68</ColumnWidth1><ColumnWidth2>826</ColumnWidth2></Find-in-Files><Build><ColumnWidth0>19</ColumnWidth0><ColumnWidth1>1007</ColumnWidth1><ColumnWidth2>268</ColumnWidth2><ColumnWidth3>67</ColumnWidth3></Build><TerminalIO/><Debug-Log/></Static>\r
<Windows>\r
\r
- <Wnd0>\r
+ <Wnd2>\r
<Tabs>\r
<Tab>\r
<Identity>TabID-18883-22024</Identity>\r
</Tab>\r
</Tabs>\r
\r
- <SelectedTab>0</SelectedTab></Wnd0><Wnd1><Tabs><Tab><Identity>TabID-29040-7360</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab><Tab><Identity>TabID-19024-10413</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab></Tabs><SelectedTab>1</SelectedTab></Wnd1></Windows>\r
+ <SelectedTab>0</SelectedTab></Wnd2><Wnd3><Tabs><Tab><Identity>TabID-29040-7360</Identity><TabName>Find in Files</TabName><Factory>Find-in-Files</Factory><Session/></Tab><Tab><Identity>TabID-19024-10413</Identity><TabName>Build</TabName><Factory>Build</Factory><Session/></Tab></Tabs><SelectedTab>1</SelectedTab></Wnd3></Windows>\r
<Editor>\r
\r
\r
\r
\r
- <Pane><Tab><Factory>TextEditor</Factory><Filename>C:\E\Dev\FreeRTOS\WorkingCopy2\Demo\CORTEX_LM3Sxxxx_IAR_Keil\main.c</Filename><XPos>0</XPos><YPos>167</YPos><SelStart>7004</SelStart><SelEnd>7004</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
+ <Pane><Tab><Factory>TextEditor</Factory><Filename>C:\E\Dev\FreeRTOS\WorkingCopy2\Demo\CORTEX_LM3Sxxxx_IAR_Keil\main.c</Filename><XPos>0</XPos><YPos>193</YPos><SelStart>8396</SelStart><SelEnd>8396</SelEnd></Tab><ActiveTab>0</ActiveTab></Pane><ActivePane>0</ActivePane><Sizes><Pane><X>1000000</X><Y>1000000</Y></Pane></Sizes><SplitMode>1</SplitMode></Editor>\r
<Positions>\r
\r
\r
\r
\r
\r
- <Top><Row0><Sizes><Toolbar-012825f0><key>iaridepm.enu1</key></Toolbar-012825f0></Sizes></Row0><Row1><Sizes/></Row1></Top><Left><Row0><Sizes><Wnd0><Rect><Top>-2</Top><Left>-2</Left><Bottom>613</Bottom><Right>315</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>142857</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>226429</sizeVertCX><sizeVertCY>626273</sizeVertCY></Rect></Wnd0></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd1><Rect><Top>-2</Top><Left>-2</Left><Bottom>325</Bottom><Right>1402</Right><x>-2</x><y>-2</y><xscreen>1404</xscreen><yscreen>327</yscreen><sizeHorzCX>1002857</sizeHorzCX><sizeHorzCY>332994</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd1></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
+ <Top><Row0><Sizes><Toolbar-01282288><key>iaridepm.enu1</key></Toolbar-01282288></Sizes></Row0></Top><Left><Row0><Sizes><Wnd2><Rect><Top>-2</Top><Left>-2</Left><Bottom>613</Bottom><Right>315</Right><x>-2</x><y>-2</y><xscreen>200</xscreen><yscreen>200</yscreen><sizeHorzCX>142857</sizeHorzCX><sizeHorzCY>203666</sizeHorzCY><sizeVertCX>226429</sizeVertCX><sizeVertCY>626273</sizeVertCY></Rect></Wnd2></Sizes></Row0></Left><Right><Row0><Sizes/></Row0></Right><Bottom><Row0><Sizes><Wnd3><Rect><Top>-2</Top><Left>-2</Left><Bottom>325</Bottom><Right>1402</Right><x>-2</x><y>-2</y><xscreen>1404</xscreen><yscreen>327</yscreen><sizeHorzCX>1002857</sizeHorzCX><sizeHorzCY>332994</sizeHorzCY><sizeVertCX>142857</sizeVertCX><sizeVertCY>203666</sizeVertCY></Rect></Wnd3></Sizes></Row0></Bottom><Float><Sizes/></Float></Positions>\r
</Desktop>\r
</Workspace>\r
\r
extern void __iar_program_start(void);\r
extern void xPortPendSVHandler(void);\r
extern void xPortSysTickHandler(void);\r
+extern void vPortSVCHandler(void);\r
extern void vEMAC_ISR( void );\r
extern Timer0IntHandler( void );\r
\r
0, // Reserved\r
0, // Reserved\r
0, // Reserved\r
- IntDefaultHandler, // SVCall handler\r
+ vPortSVCHandler, // SVCall handler\r
IntDefaultHandler, // Debug monitor handler\r
0, // Reserved\r
xPortPendSVHandler, // The PendSV handler\r
IntDefaultHandler, // CAN1\r
IntDefaultHandler, // CAN2\r
vEMAC_ISR, // Ethernet\r
- IntDefaultHandler // Power Island\r
+ IntDefaultHandler, // Hibernate\r
+ IntDefaultHandler, // USB0\r
+ IntDefaultHandler, // PWM Generator 3\r
+ IntDefaultHandler, // uDMA Software Transfer\r
+ IntDefaultHandler // uDMA Error\r
};\r
\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
#include "interrupt.h"\r
#include "sysctl.h"\r
#include "lmi_timer.h"\r
+#include "hw_timer.h"\r
\r
/* The set frequency of the interrupt. Deviations from this are measured as\r
the jitter. */\r
\r
/* Misc defines. */\r
#define timerMAX_32BIT_VALUE ( 0xffffffffUL )\r
-#define timerTIMER_1_COUNT_VALUE ( * ( ( unsigned long * ) ( TIMER1_BASE + 0x48 ) ) )\r
+#define timerTIMER_1_COUNT_VALUE ( * ( ( volatile unsigned long * ) ( ( unsigned portLONG ) TIMER1_BASE + 0x48UL ) ) )\r
\r
/*-----------------------------------------------------------*/\r
\r
\r
void Timer0IntHandler( void )\r
{\r
-unsigned portLONG ulDifference;\r
-volatile unsigned portLONG ulCurrentCount;\r
-static portLONG ulMaxDifference = 0, ulLastCount = 0;\r
+unsigned portLONG ulDifference, ulCurrentCount;\r
+static unsigned portLONG ulMaxDifference = 0, ulLastCount = 0;\r
\r
/* We use the timer 1 counter value to measure the clock cycles between\r
the timer 0 interrupts. */\r
ulCurrentCount = timerTIMER_1_COUNT_VALUE;\r
\r
+ TimerIntClear( TIMER0_BASE, TIMER_TIMA_TIMEOUT );\r
+\r
if( ulCurrentCount < ulLastCount )\r
{ \r
/* How many times has timer 1 counted since the last interrupt? */\r
}\r
\r
ulLastCount = ulCurrentCount;\r
-\r
- TimerIntClear( TIMER0_BASE, TIMER_TIMA_TIMEOUT );\r
}\r
\r
\r
\r
\r
\r
+\r
+\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
-# FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+# FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
#\r
# This file is part of the FreeRTOS.org distribution.\r
#\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
#define configUSE_ALTERNATIVE_API 1\r
#define configUSE_RECURSIVE_MUTEXES 1\r
#define configCHECK_FOR_STACK_OVERFLOW 0 /* Do not use this option on the PC port. */\r
-#define configUSE_APPLICATION_TASK_HOOK 1\r
+#define configUSE_APPLICATION_TASK_TAG 1\r
\r
#define configMAX_PRIORITIES ( ( unsigned portBASE_TYPE ) 10 )\r
#define configMAX_CO_ROUTINE_PRIORITIES ( 2 )\r
#define INCLUDE_uxTaskGetStackHighWaterMark 0 /* Do not use this option on the PC port. */\r
\r
\r
+/* An example "task switched in" hook macro definition. */\r
+#define traceTASK_SWITCHED_IN() xTaskCallApplicationTaskHook( NULL, ( void * ) 0xabcd )\r
+\r
+extern void vMainQueueSendPassed( void );\r
+#define traceQUEUE_SEND( pxQueue ) vMainQueueSendPassed()\r
+\r
#endif /* FREERTOS_CONFIG_H */\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/* Check which ever tasks are relevant to this build. */\r
static portBASE_TYPE prvCheckMathTasksAreStillRunning( void );\r
\r
+/* Used to demonstrate the "task switched in" callback function. */\r
+static portBASE_TYPE prvExampleTaskHook( void * pvParameter );\r
+\r
+/* Just used to count the number of times the example task callback function is\r
+called, and the number of times a queue send passes. */\r
+static unsigned portLONG portLONG uxCheckTaskHookCallCount = 0;\r
+static unsigned portLONG portLONG uxQueueSendPassedCount = 0;\r
+\r
/*-----------------------------------------------------------*/\r
\r
portSHORT main( void )\r
}\r
/*-----------------------------------------------------------*/\r
\r
+static portBASE_TYPE prvExampleTaskHook( void * pvParameter )\r
+{\r
+ if( pvParameter != ( void * ) 0xabcd )\r
+ {\r
+ /* The parameter did not contain the value we expected, so cause an\r
+ error to be detected by setting the call count back to zero. */\r
+ uxCheckTaskHookCallCount = 0;\r
+ }\r
+ else\r
+ {\r
+ /* Simply increment a number so we know the callback has been executed. */\r
+ uxCheckTaskHookCallCount++;\r
+ }\r
+\r
+ return 0;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vMainQueueSendPassed( void )\r
+{\r
+ /* This is just an example implementation of the "queue send" trace hook. */\r
+ uxQueueSendPassedCount++;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
static void vErrorChecks( void *pvParameters )\r
{\r
portTickType xExpectedWakeTime;\r
\r
( void ) pvParameters;\r
\r
+ /* Register our callback function. */\r
+ vTaskSetApplicationTaskTag( NULL, prvExampleTaskHook );\r
+\r
/* Loop continuously, blocking, then checking all the other tasks are still\r
running, before blocking once again. This task blocks on the queue of\r
messages that require displaying so will wake either by its time out expiring,\r
static void prvCheckOtherTasksAreStillRunning( void )\r
{\r
static portSHORT sErrorHasOccurred = pdFALSE;\r
+static unsigned portLONG portLONG uxLastHookCallCount = 0, uxLastQueueSendCount = 0;\r
\r
if( prvCheckMathTasksAreStillRunning() != pdTRUE )\r
{\r
sErrorHasOccurred = pdTRUE;\r
}\r
\r
+ /* The hook function associated with this task is called each time the task\r
+ is switched in. We therefore expect the number of times the callback \r
+ function has been executed to have increrment since the last time this \r
+ function executed. */\r
+ if( uxCheckTaskHookCallCount <= uxLastHookCallCount )\r
+ {\r
+ vDisplayMessage( "Error in task hook call count!\r\n" );\r
+ sErrorHasOccurred = pdTRUE;\r
+ }\r
+ else\r
+ {\r
+ uxLastHookCallCount = uxCheckTaskHookCallCount;\r
+ }\r
+\r
+ /* We would expect some queue sending to occur between calls of this \r
+ function. */\r
+ if( uxQueueSendPassedCount <= uxLastQueueSendCount )\r
+ {\r
+ vDisplayMessage( "Error in queue send hook call count!\r\n" );\r
+ sErrorHasOccurred = pdTRUE;\r
+ }\r
+ else\r
+ {\r
+ uxLastQueueSendCount = uxQueueSendPassedCount;\r
+ }\r
+\r
if( sErrorHasOccurred == pdFALSE )\r
{\r
vDisplayMessage( "OK " );\r
http://dzcomm.sourceforge.net\r
\r
\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
-/*
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.
-
- This file is part of the FreeRTOS.org distribution.
-
- FreeRTOS.org is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- FreeRTOS.org is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with FreeRTOS.org; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- A special exception to the GPL can be applied should you wish to distribute
- a combined work that includes FreeRTOS.org, without being obliged to provide
- the source code for any proprietary components. See the licensing section
- of http://www.FreeRTOS.org for full details of how and when the exception
- can be applied.
-
- ***************************************************************************
- ***************************************************************************
- * *
- * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
- * and even write all or part of your application on your behalf. *
- * See http://www.OpenRTOS.com for details of the services we provide to *
- * expedite your project. *
- * *
- ***************************************************************************
- ***************************************************************************
-
- Please ensure to read the configuration and relevant port sections of the
- online documentation.
-
- http://www.FreeRTOS.org - Documentation, latest information, license and
- contact details.
-
- http://www.SafeRTOS.com - A version that is certified for use in safety
- critical systems.
-
- http://www.OpenRTOS.com - Commercial support, development, porting,
- licensing and training services.
-*/
-
-/*
- * Creates all the demo application tasks, then starts the scheduler. The WEB
- * documentation provides more details of the demo application tasks.
- *
- * In addition to the standard demo tasks, the follow demo specific tasks are
- * create:
- *
- * The "Check" task. This only executes every three seconds but has the highest
- * priority so is guaranteed to get processor time. Its main function is to
- * check that all the other tasks are still operational. Most tasks maintain
- * a unique count that is incremented each time the task successfully completes
- * its function. Should any error occur within such a task the count is
- * permanently halted. The check task inspects the count of each task to ensure
- * it has changed since the last time the check task executed. If all the count
- * variables have changed all the tasks are still executing error free, and the
- * check task toggles the onboard LED. Should any task contain an error at any time
- * the LED toggle rate will change from 3 seconds to 500ms.
- *
- * The "Register Check" tasks. These tasks fill the CPU registers with known
- * values, then check that each register still contains the expected value, the
- * discovery of an unexpected value being indicative of an error in the RTOS
- * context switch mechanism. The register check tasks operate at low priority
- * so are switched in and out frequently.
- *
- */
-
-/* Scheduler includes. */
-#include "FreeRTOS.h"
-#include "task.h"
-
-/* Xilinx library includes. */
-#include "xcache_l.h"
-#include "xintc.h"
-
-/* Demo application includes. */
-#include "flash.h"
-#include "integer.h"
-#include "comtest2.h"
-#include "semtest.h"
-#include "BlockQ.h"
-#include "dynamic.h"
-#include "flop.h"
-#include "GenQTest.h"
-#include "QPeek.h"
-#include "blocktim.h"
-#include "death.h"
-#include "partest.h"
-#include "countsem.h"
-#include "recmutex.h"
-
-/* Priorities assigned to the demo tasks. */
-#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 4 )
-#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 2 )
-#define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )
-#define mainQUEUE_BLOCK_PRIORITY ( tskIDLE_PRIORITY + 1 )
-#define mainDEATH_PRIORITY ( tskIDLE_PRIORITY + 1 )
-#define mainLED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )
-#define mainGENERIC_QUEUE_PRIORITY ( tskIDLE_PRIORITY )
-#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 1 )
-
-/* The first LED used by the COM test and check tasks respectively. */
-#define mainCOM_TEST_LED ( 4 )
-#define mainCHECK_TEST_LED ( 3 )
-
-/* The baud rate used by the comtest tasks is set by the hardware, so the
-baud rate parameters passed into the comtest initialisation has no effect. */
-#define mainBAUD_SET_IN_HARDWARE ( 0 )
-
-/* Delay periods used by the check task. If no errors have been found then
-the check LED will toggle every mainNO_ERROR_CHECK_DELAY milliseconds. If an
-error has been found at any time then the toggle rate will increase to
-mainERROR_CHECK_DELAY milliseconds. */
-#define mainNO_ERROR_CHECK_DELAY ( ( portTickType ) 3000 / portTICK_RATE_MS )
-#define mainERROR_CHECK_DELAY ( ( portTickType ) 500 / portTICK_RATE_MS )
-
-
-/*
- * The tasks defined within this file - described within the comments at the
- * head of this page.
- */
-static void prvRegTestTask1( void *pvParameters );
-static void prvRegTestTask2( void *pvParameters );
-static void prvErrorChecks( void *pvParameters );
-
-/*
- * Called by the 'check' task to inspect all the standard demo tasks within
- * the system, as described within the comments at the head of this page.
- */
-static portSHORT prvCheckOtherTasksAreStillRunning( void );
-
-/*
- * Perform any hardware initialisation required by the demo application.
- */
-static void prvSetupHardware( void );
-
-/*-----------------------------------------------------------*/
-
-/* xRegTestStatus will get set to pdFAIL by the regtest tasks if they
-discover an unexpected value. */
-static unsigned portBASE_TYPE xRegTestStatus = pdPASS;
-
-/* Counters used to ensure the regtest tasks are still running. */
-static volatile unsigned portLONG ulRegTest1Counter = 0UL, ulRegTest2Counter = 0UL;
-
-/*-----------------------------------------------------------*/
-\r
-int main( void )
-{
- /* Must be called prior to installing any interrupt handlers! */
- vPortSetupInterruptController();
-
- /* In this case prvSetupHardware() just enables the caches and and
- configures the IO ports for the LED outputs. */
- prvSetupHardware();
-
- /* Start the standard demo application tasks. Note that the baud rate used
- by the comtest tasks is set by the hardware, so the baud rate parameter
- passed has no effect. */
- vStartLEDFlashTasks( mainLED_TASK_PRIORITY );
- vStartIntegerMathTasks( tskIDLE_PRIORITY );
- vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainBAUD_SET_IN_HARDWARE, mainCOM_TEST_LED );
- vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );
- vStartBlockingQueueTasks ( mainQUEUE_BLOCK_PRIORITY );
- vStartDynamicPriorityTasks();
- vStartMathTasks( tskIDLE_PRIORITY );
- vStartGenericQueueTasks( mainGENERIC_QUEUE_PRIORITY );
- vStartQueuePeekTasks();
- vCreateBlockTimeTasks();
- vStartCountingSemaphoreTasks();
- vStartRecursiveMutexTasks();
-
- /* Create the tasks defined within this file. */
- xTaskCreate( prvRegTestTask1, "Regtest1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
- xTaskCreate( prvRegTestTask2, "Regtest2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
- xTaskCreate( prvErrorChecks, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );
-
- /* The suicide tasks must be started last as they record the number of other
- tasks that exist within the system. The value is then used to ensure at run
- time the number of tasks that exists is within expected bounds. */
- vCreateSuicidalTasks( mainDEATH_PRIORITY );
-
- /* Now start the scheduler. Following this call the created tasks should
- be executing. */
- vTaskStartScheduler( );
-
- /* vTaskStartScheduler() will only return if an error occurs while the
- idle task is being created. */
- for( ;; );
-
- return 0;
-}
-/*-----------------------------------------------------------*/
-
-static portSHORT prvCheckOtherTasksAreStillRunning( void )
-{
-portBASE_TYPE lReturn = pdPASS;
-static unsigned portLONG ulLastRegTest1Counter= 0UL, ulLastRegTest2Counter = 0UL;
-
- /* The demo tasks maintain a count that increments every cycle of the task
- provided that the task has never encountered an error. This function
- checks the counts maintained by the tasks to ensure they are still being
- incremented. A count remaining at the same value between calls therefore
- indicates that an error has been detected. */
-\r
- if( xAreIntegerMathsTaskStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreComTestTasksStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreSemaphoreTasksStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreBlockingQueuesStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreMathsTaskStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xIsCreateTaskStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreGenericQueueTasksStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreQueuePeekTasksStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )
- {
- lReturn = pdFAIL;
- }
-
- /* Have the register test tasks found any errors? */
- if( xRegTestStatus != pdPASS )
- {
- lReturn = pdFAIL;
- }
-
- /* Are the register test tasks still looping? */
- if( ulLastRegTest1Counter == ulRegTest1Counter )
- {
- lReturn = pdFAIL;
- }
- else
- {
- ulLastRegTest1Counter = ulRegTest1Counter;
- }
-
- if( ulLastRegTest2Counter == ulRegTest2Counter )
- {
- lReturn = pdFAIL;
- }
- else
- {
- ulLastRegTest2Counter = ulRegTest2Counter;
- }
-
- return lReturn;
-}
-/*-----------------------------------------------------------*/
-
-
-static void prvErrorChecks( void *pvParameters )
-{
-portTickType xDelayPeriod = mainNO_ERROR_CHECK_DELAY, xLastExecutionTime;
-volatile unsigned portBASE_TYPE uxFreeStack;
-
- /* This call is just to demonstrate the use of the function - nothing is
- done with the value. You would expect the stack high water mark to be
- lower (the function to return a larger value) here at function entry than
- later following calls to other functions. */
- uxFreeStack = uxTaskGetStackHighWaterMark( NULL );
-
- /* Initialise xLastExecutionTime so the first call to vTaskDelayUntil()
- works correctly. */
- xLastExecutionTime = xTaskGetTickCount();
-
- /* Cycle for ever, delaying then checking all the other tasks are still
- operating without error. */
- for( ;; )
- {
- /* Again just for demo purposes - uxFreeStack should have a lower value
- here than following the call to uxTaskGetStackHighWaterMark() on the
- task entry. */
- uxFreeStack = uxTaskGetStackHighWaterMark( NULL );
-
- /* Wait until it is time to check again. The time we wait here depends
- on whether an error has been detected or not. When an error is
- detected the time is shortened resulting in a faster LED flash rate. */
- vTaskDelayUntil( &xLastExecutionTime, xDelayPeriod );
-
- /* See if the other tasks are all ok. */
- if( prvCheckOtherTasksAreStillRunning() != pdPASS )
- {
- /* An error occurred in one of the tasks so shorten the delay
- period - which has the effect of increasing the frequency of the
- LED toggle. */
- xDelayPeriod = mainERROR_CHECK_DELAY;
- }
-
- /* Flash! */
- vParTestToggleLED( mainCHECK_TEST_LED );
- }
-}
-/*-----------------------------------------------------------*/
-
-static void prvSetupHardware( void )
-{
- XCache_EnableICache( 0x80000000 );
- XCache_EnableDCache( 0x80000000 );
-
- /* Setup the IO port for use with the LED outputs. */
- vParTestInitialise();
-}
-/*-----------------------------------------------------------*/
-
-void prvRegTest1Pass( void )
-{
- /* Called from the inline assembler - this cannot be static
- otherwise it can get optimised away. */
- ulRegTest1Counter++;
-}
-/*-----------------------------------------------------------*/
-
-void prvRegTest2Pass( void )
-{
- /* Called from the inline assembler - this cannot be static
- otherwise it can get optimised away. */
- ulRegTest2Counter++;
-}
-/*-----------------------------------------------------------*/
-
-void prvRegTestFail( void )
-{
- /* Called from the inline assembler - this cannot be static
- otherwise it can get optimised away. */
- xRegTestStatus = pdFAIL;
-}
-/*-----------------------------------------------------------*/
-
-static void prvRegTestTask1( void *pvParameters )
-{
- /* The first register test task as described at the top of this file. The
- values used in the registers are different to those use in the second
- register test task. Also, unlike the second register test task, this task
- yields between setting the register values and subsequently checking the
- register values. */
- asm volatile
- (
- "RegTest1Start: \n\t" \
- " \n\t" \
- " li 0, 301 \n\t" \
- " mtspr 256, 0 #USPRG0 \n\t" \
- " li 0, 501 \n\t" \
- " mtspr 8, 0 #LR \n\t" \
- " li 0, 4 \n\t" \
- " mtspr 1, 0 #XER \n\t" \
- " \n\t" \
- " li 0, 1 \n\t" \
- " li 2, 2 \n\t" \
- " li 3, 3 \n\t" \
- " li 4, 4 \n\t" \
- " li 5, 5 \n\t" \
- " li 6, 6 \n\t" \
- " li 7, 7 \n\t" \
- " li 8, 8 \n\t" \
- " li 9, 9 \n\t" \
- " li 10, 10 \n\t" \
- " li 11, 11 \n\t" \
- " li 12, 12 \n\t" \
- " li 13, 13 \n\t" \
- " li 14, 14 \n\t" \
- " li 15, 15 \n\t" \
- " li 16, 16 \n\t" \
- " li 17, 17 \n\t" \
- " li 18, 18 \n\t" \
- " li 19, 19 \n\t" \
- " li 20, 20 \n\t" \
- " li 21, 21 \n\t" \
- " li 22, 22 \n\t" \
- " li 23, 23 \n\t" \
- " li 24, 24 \n\t" \
- " li 25, 25 \n\t" \
- " li 26, 26 \n\t" \
- " li 27, 27 \n\t" \
- " li 28, 28 \n\t" \
- " li 29, 29 \n\t" \
- " li 30, 30 \n\t" \
- " li 31, 31 \n\t" \
- " \n\t" \
- " sc \n\t" \
- " nop \n\t" \
- " \n\t" \
- " cmpwi 0, 1 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 2, 2 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 3, 3 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 4, 4 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 5, 5 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 6, 6 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 7, 7 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 8, 8 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 9, 9 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 10, 10 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 11, 11 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 12, 12 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 13, 13 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 14, 14 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 15, 15 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 16, 16 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 17, 17 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 18, 18 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 19, 19 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 20, 20 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 21, 21 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 22, 22 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 23, 23 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 24, 24 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 25, 25 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 26, 26 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 27, 27 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 28, 28 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 29, 29 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 30, 30 \n\t" \
- " bne RegTest1Fail \n\t" \
- " cmpwi 31, 31 \n\t" \
- " bne RegTest1Fail \n\t" \
- " \n\t" \
- " mfspr 0, 256 #USPRG0 \n\t" \
- " cmpwi 0, 301 \n\t" \
- " bne RegTest1Fail \n\t" \
- " mfspr 0, 8 #LR \n\t" \
- " cmpwi 0, 501 \n\t" \
- " bne RegTest1Fail \n\t" \
- " mfspr 0, 1 #XER \n\t" \
- " cmpwi 0, 4 \n\t" \
- " bne RegTest1Fail \n\t" \
- " \n\t" \
- " bl prvRegTest1Pass \n\t" \
- " b RegTest1Start \n\t" \
- " \n\t" \
- "RegTest1Fail: \n\t" \
- " \n\t" \
- " \n\t" \
- " bl prvRegTestFail \n\t" \
- " b RegTest1Start \n\t" \
- );
-}
-/*-----------------------------------------------------------*/
-
-static void prvRegTestTask2( void *pvParameters )
-{
- /* The second register test task as described at the top of this file.
- Note that this task fills the registers with different values to the
- first register test task. */
- asm volatile
- (
- "RegTest2Start: \n\t" \
- " \n\t" \
- " li 0, 300 \n\t" \
- " mtspr 256, 0 #USPRG0 \n\t" \
- " li 0, 500 \n\t" \
- " mtspr 8, 0 #LR \n\t" \
- " li 0, 4 \n\t" \
- " mtspr 1, 0 #XER \n\t" \
- " \n\t" \
- " li 0, 11 \n\t" \
- " li 2, 12 \n\t" \
- " li 3, 13 \n\t" \
- " li 4, 14 \n\t" \
- " li 5, 15 \n\t" \
- " li 6, 16 \n\t" \
- " li 7, 17 \n\t" \
- " li 8, 18 \n\t" \
- " li 9, 19 \n\t" \
- " li 10, 110 \n\t" \
- " li 11, 111 \n\t" \
- " li 12, 112 \n\t" \
- " li 13, 113 \n\t" \
- " li 14, 114 \n\t" \
- " li 15, 115 \n\t" \
- " li 16, 116 \n\t" \
- " li 17, 117 \n\t" \
- " li 18, 118 \n\t" \
- " li 19, 119 \n\t" \
- " li 20, 120 \n\t" \
- " li 21, 121 \n\t" \
- " li 22, 122 \n\t" \
- " li 23, 123 \n\t" \
- " li 24, 124 \n\t" \
- " li 25, 125 \n\t" \
- " li 26, 126 \n\t" \
- " li 27, 127 \n\t" \
- " li 28, 128 \n\t" \
- " li 29, 129 \n\t" \
- " li 30, 130 \n\t" \
- " li 31, 131 \n\t" \
- " \n\t" \
- " cmpwi 0, 11 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 2, 12 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 3, 13 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 4, 14 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 5, 15 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 6, 16 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 7, 17 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 8, 18 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 9, 19 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 10, 110 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 11, 111 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 12, 112 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 13, 113 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 14, 114 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 15, 115 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 16, 116 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 17, 117 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 18, 118 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 19, 119 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 20, 120 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 21, 121 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 22, 122 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 23, 123 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 24, 124 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 25, 125 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 26, 126 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 27, 127 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 28, 128 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 29, 129 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 30, 130 \n\t" \
- " bne RegTest2Fail \n\t" \
- " cmpwi 31, 131 \n\t" \
- " bne RegTest2Fail \n\t" \
- " \n\t" \
- " mfspr 0, 256 #USPRG0 \n\t" \
- " cmpwi 0, 300 \n\t" \
- " bne RegTest2Fail \n\t" \
- " mfspr 0, 8 #LR \n\t" \
- " cmpwi 0, 500 \n\t" \
- " bne RegTest2Fail \n\t" \
- " mfspr 0, 1 #XER \n\t" \
- " cmpwi 0, 4 \n\t" \
- " bne RegTest2Fail \n\t" \
- " \n\t" \
- " bl prvRegTest2Pass \n\t" \
- " b RegTest2Start \n\t" \
- " \n\t" \
- "RegTest2Fail: \n\t" \
- " \n\t" \
- " \n\t" \
- " bl prvRegTestFail \n\t" \
- " b RegTest2Start \n\t" \
- );
-}
-/*-----------------------------------------------------------*/
-
-/* This hook function will get called if there is a suspected stack overflow.
-An overflow can cause the task name to be corrupted, in which case the task
-handle needs to be used to determine the offending task. */
-void vApplicationStackOverflowHook( xTaskHandle xTask, signed portCHAR *pcTaskName );
-void vApplicationStackOverflowHook( xTaskHandle xTask, signed portCHAR *pcTaskName )
-{
- /* The following three calls are simply to stop compiler warnings about the
- functions not being used - they are called from the inline assembly. */
- prvRegTest1Pass();
- prvRegTest2Pass();
- prvRegTestFail();
-
- for( ;; );
-}
-
-
-
-
+/*\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
+\r
+ This file is part of the FreeRTOS.org distribution.\r
+\r
+ FreeRTOS.org is free software; you can redistribute it and/or modify\r
+ it under the terms of the GNU General Public License as published by\r
+ the Free Software Foundation; either version 2 of the License, or\r
+ (at your option) any later version.\r
+\r
+ FreeRTOS.org is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with FreeRTOS.org; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+\r
+ A special exception to the GPL can be applied should you wish to distribute\r
+ a combined work that includes FreeRTOS.org, without being obliged to provide\r
+ the source code for any proprietary components. See the licensing section\r
+ of http://www.FreeRTOS.org for full details of how and when the exception\r
+ can be applied.\r
+\r
+ ***************************************************************************\r
+ ***************************************************************************\r
+ * *\r
+ * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *\r
+ * and even write all or part of your application on your behalf. *\r
+ * See http://www.OpenRTOS.com for details of the services we provide to *\r
+ * expedite your project. *\r
+ * *\r
+ ***************************************************************************\r
+ ***************************************************************************\r
+\r
+ Please ensure to read the configuration and relevant port sections of the\r
+ online documentation.\r
+\r
+ http://www.FreeRTOS.org - Documentation, latest information, license and \r
+ contact details.\r
+\r
+ http://www.SafeRTOS.com - A version that is certified for use in safety \r
+ critical systems.\r
+\r
+ http://www.OpenRTOS.com - Commercial support, development, porting, \r
+ licensing and training services.\r
+*/\r
+\r
+/*\r
+ * Creates all the demo application tasks, then starts the scheduler. The WEB\r
+ * documentation provides more details of the demo application tasks.\r
+ * \r
+ * In addition to the standard demo tasks, the follow demo specific tasks are\r
+ * create:\r
+ *\r
+ * The "Check" task. This only executes every three seconds but has the highest \r
+ * priority so is guaranteed to get processor time. Its main function is to \r
+ * check that all the other tasks are still operational. Most tasks maintain \r
+ * a unique count that is incremented each time the task successfully completes \r
+ * its function. Should any error occur within such a task the count is \r
+ * permanently halted. The check task inspects the count of each task to ensure \r
+ * it has changed since the last time the check task executed. If all the count \r
+ * variables have changed all the tasks are still executing error free, and the \r
+ * check task toggles the onboard LED. Should any task contain an error at any time \r
+ * the LED toggle rate will change from 3 seconds to 500ms.\r
+ *\r
+ * The "Register Check" tasks. These tasks fill the CPU registers with known\r
+ * values, then check that each register still contains the expected value, the\r
+ * discovery of an unexpected value being indicative of an error in the RTOS\r
+ * context switch mechanism. The register check tasks operate at low priority\r
+ * so are switched in and out frequently.\r
+ *\r
+ */\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "task.h"\r
+\r
+/* Xilinx library includes. */\r
+#include "xcache_l.h"\r
+#include "xintc.h"\r
+\r
+/* Demo application includes. */\r
+#include "flash.h"\r
+#include "integer.h"\r
+#include "comtest2.h"\r
+#include "semtest.h"\r
+#include "BlockQ.h"\r
+#include "dynamic.h"\r
+#include "GenQTest.h"\r
+#include "QPeek.h"\r
+#include "blocktim.h"\r
+#include "death.h"\r
+#include "partest.h"\r
+#include "countsem.h"\r
+#include "recmutex.h"\r
+\r
+/* Priorities assigned to the demo tasks. */\r
+#define mainCHECK_TASK_PRIORITY ( tskIDLE_PRIORITY + 4 )\r
+#define mainSEM_TEST_PRIORITY ( tskIDLE_PRIORITY + 2 )\r
+#define mainCOM_TEST_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
+#define mainQUEUE_BLOCK_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
+#define mainDEATH_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
+#define mainLED_TASK_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
+#define mainGENERIC_QUEUE_PRIORITY ( tskIDLE_PRIORITY )\r
+#define mainQUEUE_POLL_PRIORITY ( tskIDLE_PRIORITY + 1 )\r
+\r
+/* The first LED used by the COM test and check tasks respectively. */\r
+#define mainCOM_TEST_LED ( 4 )\r
+#define mainCHECK_TEST_LED ( 3 )\r
+\r
+/* The baud rate used by the comtest tasks is set by the hardware, so the\r
+baud rate parameters passed into the comtest initialisation has no effect. */\r
+#define mainBAUD_SET_IN_HARDWARE ( 0 )\r
+\r
+/* Delay periods used by the check task. If no errors have been found then\r
+the check LED will toggle every mainNO_ERROR_CHECK_DELAY milliseconds. If an\r
+error has been found at any time then the toggle rate will increase to \r
+mainERROR_CHECK_DELAY milliseconds. */\r
+#define mainNO_ERROR_CHECK_DELAY ( ( portTickType ) 3000 / portTICK_RATE_MS )\r
+#define mainERROR_CHECK_DELAY ( ( portTickType ) 500 / portTICK_RATE_MS )\r
+\r
+\r
+/* \r
+ * The tasks defined within this file - described within the comments at the\r
+ * head of this page. \r
+ */\r
+static void prvRegTestTask1( void *pvParameters );\r
+static void prvRegTestTask2( void *pvParameters );\r
+static void prvErrorChecks( void *pvParameters );\r
+\r
+/*\r
+ * Called by the 'check' task to inspect all the standard demo tasks within\r
+ * the system, as described within the comments at the head of this page.\r
+ */\r
+static portSHORT prvCheckOtherTasksAreStillRunning( void );\r
+\r
+/*\r
+ * Perform any hardware initialisation required by the demo application.\r
+ */\r
+static void prvSetupHardware( void );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* xRegTestStatus will get set to pdFAIL by the regtest tasks if they\r
+discover an unexpected value. */\r
+static unsigned portBASE_TYPE xRegTestStatus = pdPASS;\r
+\r
+/* Counters used to ensure the regtest tasks are still running. */\r
+static volatile unsigned portLONG ulRegTest1Counter = 0UL, ulRegTest2Counter = 0UL;\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+int main( void )\r
+{\r
+ /* Must be called prior to installing any interrupt handlers! */\r
+ vPortSetupInterruptController();\r
+\r
+ /* In this case prvSetupHardware() just enables the caches and and\r
+ configures the IO ports for the LED outputs. */\r
+ prvSetupHardware();\r
+\r
+ /* Start the standard demo application tasks. Note that the baud rate used\r
+ by the comtest tasks is set by the hardware, so the baud rate parameter\r
+ passed has no effect. */\r
+ vStartLEDFlashTasks( mainLED_TASK_PRIORITY ); \r
+ vStartIntegerMathTasks( tskIDLE_PRIORITY );\r
+ vAltStartComTestTasks( mainCOM_TEST_PRIORITY, mainBAUD_SET_IN_HARDWARE, mainCOM_TEST_LED );\r
+ vStartSemaphoreTasks( mainSEM_TEST_PRIORITY );\r
+ vStartBlockingQueueTasks ( mainQUEUE_BLOCK_PRIORITY ); \r
+ vStartDynamicPriorityTasks(); \r
+ vStartGenericQueueTasks( mainGENERIC_QUEUE_PRIORITY );\r
+ vStartQueuePeekTasks();\r
+ vCreateBlockTimeTasks();\r
+ vStartCountingSemaphoreTasks();\r
+ vStartRecursiveMutexTasks();\r
+\r
+ /* Create the tasks defined within this file. */\r
+ xTaskCreate( prvRegTestTask1, "Regtest1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
+ xTaskCreate( prvRegTestTask2, "Regtest2", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );\r
+ xTaskCreate( prvErrorChecks, "Check", configMINIMAL_STACK_SIZE, NULL, mainCHECK_TASK_PRIORITY, NULL );\r
+\r
+ /* The suicide tasks must be started last as they record the number of other\r
+ tasks that exist within the system. The value is then used to ensure at run\r
+ time the number of tasks that exists is within expected bounds. */\r
+ vCreateSuicidalTasks( mainDEATH_PRIORITY );\r
+\r
+ /* Now start the scheduler. Following this call the created tasks should\r
+ be executing. */ \r
+ vTaskStartScheduler( );\r
+\r
+ /* vTaskStartScheduler() will only return if an error occurs while the \r
+ idle task is being created. */\r
+ for( ;; );\r
+\r
+ return 0;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static portSHORT prvCheckOtherTasksAreStillRunning( void )\r
+{\r
+portBASE_TYPE lReturn = pdPASS;\r
+static unsigned portLONG ulLastRegTest1Counter= 0UL, ulLastRegTest2Counter = 0UL;\r
+\r
+ /* The demo tasks maintain a count that increments every cycle of the task\r
+ provided that the task has never encountered an error. This function \r
+ checks the counts maintained by the tasks to ensure they are still being\r
+ incremented. A count remaining at the same value between calls therefore\r
+ indicates that an error has been detected. */\r
+\r
+ if( xAreIntegerMathsTaskStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+\r
+ if( xAreComTestTasksStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+ \r
+ if( xAreSemaphoreTasksStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+ \r
+ if( xAreBlockingQueuesStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+ \r
+ if( xAreDynamicPriorityTasksStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+ \r
+ if( xIsCreateTaskStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+ \r
+ if( xAreBlockTimeTestTasksStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+ \r
+ if( xAreGenericQueueTasksStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+ \r
+ if( xAreQueuePeekTasksStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+\r
+ if( xAreCountingSemaphoreTasksStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+\r
+ if( xAreRecursiveMutexTasksStillRunning() != pdTRUE )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+\r
+ /* Have the register test tasks found any errors? */\r
+ if( xRegTestStatus != pdPASS )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+\r
+ /* Are the register test tasks still looping? */\r
+ if( ulLastRegTest1Counter == ulRegTest1Counter )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+ else\r
+ {\r
+ ulLastRegTest1Counter = ulRegTest1Counter;\r
+ }\r
+\r
+ if( ulLastRegTest2Counter == ulRegTest2Counter )\r
+ {\r
+ lReturn = pdFAIL;\r
+ }\r
+ else\r
+ {\r
+ ulLastRegTest2Counter = ulRegTest2Counter;\r
+ }\r
+\r
+ return lReturn;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+\r
+static void prvErrorChecks( void *pvParameters )\r
+{\r
+portTickType xDelayPeriod = mainNO_ERROR_CHECK_DELAY, xLastExecutionTime;\r
+volatile unsigned portBASE_TYPE uxFreeStack;\r
+\r
+ /* This call is just to demonstrate the use of the function - nothing is\r
+ done with the value. You would expect the stack high water mark to be\r
+ lower (the function to return a larger value) here at function entry than\r
+ later following calls to other functions. */\r
+ uxFreeStack = uxTaskGetStackHighWaterMark( NULL );\r
+\r
+ /* Initialise xLastExecutionTime so the first call to vTaskDelayUntil()\r
+ works correctly. */\r
+ xLastExecutionTime = xTaskGetTickCount();\r
+\r
+ /* Cycle for ever, delaying then checking all the other tasks are still\r
+ operating without error. */\r
+ for( ;; )\r
+ {\r
+ /* Again just for demo purposes - uxFreeStack should have a lower value\r
+ here than following the call to uxTaskGetStackHighWaterMark() on the\r
+ task entry. */\r
+ uxFreeStack = uxTaskGetStackHighWaterMark( NULL );\r
+\r
+ /* Wait until it is time to check again. The time we wait here depends\r
+ on whether an error has been detected or not. When an error is \r
+ detected the time is shortened resulting in a faster LED flash rate. */\r
+ vTaskDelayUntil( &xLastExecutionTime, xDelayPeriod );\r
+\r
+ /* See if the other tasks are all ok. */\r
+ if( prvCheckOtherTasksAreStillRunning() != pdPASS )\r
+ {\r
+ /* An error occurred in one of the tasks so shorten the delay \r
+ period - which has the effect of increasing the frequency of the\r
+ LED toggle. */\r
+ xDelayPeriod = mainERROR_CHECK_DELAY;\r
+ }\r
+\r
+ /* Flash! */\r
+ vParTestToggleLED( mainCHECK_TEST_LED );\r
+ }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvSetupHardware( void )\r
+{\r
+ XCache_EnableICache( 0x80000000 );\r
+ XCache_EnableDCache( 0x80000000 );\r
+\r
+ /* Setup the IO port for use with the LED outputs. */\r
+ vParTestInitialise();\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void prvRegTest1Pass( void )\r
+{\r
+ /* Called from the inline assembler - this cannot be static\r
+ otherwise it can get optimised away. */\r
+ ulRegTest1Counter++;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void prvRegTest2Pass( void )\r
+{\r
+ /* Called from the inline assembler - this cannot be static\r
+ otherwise it can get optimised away. */\r
+ ulRegTest2Counter++;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void prvRegTestFail( void )\r
+{\r
+ /* Called from the inline assembler - this cannot be static\r
+ otherwise it can get optimised away. */\r
+ xRegTestStatus = pdFAIL;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvRegTestTask1( void *pvParameters )\r
+{\r
+ /* The first register test task as described at the top of this file. The\r
+ values used in the registers are different to those use in the second \r
+ register test task. Also, unlike the second register test task, this task\r
+ yields between setting the register values and subsequently checking the\r
+ register values. */\r
+ asm volatile\r
+ (\r
+ "RegTest1Start: \n\t" \\r
+ " \n\t" \\r
+ " li 0, 301 \n\t" \\r
+ " mtspr 256, 0 #USPRG0 \n\t" \\r
+ " li 0, 501 \n\t" \\r
+ " mtspr 8, 0 #LR \n\t" \\r
+ " li 0, 4 \n\t" \\r
+ " mtspr 1, 0 #XER \n\t" \\r
+ " \n\t" \\r
+ " li 0, 1 \n\t" \\r
+ " li 2, 2 \n\t" \\r
+ " li 3, 3 \n\t" \\r
+ " li 4, 4 \n\t" \\r
+ " li 5, 5 \n\t" \\r
+ " li 6, 6 \n\t" \\r
+ " li 7, 7 \n\t" \\r
+ " li 8, 8 \n\t" \\r
+ " li 9, 9 \n\t" \\r
+ " li 10, 10 \n\t" \\r
+ " li 11, 11 \n\t" \\r
+ " li 12, 12 \n\t" \\r
+ " li 13, 13 \n\t" \\r
+ " li 14, 14 \n\t" \\r
+ " li 15, 15 \n\t" \\r
+ " li 16, 16 \n\t" \\r
+ " li 17, 17 \n\t" \\r
+ " li 18, 18 \n\t" \\r
+ " li 19, 19 \n\t" \\r
+ " li 20, 20 \n\t" \\r
+ " li 21, 21 \n\t" \\r
+ " li 22, 22 \n\t" \\r
+ " li 23, 23 \n\t" \\r
+ " li 24, 24 \n\t" \\r
+ " li 25, 25 \n\t" \\r
+ " li 26, 26 \n\t" \\r
+ " li 27, 27 \n\t" \\r
+ " li 28, 28 \n\t" \\r
+ " li 29, 29 \n\t" \\r
+ " li 30, 30 \n\t" \\r
+ " li 31, 31 \n\t" \\r
+ " \n\t" \\r
+ " sc \n\t" \\r
+ " nop \n\t" \\r
+ " \n\t" \\r
+ " cmpwi 0, 1 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 2, 2 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 3, 3 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 4, 4 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 5, 5 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 6, 6 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 7, 7 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 8, 8 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 9, 9 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 10, 10 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 11, 11 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 12, 12 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 13, 13 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 14, 14 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 15, 15 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 16, 16 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 17, 17 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 18, 18 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 19, 19 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 20, 20 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 21, 21 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 22, 22 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 23, 23 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 24, 24 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 25, 25 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 26, 26 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 27, 27 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 28, 28 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 29, 29 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 30, 30 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " cmpwi 31, 31 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " \n\t" \\r
+ " mfspr 0, 256 #USPRG0 \n\t" \\r
+ " cmpwi 0, 301 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " mfspr 0, 8 #LR \n\t" \\r
+ " cmpwi 0, 501 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " mfspr 0, 1 #XER \n\t" \\r
+ " cmpwi 0, 4 \n\t" \\r
+ " bne RegTest1Fail \n\t" \\r
+ " \n\t" \\r
+ " bl prvRegTest1Pass \n\t" \\r
+ " b RegTest1Start \n\t" \\r
+ " \n\t" \\r
+ "RegTest1Fail: \n\t" \\r
+ " \n\t" \\r
+ " \n\t" \\r
+ " bl prvRegTestFail \n\t" \\r
+ " b RegTest1Start \n\t" \\r
+ );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void prvRegTestTask2( void *pvParameters )\r
+{\r
+ /* The second register test task as described at the top of this file. \r
+ Note that this task fills the registers with different values to the\r
+ first register test task. */\r
+ asm volatile\r
+ (\r
+ "RegTest2Start: \n\t" \\r
+ " \n\t" \\r
+ " li 0, 300 \n\t" \\r
+ " mtspr 256, 0 #USPRG0 \n\t" \\r
+ " li 0, 500 \n\t" \\r
+ " mtspr 8, 0 #LR \n\t" \\r
+ " li 0, 4 \n\t" \\r
+ " mtspr 1, 0 #XER \n\t" \\r
+ " \n\t" \\r
+ " li 0, 11 \n\t" \\r
+ " li 2, 12 \n\t" \\r
+ " li 3, 13 \n\t" \\r
+ " li 4, 14 \n\t" \\r
+ " li 5, 15 \n\t" \\r
+ " li 6, 16 \n\t" \\r
+ " li 7, 17 \n\t" \\r
+ " li 8, 18 \n\t" \\r
+ " li 9, 19 \n\t" \\r
+ " li 10, 110 \n\t" \\r
+ " li 11, 111 \n\t" \\r
+ " li 12, 112 \n\t" \\r
+ " li 13, 113 \n\t" \\r
+ " li 14, 114 \n\t" \\r
+ " li 15, 115 \n\t" \\r
+ " li 16, 116 \n\t" \\r
+ " li 17, 117 \n\t" \\r
+ " li 18, 118 \n\t" \\r
+ " li 19, 119 \n\t" \\r
+ " li 20, 120 \n\t" \\r
+ " li 21, 121 \n\t" \\r
+ " li 22, 122 \n\t" \\r
+ " li 23, 123 \n\t" \\r
+ " li 24, 124 \n\t" \\r
+ " li 25, 125 \n\t" \\r
+ " li 26, 126 \n\t" \\r
+ " li 27, 127 \n\t" \\r
+ " li 28, 128 \n\t" \\r
+ " li 29, 129 \n\t" \\r
+ " li 30, 130 \n\t" \\r
+ " li 31, 131 \n\t" \\r
+ " \n\t" \\r
+ " cmpwi 0, 11 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 2, 12 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 3, 13 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 4, 14 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 5, 15 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 6, 16 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 7, 17 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 8, 18 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 9, 19 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 10, 110 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 11, 111 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 12, 112 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 13, 113 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 14, 114 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 15, 115 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 16, 116 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 17, 117 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 18, 118 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 19, 119 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 20, 120 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 21, 121 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 22, 122 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 23, 123 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 24, 124 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 25, 125 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 26, 126 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 27, 127 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 28, 128 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 29, 129 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 30, 130 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " cmpwi 31, 131 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " \n\t" \\r
+ " mfspr 0, 256 #USPRG0 \n\t" \\r
+ " cmpwi 0, 300 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " mfspr 0, 8 #LR \n\t" \\r
+ " cmpwi 0, 500 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " mfspr 0, 1 #XER \n\t" \\r
+ " cmpwi 0, 4 \n\t" \\r
+ " bne RegTest2Fail \n\t" \\r
+ " \n\t" \\r
+ " bl prvRegTest2Pass \n\t" \\r
+ " b RegTest2Start \n\t" \\r
+ " \n\t" \\r
+ "RegTest2Fail: \n\t" \\r
+ " \n\t" \\r
+ " \n\t" \\r
+ " bl prvRegTestFail \n\t" \\r
+ " b RegTest2Start \n\t" \\r
+ );\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+/* This hook function will get called if there is a suspected stack overflow.\r
+An overflow can cause the task name to be corrupted, in which case the task\r
+handle needs to be used to determine the offending task. */\r
+void vApplicationStackOverflowHook( xTaskHandle xTask, signed portCHAR *pcTaskName );\r
+void vApplicationStackOverflowHook( xTaskHandle xTask, signed portCHAR *pcTaskName )\r
+{\r
+ /* The following three calls are simply to stop compiler warnings about the\r
+ functions not being used - they are called from the inline assembly. */\r
+ prvRegTest1Pass();\r
+ prvRegTest2Pass();\r
+ prvRegTestFail();\r
+\r
+ for( ;; );\r
+}\r
+\r
+\r
+\r
+\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
-/*
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.
-
- This file is part of the FreeRTOS.org distribution.
-
- FreeRTOS.org is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- FreeRTOS.org is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with FreeRTOS.org; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- A special exception to the GPL can be applied should you wish to distribute
- a combined work that includes FreeRTOS.org, without being obliged to provide
- the source code for any proprietary components. See the licensing section
- of http://www.FreeRTOS.org for full details of how and when the exception
- can be applied.
-
- ***************************************************************************
- ***************************************************************************
- * *
- * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *
- * and even write all or part of your application on your behalf. *
- * See http://www.OpenRTOS.com for details of the services we provide to *
- * expedite your project. *
- * *
- ***************************************************************************
- ***************************************************************************
-
- Please ensure to read the configuration and relevant port sections of the
- online documentation.
-
- http://www.FreeRTOS.org - Documentation, latest information, license and
- contact details.
-
- http://www.SafeRTOS.com - A version that is certified for use in safety
- critical systems.
-
- http://www.OpenRTOS.com - Commercial support, development, porting,
- licensing and training services.
-*/
-
-
-/*
- BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER FOR UART
-*/
-
-/* Scheduler includes. */
-#include "FreeRTOS.h"
-#include "queue.h"
-#include "task.h"
-
-/* Demo application includes. */
-#include "serial.h"
-
-/* Library includes. */
-#include "xparameters.h"
-#include "xuartlite.h"
-#include "xuartlite_l.h"
-
-/*-----------------------------------------------------------*/
-
-/* Queues used to hold received characters, and characters waiting to be
-transmitted. */
-static xQueueHandle xRxedChars;
-static xQueueHandle xCharsForTx;
-
-/* Structure that maintains information on the UART being used. */
-static XUartLite xUART;
-
-/*
- * Sample UART interrupt handler. Note this is used to demonstrate the kernel
- * features and test the port - it is not intended to represent an efficient
- * implementation.
- */
-static void vSerialISR( XUartLite *pxUART );
-
-/*-----------------------------------------------------------*/
-
-xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )
-{
- /* NOTE: The baud rate used by this driver is determined by the hardware
- parameterization of the UART Lite peripheral, and the baud value passed to
- this function has no effect. */
- ( void ) ulWantedBaud;
-
- /* Create the queues used to hold Rx and Tx characters. */
- xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );
- xCharsForTx = xQueueCreate( uxQueueLength + 1, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );
-
- /* Only initialise the UART if the queues were created correctly. */
- if( ( xRxedChars != NULL ) && ( xCharsForTx != NULL ) )
- {
-
- XUartLite_Initialize( &xUART, XPAR_RS232_UART_DEVICE_ID );
- XUartLite_ResetFifos( &xUART );
- XUartLite_DisableInterrupt( &xUART );
-
- if( xPortInstallInterruptHandler( XPAR_XPS_INTC_0_RS232_UART_INTERRUPT_INTR, ( XInterruptHandler )vSerialISR, (void *)&xUART ) == pdPASS )
- {
- /* xPortInstallInterruptHandler() could fail if
- vPortSetupInterruptController() has not been called prior to this
- function. */
- XUartLite_EnableInterrupt( &xUART );
- }
- }
-
- /* There is only one port so the handle is not used. */
- return ( xComPortHandle ) 0;
-}
-/*-----------------------------------------------------------*/
-
-signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime )
-{
- /* The port handle is not required as this driver only supports one UART. */
- ( void ) pxPort;
-
- /* Get the next character from the buffer. Return false if no characters
- are available, or arrive before xBlockTime expires. */
- if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) )
- {
- return pdTRUE;
- }
- else
- {
- return pdFALSE;
- }
-}
-/*-----------------------------------------------------------*/
-
-signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime )
-{
-portBASE_TYPE xReturn = pdTRUE;
-
- portENTER_CRITICAL();
- {
- /* If the UART FIFO is full we can block posting the new data on the
- Tx queue. */
- if( XUartLite_mIsTransmitFull( XPAR_RS232_UART_BASEADDR ) )
- {
- if( xQueueSend( xCharsForTx, &cOutChar, xBlockTime ) != pdPASS )
- {
- xReturn = pdFAIL;
- }
- }
- /* Otherwise, if there is data already in the queue we should add the
- new data to the back of the queue to ensure the sequencing is
- maintained. */
- else if( uxQueueMessagesWaiting( xCharsForTx ) )
- {
- if( xQueueSend( xCharsForTx, &cOutChar, xBlockTime ) != pdPASS )
- {
- xReturn = pdFAIL;
- }
- }
- /* If the UART FIFO is not full and there is no data already in the
- queue we can write directly to the FIFO without disrupting the
- sequence. */
- else
- {
- XIo_Out32( XPAR_RS232_UART_BASEADDR + XUL_TX_FIFO_OFFSET, cOutChar );
- }
- }
- portEXIT_CRITICAL();
-
- return xReturn;
-}
-/*-----------------------------------------------------------*/
-
-void vSerialClose( xComPortHandle xPort )
-{
- /* Not supported as not required by the demo application. */
- ( void ) xPort;
-}
-/*-----------------------------------------------------------*/
-
-static void vSerialISR( XUartLite *pxUART )
-{
-unsigned portLONG ulISRStatus;
-portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE, lDidSomething;
-portCHAR cChar;
-
- do
- {
- lDidSomething = pdFALSE;
-
- ulISRStatus = XIo_In32( XPAR_RS232_UART_BASEADDR + XUL_STATUS_REG_OFFSET );
-
- if( ( ulISRStatus & XUL_SR_RX_FIFO_VALID_DATA ) != 0 )
- {
- /* A character is available - place it in the queue of received
- characters. This might wake a task that was blocked waiting for
- data. */
- cChar = ( portCHAR ) XIo_In32( XPAR_RS232_UART_BASEADDR + XUL_RX_FIFO_OFFSET );
- xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );
- lDidSomething = pdTRUE;
- }
-
- if( ( ulISRStatus & XUL_SR_TX_FIFO_EMPTY ) != 0 )
- {
- /* There is space in the FIFO - if there are any characters queue for
- transmission they can be sent to the UART now. This might unblock a
- task that was waiting for space to become available on the Tx queue. */
- if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )
- {
- XIo_Out32( XPAR_RS232_UART_BASEADDR + XUL_TX_FIFO_OFFSET, cChar );
- lDidSomething = pdTRUE;
- }
- }
- } while( lDidSomething == pdTRUE );
-
- /* If we woke any tasks we may require a context switch. */
- if( xHigherPriorityTaskWoken )
- {
- portYIELD_FROM_ISR();
- }
-}
-
-
-
+/*\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
+\r
+ This file is part of the FreeRTOS.org distribution.\r
+\r
+ FreeRTOS.org is free software; you can redistribute it and/or modify\r
+ it under the terms of the GNU General Public License as published by\r
+ the Free Software Foundation; either version 2 of the License, or\r
+ (at your option) any later version.\r
+\r
+ FreeRTOS.org is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ GNU General Public License for more details.\r
+\r
+ You should have received a copy of the GNU General Public License\r
+ along with FreeRTOS.org; if not, write to the Free Software\r
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+\r
+ A special exception to the GPL can be applied should you wish to distribute\r
+ a combined work that includes FreeRTOS.org, without being obliged to provide\r
+ the source code for any proprietary components. See the licensing section \r
+ of http://www.FreeRTOS.org for full details of how and when the exception\r
+ can be applied.\r
+\r
+ ***************************************************************************\r
+ ***************************************************************************\r
+ * *\r
+ * SAVE TIME AND MONEY! We can port FreeRTOS.org to your own hardware, *\r
+ * and even write all or part of your application on your behalf. *\r
+ * See http://www.OpenRTOS.com for details of the services we provide to *\r
+ * expedite your project. *\r
+ * *\r
+ ***************************************************************************\r
+ ***************************************************************************\r
+\r
+ Please ensure to read the configuration and relevant port sections of the\r
+ online documentation.\r
+\r
+ http://www.FreeRTOS.org - Documentation, latest information, license and \r
+ contact details.\r
+\r
+ http://www.SafeRTOS.com - A version that is certified for use in safety \r
+ critical systems.\r
+\r
+ http://www.OpenRTOS.com - Commercial support, development, porting, \r
+ licensing and training services.\r
+*/\r
+\r
+\r
+/* \r
+ BASIC INTERRUPT DRIVEN SERIAL PORT DRIVER FOR UART\r
+*/\r
+\r
+/* Scheduler includes. */\r
+#include "FreeRTOS.h"\r
+#include "queue.h"\r
+#include "task.h"\r
+\r
+/* Demo application includes. */\r
+#include "serial.h"\r
+\r
+/* Library includes. */\r
+#include "xparameters.h"\r
+#include "xuartlite.h"\r
+#include "xuartlite_l.h"\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+/* Queues used to hold received characters, and characters waiting to be\r
+transmitted. */\r
+static xQueueHandle xRxedChars; \r
+static xQueueHandle xCharsForTx; \r
+\r
+/* Structure that maintains information on the UART being used. */\r
+static XUartLite xUART;\r
+\r
+/*\r
+ * Sample UART interrupt handler. Note this is used to demonstrate the kernel\r
+ * features and test the port - it is not intended to represent an efficient\r
+ * implementation.\r
+ */\r
+static void vSerialISR( XUartLite *pxUART );\r
+\r
+/*-----------------------------------------------------------*/\r
+\r
+xComPortHandle xSerialPortInitMinimal( unsigned portLONG ulWantedBaud, unsigned portBASE_TYPE uxQueueLength )\r
+{\r
+ /* NOTE: The baud rate used by this driver is determined by the hardware\r
+ parameterization of the UART Lite peripheral, and the baud value passed to\r
+ this function has no effect. */\r
+ ( void ) ulWantedBaud;\r
+\r
+ /* Create the queues used to hold Rx and Tx characters. */\r
+ xRxedChars = xQueueCreate( uxQueueLength, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );\r
+ xCharsForTx = xQueueCreate( uxQueueLength + 1, ( unsigned portBASE_TYPE ) sizeof( signed portCHAR ) );\r
+\r
+ /* Only initialise the UART if the queues were created correctly. */\r
+ if( ( xRxedChars != NULL ) && ( xCharsForTx != NULL ) )\r
+ {\r
+\r
+ XUartLite_Initialize( &xUART, XPAR_RS232_UART_DEVICE_ID );\r
+ XUartLite_ResetFifos( &xUART );\r
+ XUartLite_DisableInterrupt( &xUART );\r
+\r
+ if( xPortInstallInterruptHandler( XPAR_XPS_INTC_0_RS232_UART_INTERRUPT_INTR, ( XInterruptHandler )vSerialISR, (void *)&xUART ) == pdPASS )\r
+ {\r
+ /* xPortInstallInterruptHandler() could fail if \r
+ vPortSetupInterruptController() has not been called prior to this \r
+ function. */\r
+ XUartLite_EnableInterrupt( &xUART );\r
+ }\r
+ }\r
+ \r
+ /* There is only one port so the handle is not used. */\r
+ return ( xComPortHandle ) 0;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+signed portBASE_TYPE xSerialGetChar( xComPortHandle pxPort, signed portCHAR *pcRxedChar, portTickType xBlockTime )\r
+{\r
+ /* The port handle is not required as this driver only supports one UART. */\r
+ ( void ) pxPort;\r
+\r
+ /* Get the next character from the buffer. Return false if no characters\r
+ are available, or arrive before xBlockTime expires. */\r
+ if( xQueueReceive( xRxedChars, pcRxedChar, xBlockTime ) )\r
+ {\r
+ return pdTRUE;\r
+ }\r
+ else\r
+ {\r
+ return pdFALSE;\r
+ }\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+signed portBASE_TYPE xSerialPutChar( xComPortHandle pxPort, signed portCHAR cOutChar, portTickType xBlockTime )\r
+{\r
+portBASE_TYPE xReturn = pdTRUE;\r
+\r
+ portENTER_CRITICAL();\r
+ {\r
+ /* If the UART FIFO is full we can block posting the new data on the\r
+ Tx queue. */\r
+ if( XUartLite_mIsTransmitFull( XPAR_RS232_UART_BASEADDR ) )\r
+ {\r
+ if( xQueueSend( xCharsForTx, &cOutChar, xBlockTime ) != pdPASS )\r
+ {\r
+ xReturn = pdFAIL;\r
+ }\r
+ }\r
+ /* Otherwise, if there is data already in the queue we should add the\r
+ new data to the back of the queue to ensure the sequencing is \r
+ maintained. */\r
+ else if( uxQueueMessagesWaiting( xCharsForTx ) )\r
+ {\r
+ if( xQueueSend( xCharsForTx, &cOutChar, xBlockTime ) != pdPASS )\r
+ {\r
+ xReturn = pdFAIL;\r
+ } \r
+ }\r
+ /* If the UART FIFO is not full and there is no data already in the\r
+ queue we can write directly to the FIFO without disrupting the \r
+ sequence. */\r
+ else\r
+ {\r
+ XIo_Out32( XPAR_RS232_UART_BASEADDR + XUL_TX_FIFO_OFFSET, cOutChar );\r
+ }\r
+ }\r
+ portEXIT_CRITICAL();\r
+\r
+ return xReturn;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+void vSerialClose( xComPortHandle xPort )\r
+{\r
+ /* Not supported as not required by the demo application. */\r
+ ( void ) xPort;\r
+}\r
+/*-----------------------------------------------------------*/\r
+\r
+static void vSerialISR( XUartLite *pxUART )\r
+{\r
+unsigned portLONG ulISRStatus;\r
+portBASE_TYPE xHigherPriorityTaskWoken = pdFALSE, lDidSomething;\r
+portCHAR cChar;\r
+\r
+ do\r
+ {\r
+ lDidSomething = pdFALSE;\r
+\r
+ ulISRStatus = XIo_In32( XPAR_RS232_UART_BASEADDR + XUL_STATUS_REG_OFFSET );\r
+\r
+ if( ( ulISRStatus & XUL_SR_RX_FIFO_VALID_DATA ) != 0 )\r
+ {\r
+ /* A character is available - place it in the queue of received\r
+ characters. This might wake a task that was blocked waiting for \r
+ data. */\r
+ cChar = ( portCHAR ) XIo_In32( XPAR_RS232_UART_BASEADDR + XUL_RX_FIFO_OFFSET );\r
+ xQueueSendFromISR( xRxedChars, &cChar, &xHigherPriorityTaskWoken );\r
+ lDidSomething = pdTRUE;\r
+ }\r
+ \r
+ if( ( ulISRStatus & XUL_SR_TX_FIFO_EMPTY ) != 0 )\r
+ {\r
+ /* There is space in the FIFO - if there are any characters queue for\r
+ transmission they can be sent to the UART now. This might unblock a\r
+ task that was waiting for space to become available on the Tx queue. */\r
+ if( xQueueReceiveFromISR( xCharsForTx, &cChar, &xHigherPriorityTaskWoken ) == pdTRUE )\r
+ {\r
+ XIo_Out32( XPAR_RS232_UART_BASEADDR + XUL_TX_FIFO_OFFSET, cChar );\r
+ lDidSomething = pdTRUE;\r
+ } \r
+ }\r
+ } while( lDidSomething == pdTRUE );\r
+\r
+ /* If we woke any tasks we may require a context switch. */\r
+ if( xHigherPriorityTaskWoken )\r
+ {\r
+ portYIELD_FROM_ISR();\r
+ }\r
+}\r
+\r
+\r
+\r
ppc405_0\r
-RTOSDEMO_SOURCES = RTOSDemo/../../Common/Minimal/BlockQ.c RTOSDemo/../../Common/Minimal/blocktim.c RTOSDemo/../../Common/Minimal/comtest.c RTOSDemo/../../Common/Minimal/countsem.c RTOSDemo/../../Common/Minimal/death.c RTOSDemo/../../Common/Minimal/dynamic.c RTOSDemo/../../Common/Minimal/flash.c RTOSDemo/../../Common/Minimal/flop.c RTOSDemo/../../Common/Minimal/GenQTest.c RTOSDemo/../../Common/Minimal/integer.c RTOSDemo/../../Common/Minimal/QPeek.c RTOSDemo/../../Common/Minimal/recmutex.c RTOSDemo/../../Common/Minimal/semtest.c RTOSDemo/../../../Source/tasks.c RTOSDemo/../../../Source/list.c RTOSDemo/../../../Source/queue.c RTOSDemo/../../../Source/portable/GCC/PPC405_Xilinx/port.c RTOSDemo/main.c RTOSDemo/serial/serial.c RTOSDemo/partest/partest.c RTOSDemo/../../../Source/portable/GCC/PPC405_Xilinx/portasm.S RTOSDemo/../../../Source/portable/MemMang/heap_2.c \r
+RTOSDEMO_SOURCES = RTOSDemo/../../Common/Minimal/BlockQ.c RTOSDemo/../../Common/Minimal/blocktim.c RTOSDemo/../../Common/Minimal/comtest.c RTOSDemo/../../Common/Minimal/countsem.c RTOSDemo/../../Common/Minimal/death.c RTOSDemo/../../Common/Minimal/dynamic.c RTOSDemo/../../Common/Minimal/flash.c RTOSDemo/../../Common/Minimal/GenQTest.c RTOSDemo/../../Common/Minimal/integer.c RTOSDemo/../../Common/Minimal/QPeek.c RTOSDemo/../../Common/Minimal/recmutex.c RTOSDemo/../../Common/Minimal/semtest.c RTOSDemo/../../../Source/tasks.c RTOSDemo/../../../Source/list.c RTOSDemo/../../../Source/queue.c RTOSDemo/../../../Source/portable/GCC/PPC405_Xilinx/port.c RTOSDemo/main.c RTOSDemo/serial/serial.c RTOSDemo/partest/partest.c RTOSDemo/../../../Source/portable/GCC/PPC405_Xilinx/portasm.S RTOSDemo/../../../Source/portable/MemMang/heap_2.c \r
RTOSDEMO_HEADERS = RTOSDemo/FreeRTOSConfig.h \r
RTOSDEMO_CC = powerpc-eabi-gcc\r
RTOSDEMO_CC_SIZE = powerpc-eabi-size\r
Source: RTOSDemo/../../Common/Minimal/death.c\r
Source: RTOSDemo/../../Common/Minimal/dynamic.c\r
Source: RTOSDemo/../../Common/Minimal/flash.c\r
-Source: RTOSDemo/../../Common/Minimal/flop.c\r
Source: RTOSDemo/../../Common/Minimal/GenQTest.c\r
Source: RTOSDemo/../../Common/Minimal/integer.c\r
Source: RTOSDemo/../../Common/Minimal/QPeek.c\r
# SOFTWARE APPLICATION RTOSDEMO\r
#################################################################\r
\r
-RTOSDEMO_SOURCES = RTOSDemo/../../Common/Minimal/BlockQ.c RTOSDemo/../../Common/Minimal/blocktim.c RTOSDemo/../../Common/Minimal/comtest.c RTOSDemo/../../Common/Minimal/countsem.c RTOSDemo/../../Common/Minimal/death.c RTOSDemo/../../Common/Minimal/dynamic.c RTOSDemo/../../Common/Minimal/flash.c RTOSDemo/../../Common/Minimal/flop.c RTOSDemo/../../Common/Minimal/GenQTest.c RTOSDemo/../../Common/Minimal/integer.c RTOSDemo/../../Common/Minimal/QPeek.c RTOSDemo/../../Common/Minimal/recmutex.c RTOSDemo/../../Common/Minimal/semtest.c RTOSDemo/../../../Source/tasks.c RTOSDemo/../../../Source/list.c RTOSDemo/../../../Source/queue.c RTOSDemo/../../../Source/portable/GCC/PPC405_Xilinx/port.c RTOSDemo/main.c RTOSDemo/serial/serial.c RTOSDemo/partest/partest.c RTOSDemo/../../../Source/portable/GCC/PPC405_Xilinx/portasm.S RTOSDemo/../../../Source/portable/MemMang/heap_2.c \r
+RTOSDEMO_SOURCES = RTOSDemo/../../Common/Minimal/BlockQ.c RTOSDemo/../../Common/Minimal/blocktim.c RTOSDemo/../../Common/Minimal/comtest.c RTOSDemo/../../Common/Minimal/countsem.c RTOSDemo/../../Common/Minimal/death.c RTOSDemo/../../Common/Minimal/dynamic.c RTOSDemo/../../Common/Minimal/flash.c RTOSDemo/../../Common/Minimal/GenQTest.c RTOSDemo/../../Common/Minimal/integer.c RTOSDemo/../../Common/Minimal/QPeek.c RTOSDemo/../../Common/Minimal/recmutex.c RTOSDemo/../../Common/Minimal/semtest.c RTOSDemo/../../../Source/tasks.c RTOSDemo/../../../Source/list.c RTOSDemo/../../../Source/queue.c RTOSDemo/../../../Source/portable/GCC/PPC405_Xilinx/port.c RTOSDemo/main.c RTOSDemo/serial/serial.c RTOSDemo/partest/partest.c RTOSDemo/../../../Source/portable/GCC/PPC405_Xilinx/portasm.S RTOSDemo/../../../Source/portable/MemMang/heap_2.c \r
\r
RTOSDEMO_HEADERS = RTOSDemo/FreeRTOSConfig.h \r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
-# FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+# FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
#\r
# This file is part of the FreeRTOS.org distribution.\r
#\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
-# FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+# FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
#\r
# This file is part of the FreeRTOS.org distribution.\r
#\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
-# FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+# FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
#\r
# This file is part of the FreeRTOS.org distribution.\r
#\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r
/*\r
- FreeRTOS.org V4.8.0 - Copyright (C) 2003-2008 Richard Barry.\r
+ FreeRTOS.org V5.0.0 - Copyright (C) 2003-2008 Richard Barry.\r
\r
This file is part of the FreeRTOS.org distribution.\r
\r