]> git.sur5r.net Git - freertos/blob - Demo/Cygnal/ParTest/ParTest.c
Ready for V5.2.0 release.
[freertos] / Demo / Cygnal / ParTest / ParTest.c
1 /*\r
2         FreeRTOS.org V5.2.0 - Copyright (C) 2003-2009 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 it \r
7         under the terms of the GNU General Public License (version 2) as published\r
8         by the Free Software Foundation and modified by the FreeRTOS exception.\r
9 \r
10         FreeRTOS.org is distributed in the hope that it will be useful, but WITHOUT\r
11         ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or \r
12         FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for \r
13         more details.\r
14 \r
15         You should have received a copy of the GNU General Public License along \r
16         with FreeRTOS.org; if not, write to the Free Software Foundation, Inc., 59 \r
17         Temple Place, Suite 330, Boston, MA  02111-1307  USA.\r
18 \r
19         A special exception to the GPL is included to allow you to distribute a \r
20         combined work that includes FreeRTOS.org without being obliged to provide\r
21         the source code for any proprietary components.  See the licensing section\r
22         of http://www.FreeRTOS.org for full details.\r
23 \r
24 \r
25         ***************************************************************************\r
26         *                                                                         *\r
27         * Get the FreeRTOS eBook!  See http://www.FreeRTOS.org/Documentation      *\r
28         *                                                                         *\r
29         * This is a concise, step by step, 'hands on' guide that describes both   *\r
30         * general multitasking concepts and FreeRTOS specifics. It presents and   *\r
31         * explains numerous examples that are written using the FreeRTOS API.     *\r
32         * Full source code for all the examples is provided in an accompanying    *\r
33         * .zip file.                                                              *\r
34         *                                                                         *\r
35         ***************************************************************************\r
36 \r
37         1 tab == 4 spaces!\r
38 \r
39         Please ensure to read the configuration and relevant port sections of the\r
40         online documentation.\r
41 \r
42         http://www.FreeRTOS.org - Documentation, latest information, license and\r
43         contact details.\r
44 \r
45         http://www.SafeRTOS.com - A version that is certified for use in safety\r
46         critical systems.\r
47 \r
48         http://www.OpenRTOS.com - Commercial support, development, porting,\r
49         licensing and training services.\r
50 */\r
51 #include <c8051f120.h>\r
52 \r
53 #include "FreeRTOS.h"\r
54 #include "task.h"\r
55 #include "partest.h"\r
56 \r
57 #define partstPUSH_PULL                 ( ( unsigned portCHAR ) 0xff )\r
58 #define partstALL_OUTPUTS_OFF   ( ( unsigned portCHAR ) 0xff )\r
59 \r
60 /* LED to output is dependent on how the LED's are wired. */\r
61 #define partstOUTPUT_0                  ( ( unsigned portCHAR ) 0x02 )\r
62 #define partstOUTPUT_1                  ( ( unsigned portCHAR ) 0x08 )\r
63 #define partstOUTPUT_2                  ( ( unsigned portCHAR ) 0x20 )\r
64 #define partstOUTPUT_3                  ( ( unsigned portCHAR ) 0x01 )\r
65 #define partstOUTPUT_4                  ( ( unsigned portCHAR ) 0x04 )\r
66 #define partstOUTPUT_5                  ( ( unsigned portCHAR ) 0x10 )\r
67 #define partstOUTPUT_6                  ( ( unsigned portCHAR ) 0x40 )\r
68 #define partstOUTPUT_7                  ( ( unsigned portCHAR ) 0x80 )\r
69 \r
70 /*-----------------------------------------------------------\r
71  * Simple parallel port IO routines.\r
72  *-----------------------------------------------------------*/\r
73 \r
74 void vParTestInitialise( void )\r
75 {\r
76 unsigned portCHAR ucOriginalSFRPage;\r
77 \r
78         /* Remember the SFR page before it is changed so it can get set back\r
79         before the function exits. */\r
80         ucOriginalSFRPage = SFRPAGE;\r
81 \r
82         /* Setup the SFR page to access the config SFR's. */\r
83         SFRPAGE = CONFIG_PAGE;\r
84 \r
85         /* Set the on board LED to push pull. */\r
86         P3MDOUT |= partstPUSH_PULL;\r
87 \r
88         /* Return the SFR page. */\r
89         SFRPAGE = ucOriginalSFRPage;\r
90 \r
91         P3 = partstALL_OUTPUTS_OFF;\r
92 }\r
93 /*-----------------------------------------------------------*/\r
94 \r
95 void vParTestSetLED( unsigned portBASE_TYPE uxLED, portBASE_TYPE xValue )\r
96 {\r
97 portBASE_TYPE xError = pdFALSE;\r
98 \r
99         vTaskSuspendAll();\r
100         {\r
101                 if( xValue == pdFALSE )\r
102                 {\r
103                         switch( uxLED )\r
104                         {\r
105                                 case 0  :       P3 |= partstOUTPUT_0;\r
106                                                         break;\r
107                                 case 1  :       P3 |= partstOUTPUT_1;\r
108                                                         break;\r
109                                 case 2  :       P3 |= partstOUTPUT_2;\r
110                                                         break;\r
111                                 case 3  :       P3 |= partstOUTPUT_3;\r
112                                                         break;\r
113                                 case 4  :       P3 |= partstOUTPUT_4;\r
114                                                         break;\r
115                                 case 5  :       P3 |= partstOUTPUT_5;\r
116                                                         break;\r
117                                 case 6  :       P3 |= partstOUTPUT_6;\r
118                                                         break;\r
119                                 case 7  :       P3 |= partstOUTPUT_7;\r
120                                                         break;\r
121                                 default :       /* There are no other LED's wired in. */\r
122                                                         xError = pdTRUE;\r
123                                                         break;\r
124                         }\r
125                 }\r
126                 else\r
127                 {\r
128                         switch( uxLED )\r
129                         {\r
130                                 case 0  :       P3 &= ~partstOUTPUT_0;\r
131                                                         break;\r
132                                 case 1  :       P3 &= ~partstOUTPUT_1;\r
133                                                         break;\r
134                                 case 2  :       P3 &= ~partstOUTPUT_2;\r
135                                                         break;\r
136                                 case 3  :       P3 &= ~partstOUTPUT_3;\r
137                                                         break;\r
138                                 case 4  :       P3 &= ~partstOUTPUT_4;\r
139                                                         break;\r
140                                 case 5  :       P3 &= ~partstOUTPUT_5;\r
141                                                         break;\r
142                                 case 6  :       P3 &= ~partstOUTPUT_6;\r
143                                                         break;\r
144                                 case 7  :       P3 &= ~partstOUTPUT_7;\r
145                                                         break;\r
146                                 default :       /* There are no other LED's wired in. */\r
147                                                         break;\r
148                         }\r
149                 }\r
150         }\r
151         xTaskResumeAll();\r
152 }\r
153 /*-----------------------------------------------------------*/\r
154 \r
155 void vParTestToggleLED( unsigned portBASE_TYPE uxLED )\r
156 {\r
157 unsigned portCHAR ucBit;\r
158 portBASE_TYPE xError = pdFALSE;\r
159 \r
160         vTaskSuspendAll();\r
161         {\r
162                 switch( uxLED )\r
163                 {\r
164                         case 0  :       ucBit = partstOUTPUT_0;\r
165                                                 break;\r
166                         case 1  :       ucBit = partstOUTPUT_1;\r
167                                                 break;\r
168                         case 2  :       ucBit = partstOUTPUT_2;\r
169                                                 break;\r
170                         case 3  :       ucBit = partstOUTPUT_3;\r
171                                                 break;\r
172                         case 4  :       ucBit = partstOUTPUT_4;\r
173                                                 break;\r
174                         case 5  :       ucBit = partstOUTPUT_5;\r
175                                                 break;\r
176                         case 6  :       ucBit = partstOUTPUT_6;\r
177                                                 break;\r
178                         case 7  :       ucBit = partstOUTPUT_7;\r
179                                                 break;\r
180                         default :       /* There are no other LED's wired in. */\r
181                                                 xError = pdTRUE;\r
182                                                 break;\r
183                 }\r
184 \r
185                 if( xError != pdTRUE )\r
186                 {\r
187                         if( P3 & ucBit )\r
188                         {\r
189                                 P3 &= ~ucBit;\r
190                         }\r
191                         else\r
192                         {\r
193                                 P3 |= ucBit;\r
194                         }\r
195                 }\r
196         }\r
197         xTaskResumeAll();\r
198 }\r
199 \r
200 \r