#ifndef __UART_H
#define __UART_H

#include "BL210x.h" 

#define WDT_TEST    		0	
#define SPI_TEST    		0	
#define IIC_TEST    		0	
#define LOWPOWER_TEST   0	
#define FLASH_TEST    	1
#define ADC_TEST    		1	
#define TIMER_TEST    	1
#define UART_TEST    		1
#define PWM_BASE_TEST   0
#define PWM_PLUS_TEST   1
#define EXTI_TEST			  0

extern uint8_t Rec_Data[100];
extern uint16_t Serial_timeout_1ms;    //串口超时计数值


extern uint16_t time_1ms;           //1ms计数器
extern uint16_t time_10ms;          //10ms计数器
extern uint16_t time_100ms;         //100ms计数器

//A9 A10是SWD下载口，测试时最好不要配置为IO

/* 定义LED1连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED1引脚 */
#define LED1_GPIO_PORT    	GPIOA		                /* GPIO端口 */
#define LED1_GPIO_PIN		GPIO_PIN8			        /* 连接到LED1的GPIO */

/* 定义LED2连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED2引脚 */
#define LED2_GPIO_PORT    	GPIOA		                /* GPIO端口 */
#define LED2_GPIO_PIN		GPIO_PIN10			        /* 连接到LED2的GPIO */

/* 定义LED3连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED3引脚 */
#define LED3_GPIO_PORT    	GPIOA		                /* GPIO端口 */
#define LED3_GPIO_PIN		GPIO_PIN11			        /* 连接到LED3的GPIO */

/* 定义LED4连接的GPIO端口, 用户只需要修改下面的代码即可改变控制的LED4引脚 */
#define LED4_GPIO_PORT    	GPIOA		                /* GPIO端口 */
#define LED4_GPIO_PIN		GPIO_PIN12			        /* 连接到LED4的GPIO */


/* 定义控制IO的宏  此处定义的LED都是共阳极供电的，也就是输出低电平LED点亮*/
#define LED1_TOGGLE		   GPIO_InvBit(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_OFF		   GPIO_ClrBit(LED1_GPIO_PORT,LED1_GPIO_PIN)
#define LED1_ON			   GPIO_SetBit(LED1_GPIO_PORT,LED1_GPIO_PIN)

#define LED2_TOGGLE		   GPIO_InvBit(LED2_GPIO_PORT,LED2_GPIO_PIN)
#define LED2_OFF		   GPIO_ClrBit(LED2_GPIO_PORT,LED2_GPIO_PIN)
#define LED2_ON			   GPIO_SetBit(LED2_GPIO_PORT,LED2_GPIO_PIN)

#define LED3_TOGGLE		   GPIO_InvBit(LED3_GPIO_PORT,LED3_GPIO_PIN)
#define LED3_OFF		       GPIO_ClrBit(LED3_GPIO_PORT,LED3_GPIO_PIN)
#define LED3_ON		   GPIO_SetBit(LED3_GPIO_PORT,LED3_GPIO_PIN)

#define LED4_TOGGLE		   GPIO_InvBit(LED4_GPIO_PORT,LED4_GPIO_PIN)
#define LED4_OFF		       GPIO_ClrBit(LED4_GPIO_PORT,LED4_GPIO_PIN)
#define LED4_ON		   GPIO_SetBit(LED4_GPIO_PORT,LED4_GPIO_PIN)

#define PWMPLUS_IO0_GPIO_PORT  GPIOA
#define PWMPLUS_IO0_GPIO_PIN   GPIO_PIN8

#define PWMPLUS_IO1_GPIO_PORT  GPIOA
#define PWMPLUS_IO1_GPIO_PIN   GPIO_PIN9

#define PWMPLUS_IO2_GPIO_PORT  GPIOA
#define PWMPLUS_IO2_GPIO_PIN   GPIO_PIN10

#define PWMPLUS_IO0_TOGGLE		   GPIO_InvBit(PWMPLUS_IO0_GPIO_PORT,PWMPLUS_IO0_GPIO_PIN)
#define PWMPLUS_IO1_TOGGLE		   GPIO_InvBit(PWMPLUS_IO1_GPIO_PORT,PWMPLUS_IO1_GPIO_PIN)
#define PWMPLUS_IO2_TOGGLE		   GPIO_InvBit(PWMPLUS_IO2_GPIO_PORT,PWMPLUS_IO2_GPIO_PIN)

//=========iic============
#define AT24C01		127
#define AT24C02		255
#define AT24C04		511
#define AT24C08		1023
#define AT24C16		2047
#define AT24C32		4095
#define AT24C64	    8191
#define AT24C128	16383
#define AT24C256	32767

