]> git.sur5r.net Git - freertos/blob - Demo/ARM7_STR75x_IAR/STLibrary/src/75x_gpio.c
Start to re-arrange files to include FreeRTOS+ in main download.
[freertos] / Demo / ARM7_STR75x_IAR / STLibrary / src / 75x_gpio.c
1 /******************** (C) COPYRIGHT 2006 STMicroelectronics ********************\r
2 * File Name          : 75x_gpio.c\r
3 * Author             : MCD Application Team\r
4 * Date First Issued  : 03/10/2006\r
5 * Description        : This file provides all the GPIO software functions.\r
6 ********************************************************************************\r
7 * History:\r
8 * 07/17/2006 : V1.0\r
9 * 03/10/2006 : V0.1\r
10 ********************************************************************************\r
11 * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS\r
12 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.\r
13 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,\r
14 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE\r
15 * CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING\r
16 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.\r
17 *******************************************************************************/\r
18 \r
19 /* Includes ------------------------------------------------------------------*/\r
20 #include "75x_gpio.h"\r
21 #include "75x_mrcc.h"\r
22 \r
23 /* Private typedef -----------------------------------------------------------*/\r
24 /* Private define ------------------------------------------------------------*/\r
25 #define GPIO_Remap_Mask    0x1F       /* GPIO remapping mask */\r
26 #define GPIO_Pin_Mask      0x000FFFFF /* GPIO1 and GPIO2 all pins mask */\r
27 \r
28 /* Private macro -------------------------------------------------------------*/\r
29 /* Private variables ---------------------------------------------------------*/\r
30 /* Private function prototypes -----------------------------------------------*/\r
31 /* Private functions ---------------------------------------------------------*/\r
32 \r
33 /*******************************************************************************\r
34 * Function Name  : GPIO_DeInit\r
35 * Description    : Deinitializes the GPIOx peripheral registers to their default\r
36 *                  reset values.\r
37 *                  The I/O remapping register 0 and 1 are not reset by this function.\r
38 * Input          : GPIOx: where x can be 0,1 or 2 to select the GPIO peripheral.\r
39 * Output         : None\r
40 * Return         : None\r
41 *******************************************************************************/\r
42 void GPIO_DeInit(GPIO_TypeDef* GPIOx)\r
43 {\r
44   /* Reset the GPIOx registers values */\r
45   GPIOx->PC0 = 0xFFFFFFFF;\r
46   GPIOx->PC1 = 0x0;\r
47   GPIOx->PC2 = 0x0;\r
48   GPIOx->PM = 0x0;\r
49 }\r
50 \r
51 /*******************************************************************************\r
52 * Function Name  : GPIO_Init\r
53 * Description    : Initializes the GPIOx peripheral according to the specified\r
54 *                  parameters in the GPIO_InitStruct. This function will not\r
55 *                  change the configuration for a pin if the corresponding mask\r
56 *                  bit is set, except pins configured as input pull-up or pull-down.\r
57 *                  These pins are automatically masked after each configuration.\r
58 * Input          :- GPIOx: where x can be (0..2) to select the GPIO peripheral.\r
59 *                 - GPIO_InitStruct: pointer to a GPIO_InitTypeDef structure that\r
60 *                   contains the configuration information for the specified GPIO\r
61 *                   peripheral.\r
62 * Output         : None\r
63 * Return         : None\r
64 *******************************************************************************/\r
65 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)\r
66 {\r
67   /* GPIOx Mode and Pins Set */\r
68   if((GPIOx != GPIO0) && (GPIO_InitStruct->GPIO_Pin == GPIO_Pin_All))\r
69   {\r
70     GPIO_InitStruct->GPIO_Pin = GPIO_Pin_Mask;\r
71   }\r
72 \r
73   switch(GPIO_InitStruct->GPIO_Mode)\r
74   {\r
75     case GPIO_Mode_AIN:\r
76       GPIOx->PC0 &= ~GPIO_InitStruct->GPIO_Pin;\r
77       GPIOx->PC1 &= ~GPIO_InitStruct->GPIO_Pin;\r
78       GPIOx->PC2 &= ~GPIO_InitStruct->GPIO_Pin;\r
79       break;\r
80 \r
81     case GPIO_Mode_IN_FLOATING:\r
82       GPIOx->PC0 |=  GPIO_InitStruct->GPIO_Pin;\r
83       GPIOx->PC1 &= ~GPIO_InitStruct->GPIO_Pin;\r
84       GPIOx->PC2 &= ~GPIO_InitStruct->GPIO_Pin;\r
85       break;\r
86 \r
87     case GPIO_Mode_IPD:\r
88       GPIOx->PM  &= ~GPIO_InitStruct->GPIO_Pin;\r
89       GPIOx->PC0 |=  GPIO_InitStruct->GPIO_Pin;\r
90       GPIOx->PC1 |=  GPIO_InitStruct->GPIO_Pin;\r
91       GPIOx->PC2 &= ~GPIO_InitStruct->GPIO_Pin;\r
92       GPIOx->PD  &= ~GPIO_InitStruct->GPIO_Pin;\r
93       GPIOx->PM  |=  GPIO_InitStruct->GPIO_Pin;\r
94       break;\r
95 \r
96     case GPIO_Mode_IPU:\r
97       GPIOx->PM  &= ~GPIO_InitStruct->GPIO_Pin;\r
98       GPIOx->PC0 |=  GPIO_InitStruct->GPIO_Pin;\r
99       GPIOx->PC1 |=  GPIO_InitStruct->GPIO_Pin;\r
100       GPIOx->PC2 &= ~GPIO_InitStruct->GPIO_Pin;\r
101       GPIOx->PD  |=  GPIO_InitStruct->GPIO_Pin;\r
102       GPIOx->PM  |=  GPIO_InitStruct->GPIO_Pin;\r
103       break;\r
104 \r
105     case GPIO_Mode_Out_OD:\r
106       GPIOx->PC0 &= ~GPIO_InitStruct->GPIO_Pin;\r
107       GPIOx->PC1 &= ~GPIO_InitStruct->GPIO_Pin;\r
108       GPIOx->PC2 |=  GPIO_InitStruct->GPIO_Pin;\r
109       break;\r
110 \r
111     case GPIO_Mode_Out_PP:\r
112       GPIOx->PC0 |=  GPIO_InitStruct->GPIO_Pin;\r
113       GPIOx->PC1 &= ~GPIO_InitStruct->GPIO_Pin;\r
114       GPIOx->PC2 |=  GPIO_InitStruct->GPIO_Pin;\r
115       break;\r
116 \r
117     case GPIO_Mode_AF_OD:\r
118       GPIOx->PD  |=  GPIO_InitStruct->GPIO_Pin;          \r
119       GPIOx->PC1 |=  GPIO_InitStruct->GPIO_Pin;\r
120       GPIOx->PC0 &= ~GPIO_InitStruct->GPIO_Pin;\r
121       GPIOx->PC2 |=  GPIO_InitStruct->GPIO_Pin;\r
122       break;\r
123 \r
124     case GPIO_Mode_AF_PP:\r
125       GPIOx->PC0 |=  GPIO_InitStruct->GPIO_Pin;\r
126       GPIOx->PC1 |=  GPIO_InitStruct->GPIO_Pin;\r
127       GPIOx->PC2 |=  GPIO_InitStruct->GPIO_Pin;\r
128       break;\r
129 \r
130     default :\r
131       GPIOx->PC0 |=  GPIO_InitStruct->GPIO_Pin;\r
132       GPIOx->PC1 &= ~GPIO_InitStruct->GPIO_Pin;\r
133       GPIOx->PC2 &= ~GPIO_InitStruct->GPIO_Pin;\r
134       break;\r
135   }\r
136 }\r
137 \r
138 /*******************************************************************************\r
139 * Function Name  : GPIO_StructInit\r
140 * Description    : Fills each GPIO_InitStruct member with its default value.\r
141 * Input          : GPIO_InitStruct : pointer to a GPIO_InitTypeDef structure\r
142 *                  which will be initialized.\r
143 * Output         : None\r
144 * Return         : None\r
145 *******************************************************************************/\r
146 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)\r
147 {\r
148   /* Reset GPIO init structure parameters values */\r
149   GPIO_InitStruct->GPIO_Pin  = GPIO_Pin_All;\r
150   GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN_FLOATING;\r
151 }\r
152 \r
153 /*******************************************************************************\r
154 * Function Name  : GPIO_Read\r
155 * Description    : Reads the specified GPIO data port.\r
156 * Input          : GPIOx: where x can be 0,1 or 2 to select the GPIO peripheral.\r
157 * Output         : None\r
158 * Return         : GPIO data port word value.\r
159 *******************************************************************************/\r
160 u32 GPIO_Read(GPIO_TypeDef* GPIOx)\r
161 {\r
162   return GPIOx->PD;\r
163 }\r
164 \r
165 /*******************************************************************************\r
166 * Function Name  : GPIO_ReadBit\r
167 * Description    : Reads the specified data port bit.\r
168 * Input          : - GPIOx: where x can be (0..2) to select the GPIO peripheral.\r
169 *                : - GPIO_Pin:  specifies the port bit to read.\r
170 *                    This parameter can be GPIO_Pin_x where x can be (0..31) for\r
171 *                    GPIO0 and x(0..19) for GPIO1 and GPIO2.\r
172 * Output         : None\r
173 * Return         : The port pin value\r
174 *******************************************************************************/\r
175 u8 GPIO_ReadBit(GPIO_TypeDef* GPIOx, u32 GPIO_Pin)\r
176 {\r
177   if ((GPIOx->PD & GPIO_Pin) != Bit_RESET)\r
178   {\r
179     return Bit_SET;\r
180   }\r
181   else\r
182   {\r
183     return Bit_RESET;\r
184   }\r
185 }\r
186 \r
187 /*******************************************************************************\r
188 * Function Name  : GPIO_Write\r
189 * Description    : Writes data to the specified GPIO data port.\r
190 * Input          :- GPIOx: where x can be 0,1 or 2 to select the GPIO peripheral.\r
191 *                 - PortVal: specifies the value to be written to the data port\r
192 *                   register.\r
193 * Output         : None\r
194 * Return         : None\r
195 *******************************************************************************/\r
196 void GPIO_Write(GPIO_TypeDef* GPIOx, u32 PortVal)\r
197 {\r
198   GPIOx->PD = PortVal;\r
199 }\r
200 \r
201 /*******************************************************************************\r
202 * Function Name  : GPIO_WriteBit\r
203 * Description    : Sets or clears the selected data port bit.\r
204 * Input          : - GPIOx: where x can be (0..2) to select the GPIO peripheral.\r
205 *                  - GPIO_Pin: specifies the port bit to be written.\r
206 *                    This parameter can be GPIO_Pin_x where x can be (0..31) for\r
207 *                    GPIO0 and x(0..19) for GPIO1 and GPIO2.\r
208 *                  - BitVal: specifies the value to be written to the selected bit.\r
209 *                    This parameter must be one of the BitAction enum values:\r
210 *                       - Bit_RESET: to clear the port pin\r
211 *                       - Bit_SET: to set the port pin\r
212 * Output         : None\r
213 * Return         : None\r
214 *******************************************************************************/\r
215 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u32 GPIO_Pin, BitAction BitVal)\r
216 {\r
217   if(BitVal != Bit_RESET)\r
218   {\r
219     GPIOx->PD |= GPIO_Pin;\r
220   }\r
221   else\r
222   {\r
223     GPIOx->PD &= ~GPIO_Pin;\r
224   }\r
225 }\r
226 \r
227 /*******************************************************************************\r
228 * Function Name  : GPIO_PinMaskConfig\r
229 * Description    : Enables or disables write protection to the selected bits in\r
230 *                  the I/O port registers (PxC2, PxC1, PxC0 and PxD).\r
231 * Input          :- GPIOx: where x can be 0,1 or 2 to select the GPIO peripheral.\r
232 *                 - GPIO_Pin: specifies the port bit to be protected.\r
233 *                   This parameter can be GPIO_Pin_x where x can be (0..31) for\r
234 *                   GPIO0 and x(0..19) for GPIO1 and GPIO2.\r
235 *                 - NewState: new state of the port pin.\r
236 *                   This parameter can be: ENABLE or DISABLE.\r
237 * Output         : None\r
238 * Return         : None\r
239 *******************************************************************************/\r
240 void GPIO_PinMaskConfig(GPIO_TypeDef* GPIOx, u32 GPIO_Pin, FunctionalState NewState)\r
241 {\r
242   if(NewState == ENABLE)\r
243   {\r
244     GPIOx->PM |= GPIO_Pin;\r
245   }\r
246   else\r
247   {\r
248     GPIOx->PM &= ~GPIO_Pin;\r
249   }\r
250 }\r
251 \r
252 /*******************************************************************************\r
253 * Function Name  : GPIO_GetPortMask\r
254 * Description    : Gets the GPIOx port mask value.\r
255 * Input          : GPIOx: where x can be 0,1 or 2 to select the GPIO peripheral.\r
256 * Output         : None\r
257 * Return         : GPIO port mask value.\r
258 *******************************************************************************/\r
259 u32 GPIO_GetPortMask(GPIO_TypeDef* GPIOx)\r
260 {\r
261   return GPIOx->PM;\r
262 }\r
263 \r
264 /*******************************************************************************\r
265 * Function Name  : GPIO_PinRemapConfig\r
266 * Description    : Changes the mapping of the specified pin.\r
267 * Input          :- GPIO_Remap: selects the pin to remap.\r
268 *                   This parameter can be one of the following values:\r
269 *                     - GPIO_Remap_SMI_CS3_EN: Enable SMI CS3 \r
270 *                     - GPIO_Remap_SMI_CS2_EN: Enable SMI CS2\r
271 *                     - GPIO_Remap_SMI_CS1_EN: Enable SMI CS1\r
272 *                     - GPIO_Remap_SMI_EN: Enable SMI Alternate Functions: \r
273 *                       SMI_CS0, SMI_CK, SMI_DIN and SMI_DOUT\r
274 *                     - GPIO_Remap_DBGOFF: JTAG Disable\r
275 *                     - GPIO_Remap_UART1: UART1 Alternate Function mapping\r
276 *                     - GPIO_Remap_UART2: UART2 Alternate Function mapping\r
277 *                     - GPIO_Remap_SSP1: SSP1 Alternate Function mapping\r
278 *                     - GPIO_Remap_TIM2: TIM2 Alternate Function mapping\r
279 *                     - GPIO_Remap_TIM0: TIM0 Alternate Function mapping\r
280 *                 - NewState: new state of the port pin.\r
281 *                   This parameter can be: ENABLE or DISABLE.\r
282 * Output         : None\r
283 * Return         : None\r
284 *******************************************************************************/\r
285 void GPIO_PinRemapConfig(u16 GPIO_Remap, FunctionalState NewState)\r
286 {\r
287   u32 GPIOReg = 0;\r
288   u32 PinPos = 0;\r
289 \r
290   /* Get the GPIO register index */\r
291   GPIOReg = GPIO_Remap >> 5;\r
292 \r
293   /* Get the pin position */\r
294   PinPos = GPIO_Remap & GPIO_Remap_Mask;\r
295 \r
296   if(GPIOReg == 1) /* The pin to remap is in REMAP0R register */\r
297   {\r
298     if(NewState == ENABLE)\r
299     {\r
300       GPIOREMAP->REMAP0R |= (1 << PinPos);\r
301     }\r
302     else\r
303     {\r
304       GPIOREMAP->REMAP0R &= ~(1 << PinPos);\r
305     }\r
306   }\r
307   else if(GPIOReg == 2) /* The pin to remap is in REMAP1R register */\r
308   {\r
309     if(NewState == ENABLE)\r
310     {\r
311       GPIOREMAP->REMAP1R |= (1 << PinPos);\r
312     }\r
313     else\r
314     {\r
315       GPIOREMAP->REMAP1R &= ~(1 << PinPos);\r
316     }\r
317   }\r
318 }\r
319 \r
320 /******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/\r