#ifndef _LMCAL_SPI_CFG_H
#define _LMCAL_SPI_CFG_H

//******************************************** Включаемые файлы *********************************************

#include "at32f403a_407_gpio.h"
#include "at32f403a_407_spi.h"


//******************************************* Локальные константы *******************************************

// Номера SPI в цифровом формате
#define LMCAL_SPI0                   (SPI1)
#define LMCAL_SPI1                   (SPI2)
#define LMCAL_SPI2                   (SPI3)
#define LMCAL_SPI3                   (SPI4)
#define LMCAL_SPI4                   (4U)
#define LMCAL_SPI5                   (5U)
#define LMCAL_SPI6                   (6U)
#define LMCAL_SPI7                   (7U)
#define LMCAL_SPI8                   (8U)
#define LMCAL_SPI9                   (9U)
#define LMCAL_SPI10                  (10U)

// Номера портов в буквенном формате
#define LMCAL_SPI_PORTA              (GPIOA)
#define LMCAL_SPI_PORTB              (GPIOB)
#define LMCAL_SPI_PORTC              (GPIOC)
#define LMCAL_SPI_PORTD              (GPIOD)
#define LMCAL_SPI_PORTE              (GPIOE)
#define LMCAL_SPI_PORTF              (5U)
#define LMCAL_SPI_PORTG              (6U)
#define LMCAL_SPI_PORTH              (7U)
#define LMCAL_SPI_PORTI              (8U)

// Номера портов в цифровом формате
#define LMCAL_SPI_PORT0              (GPIOA)
#define LMCAL_SPI_PORT1              (GPIOB)
#define LMCAL_SPI_PORT2              (GPIOC)
#define LMCAL_SPI_PORT3              (GPIOD)
#define LMCAL_SPI_PORT4              (GPIOE)
#define LMCAL_SPI_PORT5              (5U)
#define LMCAL_SPI_PORT6              (6U)
#define LMCAL_SPI_PORT7              (7U)
#define LMCAL_SPI_PORT8              (8U)
#define LMCAL_SPI_PORT_NONE          (0xFFFFFFFF)

// Номера пинов в цифровом формате
#define LMCAL_SPI_PIN0               (GPIO_PINS_0)
#define LMCAL_SPI_PIN1               (GPIO_PINS_1)
#define LMCAL_SPI_PIN2               (GPIO_PINS_2)
#define LMCAL_SPI_PIN3               (GPIO_PINS_3)
#define LMCAL_SPI_PIN4               (GPIO_PINS_4)
#define LMCAL_SPI_PIN5               (GPIO_PINS_5)
#define LMCAL_SPI_PIN6               (GPIO_PINS_6)
#define LMCAL_SPI_PIN7               (GPIO_PINS_7)
#define LMCAL_SPI_PIN8               (GPIO_PINS_8)
#define LMCAL_SPI_PIN9               (GPIO_PINS_9)
#define LMCAL_SPI_PIN10              (GPIO_PINS_10)
#define LMCAL_SPI_PIN11              (GPIO_PINS_11)
#define LMCAL_SPI_PIN12              (GPIO_PINS_12)
#define LMCAL_SPI_PIN13              (GPIO_PINS_13)
#define LMCAL_SPI_PIN14              (GPIO_PINS_14)
#define LMCAL_SPI_PIN15              (GPIO_PINS_15)
#define LMCAL_SPI_PIN16              (16U)
#define LMCAL_SPI_PIN17              (17U)
#define LMCAL_SPI_PIN18              (18U)
#define LMCAL_SPI_PIN19              (19U)
#define LMCAL_SPI_PIN20              (20U)
#define LMCAL_SPI_PIN21              (21U)
#define LMCAL_SPI_PIN22              (22U)
#define LMCAL_SPI_PIN23              (23U)
#define LMCAL_SPI_PIN24              (24U)
#define LMCAL_SPI_PIN25              (25U)
#define LMCAL_SPI_PIN26              (26U)
#define LMCAL_SPI_PIN27              (27U)
#define LMCAL_SPI_PIN28              (28U)
#define LMCAL_SPI_PIN29              (29U)
#define LMCAL_SPI_PIN30              (30U)
#define LMCAL_SPI_PIN31              (31U)
#define LMCAL_SPI_PIN_NONE           (0xFFFFFFFF)

