166 lines
4.5 KiB
C
166 lines
4.5 KiB
C
#include "ls1x_gpio.h"
|
|
#include "ls1x.h"
|
|
#include "test.h"
|
|
#include "Config.h"
|
|
|
|
void AFIO_RemapConfig(AFIO_TypeDef* AFIOx, uint16_t GPIO_Pin, GPIOFunc_TypeDef GPIO_Func)
|
|
{
|
|
uint32_t currentpinpos = 0x00;
|
|
uint32_t tmpreg = 0x00, pinmask = 0x00;
|
|
|
|
tmpreg = AFIOx->IOSEL;
|
|
for (uint8_t i=0; i < 16; i++)
|
|
{
|
|
if ((GPIO_Pin & (0x01 << i)) != 0x0)
|
|
{
|
|
currentpinpos = i << 1;
|
|
pinmask =((uint32_t)0x03 << currentpinpos);
|
|
tmpreg &= ~pinmask;
|
|
tmpreg |= (GPIO_Func << currentpinpos);
|
|
}
|
|
}
|
|
|
|
AFIOx->IOSEL = tmpreg;
|
|
}
|
|
|
|
|
|
#if defined(LS1C102) /*******************LS1C102************************/
|
|
|
|
#elif defined(LS1C103) /******************LS1C103*************************/
|
|
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
|
|
{
|
|
uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
|
|
uint32_t tmpreg = 0x00, pinmask = 0x00;
|
|
|
|
/* Check the parameters */
|
|
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
|
|
assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
|
|
assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));
|
|
|
|
/*---------------------------- GPIO Mode Configuration -----------------------*/
|
|
currentmode = ((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x0F);
|
|
|
|
if ((((uint32_t)GPIO_InitStruct->GPIO_Mode) & ((uint32_t)0x10)) != 0x00)
|
|
{
|
|
/* Check the parameters */
|
|
assert_param(IS_GPIO_SPEED(GPIO_InitStruct->GPIO_Speed));
|
|
/* Output mode */
|
|
currentmode |= (uint32_t)GPIO_InitStruct->GPIO_Speed;
|
|
}
|
|
|
|
/*---------------------------- GPIO CRL Configuration ------------------------*/
|
|
/* Configure the eight low port pins */
|
|
if (((uint32_t)GPIO_InitStruct->GPIO_Pin & ((uint32_t)0x00FF)) != 0x00)
|
|
{
|
|
tmpreg = GPIOx->CRL;
|
|
|
|
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
|
|
{
|
|
pos = ((uint32_t)0x01) << pinpos;
|
|
/* Get the port pins position */
|
|
currentpin = (GPIO_InitStruct->GPIO_Pin) & pos;
|
|
|
|
if (currentpin == pos)
|
|
{
|
|
pos = pinpos << 2;
|
|
/* Clear the corresponding low control register bits */
|
|
pinmask = ((uint32_t)0x0F) << pos;
|
|
tmpreg &= ~pinmask;
|
|
|
|
/* Write the mode configuration in the corresponding bits */
|
|
tmpreg |= (currentmode << pos);
|
|
|
|
/* Reset the corresponding ODR bit */
|
|
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
|
|
{
|
|
GPIOx->BRR = (((uint32_t)0x01) << pinpos);
|
|
}
|
|
else
|
|
{
|
|
/* Set the corresponding ODR bit */
|
|
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
|
|
{
|
|
GPIOx->BSRR = (((uint32_t)0x01) << pinpos);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
GPIOx->CRL = tmpreg;
|
|
}
|
|
|
|
/*---------------------------- GPIO CRH Configuration ------------------------*/
|
|
/* Configure the eight high port pins */
|
|
if (GPIO_InitStruct->GPIO_Pin > 0x00FF)
|
|
{
|
|
tmpreg = GPIOx->CRH;
|
|
for (pinpos = 0x00; pinpos < 0x08; pinpos++)
|
|
{
|
|
pos = (((uint32_t)0x01) << (pinpos + 0x08));
|
|
/* Get the port pins position */
|
|
currentpin = ((GPIO_InitStruct->GPIO_Pin) & pos);
|
|
if (currentpin == pos)
|
|
{
|
|
pos = pinpos << 2;
|
|
/* Clear the corresponding high control register bits */
|
|
pinmask = ((uint32_t)0x0F) << pos;
|
|
tmpreg &= ~pinmask;
|
|
|
|
/* Write the mode configuration in the corresponding bits */
|
|
tmpreg |= (currentmode << pos);
|
|
|
|
/* Reset the corresponding ODR bit */
|
|
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPD)
|
|
{
|
|
GPIOx->BRR = (((uint32_t)0x01) << (pinpos + 0x08));
|
|
}
|
|
/* Set the corresponding ODR bit */
|
|
if (GPIO_InitStruct->GPIO_Mode == GPIO_Mode_IPU)
|
|
{
|
|
GPIOx->BSRR = (((uint32_t)0x01) << (pinpos + 0x08));
|
|
}
|
|
}
|
|
}
|
|
GPIOx->CRH = tmpreg;
|
|
}
|
|
}
|
|
|
|
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
|
|
{
|
|
uint8_t bitstatus = 0x00;
|
|
|
|
/* Check the parameters */
|
|
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
|
|
assert_param(IS_GET_GPIO_PIN(GPIO_Pin));
|
|
|
|
if ((GPIOx->IDR & GPIO_Pin) != (uint32_t)Bit_RESET)
|
|
{
|
|
bitstatus = (uint8_t)Bit_SET;
|
|
}
|
|
else
|
|
{
|
|
bitstatus = (uint8_t)Bit_RESET;
|
|
}
|
|
return bitstatus;
|
|
}
|
|
|
|
|
|
void 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->BSRR = GPIO_Pin;
|
|
}
|
|
|
|
void 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->BRR = GPIO_Pin;
|
|
}
|
|
|
|
#endif
|