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
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
19 /* Includes ------------------------------------------------------------------*/
\r
20 #include "75x_gpio.h"
\r
21 #include "75x_mrcc.h"
\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
28 /* Private macro -------------------------------------------------------------*/
\r
29 /* Private variables ---------------------------------------------------------*/
\r
30 /* Private function prototypes -----------------------------------------------*/
\r
31 /* Private functions ---------------------------------------------------------*/
\r
33 /*******************************************************************************
\r
34 * Function Name : GPIO_DeInit
\r
35 * Description : Deinitializes the GPIOx peripheral registers to their default
\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
41 *******************************************************************************/
\r
42 void GPIO_DeInit(GPIO_TypeDef* GPIOx)
\r
44 /* Reset the GPIOx registers values */
\r
45 GPIOx->PC0 = 0xFFFFFFFF;
\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
64 *******************************************************************************/
\r
65 void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
\r
67 /* GPIOx Mode and Pins Set */
\r
68 if((GPIOx != GPIO0) && (GPIO_InitStruct->GPIO_Pin == GPIO_Pin_All))
\r
70 GPIO_InitStruct->GPIO_Pin = GPIO_Pin_Mask;
\r
73 switch(GPIO_InitStruct->GPIO_Mode)
\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
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
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
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
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
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
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
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
131 GPIOx->PC0 |= GPIO_InitStruct->GPIO_Pin;
\r
132 GPIOx->PC1 &= ~GPIO_InitStruct->GPIO_Pin;
\r
133 GPIOx->PC2 &= ~GPIO_InitStruct->GPIO_Pin;
\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
145 *******************************************************************************/
\r
146 void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
\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
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
158 * Return : GPIO data port word value.
\r
159 *******************************************************************************/
\r
160 u32 GPIO_Read(GPIO_TypeDef* GPIOx)
\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
173 * Return : The port pin value
\r
174 *******************************************************************************/
\r
175 u8 GPIO_ReadBit(GPIO_TypeDef* GPIOx, u32 GPIO_Pin)
\r
177 if ((GPIOx->PD & GPIO_Pin) != Bit_RESET)
\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
195 *******************************************************************************/
\r
196 void GPIO_Write(GPIO_TypeDef* GPIOx, u32 PortVal)
\r
198 GPIOx->PD = PortVal;
\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
214 *******************************************************************************/
\r
215 void GPIO_WriteBit(GPIO_TypeDef* GPIOx, u32 GPIO_Pin, BitAction BitVal)
\r
217 if(BitVal != Bit_RESET)
\r
219 GPIOx->PD |= GPIO_Pin;
\r
223 GPIOx->PD &= ~GPIO_Pin;
\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
239 *******************************************************************************/
\r
240 void GPIO_PinMaskConfig(GPIO_TypeDef* GPIOx, u32 GPIO_Pin, FunctionalState NewState)
\r
242 if(NewState == ENABLE)
\r
244 GPIOx->PM |= GPIO_Pin;
\r
248 GPIOx->PM &= ~GPIO_Pin;
\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
257 * Return : GPIO port mask value.
\r
258 *******************************************************************************/
\r
259 u32 GPIO_GetPortMask(GPIO_TypeDef* GPIOx)
\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
284 *******************************************************************************/
\r
285 void GPIO_PinRemapConfig(u16 GPIO_Remap, FunctionalState NewState)
\r
290 /* Get the GPIO register index */
\r
291 GPIOReg = GPIO_Remap >> 5;
\r
293 /* Get the pin position */
\r
294 PinPos = GPIO_Remap & GPIO_Remap_Mask;
\r
296 if(GPIOReg == 1) /* The pin to remap is in REMAP0R register */
\r
298 if(NewState == ENABLE)
\r
300 GPIOREMAP->REMAP0R |= (1 << PinPos);
\r
304 GPIOREMAP->REMAP0R &= ~(1 << PinPos);
\r
307 else if(GPIOReg == 2) /* The pin to remap is in REMAP1R register */
\r
309 if(NewState == ENABLE)
\r
311 GPIOREMAP->REMAP1R |= (1 << PinPos);
\r
315 GPIOREMAP->REMAP1R &= ~(1 << PinPos);
\r
320 /******************* (C) COPYRIGHT 2006 STMicroelectronics *****END OF FILE****/
\r