// Режимы работы SPI
#define LMCAL_SPI_MODE_MASTER        (SPI_MODE_MASTER)
#define LMCAL_SPI_MODE_SLAVE         (SPI_MODE_SLAVE)

// Размер слова в битах
#define LMCAL_SPI_FRAME_8BIT         (SPI_FRAME_8BIT)
#define LMCAL_SPI_FRAME_16BIT        (SPI_FRAME_16BIT)
#define LMCAL_SPI_FRAME_24BIT        (2U)
#define LMCAL_SPI_FRAME_32BIT        (3U)

// Порядок бит в слове
#define LMCAL_SPI_FIRST_BIT_MSB      (SPI_FIRST_BIT_MSB)
#define LMCAL_SPI_FIRST_BIT_LSB      (SPI_FIRST_BIT_LSB)

// Полярность линии CLK
#define LMCAL_SPI_CLK_POL_LOW        (SPI_CLOCK_POLARITY_LOW)
#define LMCAL_SPI_CLK_POL_HIGH       (SPI_CLOCK_POLARITY_HIGH)

// Фаза линии CLK
#define LMCAL_SPI_CLK_PHA_1EDGE      (SPI_CLOCK_PHASE_1EDGE)
#define LMCAL_SPI_CLK_PHA_2EDGE      (SPI_CLOCK_PHASE_2EDGE)



//************************************ Глобальные (публичные) константы *************************************

//---------------------------------------------------------
// Канал 0 - Для примера с синхронным обменом
//---------------------------------------------------------

// Включить или отключить канал
// Доступные значения: ON\OFF, 1\0
#define LMCAL_SPI_CH0_ENABLE            (OFF)

// Включить или отключить асинхронный режим работы драйвера.
// Если выключен, то исползуются функции с блокированием.
// Доступные значения: ON\OFF, 1\0
#define LMCAL_SPI_CH0_ASYNC_MODE        (OFF)

// Режим работы SPI.
// Доступные значения: LMCAL_SPI_MODE_MASTER, LMCAL_SPI_MODE_SLAVE
#define LMCAL_SPI_CH0_MODE              (LMCAL_SPI_MODE_MASTER)

// Номер аппаратного SPI.
// Доступные значения: LMCAL_SPI0..LMCAL_SPI10
#define LMCAL_SPI_CH0_SPI_NUM           (LMCAL_SPI0)

// Скорость обмена в бод\с.
// Доступные значения: зависит от МК
#define LMCAL_SPI_CH0_BAUDRATE          (2000000U)

// Размер одного слова данных.
// Доступные значения: LMCAL_SPI_FRAME_8BIT, LMCAL_SPI_FRAME_16BIT
#define LMCAL_SPI_CH0_FRAME_SIZE        (LMCAL_SPI_FRAME_8BIT)

// Порядок бит в слове данных.
// Доступные значения: LMCAL_SPI_FIRST_BIT_MSB, LMCAL_SPI_FIRST_BIT_LSB
#define LMCAL_SPI_CH0_BIT_ORDER         (LMCAL_SPI_FIRST_BIT_MSB)

// Полярность линии CLK.
// Доступные значения: LMCAL_SPI_CLK_POL_LOW, LMCAL_SPI_CLK_POL_HIGH
#define LMCAL_SPI_CH0_CLK_POL           (LMCAL_SPI_CLK_POL_LOW)

// Фаза линии CLK.
// Доступные значения: LMCAL_SPI_CLK_PHA_1EDGE, LMCAL_SPI_CLK_PHA_2EDGE
#define LMCAL_SPI_CH0_CLK_PHA           (LMCAL_SPI_CLK_PHA_1EDGE)

