#ifndef _LMCAL_EXMC_CFG_H
#define _LMCAL_EXMC_CFG_H

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

#include "gd32f4xx_gpio.h"

//******************************************* Определения типов *********************************************

// Размер одного слова в байтах
// Доступные значения: u8, u16, u32
typedef u32     lmcal_exmc_t;

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

// Размер одного слова в байтах (должно соответствовать lmcal_exmc_t)
// Доступные значения: 1, 2, 4
#define LMCAL_EXMC_WSIZE                (4)

// Выводы чипа для инициализации в port (на усмотрение пользователя)
// SDRAM
#define LMCAL_SDRAM_D0_PORT             (GPIOD)
#define LMCAL_SDRAM_D0_PIN              (GPIO_PIN_14)
#define LMCAL_SDRAM_D1_PORT             (GPIOD)
#define LMCAL_SDRAM_D1_PIN              (GPIO_PIN_15)
#define LMCAL_SDRAM_D2_PORT             (GPIOD)
#define LMCAL_SDRAM_D2_PIN              (GPIO_PIN_0)
#define LMCAL_SDRAM_D3_PORT             (GPIOD)
#define LMCAL_SDRAM_D3_PIN              (GPIO_PIN_1)
#define LMCAL_SDRAM_D4_PORT             (GPIOE)
#define LMCAL_SDRAM_D4_PIN              (GPIO_PIN_7)
#define LMCAL_SDRAM_D5_PORT             (GPIOE)
#define LMCAL_SDRAM_D5_PIN              (GPIO_PIN_8)
#define LMCAL_SDRAM_D6_PORT             (GPIOE)
#define LMCAL_SDRAM_D6_PIN              (GPIO_PIN_9)
#define LMCAL_SDRAM_D7_PORT             (GPIOE)
#define LMCAL_SDRAM_D7_PIN              (GPIO_PIN_10)
#define LMCAL_SDRAM_D8_PORT             (GPIOE)
#define LMCAL_SDRAM_D8_PIN              (GPIO_PIN_11)
#define LMCAL_SDRAM_D9_PORT             (GPIOE)
#define LMCAL_SDRAM_D9_PIN              (GPIO_PIN_12)
#define LMCAL_SDRAM_D10_PORT            (GPIOE)
#define LMCAL_SDRAM_D10_PIN             (GPIO_PIN_13)
#define LMCAL_SDRAM_D11_PORT            (GPIOE)
#define LMCAL_SDRAM_D11_PIN             (GPIO_PIN_14)
#define LMCAL_SDRAM_D12_PORT            (GPIOE)
#define LMCAL_SDRAM_D12_PIN             (GPIO_PIN_15)
#define LMCAL_SDRAM_D13_PORT            (GPIOD)
#define LMCAL_SDRAM_D13_PIN             (GPIO_PIN_8)
#define LMCAL_SDRAM_D14_PORT            (GPIOD)
#define LMCAL_SDRAM_D14_PIN             (GPIO_PIN_9)
#define LMCAL_SDRAM_D15_PORT            (GPIOD)
#define LMCAL_SDRAM_D15_PIN             (GPIO_PIN_10)

#define LMCAL_SDRAM_A0_PORT             (GPIOF)
#define LMCAL_SDRAM_A0_PIN              (GPIO_PIN_0)
#define LMCAL_SDRAM_A1_PORT             (GPIOF)
#define LMCAL_SDRAM_A1_PIN              (GPIO_PIN_1)
#define LMCAL_SDRAM_A2_PORT             (GPIOF)
#define LMCAL_SDRAM_A2_PIN              (GPIO_PIN_2)
#define LMCAL_SDRAM_A3_PORT             (GPIOF)
#define LMCAL_SDRAM_A3_PIN              (GPIO_PIN_3)
#define LMCAL_SDRAM_A4_PORT             (GPIOF)
#define LMCAL_SDRAM_A4_PIN              (GPIO_PIN_4)
#define LMCAL_SDRAM_A5_PORT             (GPIOF)
#define LMCAL_SDRAM_A5_PIN              (GPIO_PIN_5)
#define LMCAL_SDRAM_A6_PORT             (GPIOF)
#define LMCAL_SDRAM_A6_PIN              (GPIO_PIN_12)
#define LMCAL_SDRAM_A7_PORT             (GPIOF)
#define LMCAL_SDRAM_A7_PIN              (GPIO_PIN_13)
#define LMCAL_SDRAM_A8_PORT             (GPIOF)
#define LMCAL_SDRAM_A8_PIN              (GPIO_PIN_14)
#define LMCAL_SDRAM_A9_PORT             (GPIOF)
#define LMCAL_SDRAM_A9_PIN              (GPIO_PIN_15)
#define LMCAL_SDRAM_A10_PORT            (GPIOG)
#define LMCAL_SDRAM_A10_PIN             (GPIO_PIN_0)
#define LMCAL_SDRAM_A11_PORT            (GPIOG)
#define LMCAL_SDRAM_A11_PIN             (GPIO_PIN_1)
#define LMCAL_SDRAM_A12_PORT            (GPIOG)
#define LMCAL_SDRAM_A12_PIN             (GPIO_PIN_2)
// или A14
#define LMCAL_SDRAM_BA0_PORT            (GPIOG) 
#define LMCAL_SDRAM_BA0_PIN             (GPIO_PIN_4)
// или A15
#define LMCAL_SDRAM_BA1_PORT            (GPIOG)
#define LMCAL_SDRAM_BA1_PIN             (GPIO_PIN_5)