#define EEPROM_DEV_ADDR			  0xA0		      /* 24xx02的设备地址 */
#define EEPROM_PAGE_SIZE		  8			      /* 24xx02的页面大小 */
#define EEPROM_SIZE				  256			  /* 24xx02总容量 */

//使用的是24c02，所以定义EE_TYPE为AT24C02
#define EE_TYPE     AT24C02



#define EEPROM_I2C_WR	0		/* 写控制bit */
#define EEPROM_I2C_RD	1		/* 读控制bit */

#define ACK      0x01           //应答
#define NACK     0x00           //非应答
//=========iic============
//=========power============
#define MODE_STANDBY         1
#define MODE_SLEEP           2
#define MODE_STOP            4

#define WAKEUP_IO            1
//=========power============
//=========IWDT============
#define IWDT_32K_TEST          0      //32K时钟  禁能复位  定时喂狗
#define IWDT_32K_INT_TEST      1      //32K时钟  禁能复位  中断处理
#define IWDT_32K_RST_TEST      2      //32K时钟  使能复位
//=========IWDT============
//=========PWMBASE============
#define PWMBASE_IO0_GPIO_PORT  GPIOA
#define PWMBASE_IO0_GPIO_PIN   GPIO_PIN8

#define PWMBASE_IO1_GPIO_PORT  GPIOA
#define PWMBASE_IO1_GPIO_PIN   GPIO_PIN9

#define PWMBASE_IO2_GPIO_PORT  GPIOA
#define PWMBASE_IO2_GPIO_PIN   GPIO_PIN10



#define PWMBASE_IO0_TOGGLE		   GPIO_InvBit(PWMBASE_IO0_GPIO_PORT,PWMBASE_IO0_GPIO_PIN)
#define PWMBASE_IO1_TOGGLE		   GPIO_InvBit(PWMBASE_IO1_GPIO_PORT,PWMBASE_IO1_GPIO_PIN)
#define PWMBASE_IO2_TOGGLE		   GPIO_InvBit(PWMBASE_IO2_GPIO_PORT,PWMBASE_IO2_GPIO_PIN)
//=========PWMBASE============
//=========EXIT============
#define KEY1_GPIO_CLK 	    SYS_CLKEN_GPIOA_POS		    /* GPIO端口时钟 */
#define KEY1_GPIO_PORT    	GPIOA		                /* GPIO端口 */
#define KEY1_GPIO_PIN		GPIO_PIN4			        /* 连接到KEY1的GPIO */ 

#define KEY2_GPIO_CLK 	    SYS_CLKEN_GPIOA_POS		    /* GPIO端口时钟 */
#define KEY2_GPIO_PORT    	GPIOA		                /* GPIO端口 */
#define KEY2_GPIO_PIN		GPIO_PIN5			        /* 连接到KEY2的GPIO */ 

#define KEY3_GPIO_CLK 	    SYS_CLKEN_GPIOB_POS		    /* GPIO端口时钟 */
#define KEY3_GPIO_PORT    	GPIOA		                /* GPIO端口 */
#define KEY3_GPIO_PIN		GPIO_PIN6			        /* 连接到KEY3的GPIO */ 

#define KEY4_GPIO_CLK 	    SYS_CLKEN_GPIOA_POS		    /* GPIO端口时钟 */
#define KEY4_GPIO_PORT    	GPIOA		                /* GPIO端口 */
#define KEY4_GPIO_PIN		GPIO_PIN7			        /* 连接到KEY4的GPIO */


#define KEY1_IRQn           GPIOA4_IRQn
#define KEY2_IRQn           GPIOA5_IRQn
#define KEY3_IRQn           GPIOA6_IRQn
#define KEY4_IRQn           GPIOA7_IRQn

#define KEY1_Handler        GPIOA4_Handler
#define KEY2_Handler        GPIOA5_Handler
#define KEY3_Handler        GPIOA6_Handler
#define KEY4_Handler        GPIOA7_Handler

extern uint8_t Flag_Key1;
extern uint8_t Flag_Key2;
extern uint8_t Flag_Key3;
extern uint8_t Flag_Key4;
//=========EXIT============
void timer_1ms_init(void);          //1ms定时器
void TIMER_H16_Init(void);          //高16位定时器
void TIMER_HL32_Init(void);         //32位定时器
void uart_init(void);
void uart_test_tx_rx(uint8_t senddata);
void led_init(void);	              //LED初始化 
void adc_test(void);

void PWMPLUS_Init(void);
void PWMPLUS_IO_Indicate(void);
void PWMPLUS0_user_handle(void);
void eflash_test(void);
void lowpower_test(void);
void i2c_test(void);
void timer_test(void);
void spi_test(void);
void iwdt_test(void);
void uart_test(void);
void pwm_base_test(void);
void pwm_plus_test(void);
void exti_test(void);
#endif /* __UART_H */

