/*==============================================================================
 * Конфигурация портов с использованием бибилотеки PLIB035
 *------------------------------------------------------------------------------
 * ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
 *==============================================================================
 * Реализация функций инициализации портов находится в gpio.c
 *                                  ЦНИИ СЭТ
 *==============================================================================
 */
#ifndef __PERIPH_CONFIG_H
#define __PERIPH_CONFIG_H
//-- Includes ------------------------------------------------------------------
#include "sysclk.h"
#include "gpio.h"
#include "uart.h"
#include "tmr.h"
#include "adc.h"
void Error_Handler(void);

//-- Общие Конфигурации -------------------------------------------------------
// 0 - использовать периферию, 1 - не использовать
#define USE_UART0     0
#define USE_UART1     1

#define USE_TMR0      1
#define USE_TMR1      1
#define USE_TMR2      1
#define USE_TMR3      0

#define USE_ADC_SEQ0  1
#define USE_ADC_SEQ1  0
#define USE_ADC_DC0  0
#define USE_ADC_DC1  0
#define USE_ADC_DC2  0
#define USE_ADC_DC3  0

//#define RETARGET    // закоментирован  - отключен, 
//                    // разкоментирован - включен
//#define RETARGET_USE_ITM  // закоментирован - использовать UART, 
//                          // разкоментирован - использовать ITM
// Для дальнейшей настройки RETARGET -> retarget_conf.h

//-- RCU Конфигурации ---------------------------------------------------------
static RCU_PLL_Ref_TypeDef SYSCLK_Oscil_Type = RCU_PLL_Ref_OSEClk;
#define SYSCLK_CORE_CLOCK_MHZ 100

