mirror of
https://github.com/ghsecuritylab/ameba_ws2812b.git
synced 2025-02-22 12:05:20 +00:00
114 lines
3.1 KiB
C
114 lines
3.1 KiB
C
|
/* mbed Microcontroller Library
|
||
|
*******************************************************************************
|
||
|
* Copyright (c) 2014, Realtek Semiconductor Corp.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* This module is a confidential and proprietary property of RealTek and
|
||
|
* possession or use of this module requires written permission of RealTek.
|
||
|
*******************************************************************************
|
||
|
*/
|
||
|
#include "objects.h"
|
||
|
#include "pinmap.h"
|
||
|
|
||
|
#if CONFIG_GPIO_EN
|
||
|
|
||
|
#include "gpio_api.h"
|
||
|
|
||
|
void gpio_set_hal_pin_mode(gpio_t *obj)
|
||
|
{
|
||
|
if (obj->direction == PIN_OUTPUT) {
|
||
|
switch (obj->mode) {
|
||
|
case PullNone:
|
||
|
case PullDown:
|
||
|
case PullUp:
|
||
|
obj->hal_pin.pin_mode = DOUT_PUSH_PULL;
|
||
|
break;
|
||
|
|
||
|
case OpenDrain:
|
||
|
obj->hal_pin.pin_mode = DOUT_OPEN_DRAIN;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
obj->hal_pin.pin_mode = DOUT_PUSH_PULL;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
switch (obj->mode) {
|
||
|
case PullNone:
|
||
|
case OpenDrain:
|
||
|
obj->hal_pin.pin_mode = DIN_PULL_NONE;
|
||
|
break;
|
||
|
|
||
|
case PullDown:
|
||
|
obj->hal_pin.pin_mode = DIN_PULL_LOW;
|
||
|
break;
|
||
|
|
||
|
case PullUp:
|
||
|
obj->hal_pin.pin_mode = DIN_PULL_HIGH;
|
||
|
break;
|
||
|
|
||
|
default:
|
||
|
obj->hal_pin.pin_mode = DIN_PULL_NONE;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
uint32_t gpio_set(PinName pin)
|
||
|
{
|
||
|
u32 ip_pin;
|
||
|
|
||
|
//MBED_ASSERT(pin != (PinName)NC);
|
||
|
DBG_ASSERT(pin != (PinName)NC);
|
||
|
pin_function(pin, 0);
|
||
|
ip_pin = HAL_GPIO_GetPinName((u32)pin);
|
||
|
// DBG_GPIO_INFO("%s chip_pin[0x%x]->ip_pin[0x%x]\n", __FUNCTION__, pin, ip_pin);
|
||
|
|
||
|
return ip_pin;
|
||
|
}
|
||
|
|
||
|
void gpio_init(gpio_t *obj, PinName pin)
|
||
|
{
|
||
|
if (pin == (PinName)NC)
|
||
|
return;
|
||
|
|
||
|
obj->pin = pin;
|
||
|
obj->mode = PullNone;
|
||
|
obj->direction = PIN_INPUT;
|
||
|
obj->hal_pin.pin_name = gpio_set(pin); // get the IP pin name
|
||
|
obj->hal_pin.pin_mode = DIN_PULL_NONE;
|
||
|
HAL_GPIO_Init(&obj->hal_pin);
|
||
|
}
|
||
|
|
||
|
void gpio_mode(gpio_t *obj, PinMode mode)
|
||
|
{
|
||
|
obj->mode = mode;
|
||
|
gpio_set_hal_pin_mode(obj);
|
||
|
//DBG_GPIO_INFO("%s GPIO[0x%x], mode=%d\n", __FUNCTION__, obj->hal_pin.pin_name, obj->hal_pin.pin_mode);
|
||
|
HAL_GPIO_Init(&obj->hal_pin);
|
||
|
}
|
||
|
|
||
|
void gpio_dir(gpio_t *obj, PinDirection direction) {
|
||
|
// MBED_ASSERT(obj->pin != (PinName)NC);
|
||
|
DBG_ASSERT(obj->pin != (PinName)NC);
|
||
|
obj->direction = direction;
|
||
|
gpio_set_hal_pin_mode(obj);
|
||
|
//DBG_GPIO_INFO("%s GPIO[0x%x], mode=%d\n", __FUNCTION__, obj->hal_pin.pin_name, obj->hal_pin.pin_mode);
|
||
|
HAL_GPIO_Init(&obj->hal_pin);
|
||
|
}
|
||
|
|
||
|
void gpio_write(gpio_t *obj, int value)
|
||
|
{
|
||
|
// MBED_ASSERT(obj->pin != (PinName)NC);
|
||
|
DBG_ASSERT(obj->pin != (PinName)NC);
|
||
|
HAL_GPIO_WritePin(&obj->hal_pin, value);
|
||
|
}
|
||
|
|
||
|
int gpio_read(gpio_t *obj) {
|
||
|
// MBED_ASSERT(obj->pin != (PinName)NC);
|
||
|
DBG_ASSERT(obj->pin != (PinName)NC);
|
||
|
return HAL_GPIO_ReadPin(&obj->hal_pin);
|
||
|
}
|
||
|
|
||
|
#endif
|