// Номер порта MOSI.
// Доступные значения: LMCAL_SPI_PORTA..LMCAL_SPI_PORTH или LMCAL_SPI_PORT0..LMCAL_SPI_PORT7
#define LMCAL_SPI_CH0_MOSI_PORT         (LMCAL_SPI_PORTA)

// Номер ножки MOSI.
// Доступные значения: LMCAL_SPI_PIN0...LMCAL_SPI_PIN31
#define LMCAL_SPI_CH0_MOSI_PIN          (LMCAL_SPI_PIN7)

// Номер порта MISO.
// Доступные значения: LMCAL_SPI_PORTA..LMCAL_SPI_PORTH или LMCAL_SPI_PORT0..LMCAL_SPI_PORT7
#define LMCAL_SPI_CH0_MISO_PORT         (LMCAL_SPI_PORTA)

// Номер ножки MISO.
// Доступные значения: LMCAL_SPI_PIN0...LMCAL_SPI_PIN31
#define LMCAL_SPI_CH0_MISO_PIN          (LMCAL_SPI_PIN6)

// Номер порта CLK.
// Доступные значения: LMCAL_SPI_PORTA..LMCAL_SPI_PORTH или LMCAL_SPI_PORT0..LMCAL_SPI_PORT7
#define LMCAL_SPI_CH0_CLK_PORT          (LMCAL_SPI_PORTA)

// Номер ножки CLK.
// Доступные значения: LMCAL_SPI_PIN0...LMCAL_SPI_PIN31
#define LMCAL_SPI_CH0_CLK_PIN           (LMCAL_SPI_PIN5)

// Номер порта CS.
// Доступные значения: LMCAL_SPI_PORTA..LMCAL_SPI_PORTH или LMCAL_SPI_PORT0..LMCAL_SPI_PORT7
#define LMCAL_SPI_CH0_CS_PORT           (LMCAL_SPI_PORTC)

// Номер ножки CS.
// Доступные значения: LMCAL_SPI_PIN0...LMCAL_SPI_PIN31
#define LMCAL_SPI_CH0_CS_PIN            (LMCAL_SPI_PIN5)



//---------------------------------------------------------
// Канал 1 - Для примера с синхронным обменом (другой CS)
//---------------------------------------------------------
#define LMCAL_SPI_CH1_ENABLE             (OFF)
#define LMCAL_SPI_CH1_ASYNC_MODE         (OFF)
#define LMCAL_SPI_CH1_MODE               (LMCAL_SPI_MODE_MASTER)
#define LMCAL_SPI_CH1_SPI_NUM            (LMCAL_SPI0)
#define LMCAL_SPI_CH1_BAUDRATE           (2000000U)
#define LMCAL_SPI_CH1_FRAME_SIZE         (LMCAL_SPI_FRAME_8BIT)
#define LMCAL_SPI_CH1_BIT_ORDER          (LMCAL_SPI_FIRST_BIT_MSB)
#define LMCAL_SPI_CH1_CLK_POL            (LMCAL_SPI_CLK_POL_LOW)
#define LMCAL_SPI_CH1_CLK_PHA            (LMCAL_SPI_CLK_PHA_1EDGE)
#define LMCAL_SPI_CH1_MOSI_PORT          (LMCAL_SPI_PORTA)
#define LMCAL_SPI_CH1_MOSI_PIN           (LMCAL_SPI_PIN7)
#define LMCAL_SPI_CH1_MISO_PORT          (LMCAL_SPI_PORTA)
#define LMCAL_SPI_CH1_MISO_PIN           (LMCAL_SPI_PIN6)
#define LMCAL_SPI_CH1_CLK_PORT           (LMCAL_SPI_PORTA)
#define LMCAL_SPI_CH1_CLK_PIN            (LMCAL_SPI_PIN5)
#define LMCAL_SPI_CH1_CS_PORT            (LMCAL_SPI_PORTC)
#define LMCAL_SPI_CH1_CS_PIN             (LMCAL_SPI_PIN4)



