huanghe 0c5692eece 修改部分格式问题
[add] 增加ft2004 BSP
2021-05-26 16:34:37 +08:00

108 lines
2.6 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
 * @ : Copyright (c) 2021 Phytium Information Technology, Inc.
 *
 * SPDX-License-Identifier: Apache-2.0.
 *
* @Date: 2021-04-27 17:55:31
* @LastEditTime: 2021-05-25 16:43:31
* @Description:  This files is for
*
* @Modify History:
* Ver   Who        Date         Changes
* ----- ------     --------    --------------------------------------
*/
#include "ft_gpio.h"
#include "ft_gpio_hw.h"
#include "ft_assert.h"
#include "ft_debug.h"
#define GPIO_MAX_PIN 7
#define GPIO_MAX_CTRL_ID 1
void FGpio_SetGroupModeA(FT_IN u32 ctrlId, FT_IN u8 pin, FT_IN u32 mode)
{
u32 RegVal;
Ft_assertNoneReturn(ctrlId <= GPIO_MAX_CTRL_ID);
Ft_assertNoneReturn(pin <= GPIO_MAX_PIN);
RegVal = FGpioA_ReadReg(ctrlId, GPIO_INTEN);
switch (mode)
{
case GPIO_MODE_GPIO:
RegVal &= ~(1 << pin);
break;
case GPIO_MODE_INT:
RegVal |= (1 << pin);
break;
default:
Ft_assertNoneReturn(0);
break;
}
FGpioA_WriteReg(ctrlId, GPIO_INTEN, RegVal);
return;
}
static void FGpio_SetPinInOutA(FT_IN u32 ctrlId, FT_IN u8 pin, FT_IN u8 inOut)
{
u32 RegVal;
Ft_assertNoneReturn(ctrlId <= GPIO_MAX_CTRL_ID);
Ft_assertNoneReturn(pin <= GPIO_MAX_PIN);
RegVal = FGpioA_ReadReg(ctrlId, GPIO_SWPORTA_DDR);
if (inOut != (RegVal & (0x1 << pin)))
{
if (GPIO_INPUT == inOut)
{
RegVal &= ~(0x1 << pin);
}
else if (GPIO_OUTPUT == inOut)
{
RegVal |= (0x1 << pin);
}
else
{
Ft_assertNoneReturn(0);
}
FGpioA_WriteReg(ctrlId, GPIO_SWPORTA_DDR, RegVal);
}
return;
}
u32 FGpio_ReadPinA(FT_IN u32 ctrlId, FT_IN u8 pin)
{
u32 RegVal;
u32 OnOff;
Ft_assertNoneReturn(ctrlId <= GPIO_MAX_CTRL_ID);
Ft_assertNoneReturn(pin <= GPIO_MAX_PIN);
FGpio_SetPinInOutA(ctrlId, pin, GPIO_INPUT);
RegVal = FGpioA_ReadReg(ctrlId, GPIO_EXT_PORTA);
OnOff = (RegVal & (0x1 << pin)) ? GPIO_ON : GPIO_OFF;
return OnOff;
}
void FGpio_WritePinA(FT_IN u32 ctrlId, FT_IN u8 pin, FT_IN u8 onOff)
{
u32 RegVal;
Ft_assertNoneReturn(ctrlId <= GPIO_MAX_CTRL_ID);
Ft_assertNoneReturn(pin <= GPIO_MAX_PIN);
Ft_assertNoneReturn((onOff == GPIO_OFF) || (onOff == GPIO_ON));
FGpio_SetPinInOutA(ctrlId, pin, GPIO_OUTPUT);
RegVal = FGpioA_ReadReg(ctrlId, GPIO_SWPORTA_DR);
if (GPIO_OFF == onOff)
{
RegVal &= ~(1 << pin);
}
else
{
RegVal |= (1 << pin);
}
FGpioA_WriteReg(ctrlId, GPIO_SWPORTA_DR, RegVal);
return;
}