/*==============================================================================
 * Конфигурация портов с использованием бибилотеки PLIB035
 *------------------------------------------------------------------------------
 * ЦНИИ СЭТ, Разваляев Алексей <wot890089@mail.ru>
 *==============================================================================
 * Реализация функций инициализации портов находится в gpio.c
 *                                  ЦНИИ СЭТ
 *==============================================================================
 */
#ifndef __PERIPH_CONFIG_H
#define __PERIPH_CONFIG_H
//-- Includes ------------------------------------------------------------------
#include "sysclk.h"
#include "gpio.h"
#include "tmr.h"
#include "uart.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 RETARGET    // закоментирован  - отключен, 
//                    // разкоментирован - включен
//#define RETARGET_USE_ITM  // закоментирован - использовать UART, 
//                          // разкоментирован - использовать ITM
// Для дальнейшей настройки RETARGET -> retarget_conf.h

//-- RCU Конфигурации ---------------------------------------------------------
static RCU_PLL_Ref_TypeDef SYSCLK_Oscil_Type = RCU_PLL_Ref_OSIClk;
#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 },
};


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

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

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

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



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

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



#endif /*__PERIPH_CONFIG_H*/
