/********************************** (C) COPYRIGHT  *******************************
* File Name          : debug.h
* Author             : WCH
* Version            : V1.0.0
* Date               : 2021/06/06
* Description        : This file contains all the functions prototypes for UART
*                      Printf , Delay functions.
*********************************************************************************
* Copyright (c) 2021 Nanjing Qinheng Microelectronics Co., Ltd.
* Attention: This software (modified or not) and binary are used for 
* microcontroller manufactured by Nanjing Qinheng Microelectronics.
*******************************************************************************/
#ifndef __DEBUG_H
#define __DEBUG_H

#ifdef __cplusplus
 extern "C" {
#endif

#include "stdio.h"
#include "ch32v30x.h"

/* UART Printf Definition */
#define DEBUG_UART1    1
#define DEBUG_UART2    2
#define DEBUG_UART3    3

/* DEBUG UATR Definition */
#ifndef DEBUG
#define DEBUG   DEBUG_UART3
#endif

/* SDI Printf Definition */
#define SDI_PR_CLOSE   0
#define SDI_PR_OPEN    1

#ifndef SDI_PRINT
#define SDI_PRINT   SDI_PR_CLOSE
#endif


 /* 引脚 定义 */
 #define LED0_GPIO_PORT                  GPIOB
 #define LED0_GPIO_PIN                   GPIO_Pin_5
 #define LED0_GPIO_CLK_ENABLE()          do{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); }while(0)     /* PB口时钟使能 */

 #define LED1_GPIO_PORT                  GPIOB
 #define LED1_GPIO_PIN                   GPIO_Pin_6
 #define LED1_GPIO_CLK_ENABLE()          do{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); }while(0)     /* PB口时钟使能 */

 #define LED2_GPIO_PORT                  GPIOB
 #define LED2_GPIO_PIN                   GPIO_Pin_7
 #define LED2_GPIO_CLK_ENABLE()          do{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); }while(0)     /* PC口时钟使能 */

 #define INPUT_GPIO_PORT                  GPIOB
 #define INPUT_GPIO_PIN                   GPIO_Pin_14
 #define INPUT_GPIO_CLK_ENABLE()          do{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); }while(0)     /* PA口时钟使能 */

 #define OUTPUT1_GPIO_PORT                  GPIOD
 #define OUTPUT1_GPIO_PIN                   GPIO_Pin_8
 #define OUTPUT1_GPIO_CLK_ENABLE()          do{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); }while(0)     /* PD口时钟使能 */

 #define OUTPUT2_GPIO_PORT                  GPIOD
 #define OUTPUT2_GPIO_PIN                   GPIO_Pin_9
 #define OUTPUT2_GPIO_CLK_ENABLE()          do{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); }while(0)     /* PD口时钟使能 */

 /******************************************************************************************/

 /* LED端口定义 */
 #define LED0(x)   do{ x ? \
                       GPIO_SetBits(LED0_GPIO_PORT,LED0_GPIO_PIN): \
                       GPIO_ResetBits(LED0_GPIO_PORT,LED0_GPIO_PIN); \
                   }while(0)             /* LED0 = BLUE */

 #define LED1(x)   do{ x ? \
                       GPIO_SetBits(LED1_GPIO_PORT,LED1_GPIO_PIN): \
                       GPIO_ResetBits(LED1_GPIO_PORT,LED1_GPIO_PIN); \
                   }while(0)             /* LED1 = YELLOW */

 #define LED2(x)   do{ x ? \
                       GPIO_SetBits(LED2_GPIO_PORT,LED2_GPIO_PIN): \
                       GPIO_ResetBits(LED2_GPIO_PORT,LED2_GPIO_PIN); \
                   }while(0)             /* LED2 = GREEN */

 #define INPUT(x)   do{ x ? \
                       GPIO_SetBits(INPUT_GPIO_PORT,INPUT_GPIO_PIN): \
                       GPIO_ResetBits(INPUT_GPIO_PORT,INPUT_GPIO_PIN); \
                   }while(0)

 #define OUTPUT1(x)   do{ x ? \
                       GPIO_SetBits(OUTPUT1_GPIO_PORT,OUTPUT1_GPIO_PIN): \
                       GPIO_ResetBits(OUTPUT1_GPIO_PORT,OUTPUT1_GPIO_PIN); \
                   }while(0)

 #define OUTPUT2(x)   do{ x ? \
                       GPIO_SetBits(OUTPUT2_GPIO_PORT,OUTPUT2_GPIO_PIN): \
                       GPIO_ResetBits(OUTPUT2_GPIO_PORT,OUTPUT2_GPIO_PIN); \
                   }while(0)

 /* LED取反定义 */
 #define LED0_TOGGLE()   do{ gpio_toggle_pin(LED0_GPIO_PORT, LED0_GPIO_PIN); }while(0)        /* 翻转LED0 */
 #define LED1_TOGGLE()   do{ gpio_toggle_pin(LED1_GPIO_PORT, LED1_GPIO_PIN); }while(0)        /* 翻转LED1 */
 #define LED2_TOGGLE()   do{ gpio_toggle_pin(LED2_GPIO_PORT, LED2_GPIO_PIN); }while(0)        /* 翻转LED2 */

 /******************************************************************************************/

void led_init(void);    /* 初始化LED */

void check_input(void);    /*检查PA8口的输入电平*/

void set_outpot(uint8_t pd8_state, uint8_t pd9_state);    /*设置PD8\PD9输出电平*/



void Delay_Init(void);
void Delay_Us (uint32_t n);
void Delay_Ms (uint32_t n);
void USART_Printf_Init(uint32_t baudrate);
void SDI_Printf_Enable(void);

#ifdef __cplusplus
}
#endif

#endif 



