Add gpio map configure
This commit is contained in:
parent
ecc6ac6685
commit
2e1465b0f5
|
@ -0,0 +1,233 @@
|
||||||
|
#include "freertos/FreeRTOS.h"
|
||||||
|
#include "freertos/task.h"
|
||||||
|
#include "cfg.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "user_main.h"
|
||||||
|
#include "gpio.h"
|
||||||
|
#include "freertos/timers.h"
|
||||||
|
|
||||||
|
#include "gpio_map.h"
|
||||||
|
|
||||||
|
#define GPIO_Pin_16 (BIT(16)) /* Pin 16 selected */
|
||||||
|
|
||||||
|
static const int g_GpioTbl[USER_GPIO_MAX][2] = {
|
||||||
|
{GPIO_Pin_4, 4},
|
||||||
|
{GPIO_Pin_5, 5},
|
||||||
|
{GPIO_Pin_12, 12},
|
||||||
|
{GPIO_Pin_13, 13},
|
||||||
|
{GPIO_Pin_14, 14},
|
||||||
|
{GPIO_Pin_15, 15},
|
||||||
|
{GPIO_Pin_16, 16},
|
||||||
|
};
|
||||||
|
|
||||||
|
static GPIO_ITEM g_GpioCfg[USER_GPIO_MAX] = {0};
|
||||||
|
|
||||||
|
void gpio_cfg_dump(GPIO_ConfigTypeDef* pCfg)
|
||||||
|
{
|
||||||
|
//IHW_LOG_BUF(LOG_Debug, "GPIO", (unsigned char*)pCfg, sizeof(GPIO_ConfigTypeDef));
|
||||||
|
LOG_EX(LOG_Debug, "Gpio Cofingure:\n");
|
||||||
|
LOG_RAW(LOG_Debug, "\tPin: %d\n", pCfg->GPIO_Pin);
|
||||||
|
LOG_RAW(LOG_Debug, "\tMode: %d\n", pCfg->GPIO_Mode);
|
||||||
|
LOG_RAW(LOG_Debug, "\tPullUp: %d\n", pCfg->GPIO_Pullup);
|
||||||
|
LOG_RAW(LOG_Debug, "\tIntr: %d\n", pCfg->GPIO_IntrType);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __hal_gpio_config(int pin, int mode, int pullUp, int intr)
|
||||||
|
{
|
||||||
|
GPIO_ConfigTypeDef gpioCfg;
|
||||||
|
|
||||||
|
memset(&gpioCfg, 0, sizeof(GPIO_ConfigTypeDef));
|
||||||
|
|
||||||
|
if(pin == GPIO_Pin_16)
|
||||||
|
{
|
||||||
|
if(mode == GPIO_Mode_Input)
|
||||||
|
{
|
||||||
|
//g_GpioCfg[pItem->Id].Dir = GPIO_Mode_Input;
|
||||||
|
gpio16_input_conf();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//g_GpioCfg[pItem->Id].Dir = GPIO_Mode_Output;
|
||||||
|
gpio16_output_conf();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gpioCfg.GPIO_IntrType = intr;
|
||||||
|
gpioCfg.GPIO_Mode = mode;
|
||||||
|
gpioCfg.GPIO_Pin = pin;
|
||||||
|
gpioCfg.GPIO_Pullup = pullUp ? 1 : 0;
|
||||||
|
|
||||||
|
//g_GpioCfg[pItem->Id].Interrupt = pItem->Interrupt;
|
||||||
|
//g_GpioCfg[pItem->Id].PullUp = pItem->PullUp;
|
||||||
|
|
||||||
|
gpio_config(&gpioCfg);
|
||||||
|
// gpio_cfg_dump(&gpioCfg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8 __hal_gpio_output(int pin, int level)
|
||||||
|
{
|
||||||
|
int val = level ? 1 : 0;
|
||||||
|
|
||||||
|
if(pin == 16)
|
||||||
|
{
|
||||||
|
gpio16_output_set(val);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
GPIO_OUTPUT_SET(GPIO_ID_PIN(pin), val);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint8 __hal_gpio_get(int pin)
|
||||||
|
{
|
||||||
|
int val;
|
||||||
|
|
||||||
|
if(pin == 16)
|
||||||
|
{
|
||||||
|
val = gpio16_input_get();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
val = GPIO_INPUT_GET(GPIO_ID_PIN(pin)) ? 1 : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gpio_set_level(USER_GPIO_NAME gpio, int level)
|
||||||
|
{
|
||||||
|
int val = level ? 1 : 0;
|
||||||
|
|
||||||
|
if(gpio < 0 || gpio >= USER_GPIO_MAX)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "GPIO %d unused\n", gpio);
|
||||||
|
return -ERR_INPUT_PARAMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(g_GpioCfg[gpio].Func != 1)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "PIN %d don't configure to GPIO\n", gpio);
|
||||||
|
return -ERR_GPIO_NOT_CONFIG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(g_GpioCfg[gpio].Dir != GPIO_Mode_Output || g_GpioCfg[gpio].Dir != GPIO_Mode_Out_OD)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "GPIO %d don't configure to output mode\n", gpio);
|
||||||
|
return -ERR_GPIO_MODE_UNSUPPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_EX(LOG_Debug, "GPIO %d Output %d\n", gpio, val);
|
||||||
|
|
||||||
|
__hal_gpio_output(g_GpioTbl[gpio][1], level);
|
||||||
|
|
||||||
|
return ERR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gpio_get_level(USER_GPIO_NAME gpio)
|
||||||
|
{
|
||||||
|
uint8 val;
|
||||||
|
|
||||||
|
if(gpio < 0 || gpio >= USER_GPIO_MAX)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "GPIO %d unused\n", gpio);
|
||||||
|
return -ERR_INPUT_PARAMS;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(g_GpioCfg[gpio].Func != 1)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "PIN %d don't configure to GPIO\n", gpio);
|
||||||
|
return -ERR_GPIO_NOT_CONFIG;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(g_GpioCfg[gpio].Dir != GPIO_Mode_Input)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "GPIO %d don't configure to input mode\n", gpio);
|
||||||
|
return -ERR_GPIO_MODE_UNSUPPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
val = __hal_gpio_get(g_GpioTbl[gpio][1]);
|
||||||
|
|
||||||
|
LOG_EX(LOG_Debug, "GPIO %d input %d\n", gpio, val);
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pin_cfg_gpio(USER_GPIO_NAME pin, int func, int mode, int pullUp, int intr)
|
||||||
|
{
|
||||||
|
if(pin < 0 || pin >= USER_GPIO_MAX)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "GPIO %d unused\n", pin);
|
||||||
|
return -ERR_GPIO_NOT_SUPPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(func != 1)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "GPIO %d mux %d unsupport\n", pin, func);
|
||||||
|
return -ERR_GPIO_MUX_UNSUPPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(mode < 0 || mode > GPIO_Mode_Output)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "GPIO %d mode %d unsupport\n", pin, mode);
|
||||||
|
return -ERR_GPIO_MODE_UNSUPPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(intr < GPIO_PIN_INTR_DISABLE || intr > GPIO_PIN_INTR_HILEVEL)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "GPIO %d interrupt mode %d unsupport\n", pin, intr);
|
||||||
|
return -ERR_GPIO_INTR_UNSUPPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
__hal_gpio_config(g_GpioTbl[pin][0], mode, pullUp, intr);
|
||||||
|
|
||||||
|
return ERR_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int gpio_user_cfg(void)
|
||||||
|
{
|
||||||
|
int i = 0;
|
||||||
|
PUSER_CONFIG pCfg = ne_cfg_get_user_cfg();
|
||||||
|
|
||||||
|
for(i = 0; (i < pCfg->GPIO.iSize) && (pCfg->GPIO.pGpioCfg); i++)
|
||||||
|
{
|
||||||
|
PGPIO_ITEM pItem = &pCfg->GPIO.pGpioCfg[i];
|
||||||
|
|
||||||
|
if(pItem->Id < 0 || pItem->Id >= USER_GPIO_MAX)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Error, "GPIO %d unused\n", pItem->Id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_GpioCfg[pItem->Id].Id = pItem->Id;
|
||||||
|
g_GpioCfg[pItem->Id].Func = pItem->Func;
|
||||||
|
|
||||||
|
if(pItem->Func != 1)
|
||||||
|
{
|
||||||
|
LOG_EX(LOG_Warn, "PIN(%d) Work Mode is Not GPIO\n", pItem->Id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pItem->Id == USER_GPIO_16)
|
||||||
|
{
|
||||||
|
if(pItem->Dir == GPIO_Mode_Input)
|
||||||
|
{
|
||||||
|
g_GpioCfg[pItem->Id].Dir = GPIO_Mode_Input;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_GpioCfg[pItem->Id].Dir = GPIO_Mode_Output;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_GpioCfg[pItem->Id].Interrupt = pItem->Interrupt;
|
||||||
|
g_GpioCfg[pItem->Id].PullUp = pItem->PullUp;
|
||||||
|
}
|
||||||
|
|
||||||
|
__hal_gpio_config(g_GpioTbl[pItem->Id][0], pItem->Dir, pItem->PullUp, pItem->Interrupt);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ERR_OK;
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
#ifndef GPIO_MAP_H
|
||||||
|
#define GPIO_MAP_H
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
USER_GPIO_4 = 0,
|
||||||
|
USER_GPIO_5,
|
||||||
|
USER_GPIO_12,
|
||||||
|
USER_GPIO_13,
|
||||||
|
USER_GPIO_14,
|
||||||
|
USER_GPIO_15,
|
||||||
|
USER_GPIO_16,
|
||||||
|
USER_GPIO_MAX
|
||||||
|
} USER_GPIO_NAME;
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
USER_FUNC_NC = 0,
|
||||||
|
USER_FUNC_GPIO,
|
||||||
|
USER_FUNC_MCU_STA,
|
||||||
|
USER_FUNC_HSPI_MISO,
|
||||||
|
USER_FUNC_HSPI_MOSI,
|
||||||
|
USER_FUNC_UART0_CTS,
|
||||||
|
USER_FUNC_WIFI_STA,
|
||||||
|
USER_FUNC_HSPI_CLK,
|
||||||
|
USER_FUNC_MTDO,
|
||||||
|
USER_FUNC_HSPI_CS,
|
||||||
|
USER_FUNC_UART0_RTS,
|
||||||
|
USER_FUNC_WAKEUP,
|
||||||
|
} USER_GPIO_FUNC;
|
||||||
|
#if 0
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
USER_GPIO_NAME name;
|
||||||
|
USER_GPIO_FUNC func;
|
||||||
|
GPIO_Pullup_IF pullUp;
|
||||||
|
GPIOMode_TypeDef dir;
|
||||||
|
GPIO_INT_TYPE intr;
|
||||||
|
} USER_GPIO_INFO, *PUSER_GPIO_INFO;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int gpio_user_cfg(void);
|
||||||
|
int gpio_set_level(USER_GPIO_NAME gpio, int level);
|
||||||
|
int gpio_get_level(USER_GPIO_NAME gpio);
|
||||||
|
int pin_cfg_gpio(USER_GPIO_NAME pin, int func, int mode, int pullUp, int intr);
|
||||||
|
#endif
|
Loading…
Reference in New Issue