mbed library sources. Supersedes mbed-src.
Fork of mbed by
Diff: targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.c
- Revision:
- 144:ef7eb2e8f9f7
- Parent:
- 0:9b334a45a8ff
--- a/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.c Tue Aug 02 14:07:36 2016 +0000 +++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.c Fri Sep 02 15:07:44 2016 +0100 @@ -1,297 +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; -} - +#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; +} +