/*
 * Copyright 2022 MindMotion Microelectronics Co., Ltd.
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

#ifndef __BOARD_INIT_H__
#define __BOARD_INIT_H__

#include <stdio.h>
#include <stdint.h>

#include "hal_common.h"
#include "hal_rcc.h"
#include "hal_uart.h"
#include "hal_gpio.h"
#include "hal_spi.h"
#include "hal_fsmc.h"
#include "hal_dma.h"
#include "hal_dma_request.h"

#include "clock_init.h"
#include "pin_init.h"

#include "lcd.h"
#include "ff.h"

/* DEBUG UART. */
#define BOARD_DEBUG_UART_PORT           UART1
#define BOARD_DEBUG_UART_BAUDRATE       9600u
#define BOARD_DEBUG_UART_FREQ           CLOCK_APB2_FREQ

#if 0
/* i2s. */
#define BOARD_AUDIO_I2S_PORT            SPI2
#define BOARD_AUDIO_DMA_PORT            DMA1
#define BOARD_AUDIO_DMA_CHN             DMA_REQ_DMA1_SPI2_TX
#define BOARD_AUDIO_DMA_IRQn            DMA1_CH5_IRQn
#define BOARD_AUDIO_DMA_IRQHandler      DMA1_CH5_IRQHandler
#endif

/* sd card. */
#define BOARD_SDSPI_TX_GPIO_PORT        GPIOC
#define BOARD_SDSPI_TX_GPIO_PIN         GPIO_PIN_12

#define BOARD_SDSPI_RX_GPIO_PORT        GPIOC
#define BOARD_SDSPI_RX_GPIO_PIN         GPIO_PIN_11

#define BOARD_SDSPI_CLK_GPIO_PORT       GPIOC
#define BOARD_SDSPI_CLK_GPIO_PIN        GPIO_PIN_10

#define BOARD_SDSPI_CS_GPIO_PORT        GPIOA
#define BOARD_SDSPI_CS_GPIO_PIN         GPIO_PIN_15

#define BOARD_SDSPI_SPI_PORT            SPI3

/* fsmc lcd. */
#define BOARD_LCD_BL_GPIO_PORT       GPIOE
#define BOARD_LCD_BL_GPIO_PIN        GPIO_PIN_3

#define BOARD_LCD_RST_GPIO_PORT      GPIOG
#define BOARD_LCD_RST_GPIO_PIN       GPIO_PIN_11

#define BOARD_LCD_FSMC_PORT          FSMC
#define BOARD_LCD_FSMC_SET_INDEX     0u
#define BOARD_LCD_FSMC_RS_BIT_INDEX  24u /* for RS line. left shift 1 bit when using 16-bit address mode. */

#define BOARD_LCD_WIDTH              (480u)
#define BOARD_LCD_HEIGHT             (320u)

void BOARD_Init(void);

#endif /* __BOARD_INIT_H__ */
