Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: mbed-TFT-example-NCS36510 mbed-Accelerometer-example-NCS36510 mbed-Accelerometer-example-NCS36510
Diff: targets/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.c
- Revision:
- 0:098463de4c5d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.c Wed Jan 25 20:34:15 2017 +0000
@@ -0,0 +1,297 @@
+#include "W7500x.h"
+#include "W7500x_gpio.h"
+
+void HAL_GPIO_DeInit(GPIO_TypeDef* GPIOx)
+{
+ uint32_t i, loop =16;
+ P_Port_Def *px_pcr;
+ P_Port_Def *px_afsr;
+
+ /* Check the parameters */
+ assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+
+ /* DeInit GPIOx Registers */
+ GPIOx->DATA = 0x0000;
+ GPIOx->DATAOUT = 0x0000;
+ //GPIOx->OUTENSET = 0x0000;
+ GPIOx->OUTENCLR = 0xFFFF;
+ //GPIOx->INTENSET = 0x0000;
+ GPIOx->INTENCLR = 0xFFFF;
+ //GPIOx->INTTYPESET = 0x0000;
+ GPIOx->INTTYPECLR = 0xFFFF;
+ //GPIOx->INTPOLSET = 0x0000;
+ GPIOx->INTPOLCLR = 0xFFFF;
+
+
+ /* DeInit GPIOx
+ * Pad Control Register
+ * Pad Extern interrupt Enable Register
+ * Pad Alternate Function Select Register
+ */
+ if (GPIOx == GPIOA)
+ {
+ px_pcr = PA_PCR;
+ px_afsr = PA_AFSR;
+ }
+ else if (GPIOx == GPIOB)
+ {
+ px_pcr = PB_PCR;
+ px_afsr = PB_AFSR;
+ }
+ else if (GPIOx == GPIOC)
+ {
+ px_pcr = PC_PCR;
+ px_afsr = PC_AFSR;
+ }
+ else // if (GPIOx == GPIOD)
+ {
+ px_pcr = (P_Port_Def*)PD_PCR;
+ px_afsr = (P_Port_Def*)PD_AFSR;
+ loop = 5;
+ }
+
+ for(i=0; i<loop; i++)
+ {
+ px_pcr->Port[i] = 0x60;
+ px_afsr->Port[i] = PAD_AF0;
+
+ }
+}
+
+void HAL_GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
+{
+ uint32_t pinpos = 0x00, pos = 0x00, currentpin = 0x00, loop = 16;
+ P_Port_Def *px_pcr;
+
+ assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+ assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
+// assert_param(IS_GPIO_PUPD(GPIO_InitStruct->GPIO_PuPd));
+
+ if (GPIOx == GPIOA) px_pcr = PA_PCR;
+ else if (GPIOx == GPIOB) px_pcr = PB_PCR;
+ else if (GPIOx == GPIOC) px_pcr = PC_PCR;
+ else
+ {
+ px_pcr = (P_Port_Def*)PD_PCR;
+ loop = 5;
+ }
+
+ for(pinpos = 0x00; pinpos < loop; pinpos++)
+ {
+ pos = ((uint32_t)0x01) << pinpos;
+
+ currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
+
+ if(currentpin == pos)
+ {
+ if(GPIO_InitStruct->GPIO_Mode == GPIO_Mode_OUT)
+ {
+ GPIOx->OUTENSET |= pos;
+ }
+ else // GPIO_Mode_In
+ {
+ GPIOx->OUTENCLR = pos;
+ }
+
+ // Configure pull-up pull-down bits
+ if(GPIO_InitStruct->GPIO_Pad & Px_PCR_PUPD_UP)
+ {
+ px_pcr->Port[pinpos] &= ~(Px_PCR_PUPD_UP | Px_PCR_PUPD_DOWN);
+ px_pcr->Port[pinpos] |= Px_PCR_PUPD_UP;
+ }
+ else
+ {
+ px_pcr->Port[pinpos] &= ~(Px_PCR_PUPD_UP | Px_PCR_PUPD_DOWN);
+ px_pcr->Port[pinpos] |= Px_PCR_PUPD_DOWN;
+ }
+
+ // Configure Driving stregnth selections bit
+ if(GPIO_InitStruct->GPIO_Pad & Px_PCR_DS_HIGH)
+ {
+ px_pcr->Port[pinpos] |= Px_PCR_DS_HIGH;
+ }
+ else
+ {
+ px_pcr->Port[pinpos] &= ~(Px_PCR_DS_HIGH);
+ }
+
+ // Configure Open Drain selections bit
+ if(GPIO_InitStruct->GPIO_Pad & Px_PCR_OD)
+ {
+ px_pcr->Port[pinpos] |= Px_PCR_OD;
+ }
+ else
+ {
+ px_pcr->Port[pinpos] &= ~(Px_PCR_OD);
+ }
+
+ // Configure Input buffer enable selection bit
+ if(GPIO_InitStruct->GPIO_Pad & Px_PCR_IE)
+ {
+ px_pcr->Port[pinpos] |= Px_PCR_IE;
+ }
+ else
+ {
+ px_pcr->Port[pinpos] &= ~(Px_PCR_IE);
+ }
+
+ // Configure input type (CMOS input or Summit trigger input) select bit
+ if(GPIO_InitStruct->GPIO_Pad & Px_PCR_CS_SUMMIT)
+ {
+ px_pcr->Port[pinpos] |= Px_PCR_CS_SUMMIT;
+ }
+ else
+ {
+ px_pcr->Port[pinpos] &= ~(Px_PCR_CS_SUMMIT);
+ }
+ }
+ }
+}
+
+void HAL_GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
+{
+ GPIO_InitStruct->GPIO_Pin = GPIO_Pin_All;
+ GPIO_InitStruct->GPIO_Mode = GPIO_Mode_IN;
+ GPIO_InitStruct->GPIO_Pad = (GPIOPad_TypeDef)(GPIO_PuPd_UP);
+}
+
+
+uint8_t HAL_GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+ uint8_t bitstatus = 0x00;
+
+ assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+ assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
+
+ if((GPIOx->DATA & GPIO_Pin) != (uint32_t)Bit_RESET)
+ {
+ bitstatus = (uint8_t)Bit_SET;
+ }
+ else
+ {
+ bitstatus = (uint8_t)Bit_RESET;
+ }
+
+ return bitstatus;
+}
+
+uint16_t HAL_GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
+{
+ assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+ return ((uint16_t)GPIOx->DATA);
+}
+
+uint8_t HAL_GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+ uint8_t bitstatus = 0x00;
+
+
+
+ assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+ assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
+
+ if((GPIOx->DATAOUT & GPIO_Pin) != (uint32_t)Bit_RESET)
+ {
+ bitstatus = (uint8_t)Bit_SET;
+ }
+ else
+ {
+ bitstatus = (uint8_t)Bit_RESET;
+ }
+
+ return bitstatus;
+}
+uint16_t HAL_GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
+{
+ /* Check the parameters */
+ assert_param(IS_GPIO_ALLPERIPH(GPIOx));
+ return ((uint16_t)GPIOx->DATAOUT);
+}
+
+void HAL_GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+ /* Check the parameters */
+ assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+ assert_param(IS_GPIO_PIN(GPIO_Pin));
+
+ (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = GPIO_Pin;
+ (GPIOx->UB_MASKED[(uint8_t)((GPIO_Pin)>>8)]) = GPIO_Pin;
+}
+
+void HAL_GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+ /* Check the parameters */
+ assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+ assert_param(IS_GPIO_PIN(GPIO_Pin));
+
+ (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = ~(GPIO_Pin);
+ (GPIOx->UB_MASKED[(uint8_t)(GPIO_Pin>>8)]) = ~(GPIO_Pin);
+}
+
+void HAL_GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal)
+{
+ /* Check the parameters */
+ assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+ assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
+ assert_param(IS_GPIO_BIT_ACTION(BitVal));
+
+ (GPIOx->LB_MASKED[(uint8_t)(GPIO_Pin)]) = BitVal;
+ (GPIOx->UB_MASKED[(uint8_t)((GPIO_Pin)>>8)]) = BitVal;
+}
+
+void HAL_GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
+{
+ /* Check the parameters */
+ assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
+
+ GPIOx->DATAOUT = PortVal;
+}
+
+void HAL_PAD_AFConfig(PAD_Type Px, uint16_t GPIO_Pin, PAD_AF_TypeDef P_AF)
+{
+ int i;
+ uint16_t idx =0x1;
+ assert_param(IS_PAD_Type(Px));
+
+ for(i=0;i<16;i++)
+ {
+ if(GPIO_Pin & (idx<<i))
+ {
+ if(Px == PAD_PA)
+ {
+ assert_param(IS_PA_NUM(i));
+ PA_AFSR->Port[i] &= ~(0x03ul);
+ PA_AFSR->Port[i] |= P_AF;
+ }
+ else if(Px == PAD_PB)
+ {
+ assert_param(IS_PB_NUM(i));
+ PB_AFSR->Port[i] &= ~(0x03ul);
+ PB_AFSR->Port[i] |= P_AF;
+ }
+ else if(Px == PAD_PC)
+ {
+ assert_param(IS_PC_NUM(i));
+ PC_AFSR->Port[i] &= ~(0x03ul);
+ PC_AFSR->Port[i] |= P_AF;
+ }
+ else
+ {
+ assert_param(IS_PD_NUM(i));
+ PD_AFSR->Port[i] &= ~(0x03ul);
+ PD_AFSR->Port[i] |= P_AF;
+ }
+ }
+ }
+}
+
+void GPIO_OutEnClr(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+ GPIOx->OUTENCLR = GPIO_Pin;
+}
+
+void GPIO_OutEnSet(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
+{
+ GPIOx->OUTENSET = GPIO_Pin;
+}
+