//===========================================================
//GEC引脚宏定义文件
//型号：AHL-AN100NHL
//版权所有：苏州大学-arm嵌入式与物联网技术培训中心
//===========================================================

#ifndef GEC_H    //防止重复定义（开始）
#define GEC_H

#include "common.h"
#include "adc.h"
#include "gpio.h"
#include "timer.h"
#include "tpm.h"
#include "pwm.h"
#include "incapture.h"
#include "uart.h"
#include "spi.h"
#include "light.h"
#include "flash.h"
#include "outcmp.h"
#include "valueType.h"
#include "timeStamp.h"
#include "pit.h"
#include "node.h"
#include "rf.h"
//======================================================================
//函数名称：Int_Handler_init
//函数返回：无
//参数说明：无
//功能概要：设置用户可用中断的中断服务例程，所设置中断服务例程执行代码见isr.c中定义
//======================================================================
void Int_Handler_init();
//本例程定义的中断服务例程----------------------------------------------------
void  __attribute__((weak)) GPIO0_Handler(void);   //GPIO0中断
void  __attribute__((weak)) GPIO1_Handler(void);   //GPIO1中断
void  __attribute__((weak)) UARTA_Handler(void);   //UART0接收中断
void  __attribute__((weak)) UARTC_Handler(void);   //UART2接收中断
void  __attribute__((weak)) I2C0_Handler(void);    //I2C0接收中断
void  __attribute__((weak)) I2C1_Handler(void);    //I2C1接收中断
void  __attribute__((weak)) SPI0_Handler(void);    //SPI0接收中断
void  __attribute__((weak)) SPI1_Handler(void);    //SPI1接收中断

void  __attribute__((weak)) TIMER0_Handler(void);   //Timer定时器中断

void  __attribute__((weak)) TPM0_Handler(void);    //TPM0定时器/输入捕捉中断
void  __attribute__((weak)) TPM1_Handler(void);    //TPM1定时器/输入捕捉中断
void  __attribute__((weak)) TPM2_Handler(void);    //TPM2定时器/输入捕捉中断

//----------------------------------------------------------------------


//===========================================================
//（1）GEC引脚名与内部MCU引脚对应关系
//功能引脚定义
#define  GND        //地
#define  P5V        //5V电源
#define  P3V3       //3V3电源
#define  GNSS_ANT   //北斗/GPS天线引脚名称
#define  MAIN_ANT   //主通信模组引脚名称
#define  DBG_TXD    //主通信模组调试串口输出引脚名称
#define  DBG_RXD    //主通信模组调试串口输入引脚名称
#define  SWD_DIO    //SWD数据输入引脚名称
#define  SWD_CLK    //SWD时钟信号引脚名称
//端口号地址偏移量宏定义
#define PTA_NUM    (0<<8)
#define PTB_NUM    (1<<8)
#define PTC_NUM    (2<<8)
#define PTD_NUM    (3<<8)
#define PTE_NUM    (4<<8)
//GEC引脚定义
#define  GEC_1     PTD_NUM|4
#define  GEC_2     PTD_NUM|5

#define  GEC_3     PTE_NUM|16
#define  GEC_4     PTE_NUM|17
#define  GEC_5     PTE_NUM|18
#define  GEC_6     PTE_NUM|19
#define  GEC_7     PTB_NUM|0
#define  GEC_8     PTB_NUM|1
#define  GEC_9     PTD_NUM|6

#define  GEC_10    PTA_NUM|4
#define  GEC_11    PTA_NUM|19
#define  GEC_12    PTB_NUM|17
#define  GEC_13    NC
#define  GEC_14    PTD_NUM|7

#define  GEC_15    PTA_NUM|20
#define  GEC_16    P3V3
#define  GEC_17    SWD_CLK
#define  GEC_18    SWD_DIO
#define  GEC_19    GND
#define  GEC_20    PTA_NUM|2
#define  GEC_21    PTA_NUM|1
#define  GEC_22    P5V
#define  GEC_23    GND
#define  GEC_24    PTE_NUM|0
#define  GEC_25    PTE_NUM|1
#define  GEC_26    PTB_NUM|2
#define  GEC_27    PTC_NUM|1
#define  GEC_28    PTC_NUM|2

//（2）GPIO引脚定义
////GPIOA模块（具有中断功能）对应KL36的A、C、D端口
#define  GPIO_1    GEC_21
#define  GPIO_2    GEC_20
#define  GPIO_3    GEC_10
#define  GPIO_4    GEC_11