// SDNE0
#define LMCAL_SDRAM_NE0_PORT            (GPIOC)
#define LMCAL_SDRAM_NE0_PIN             (GPIO_PIN_2)

// SDCKE0
#define LMCAL_SDRAM_KE0_PORT            (GPIOC)
#define LMCAL_SDRAM_KE0_PIN             (GPIO_PIN_3)

// SDNRAS
#define LMCAL_SDRAM_RAS_PORT            (GPIOF)
#define LMCAL_SDRAM_RAS_PIN             (GPIO_PIN_11)

// SDCLK
#define LMCAL_SDRAM_CLK_PORT            (GPIOG)
#define LMCAL_SDRAM_CLK_PIN             (GPIO_PIN_8)

// NCAS
#define LMCAL_SDRAM_CAS_PORT            (GPIOG)
#define LMCAL_SDRAM_CAS_PIN             (GPIO_PIN_15)

// SDNWE
#define LMCAL_SDRAM_NWE_PORT            (GPIOC)
#define LMCAL_SDRAM_NWE_PIN             (GPIO_PIN_0)


//---------------------------------------------------------
// Канал 0 - SDRAM (32 MByte = 0x02000000)
//---------------------------------------------------------

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

// Начальный адрес канала в памяти
// Доступные значения: 0x00000000...0xFFFFFFFF
#define LMCAL_EXMC_CH0_ADDR                 (0xC0000000)

// Количество памяти канала В СЛОВАХ (должно быть кратно LMCAL_EXMC_WSIZE)
// Доступные значения: 0x00000000...0xFFFFFFFF
#define LMCAL_EXMC_CH0_SIZE                 (524288) // 2Mbyte, 512 * 1024 = 524288 * 4 = 2097152

// Конец секции
// Можно использовать, как начальный адрес для следующего канала
#define LMCAL_EXMC_CH0_ADDR_END            (LMCAL_EXMC_CH0_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH0_SIZE)


//---------------------------------------------------------
// Канал 1
//---------------------------------------------------------
#define LMCAL_EXMC_CH1_ENABLE              (1)
#define LMCAL_EXMC_CH1_ADDR                (LMCAL_EXMC_CH0_ADDR_END)
#define LMCAL_EXMC_CH1_SIZE                (524288)
#define LMCAL_EXMC_CH1_ADDR_END            (LMCAL_EXMC_CH1_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH1_SIZE)


//---------------------------------------------------------
// Канал 2
//---------------------------------------------------------
#define LMCAL_EXMC_CH2_ENABLE              (1)
#define LMCAL_EXMC_CH2_ADDR                (LMCAL_EXMC_CH1_ADDR_END)
#define LMCAL_EXMC_CH2_SIZE                (524288)
#define LMCAL_EXMC_CH2_ADDR_END            (LMCAL_EXMC_CH2_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH2_SIZE)


//---------------------------------------------------------
// Канал 3
//---------------------------------------------------------
#define LMCAL_EXMC_CH3_ENABLE              (1)
#define LMCAL_EXMC_CH3_ADDR                (LMCAL_EXMC_CH2_ADDR_END)
#define LMCAL_EXMC_CH3_SIZE                (524288)
#define LMCAL_EXMC_CH3_ADDR_END            (LMCAL_EXMC_CH3_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH3_SIZE)


//---------------------------------------------------------
// Канал 4
//---------------------------------------------------------
#define LMCAL_EXMC_CH4_ENABLE              (1)
#define LMCAL_EXMC_CH4_ADDR                (LMCAL_EXMC_CH3_ADDR_END)
#define LMCAL_EXMC_CH4_SIZE                (524288)
#define LMCAL_EXMC_CH4_ADDR_END            (LMCAL_EXMC_CH4_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH4_SIZE)


//---------------------------------------------------------
// Канал 5
//---------------------------------------------------------
#define LMCAL_EXMC_CH5_ENABLE              (1)
#define LMCAL_EXMC_CH5_ADDR                (LMCAL_EXMC_CH4_ADDR_END)
#define LMCAL_EXMC_CH5_SIZE                (524288)
#define LMCAL_EXMC_CH5_ADDR_END            (LMCAL_EXMC_CH5_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH5_SIZE)


