app_gpio.c 3.85 KB
#include "os_config.h"

#include "regmap.h"

#include "c_def.h"
#include "debug.h"

#include "hw_gpio.h"

#include "flash_boot.h"

void app_gpio_output_level_set(U32 gpio_index, U8 level) __attribute__ ((section (".internal_ram_1_text")));
#if 1
/********gpio_index->GPIO_INDEX   con-> GPIOMUX_SEL ************/
void app_gpio_MUXfunction_select(U32 gpio_index, U8 con)
{
	if (gpio_index < GPIO_MAX_INDEX)
	{
		U8 gpio_group = gpio_index>>5;
		//TX_INTERRUPT_SAVE_AREA;

		//TX_DISABLE;
		switch (gpio_group)
		{
			case GPIO_GROUP0:
				gpio0_MUX_select(1<<gpio_index, con);
				break;

			case GPIO_GROUP1:
				gpio_index -= 32;
				gpio1_MUX_select(1<<gpio_index, con);
				break;

			case GPIO_GROUP2:
				gpio_index -= 64;
				gpio2_MUX_select(1<<gpio_index, con);
				break;

			default:
				DBG_Assert(FALSE);
				break;
		}
		//TX_RESTORE;
	}
}

/********gpio_index->GPIO_INDEX   level-> GPIO_LEVEL ************/
void app_gpio_output_level_set(U32 gpio_index, U8 level)
{
	if (gpio_index < GPIO_MAX_INDEX)
	{
		U8 gpio_group = gpio_index>>5;

		switch (gpio_group)
		{
			case GPIO_GROUP0:
				gpio0_SetOutput_level(1<<gpio_index, level);
				break;

			case GPIO_GROUP1:
				gpio_index -= 32;
				gpio1_SetOutput_level(1<<gpio_index, level);
				break;

			case GPIO_GROUP2:
				gpio_index -= 64;
				gpio2_SetOutput_level(1<<gpio_index, level);
				break;
			default:
				DBG_Assert(FALSE);
				break;
		}
	}
}

/********gpio_index->GPIO_INDEX   return GPIO_LEVEL (TRUE(HIGH) FALSE(LOW)) ************/
U32 app_gpio_input_level_read(U32 gpio_index)
{
	if (gpio_index < GPIO_MAX_INDEX)
	{
		U8 gpio_group = gpio_index>>5;
		U32 temp;

		switch (gpio_group)
		{
			case GPIO_GROUP0:
				temp = gpio0_input_level_read(1<<gpio_index);
				break;

			case GPIO_GROUP1:
				gpio_index -= 32;
				temp = gpio1_input_level_read(1<<gpio_index);
				break;

			case GPIO_GROUP2:
				gpio_index -= 64;
				temp = gpio2_input_level_read(1<<gpio_index);
				break;
			default:
				DBG_Assert(FALSE);
				break;
		}

		return temp;
	}
	return -1;
}

/********gpio_index->GPIO_INDEX   enable->int onpen close
Trigger_type->GPIO_INT_TRIGGER_TYPE  Trigger_level->GPIO_INT_TRIGGER_LEVEL************/
void app_gpio_interrupt_set(U32 gpio_index,U8 enable,U8 Trigger_type,U8 Trigger_level)
{
	if (gpio_index < GPIO_MAX_INDEX)
	{
		U8 gpio_group = gpio_index>>5;

		switch (gpio_group)
		{
			case GPIO_GROUP0:
				gpio0_interrupt_set(1<<gpio_index,enable,Trigger_type,Trigger_level);
				break;

			case GPIO_GROUP1:
				gpio_index -= 32;
				gpio1_interrupt_set(1<<gpio_index,enable,Trigger_type,Trigger_level);
				break;

			case GPIO_GROUP2:
				gpio_index -= 64;
				gpio2_interrupt_set(1<<gpio_index,enable,Trigger_type,Trigger_level);
				break;
			default:
				DBG_Assert(FALSE);
				break;
		}
	}
}

/********gpio_index->GPIO_INDEX return gpio_index int status and clear************/
U32 app_gpio_interrupt_st_read_use_index(U32 gpio_index)
{
	if (gpio_index < GPIO_MAX_INDEX)
	{
		U8 gpio_group = gpio_index>>5;
		U32 temp;

		switch (gpio_group)
		{
			case GPIO_GROUP0:
				temp = gpio0_interrupt_st_mask_read(1<<gpio_index);
				break;

			case GPIO_GROUP1:
				gpio_index -= 32;
				temp = gpio1_interrupt_st_mask_read(1<<gpio_index);
				break;

			case GPIO_GROUP2:
				gpio_index -= 64;
				temp = gpio2_interrupt_st_mask_read(1<<gpio_index);
				break;
			default:
				temp = 0;
				DBG_Assert(FALSE);
				break;
		}

		return temp;
	}
	return -1;
}

/********gpio_group->GPIO_GROUP   return gpio_group all int status and clear ************/
U32 app_gpio_interrupt_st_read_use_groud(U8 gpio_group)
{
	U32 temp;

	switch (gpio_group)
	{
		case GPIO_GROUP0:
			temp = gpio0_interrupt_st_groud_read();
			break;

		case GPIO_GROUP1:
			temp = gpio1_interrupt_st_groud_read();
			break;

		case GPIO_GROUP2:
			temp = gpio2_interrupt_st_groud_read();
			break;
		default:
			temp = 0;
			DBG_Assert(FALSE);
			break;
	}

	return temp;
}

#endif