#define  GPIO_5    GEC_27
#define  GPIO_6    GEC_28

#define  GPIO_7    GEC_1
#define  GPIO_8    GEC_2
#define  GPIO_9    GEC_9
#define  GPIO_10   GEC_14

//GPIOC模块（无中断功能）-对应KL36的E、B端口
#define  GPIO_11   GEC_7
#define  GPIO_12   GEC_8
#define  GPIO_13   GEC_26
#define  GPIO_14   GEC_12

#define  GPIO_15   GEC_24
#define  GPIO_16   GEC_25
#define  GPIO_17   GEC_3
#define  GPIO_18   GEC_4
#define  GPIO_19   GEC_5
#define  GPIO_20   GEC_6

//（3）UART模块引脚说明
//UART模块定义
#define UARTA  0  //TX引脚： GEC_20；RX引脚： GEC_21
#define UARTB  1  //TX引脚： GEC_24；RX引脚： GEC_25
#define UARTC  2  //TX引脚： GEC_9；RX引脚： GEC_1

//（4）ADC通道定义与引脚说明
//通道选择
#define MUXSEL_A     0    //选择端口的A通道
#define MUXSEL_B     1    //选择端口的B通道
//ADC通道定义                  通道号|通道组<<8
//差分引脚定义
//ADC_PIN1、ADC_PIN2可以合成一个差分引脚
#define ADC_PIN1   (1 |MUXSEL_A<<8)   //所在引脚：GEC_3(PTE16),ADC0_SE1a/DP1
#define ADC_PIN2   (5 |MUXSEL_A<<8)   //所在引脚：GEC_4(PTE17),ADC0_SE5/DM1
//ADC_PIN3、ADC_PIN4可以合成一个差分引脚
#define ADC_PIN3   (2 |MUXSEL_A<<8)   //所在引脚：GEC_5(PTE18),ADC0_SE2/DP2
#define ADC_PIN4   (6 |MUXSEL_A<<8)   //所在引脚：GEC_6(PTE19),ADC0_SE6a/DM2
//单端引脚定义
#define ADC_PIN5   (8 |MUXSEL_A<<8)   //所在引脚：GEC_7(PTB0),ADC0_SE8
#define ADC_PIN6   (9 |MUXSEL_A<<8)   //所在引脚：GEC_8(PTB1),ADC0_SE9
#define ADC_PIN7   (7 |MUXSEL_B<<8)   //所在引脚：GEC_9(PTD6),ADC0_SE7b

//（4）SPI通道定义与引脚说明
//SS引脚： GEC_3(PTE16)；SCK引脚： GEC_4(PTE17)
//MOSI引脚： GEC_5(PTE18)；MISO引脚： GEC_6(PTE19)
#define SPIA  0
//SS引脚： GEC_1(PTD4)；SCK引脚： GEC_2(PTD5)
//MOSI引脚： GEC_9(PTD6)；MISO引脚：GEC_14(PTD7)
#define SPIB  1

//（5）I2C通道定义与引脚说明
//I2C模块定义
#define I2CA        0    //SDA引脚： GEC_26(PTB2)；SCL引脚： GEC_8(PTB1)
#define I2CB        1    //SDA引脚： GEC_27(PTC1)；SCL引脚： GEC_28(PTC2)

//（6）PWM通道定义与引脚说明
//PWM引脚定义
#define  PWM_PIN0  GEC_27  //GEC_27(PTC1)
#define  PWM_PIN1  GEC_28  //GEC_28(PTC2)
#define  PWM_PIN2  GEC_1   //GEC_1(PTD4)
#define  PWM_PIN3  GEC_8   //GEC_8(PTB1)
#define  PWM_PIN4  GEC_21  //GEC_21(PTA1)
#define  PWM_PIN5  GEC_7   //GEC_7(PTB0)

//不需硬件对应的模块
//（7）定时器定义
//#define TIMER0 LPTMR0
#define TIMER1  1   //TPM1
#define TIMER2  2   //TPM2
//TPM0用于PWM、INCAP、OUTCMP


//（8）DMA通道定义
#define DMA_CH0  0  //通道0
#define DMA_CH1  1  //通道1
#define DMA_CH2  2  //通道2
#define DMA_CH3  3  //通道3

//(9)PIT定时器定义与引脚说明
#define PIT0 0       //无引脚说明
#define PIT1 1       //无引脚说明

#endif  //防止重复定义（结尾）