//---------------------------------------------------------
// Канал 6
//---------------------------------------------------------
#define LMCAL_EXMC_CH6_ENABLE              (1)
#define LMCAL_EXMC_CH6_ADDR                (LMCAL_EXMC_CH5_ADDR_END)
#define LMCAL_EXMC_CH6_SIZE                (524288)
#define LMCAL_EXMC_CH6_ADDR_END            (LMCAL_EXMC_CH6_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH6_SIZE)


//---------------------------------------------------------
// Канал 7
//---------------------------------------------------------
#define LMCAL_EXMC_CH7_ENABLE              (1)
#define LMCAL_EXMC_CH7_ADDR                (LMCAL_EXMC_CH6_ADDR_END)
#define LMCAL_EXMC_CH7_SIZE                (524288)
#define LMCAL_EXMC_CH7_ADDR_END            (LMCAL_EXMC_CH7_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH7_SIZE)


//---------------------------------------------------------
// Канал 8
//---------------------------------------------------------
#define LMCAL_EXMC_CH8_ENABLE              (1)
#define LMCAL_EXMC_CH8_ADDR                (LMCAL_EXMC_CH7_ADDR_END)
#define LMCAL_EXMC_CH8_SIZE                (524288)
#define LMCAL_EXMC_CH8_ADDR_END            (LMCAL_EXMC_CH8_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH8_SIZE)


//---------------------------------------------------------
// Канал 9
//---------------------------------------------------------
#define LMCAL_EXMC_CH9_ENABLE              (1)
#define LMCAL_EXMC_CH9_ADDR                (LMCAL_EXMC_CH8_ADDR_END)
#define LMCAL_EXMC_CH9_SIZE                (524288)
#define LMCAL_EXMC_CH9_ADDR_END            (LMCAL_EXMC_CH9_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH9_SIZE)


//---------------------------------------------------------
// Канал 10
//---------------------------------------------------------
#define LMCAL_EXMC_CH10_ENABLE              (1)
#define LMCAL_EXMC_CH10_ADDR                (LMCAL_EXMC_CH9_ADDR_END)
#define LMCAL_EXMC_CH10_SIZE                (524288)
#define LMCAL_EXMC_CH10_ADDR_END            (LMCAL_EXMC_CH10_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH10_SIZE)


//---------------------------------------------------------
// Канал 11
//---------------------------------------------------------
#define LMCAL_EXMC_CH11_ENABLE              (1)
#define LMCAL_EXMC_CH11_ADDR                (LMCAL_EXMC_CH10_ADDR_END)
#define LMCAL_EXMC_CH11_SIZE                (524288)
#define LMCAL_EXMC_CH11_ADDR_END            (LMCAL_EXMC_CH11_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH11_SIZE)


//---------------------------------------------------------
// Канал 12
//---------------------------------------------------------
#define LMCAL_EXMC_CH12_ENABLE              (1)
#define LMCAL_EXMC_CH12_ADDR                (LMCAL_EXMC_CH11_ADDR_END)
#define LMCAL_EXMC_CH12_SIZE                (524288)
#define LMCAL_EXMC_CH12_ADDR_END            (LMCAL_EXMC_CH12_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH12_SIZE)


//---------------------------------------------------------
// Канал 13
//---------------------------------------------------------
#define LMCAL_EXMC_CH13_ENABLE              (1)
#define LMCAL_EXMC_CH13_ADDR                (LMCAL_EXMC_CH12_ADDR_END)
#define LMCAL_EXMC_CH13_SIZE                (524288)
#define LMCAL_EXMC_CH13_ADDR_END            (LMCAL_EXMC_CH13_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH13_SIZE)


//---------------------------------------------------------
// Канал 14
//---------------------------------------------------------
#define LMCAL_EXMC_CH14_ENABLE              (1)
#define LMCAL_EXMC_CH14_ADDR                (LMCAL_EXMC_CH13_ADDR_END)
#define LMCAL_EXMC_CH14_SIZE                (524288)
#define LMCAL_EXMC_CH14_ADDR_END            (LMCAL_EXMC_CH14_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH14_SIZE)


//---------------------------------------------------------
// Канал 15
//---------------------------------------------------------
#define LMCAL_EXMC_CH15_ENABLE              (1)
#define LMCAL_EXMC_CH15_ADDR                (LMCAL_EXMC_CH14_ADDR_END)
#define LMCAL_EXMC_CH15_SIZE                (524288)
#define LMCAL_EXMC_CH15_ADDR_END            (LMCAL_EXMC_CH15_ADDR + LMCAL_EXMC_WSIZE * LMCAL_EXMC_CH15_SIZE)



//******************************************* Проверка параметров *******************************************

// Нет


#endif

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