]> git.sur5r.net Git - freertos/blob
d055c34a382f388bed6679ff9d3521f4eb59ebef
[freertos] /
1 /***************************************************************************//**\r
2  * @file\r
3  * @brief Board support package API for GPIO leds on STK's.\r
4  * @version 4.0.0\r
5  *******************************************************************************\r
6  * @section License\r
7  * <b>(C) Copyright 2014 Silicon Labs, http://www.silabs.com</b>\r
8  *******************************************************************************\r
9  *\r
10  * This file is licensed under the Silabs License Agreement. See the file\r
11  * "Silabs_License_Agreement.txt" for details. Before using this software for\r
12  * any purpose, you must agree to the terms of that agreement.\r
13  *\r
14  ******************************************************************************/\r
15 \r
16 \r
17 \r
18 #include "em_device.h"\r
19 #include "em_cmu.h"\r
20 #include "em_gpio.h"\r
21 #include "bsp.h"\r
22 \r
23 #if defined( BSP_GPIO_LEDS )\r
24 /** @cond DO_NOT_INCLUDE_WITH_DOXYGEN */\r
25 \r
26 typedef struct\r
27 {\r
28   GPIO_Port_TypeDef   port;\r
29   unsigned int        pin;\r
30 } tLedArray;\r
31 \r
32 static const tLedArray ledArray[ BSP_NO_OF_LEDS ] = BSP_GPIO_LEDARRAY_INIT;\r
33 \r
34 int BSP_LedsInit(void)\r
35 {\r
36   int i;\r
37 \r
38   CMU_ClockEnable(cmuClock_HFPER, true);\r
39   CMU_ClockEnable(cmuClock_GPIO, true);\r
40   for ( i=0; i<BSP_NO_OF_LEDS; i++ )\r
41   {\r
42     GPIO_PinModeSet(ledArray[i].port, ledArray[i].pin, gpioModePushPull, 0);\r
43   }\r
44   return BSP_STATUS_OK;\r
45 }\r
46 \r
47 uint32_t BSP_LedsGet(void)\r
48 {\r
49   int i;\r
50   uint32_t retVal, mask;\r
51 \r
52   for ( i=0, retVal=0, mask=0x1; i<BSP_NO_OF_LEDS; i++, mask <<= 1 )\r
53   {\r
54     if (GPIO_PinOutGet(ledArray[i].port, ledArray[i].pin))\r
55       retVal |= mask;\r
56   }\r
57   return retVal;\r
58 }\r
59 \r
60 int BSP_LedsSet(uint32_t leds)\r
61 {\r
62   int i;\r
63   uint32_t mask;\r
64 \r
65   for ( i=0, mask=0x1; i<BSP_NO_OF_LEDS; i++, mask <<= 1 )\r
66   {\r
67     if ( leds & mask )\r
68       GPIO_PinOutSet(ledArray[i].port, ledArray[i].pin);\r
69     else\r
70       GPIO_PinOutClear(ledArray[i].port, ledArray[i].pin);\r
71   }\r
72   return BSP_STATUS_OK;\r
73 }\r
74 \r
75 int BSP_LedClear(int ledNo)\r
76 {\r
77   if ((ledNo >= 0) && (ledNo < BSP_NO_OF_LEDS))\r
78   {\r
79     GPIO_PinOutClear(ledArray[ledNo].port, ledArray[ledNo].pin);\r
80     return BSP_STATUS_OK;\r
81   }\r
82   return BSP_STATUS_ILLEGAL_PARAM;\r
83 }\r
84 \r
85 int BSP_LedGet(int ledNo)\r
86 {\r
87   int retVal = BSP_STATUS_ILLEGAL_PARAM;\r
88 \r
89   if ((ledNo >= 0) && (ledNo < BSP_NO_OF_LEDS))\r
90   {\r
91     retVal = (int)GPIO_PinOutGet(ledArray[ledNo].port, ledArray[ledNo].pin);\r
92   }\r
93   return retVal;\r
94 }\r
95 \r
96 int BSP_LedSet(int ledNo)\r
97 {\r
98   if ((ledNo >= 0) && (ledNo < BSP_NO_OF_LEDS))\r
99   {\r
100     GPIO_PinOutSet(ledArray[ledNo].port, ledArray[ledNo].pin);\r
101     return BSP_STATUS_OK;\r
102   }\r
103   return BSP_STATUS_ILLEGAL_PARAM;\r
104 }\r
105 \r
106 int BSP_LedToggle(int ledNo)\r
107 {\r
108   if ((ledNo >= 0) && (ledNo < BSP_NO_OF_LEDS))\r
109   {\r
110     GPIO_PinOutToggle(ledArray[ledNo].port, ledArray[ledNo].pin);\r
111     return BSP_STATUS_OK;\r
112   }\r
113   return BSP_STATUS_ILLEGAL_PARAM;\r
114 }\r
115 \r
116 /** @endcond */\r
117 #endif  /* BSP_GPIO_LEDS */\r