//---------------------------------------------------------
// Канал 2 - Для примера с асинхронным обменом
//---------------------------------------------------------
#define LMCAL_SPI_CH2_ENABLE             (ON)
#define LMCAL_SPI_CH2_ASYNC_MODE         (ON)
#define LMCAL_SPI_CH2_MODE               (LMCAL_SPI_MODE_MASTER)
#define LMCAL_SPI_CH2_SPI_NUM            (LMCAL_SPI0)
#define LMCAL_SPI_CH2_BAUDRATE           (1000000U)
#define LMCAL_SPI_CH2_FRAME_SIZE         (LMCAL_SPI_FRAME_8BIT)
#define LMCAL_SPI_CH2_BIT_ORDER          (LMCAL_SPI_FIRST_BIT_MSB)
#define LMCAL_SPI_CH2_CLK_POL            (LMCAL_SPI_CLK_POL_LOW)
#define LMCAL_SPI_CH2_CLK_PHA            (LMCAL_SPI_CLK_PHA_1EDGE)
#define LMCAL_SPI_CH2_MOSI_PORT          (LMCAL_SPI_PORTA)
#define LMCAL_SPI_CH2_MOSI_PIN           (LMCAL_SPI_PIN7)
#define LMCAL_SPI_CH2_MISO_PORT          (LMCAL_SPI_PORTA)
#define LMCAL_SPI_CH2_MISO_PIN           (LMCAL_SPI_PIN6)
#define LMCAL_SPI_CH2_CLK_PORT           (LMCAL_SPI_PORTA)
#define LMCAL_SPI_CH2_CLK_PIN            (LMCAL_SPI_PIN5)
#define LMCAL_SPI_CH2_CS_PORT            (LMCAL_SPI_PORTC)
#define LMCAL_SPI_CH2_CS_PIN             (LMCAL_SPI_PIN4)



//---------------------------------------------------------
// Канал 3
//---------------------------------------------------------
#define LMCAL_SPI_CH3_ENABLE             (OFF)
#define LMCAL_SPI_CH3_ASYNC_MODE         (OFF)
#define LMCAL_SPI_CH3_MODE               (LMCAL_SPI_MODE_MASTER)
#define LMCAL_SPI_CH3_SPI_NUM            (LMCAL_SPI0)
#define LMCAL_SPI_CH3_BAUDRATE           (1000000U)
#define LMCAL_SPI_CH3_FRAME_SIZE         (LMCAL_SPI_FRAME_8BIT)
#define LMCAL_SPI_CH3_BIT_ORDER          (LMCAL_SPI_FIRST_BIT_MSB)
#define LMCAL_SPI_CH3_CLK_POL            (LMCAL_SPI_CLK_POL_LOW)
#define LMCAL_SPI_CH3_CLK_PHA            (LMCAL_SPI_CLK_PHA_1EDGE)
#define LMCAL_SPI_CH3_MOSI_PORT          (LMCAL_SPI_PORT0)
#define LMCAL_SPI_CH3_MOSI_PIN           (LMCAL_SPI_PIN0)
#define LMCAL_SPI_CH3_MISO_PORT          (LMCAL_SPI_PORT0)
#define LMCAL_SPI_CH3_MISO_PIN           (LMCAL_SPI_PIN0)
#define LMCAL_SPI_CH3_CLK_PORT           (LMCAL_SPI_PORT0)
#define LMCAL_SPI_CH3_CLK_PIN            (LMCAL_SPI_PIN0)
#define LMCAL_SPI_CH3_CS_PORT            (LMCAL_SPI_PORT0)
#define LMCAL_SPI_CH3_CS_PIN             (LMCAL_SPI_PIN0)



#endif


//*********************************************** КОНЕЦ ФАЙЛА ***********************************************
