#ifndef __SWM120_GPIO_H__
#define	__SWM120_GPIO_H__

typedef struct {
	uint8_t func;			//引脚功能：0 引脚为GPIO功能		1 引脚为数字外设功能（包括UART、SPI、PWM等，特定引脚具体是什么数字外设功能请查看芯片手册
							//2 引脚为模拟外设功能（包括ADC、放大器、比较器等，特定引脚具体是什么模拟外设功能请查看芯片手册		3 同取值为2时的功能
	uint8_t pull_up;		//引脚上拉使能		0 不使能上拉		1 使能上拉
	uint8_t pull_down;		//引脚下拉使能		0 不使能下拉		1 使能下拉
	uint8_t open_drain;		//引脚开漏使能		0 引脚为推挽模式	1 引脚为开漏模式
	uint8_t dir;			//引脚方向：		0 引脚为输入		1 引脚为输出
} GPIO_InitStructure;		//包含GPIO引脚各种特性的结构体


void GPIO_Init(GPIO_T * GPIOx,uint32_t n,GPIO_InitStructure * initStruct);	//引脚初始化，切换指定引脚的功能，包括GPIO功能、数字外设功能、模拟外设功能
void GPIO_SetBit(GPIO_T * GPIOx,uint32_t n);					//将参数指定的引脚电平置高
void GPIO_ClrBit(GPIO_T * GPIOx,uint32_t n);					//将参数指定的引脚电平置低
void GPIO_InvBit(GPIO_T * GPIOx,uint32_t n);					//将参数指定的引脚电平反转
uint32_t GPIO_GetBit(GPIO_T * GPIOx,uint32_t n);				//读取参数指定的引脚的电平状态
void GPIO_SetBits(GPIO_T * GPIOx,uint32_t n,uint32_t w);		//将参数指定的从n开始的w位连续引脚的电平置高
void GPIO_ClrBits(GPIO_T * GPIOx,uint32_t n,uint32_t w);		//将参数指定的从n开始的w位连续引脚的电平置低
void GPIO_InvBits(GPIO_T * GPIOx,uint32_t n,uint32_t w);		//将参数指定的从n开始的w位连续引脚的电平反转
uint32_t GPIO_GetBits(GPIO_T * GPIOx,uint32_t n,uint32_t w);	//读取参数指定的从n开始的w位连续引脚的电平状态


#define PIN_0	0
#define PIN_1	1
#define PIN_2	2
#define PIN_3	3
#define PIN_4	4
#define PIN_5	5
#define PIN_6	6
#define PIN_7	7
#define PIN_8	8
#define PIN_9	9
#define PIN_10	10
#define PIN_11	11

#endif //__SWM120_GPIO_H__
