]> git.sur5r.net Git - freertos/blob - Demo/msp430_CrossWorks/ParTest/ParTest.c
git-svn-id: https://svn.code.sf.net/p/freertos/code/trunk@14 1d2547de-c912-0410-9cb9...
[freertos] / Demo / msp430_CrossWorks / ParTest / ParTest.c
1 /*\r
2         FreeRTOS.org V4.0.3 - Copyright (C) 2003-2006 Richard Barry.\r
3 \r
4         This file is part of the FreeRTOS.org distribution.\r
5 \r
6         FreeRTOS.org is free software; you can redistribute it and/or modify\r
7         it under the terms of the GNU General Public License as published by\r
8         the Free Software Foundation; either version 2 of the License, or\r
9         (at your option) any later version.\r
10 \r
11         FreeRTOS.org is distributed in the hope that it will be useful,\r
12         but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13         MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14         GNU General Public License for more details.\r
15 \r
16         You should have received a copy of the GNU General Public License\r
17         along with FreeRTOS.org; if not, write to the Free Software\r
18         Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\r
19 \r
20         A special exception to the GPL can be applied should you wish to distribute\r
21         a combined work that includes FreeRTOS.org, without being obliged to provide\r
22         the source code for any proprietary components.  See the licensing section \r
23         of http://www.FreeRTOS.org for full details of how and when the exception\r
24         can be applied.\r
25 \r
26         ***************************************************************************\r
27         See http://www.FreeRTOS.org for documentation, latest information, license \r
28         and contact details.  Please ensure to read the configuration and relevant \r
29         port sections of the online documentation.\r
30         ***************************************************************************\r
31 */\r
32 \r
33 /*-----------------------------------------------------------\r
34  * Characters on the LCD are used to simulate LED's.  In this case the 'ParTest'\r
35  * is really operating on the LCD display.\r
36  *-----------------------------------------------------------*/\r
37 \r
38 /*\r
39  * This demo is configured to execute on the ES449 prototyping board from\r
40  * SoftBaugh. The ES449 has a built in LCD display and a single built in user\r
41  * LED.  Therefore, in place of flashing an LED, the 'flash' and 'check' tasks\r
42  * toggle '*' characters on the LCD.  The left most '*' represents LED 0, the\r
43  * next LED 1, etc.\r
44  *\r
45  * There is a single genuine on board LED referenced as LED 10.\r
46  */\r
47 \r
48 \r
49 /* Scheduler includes. */\r
50 #include "FreeRTOS.h"\r
51 #include "task.h"\r
52 \r
53 /* Demo application includes. */\r
54 #include "partest.h"\r
55 \r
56 /* Constants required to setup the LCD. */\r
57 #define LCD_DIV_64 5\r
58 \r
59 /* Constants required to access the "LED's".  The LED segments are turned on\r
60 and off to generate '*' characters. */\r
61 #define partstNUM_LEDS                  ( ( unsigned portCHAR ) 6 )\r
62 #define partstSEGMENTS_ON               ( ( unsigned portCHAR ) 0x0f )\r
63 #define partstSEGMENTS_OFF              ( ( unsigned portCHAR ) 0x00 )\r
64 \r
65 /* The LED number of the real on board LED, rather than a simulated LED. */\r
66 #define partstON_BOARD_LED              ( ( unsigned portBASE_TYPE ) 10 )\r
67 #define mainON_BOARD_LED_BIT    ( ( unsigned portCHAR ) 0x01 )\r
68 \r
69 /* The LCD segments used to generate the '*' characters for LED's 0 to 5. */\r
70 unsigned portCHAR * const ucRHSSegments[ partstNUM_LEDS ] = {   ( unsigned portCHAR * )0xa4, \r
71                                                                                                                                 ( unsigned portCHAR * )0xa2, \r
72                                                                                                                                 ( unsigned portCHAR * )0xa0, \r
73                                                                                                                                 ( unsigned portCHAR * )0x9e,\r
74                                                                                                                                 ( unsigned portCHAR * )0x9c,\r
75                                                                                                                                 ( unsigned portCHAR * )0x9a };\r
76 \r
77 unsigned portCHAR * const ucLHSSegments[ partstNUM_LEDS ] = {   ( unsigned portCHAR * )0xa3, \r
78                                                                                                                                 ( unsigned portCHAR * )0xa1, \r
79                                                                                                                                 ( unsigned portCHAR * )0x9f, \r
80                                                                                                                                 ( unsigned portCHAR * )0x9d,\r
81                                                                                                                                 ( unsigned portCHAR * )0x9b,\r
82                                                                                                                                 ( unsigned portCHAR * )0x99 };\r
83 \r
84 /*\r
85  * Toggle the single genuine built in LED.\r
86  */\r
87 static void prvToggleOnBoardLED( void );\r
88 \r
89 /*-----------------------------------------------------------*/\r
90 \r
91 void vParTestInitialise( void )\r
92 {\r
93         /* Initialise the LCD hardware. */\r
94 \r
95         /* Used for the onboard LED. */\r
96         P1DIR = 0x01;\r
97 \r
98         // Setup Basic Timer for LCD operation\r
99         BTCTL = (LCD_DIV_64+0x23);\r
100 \r
101         // Setup port functions\r
102         P1SEL = 0x32;\r
103         P2SEL = 0x00;\r
104         P3SEL = 0x00;\r
105         P4SEL = 0xFC;\r
106         P5SEL = 0xFF;\r
107         \r
108         /* Initialise all segments to off. */\r
109         LCDM1 = partstSEGMENTS_OFF;     \r
110         LCDM2 = partstSEGMENTS_OFF;     \r
111         LCDM3 = partstSEGMENTS_OFF;     \r
112         LCDM4 = partstSEGMENTS_OFF;     \r
113         LCDM5 = partstSEGMENTS_OFF;     \r
114         LCDM6 = partstSEGMENTS_OFF;     \r
115         LCDM7 = partstSEGMENTS_OFF;     \r
116         LCDM8 = partstSEGMENTS_OFF;     \r
117         LCDM9 = partstSEGMENTS_OFF;     \r
118         LCDM10 = partstSEGMENTS_OFF;    \r
119         LCDM11 = partstSEGMENTS_OFF;    \r
120         LCDM12 = partstSEGMENTS_OFF;    \r
121         LCDM13 = partstSEGMENTS_OFF;    \r
122         LCDM14 = partstSEGMENTS_OFF;    \r
123         LCDM15 = partstSEGMENTS_OFF;    \r
124         LCDM16 = partstSEGMENTS_OFF;    \r
125         LCDM17 = partstSEGMENTS_OFF;    \r
126         LCDM18 = partstSEGMENTS_OFF;    \r
127         LCDM19 = partstSEGMENTS_OFF;    \r
128         LCDM20 = partstSEGMENTS_OFF;    \r
129 \r
130         /* Setup LCD control. */\r
131         LCDCTL = (LCDSG0_7|LCD4MUX|LCDON);\r
132 }\r
133 /*-----------------------------------------------------------*/\r
134 \r
135 void vParTestSetLED( unsigned portBASE_TYPE uxLED, signed portBASE_TYPE xValue )\r
136 {\r
137         /* Set or clear the output [in this case show or hide the '*' character. */\r
138         if( uxLED < ( portBASE_TYPE ) partstNUM_LEDS )\r
139         {\r
140                 vTaskSuspendAll();\r
141                 {\r
142                         if( xValue )\r
143                         {\r
144                                 /* Turn on the segments required to show the '*'. */\r
145                                 *( ucRHSSegments[ uxLED ] ) = partstSEGMENTS_ON;\r
146                                 *( ucLHSSegments[ uxLED ] ) = partstSEGMENTS_ON;\r
147                         }\r
148                         else\r
149                         {\r
150                                 /* Turn off all the segments. */\r
151                                 *( ucRHSSegments[ uxLED ] ) = partstSEGMENTS_OFF;\r
152                                 *( ucLHSSegments[ uxLED ] ) = partstSEGMENTS_OFF;\r
153                         }\r
154                 }\r
155                 xTaskResumeAll();\r
156         }\r
157 }\r
158 /*-----------------------------------------------------------*/\r
159 \r
160 void vParTestToggleLED( unsigned portBASE_TYPE uxLED )\r
161 {\r
162         if( uxLED < ( portBASE_TYPE ) partstNUM_LEDS )\r
163         {\r
164                 vTaskSuspendAll();\r
165                 {\r
166                         /* If the '*' is already showing - hide it.  If it is not already\r
167                         showing then show it. */\r
168                         if( *( ucRHSSegments[ uxLED ] ) )\r
169                         {\r
170                                 *( ucRHSSegments[ uxLED ] ) = partstSEGMENTS_OFF;\r
171                                 *( ucLHSSegments[ uxLED ] ) = partstSEGMENTS_OFF;\r
172                         }\r
173                         else\r
174                         {\r
175                                 *( ucRHSSegments[ uxLED ] ) = partstSEGMENTS_ON;\r
176                                 *( ucLHSSegments[ uxLED ] ) = partstSEGMENTS_ON;\r
177                         }\r
178                 }\r
179                 xTaskResumeAll();\r
180         }\r
181         else\r
182         {\r
183                 if( uxLED == partstON_BOARD_LED )\r
184                 {\r
185                         /* The request related to the genuine on board LED. */\r
186                         prvToggleOnBoardLED();\r
187                 }\r
188         }       \r
189 }\r
190 /*-----------------------------------------------------------*/\r
191 \r
192 static void prvToggleOnBoardLED( void )\r
193 {\r
194 static unsigned portSHORT sState = pdFALSE;\r
195 \r
196         /* Toggle the state of the single genuine on board LED. */\r
197         if( sState )    \r
198         {\r
199                 P1OUT |= mainON_BOARD_LED_BIT;\r
200         }\r
201         else\r
202         {\r
203                 P1OUT &= ~mainON_BOARD_LED_BIT;\r
204         }\r
205 \r
206         sState = !sState;\r
207 }\r
208 /*-----------------------------------------------------------*/\r
209 \r
210 \r