//-- GPIO Конфигурации --------------------------------------------------------
/* 
  Note: 
  Периферия сама настроит нужные пины в gpiox_config на альтернативные функции
*/
static GPIO_Init_TypeDef gpioa_config[] = {
//  Пин,          Режим,                Выходной режим,   Входной режим,        Подтяжка,               Нагрузка/Скорость
  { GPIO_Pin_0,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_1,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_2,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_3,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_4,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_5,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_6,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_7,   GPIO_PinMode_Output,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_8,   GPIO_PinMode_Output,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_9,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_10,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_11,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_12,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_13,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_14,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_15,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
};

static GPIO_Init_TypeDef gpiob_config[] = {
//  Пин,          Режим,                Выходной режим,   Входной режим,        Подтяжка,               Нагрузка/Скорость
  { GPIO_Pin_0,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_1,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_2,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_3,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_4,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_5,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_6,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_7,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_8,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_9,   GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_10,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_11,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_12,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_13,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_14,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
  { GPIO_Pin_15,  GPIO_PinMode_Unused,  GPIO_OutMode_PP,  GPIO_InMode_Schmitt,  GPIO_PullMode_Disable,  GPIO_DriveMode_HighFast },
};



//-- UART Конфигурации --------------------------------------------------------
#if USE_UART0==1
static UART_ExtInit_TypeDef uart0_config = {
//Стоп биты,        Четность,                 Длина посылки,      Скорость,   FIFO,     Направление работы
  UART_StopBit_1,   UART_ParityBit_Disable,   UART_DataWidth_8,   115200,     DISABLE,  UART_Direction_RxTx,
//Rx Коллбек    Tx Коллбек    Idle Коллбек  Error Коллбек          
  NULL,         NULL,         NULL,         NULL
};
#endif

#if USE_UART1==1
static UART_ExtInit_TypeDef uart1_config = {
//Стоп биты,        Четность,                 Длина посылки,      Скорость,   FIFO,     Направление работы
  UART_StopBit_1,   UART_ParityBit_Disable,   UART_DataWidth_8,   115200,     DISABLE,  UART_Direction_RxTx,
//Rx Коллбек    Tx Коллбек    Idle Коллбек  Error Коллбек          
  NULL,         NULL,         NULL,         NULL
};
#endif



//-- TMR Конфигурации ---------------------------------------------------------
#if USE_TMR0==1
static TMR_ExtInit_TypeDef tmr0_config = {
//Частота Clk МГц,        Период обновления
  SYSCLK_CORE_CLOCK_MHZ,  LOAD(0xFFFFFFFF, SYSCLK_CORE_CLOCK_MHZ-1),
//Прерывания      Запуск конверсии АЦП  Реквест DMA   Внешнее тактирование
  DISABLE,        DISABLE,              DISABLE,      TMR_ExtInput_Disable
};
#endif

#if USE_TMR1==1
static TMR_ExtInit_TypeDef tmr1_config = {
//Частота Clk МГц,        Период обновления
  SYSCLK_CORE_CLOCK_MHZ,  FREQ_HZ(10),
//Прерывания      Запуск конверсии АЦП  Реквест DMA   Внешнее тактирование
  DISABLE,        DISABLE,              DISABLE,      TMR_ExtInput_Disable
};
#endif

#if USE_TMR2==1
static TMR_ExtInit_TypeDef tmr2_config = {
//Частота Clk МГц,        Период обновления
  SYSCLK_CORE_CLOCK_MHZ,  PERIOD_MKS(1000000),
//Прерывания      Запуск конверсии АЦП  Реквест DMA   Внешнее тактирование
  ENABLE,         DISABLE,              DISABLE,      TMR_ExtInput_Disable
};
#endif

#if USE_TMR3==1
static TMR_Init_TypeDef tmr3_config = {
//Частота Clk МГц,        Период обновления   
  SYSCLK_CORE_CLOCK_MHZ,  PERIOD_MKS(1000),
//Прерывания      Запуск конверсии АЦП  Реквест DMA   Внешнее тактирование
  DISABLE,        DISABLE,              DISABLE,      TMR_ExtInput_Disable
};
#endif

//-- ADC SEQ Конфигурации -----------------------------------------------------
static RCU_PeriphClk_TypeDef ADC_ClockSource = RCU_PeriphClk_PLLClk;
static float ADC_ClockMHz = 12.5;
#if USE_ADC_SEQ0==1
static ADC_SEQ_ExtInit_TypeDef adc_seq0_config = {
//Событие запуска секвенсора,     Разрешение программного запуска
  ADC_SEQ_StartEvent_SwReq,       ENABLE,
//Выбор каналов для запросов секвенсора
  ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//Последний запрос,     Усреднение запросов,  Усреднение запросов
  ADC_SEQ_ReqNum_1,     ADC_SEQ_Average_2,    DISABLE,
//Кол-во рестартов секвенсора,    Усреднение рестартов,   Задержка между рестартами
  0,                              DISABLE,                0,
//Разрешение каналов цифровых компараторов
  DISABLE, DISABLE, DISABLE, DISABLE,
//Настройка DMA FIFO,       Разрешение DMA
  ADC_SEQ_DMAFIFOLevel_1,   DISABLE,
  //Прерывания,     Количество запросов для прерывания
  ENABLE,           0,
//SEQ Complete Коллбек,     Error коллбек
  NULL,                     NULL
  
};
#endif
#if USE_ADC_SEQ1==1
static ADC_SEQ_ExtInit_TypeDef adc_seq1_config = {
//Событие запуска секвенсора,     Разрешение программного запуска
  ADC_SEQ_StartEvent_SwReq,       ENABLE,
//Выбор каналов для запросов секвенсора
  ADC_CH_Num_0, ADC_CH_Num_1, ADC_CH_Num_2, ADC_CH_Num_3,
//Макс. кол-во запросов,    Усреднение запросов,  Усреднение запросов
  ADC_SEQ_ReqNum_0,         ADC_SEQ_Average_2,    DISABLE,
//Кол-во рестартов секвенсора,    Усреднение рестартов,   Задержка между рестартами
  0,                              DISABLE,                0,
//Разрешение каналов цифровых компараторов
  DISABLE, DISABLE, DISABLE, DISABLE,
//Настройка DMA FIFO,       Разрешение DMA
  ADC_SEQ_DMAFIFOLevel_1,   DISABLE,
  //Прерывания,     Количество запросов для прерывания
  DISABLE,          0,
//SEQ Complete Коллбек,     Error коллбек
  NULL,                     NULL
  
};
#endif

//-- ADC DC Конфигурации ------------------------------------------------------
#if USE_ADC_DC0==1
static ADC_DC_ExtInit_TypeDef adc_dc0_config = {
//Включение выхода компаратора
  DISABLE,
//Нижний порог,     Верхний порог
  0,                0,
//Запуск измерения,     Канал,          Режим срабатывания,     Условие срабатывания
  ADC_DC_Source_EOC,    ADC_CH_Num_1,   ADC_DC_Mode_Multiple,   ADC_DC_Condition_Low,
//DC Triggered Коллбек,     Error коллбек
  NULL,                     NULL
};
#endif
#if USE_ADC_DC1==1
static ADC_DC_ExtInit_TypeDef adc_dc1_config = {
//Включение выхода компаратора
  DISABLE,
//Нижний порог,     Верхний порог
  0,                0,
//Запуск измерения,     Канал,          Режим срабатывания,     Условие срабатывания
  ADC_DC_Source_EOC,    ADC_CH_Num_2,   ADC_DC_Mode_Multiple,   ADC_DC_Condition_Low,
//DC Triggered Коллбек,     Error коллбек
  NULL,                     NULL
};
#endif
#if USE_ADC_DC2==1
static ADC_DC_ExtInit_TypeDef adc_dc2_config = {
//Включение выхода компаратора
  DISABLE,
//Нижний порог,     Верхний порог
  0,                0,
//Запуск измерения,     Канал,          Режим срабатывания,     Условие срабатывания
  ADC_DC_Source_EOC,    ADC_CH_Num_3,   ADC_DC_Mode_Multiple,   ADC_DC_Condition_Low,
//DC Triggered Коллбек,     Error коллбек
  NULL,                     NULL
};
#endif
#if USE_ADC_DC3==1
static ADC_DC_ExtInit_TypeDef adc_dc3_config = {
//Включение выхода компаратора
  DISABLE,
//Нижний порог,     Верхний порог
  0,                0,
//Запуск измерения,     Канал,          Режим срабатывания,     Условие срабатывания
  ADC_DC_Source_EOC,    ADC_CH_Num_4,   ADC_DC_Mode_Multiple,   ADC_DC_Condition_Low,
//DC Triggered Коллбек,     Error коллбек
  NULL,                     NULL
};
#endif
#endif /*__PERIPH_CONFIG_H*/
