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: SPIne CH_Communicatuin_Test CH_Communicatuin_Test2 MCP_SPIne ... more
Fork of mbed-dev-f303 by
targets/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.c
- Committer:
- <>
- Date:
- 2016-10-28
- Revision:
- 149:156823d33999
- Parent:
- targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_gpio.c@ 144:ef7eb2e8f9f7
- Child:
- 165:e614a9f1c9e2
File content as of revision 149:156823d33999:
#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;
}
