]> git.sur5r.net Git - freertos/blob - FreeRTOS/Demo/MicroBlaze_Kintex7_EthernetLite/RTOSDemo/src/LEDs.c
fc09feb8a4fe4977baed320837752d5712cb2b5f
[freertos] / FreeRTOS / Demo / MicroBlaze_Kintex7_EthernetLite / RTOSDemo / src / LEDs.c
1 /*\r
2  * FreeRTOS Kernel V10.0.0\r
3  * Copyright (C) 2017 Amazon.com, Inc. or its affiliates.  All Rights Reserved.\r
4  *\r
5  * Permission is hereby granted, free of charge, to any person obtaining a copy of\r
6  * this software and associated documentation files (the "Software"), to deal in\r
7  * the Software without restriction, including without limitation the rights to\r
8  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\r
9  * the Software, and to permit persons to whom the Software is furnished to do so,\r
10  * subject to the following conditions:\r
11  *\r
12  * The above copyright notice and this permission notice shall be included in all\r
13  * copies or substantial portions of the Software. If you wish to use our Amazon\r
14  * FreeRTOS name, please do so in a fair use way that does not cause confusion.\r
15  *\r
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\r
18  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\r
19  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
20  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
21  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
22  *\r
23  * http://www.FreeRTOS.org\r
24  * http://aws.amazon.com/freertos\r
25  *\r
26  * 1 tab == 4 spaces!\r
27  */\r
28 \r
29 \r
30 /*-----------------------------------------------------------\r
31  * Simple IO routines to control the LEDs.\r
32  *-----------------------------------------------------------*/\r
33 \r
34 /* Scheduler includes. */\r
35 #include "FreeRTOS.h"\r
36 #include "task.h"\r
37 \r
38 /* Demo includes. */\r
39 #include "partest.h"\r
40 \r
41 /* Xilinx includes. */\r
42 #include "xgpio.h"\r
43 \r
44 \r
45 #define partstNUM_LEDS  8\r
46 \r
47 /*-----------------------------------------------------------*/\r
48 \r
49 /* The GPIO instance to which the LEDs are connected. */\r
50 static XGpio xOutputGPIOInstance;\r
51 \r
52 /* Maintains the current LED output state. */\r
53 static volatile UBaseType_t uxGPIOState = 0U;\r
54 \r
55 /* Constant required by the Xilinx peripheral driver API functions that are\r
56 relevant to the particular hardware set up. */\r
57 static const unsigned long ulGPIOOutputChannel = 1UL;\r
58 \r
59 /*-----------------------------------------------------------*/\r
60 \r
61 void vParTestInitialise( void )\r
62 {\r
63 portBASE_TYPE xStatus;\r
64 const unsigned char ucSetToOutput = 0U;\r
65 \r
66         /* Initialize the GPIO for the LEDs. */\r
67         xStatus = XGpio_Initialize( &xOutputGPIOInstance, XPAR_AXI_GPIO_0_DEVICE_ID );\r
68         if( xStatus == XST_SUCCESS )\r
69         {\r
70                 /* All bits on this channel are going to be outputs (LEDs). */\r
71                 XGpio_SetDataDirection( &xOutputGPIOInstance, ulGPIOOutputChannel, ucSetToOutput );\r
72 \r
73                 /* Start with all LEDs off. */\r
74                 uxGPIOState = 0U;\r
75                 XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ( uint8_t ) uxGPIOState );\r
76         }\r
77 \r
78         configASSERT( ( xStatus == XST_SUCCESS ) );\r
79 }\r
80 /*-----------------------------------------------------------*/\r
81 \r
82 void vParTestSetLED( UBaseType_t uxLED, BaseType_t xValue )\r
83 {\r
84         if( uxLED < partstNUM_LEDS )\r
85         {\r
86                 taskENTER_CRITICAL();\r
87                 {\r
88                         if( xValue != pdFALSE )\r
89                         {\r
90                                 uxGPIOState |= ( 1UL << uxLED );\r
91                         }\r
92                         else\r
93                         {\r
94                                 uxGPIOState &= ~( 1UL << uxLED );\r
95                         }\r
96 \r
97                         XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ( uint8_t ) uxGPIOState );\r
98                 }\r
99                 taskEXIT_CRITICAL();\r
100         }\r
101 }\r
102 /*-----------------------------------------------------------*/\r
103 \r
104 void vParTestToggleLED( unsigned portBASE_TYPE uxLED )\r
105 {\r
106         if( uxLED < partstNUM_LEDS )\r
107         {\r
108                 taskENTER_CRITICAL();\r
109                 {\r
110                         uxGPIOState ^= ( 1UL << uxLED );\r
111                         XGpio_DiscreteWrite( &xOutputGPIOInstance, ulGPIOOutputChannel, ( uint8_t ) uxGPIOState );\r
112                 }\r
113                 taskEXIT_CRITICAL();\r
114         }\r
115 }\r
116 \r