From d37193490a8ee1016e3eb7e946d2cc764019cf76 Mon Sep 17 00:00:00 2001 From: imi415 Date: Sun, 12 Jun 2022 00:07:18 +0800 Subject: [PATCH] LCD implemented. --- .gitmodules | 3 ++ CMakeLists.txt | 4 +- MK60DN512xxx10.mex | 22 ++++++-- SDK | 2 +- board/board.c | 23 ++++++-- board/board.h | 126 ++------------------------------------------ board/peripherals.c | 16 +++--- board/pin_mux.c | 25 +++++++++ board/pin_mux.h | 26 +++++++++ lib/lcd | 1 + src/lcd_impl.c | 52 ++++++++++++++++++ src/main.c | 42 +++++++++++++++ 12 files changed, 203 insertions(+), 139 deletions(-) create mode 160000 lib/lcd create mode 100644 src/lcd_impl.c diff --git a/.gitmodules b/.gitmodules index 1c8a20d..d470498 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,6 @@ [submodule "SDK"] path = SDK url = https://git.minori.work/Embedded_SDK/MCUXpresso_MK60DN512xxx10.git +[submodule "lib/lcd"] + path = lib/lcd + url = https://github.com/imi415/epd-spi.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 66d4b25..5d133ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -59,6 +59,7 @@ set(TARGET_SOURCES "board/clock_config.c" "board/peripherals.c" "board/pin_mux.c" + "src/lcd_impl.c" "src/main.c" "src/system_utilities.c" ) @@ -79,7 +80,7 @@ set(TARGET_C_INCLUDES # Shared libraries linked with application set(TARGET_LIBS - + "epd-spi" ) # Shared library and linker script search paths @@ -108,6 +109,7 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TARGET_CFLAGS_HARDWARE} -Wall - set(CMAKE_ASM_FLAGS "${CMAKE_ASM_FLAGS} ${CMAKE_C_FLAGS} -x assembler-with-cpp") set(CMAKE_EXE_LINKER_FLAGS "-specs=nano.specs -specs=nosys.specs -Wl,--gc-sections -Wl,--print-memory-usage -lc -lm -lnosys ") +add_subdirectory(lib/lcd) # Shared sources, includes and definitions add_compile_definitions(${TARGET_C_DEFINES}) diff --git a/MK60DN512xxx10.mex b/MK60DN512xxx10.mex index a3fc0db..ba90ed3 100644 --- a/MK60DN512xxx10.mex +++ b/MK60DN512xxx10.mex @@ -26,6 +26,8 @@ 11.0.1 + + @@ -127,6 +129,18 @@ + + + + + + + + + + + + @@ -526,11 +540,11 @@ - - + + - - + + diff --git a/SDK b/SDK index d22b5f5..ede33dc 160000 --- a/SDK +++ b/SDK @@ -1 +1 @@ -Subproject commit d22b5f5974384786fbc1488f395c3af984a4c466 +Subproject commit ede33dcf057746da396088a4d9dcea87b02f3b25 diff --git a/board/board.c b/board/board.c index f5b3ff5..c53426d 100644 --- a/board/board.c +++ b/board/board.c @@ -28,10 +28,13 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "board.h" + #include + #include "fsl_common.h" #include "fsl_debug_console.h" -#include "board.h" +#include "fsl_rtc.h" /******************************************************************************* * Variables @@ -41,9 +44,23 @@ * Code ******************************************************************************/ /* Initialize debug console. */ -void BOARD_InitDebugConsole(void) -{ +void BOARD_InitDebugConsole(void) { uint32_t uartClkSrcFreq = BOARD_DEBUG_UART_CLK_FREQ; DbgConsole_Init(BOARD_DEBUG_UART_BASEADDR, BOARD_DEBUG_UART_BAUDRATE, BOARD_DEBUG_UART_TYPE, uartClkSrcFreq); } + +void BOARD_EnableRTC(void) { + rtc_config_t rtc_config; + + RTC_GetDefaultConfig(&rtc_config); + + RTC_Init(RTC, &rtc_config); + + RTC->SR |= RTC_SR_TCE_MASK; +} + +void BOARD_EnableLCD(void) { + GPIO_WritePinOutput(BOARD_INITPINS_TFT_RESET_GPIO, BOARD_INITPINS_TFT_RESET_PIN, 1U); + GPIO_WritePinOutput(BOARD_INITPINS_TFT_BL_GPIO, BOARD_INITPINS_TFT_BL_PIN, 1U); +} \ No newline at end of file diff --git a/board/board.h b/board/board.h index b454ab8..dae9c84 100644 --- a/board/board.h +++ b/board/board.h @@ -32,13 +32,14 @@ #define _BOARD_H_ #include "clock_config.h" +#include "pin_mux.h" #include "fsl_gpio.h" /******************************************************************************* * Definitions ******************************************************************************/ /*! @brief The board name */ -#define BOARD_NAME "TWR-K60D100M" +#define BOARD_NAME "Landzo-K60" /*! @brief The UART to use for debug messages. */ #define BOARD_USE_UART @@ -53,127 +54,6 @@ #define BOARD_DEBUG_UART_BAUDRATE 115200 #endif /* BOARD_DEBUG_UART_BAUDRATE */ -/*! @brief The CAN instance used for board */ -#define BOARD_CAN_BASEADDR CAN1 - -/*! @brief The i2c instance used for i2c connection by default */ -#define BOARD_I2C_BASEADDR I2C0 - -/*! @brief The Enet instance used for board */ -#define BOARD_ENET_BASEADDR ENET - -/*! @brief The FlexBus instance used for board.*/ -#define BOARD_FLEXBUS_BASEADDR FB - -#define BOARD_TSI_ELECTRODE_CNT 4U - -/*! @brief Indexes of the TSI channels for on board electrodes */ -#define BOARD_TSI_ELECTRODE_1 5U -#define BOARD_TSI_ELECTRODE_2 8U -#define BOARD_TSI_ELECTRODE_3 7U -#define BOARD_TSI_ELECTRODE_4 9U - -#define BOARD_TSI_TWRPI_ELECTRODE_0 0U -#define BOARD_TSI_TWRPI_ELECTRODE_1 6U -#define BOARD_TSI_TWRPI_ELECTRODE_2 7U -#define BOARD_TSI_TWRPI_ELECTRODE_3 8U -#define BOARD_TSI_TWRPI_ELECTRODE_4 13U -#define BOARD_TSI_TWRPI_ELECTRODE_5 14U -#define BOARD_TSI_TWRPI_ELECTRODE_6 15U -#define BOARD_TSI_TWRPI_ELECTRODE_7 5U -#define BOARD_TSI_TWRPI_ELECTRODE_8 9U -#define BOARD_TSI_TWRPI_ELECTRODE_9 10U -#define BOARD_TSI_TWRPI_ELECTRODE_10 11U -#define BOARD_TSI_TWRPI_ELECTRODE_11 12U - -/*! @brief ADC TWRPI ID input channel */ -#define BOARD_ADC_TWRPIID0_CHANNEL 1U -#define BOARD_ADC_TWRPIID1_CHANNEL 16U -#define BOARD_ADC_TWRPI 1U - -/*! @brief The SDHC instance/channel used for board */ -#define BOARD_SDHC_BASEADDR SDHC -#define BOARD_SDHC_CD_GPIO_IRQ_HANDLER PORTE_IRQHandler - -/*! @brief The CMP instance/channel used for board. */ -#define BOARD_CMP_BASEADDR CMP0 -#define BOARD_CMP_CHANNEL 0U - -/*! @brief The i2c instance used for sai demo */ -#define BOARD_SAI_DEMO_I2C_BASEADDR I2C0 - -/*! @brief The rtc instance used for rtc_func */ -#define BOARD_RTC_FUNC_BASEADDR RTC - -/* Board led color mapping */ -#define LOGIC_LED_ON 0U -#define LOGIC_LED_OFF 1U -#define BOARD_LED_ORANGE_GPIO GPIOA -#define BOARD_LED_ORANGE_GPIO_PORT PORTA -#define BOARD_LED_ORANGE_GPIO_PIN 11U -#define BOARD_LED_YELLOW_GPIO GPIOA -#define BOARD_LED_YELLOW_GPIO_PORT PORTA -#define BOARD_LED_YELLOW_GPIO_PIN 28U -#define BOARD_LED_GREEN_GPIO GPIOA -#define BOARD_LED_GREEN_GPIO_PORT PORTA -#define BOARD_LED_GREEN_GPIO_PIN 29U -#define BOARD_LED_BLUE_GPIO GPIOA -#define BOARD_LED_BLUE_GPIO_PORT PORTA -#define BOARD_LED_BLUE_GPIO_PIN 10U - -#define LED_ORANGE_INIT(output) \ - GPIO_WritePinOutput(BOARD_LED_ORANGE_GPIO, BOARD_LED_ORANGE_GPIO_PIN, output);\ - BOARD_LED_ORANGE_GPIO->PDDR |= (1U << BOARD_LED_ORANGE_GPIO_PIN) /*!< Enable target LED_ORANGE */ -#define LED_ORANGE_ON() \ - GPIO_ClearPinsOutput(BOARD_LED_ORANGE_GPIO, 1U << BOARD_LED_ORANGE_GPIO_PIN) /*!< Turn on target LED_ORANGE */ -#define LED_ORANGE_OFF() \ - GPIO_SetPinsOutput(BOARD_LED_ORANGE_GPIO, 1U << BOARD_LED_ORANGE_GPIO_PIN) /*!< Turn off target LED_ORANGE */ -#define LED_ORANGE_TOGGLE() \ - GPIO_TogglePinsOutput(BOARD_LED_ORANGE_GPIO, 1U << BOARD_LED_ORANGE_GPIO_PIN) /*!< Toggle on target LED_ORANGE */ - -#define LED_YELLOW_INIT(output) \ - GPIO_WritePinOutput(BOARD_LED_YELLOW_GPIO, BOARD_LED_YELLOW_GPIO_PIN, output);\ - BOARD_LED_YELLOW_GPIO->PDDR |= (1U << BOARD_LED_YELLOW_GPIO_PIN) /*!< Enable target LED_YELLOW */ -#define LED_YELLOW_ON() \ - GPIO_ClearPinsOutput(BOARD_LED_YELLOW_GPIO, 1U << BOARD_LED_YELLOW_GPIO_PIN) /*!< Turn on target LED_YELLOW */ -#define LED_YELLOW_OFF() \ - GPIO_SetPinsOutput(BOARD_LED_YELLOW_GPIO, 1U << BOARD_LED_YELLOW_GPIO_PIN) /*!< Turn off target LED_YELLOW */ -#define LED_YELLOW_TOGGLE() \ - GPIO_TogglePinsOutput(BOARD_LED_YELLOW_GPIO, 1U << BOARD_LED_YELLOW_GPIO_PIN) /*!< Toggle on target LED_YELLOW */ - -#define LED_GREEN_INIT(output) \ - GPIO_WritePinOutput(BOARD_LED_GREEN_GPIO, BOARD_LED_GREEN_GPIO_PIN, output);\ - BOARD_LED_GREEN_GPIO->PDDR |= (1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Enable target LED_GREEN */ -#define LED_GREEN_ON() \ - GPIO_ClearPinsOutput(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn on target LED_GREEN */ -#define LED_GREEN_OFF() \ - GPIO_SetPinsOutput(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Turn off target LED_GREEN */ -#define LED_GREEN_TOGGLE() \ - GPIO_TogglePinsOutput(BOARD_LED_GREEN_GPIO, 1U << BOARD_LED_GREEN_GPIO_PIN) /*!< Toggle on target LED_GREEN */ - -#define LED_BLUE_INIT(output) \ - GPIO_WritePinOutput(BOARD_LED_BLUE_GPIO, BOARD_LED_BLUE_GPIO_PIN, output);\ - BOARD_LED_BLUE_GPIO->PDDR |= (1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Enable target LED_BLUE */ -#define LED_BLUE_ON() \ - GPIO_ClearPinsOutput(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Turn on target LED_BLUE */ -#define LED_BLUE_OFF() \ - GPIO_SetPinsOutput(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Turn off target LED_BLUE */ -#define LED_BLUE_TOGGLE() \ - GPIO_TogglePinsOutput(BOARD_LED_BLUE_GPIO, 1U << BOARD_LED_BLUE_GPIO_PIN) /*!< Toggle on target LED_BLUE */ - -/* SDHC base address, clock and card detection pin */ -#define BOARD_SDHC_BASEADDR SDHC -#define BOARD_SDHC_CLKSRC kCLOCK_CoreSysClk -#define BOARD_SDHC_CLK_FREQ CLOCK_GetFreq(kCLOCK_CoreSysClk) -#define BOARD_SDHC_IRQ SDHC_IRQn -#define BOARD_SDHC_CD_GPIO_BASE GPIOE -#define BOARD_SDHC_CD_GPIO_PIN 28U -#define BOARD_SDHC_CD_PORT_BASE PORTE -#define BOARD_SDHC_CD_PORT_IRQ PORTE_IRQn -#define BOARD_SDHC_CD_PORT_IRQ_HANDLER PORTE_IRQHandler - -#define BOARD_ACCEL_I2C_BASEADDR I2C0 - #if defined(__cplusplus) extern "C" { #endif /* __cplusplus */ @@ -183,6 +63,8 @@ extern "C" { ******************************************************************************/ void BOARD_InitDebugConsole(void); +void BOARD_EnableRTC(void); +void BOARD_EnableLCD(void); #if defined(__cplusplus) } diff --git a/board/peripherals.c b/board/peripherals.c index b37c6d3..de79e29 100644 --- a/board/peripherals.c +++ b/board/peripherals.c @@ -105,11 +105,11 @@ instance: - autoAcknowledge: 'true' - extendTransferAddress: 'false' - byteLaneShift: 'kFLEXBUS_NotShifted' - - portSize: 'kFLEXBUS_1Byte' - - writeAddressHold: 'kFLEXBUS_Hold1Cycle' + - portSize: 'kFLEXBUS_2Bytes' + - writeAddressHold: 'kFLEXBUS_Hold2Cycles' - readAddressHold: 'kFLEXBUS_Hold1Or0Cycles' - - addressSetup: 'kFLEXBUS_FirstRisingEdge' - - waitStates: '0' + - addressSetup: 'kFLEXBUS_SecondRisingEdge' + - waitStates: '6' - burstWrite: 'false' - burstRead: 'false' - writeProtect: 'false' @@ -149,11 +149,11 @@ flexbus_config_t FB_LCD_config = { .autoAcknowledge = true, .extendTransferAddress = false, .byteLaneShift = kFLEXBUS_NotShifted, - .portSize = kFLEXBUS_1Byte, - .writeAddressHold = kFLEXBUS_Hold1Cycle, + .portSize = kFLEXBUS_2Bytes, + .writeAddressHold = kFLEXBUS_Hold2Cycles, .readAddressHold = kFLEXBUS_Hold1Or0Cycles, - .addressSetup = kFLEXBUS_FirstRisingEdge, - .waitStates = 0U, + .addressSetup = kFLEXBUS_SecondRisingEdge, + .waitStates = 6U, .secondaryWaitStates = false, .burstWrite = false, .burstRead = false, diff --git a/board/pin_mux.c b/board/pin_mux.c index a114204..f4e0ca7 100644 --- a/board/pin_mux.c +++ b/board/pin_mux.c @@ -14,6 +14,8 @@ mcu_data: ksdk2_0 processor_version: 11.0.1 pin_labels: - {pin_num: '58', pin_signal: PTA6/FTM0_CH3/TRACE_CLKOUT, label: BUZZER, identifier: BUZZER} +- {pin_num: '106', pin_signal: CMP1_IN1/PTC3/LLWU_P7/SPI0_PCS1/UART1_RX/FTM0_CH2/CLKOUT/I2S0_TX_BCLK, label: TFT_BL, identifier: BL;TFT_BL} +- {pin_num: '126', pin_signal: PTC19/UART3_CTS_b/ENET0_1588_TMR3/FB_CS3_b/FB_BE7_0_b/FB_TA_b, label: TFT_RESET, identifier: TFT_RESET} * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS *********** */ /* clang-format on */ @@ -94,6 +96,9 @@ BOARD_InitPins: - {pin_num: '66', peripheral: ENET, signal: RMII_CRS_DV, pin_signal: PTA14/SPI0_PCS0/UART0_TX/RMII0_CRS_DV/MII0_RXDV/I2S0_RX_BCLK/I2S0_TXD1} - {pin_num: '67', peripheral: ENET, signal: rmii_txen, pin_signal: PTA15/SPI0_SCK/UART0_RX/RMII0_TXEN/MII0_TXEN/I2S0_RXD0} - {pin_num: '72', peripheral: ENET, signal: RMII_CLKIN, pin_signal: EXTAL0/PTA18/FTM0_FLT2/FTM_CLKIN0} + - {pin_num: '106', peripheral: GPIOC, signal: 'GPIO, 3', pin_signal: CMP1_IN1/PTC3/LLWU_P7/SPI0_PCS1/UART1_RX/FTM0_CH2/CLKOUT/I2S0_TX_BCLK, identifier: TFT_BL, + direction: OUTPUT, gpio_init_state: 'false'} + - {pin_num: '126', peripheral: GPIOC, signal: 'GPIO, 19', pin_signal: PTC19/UART3_CTS_b/ENET0_1588_TMR3/FB_CS3_b/FB_BE7_0_b/FB_TA_b, direction: OUTPUT} * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS *********** */ /* clang-format on */ @@ -122,6 +127,20 @@ void BOARD_InitPins(void) /* Initialize GPIO functionality on pin PTA6 (pin 58) */ GPIO_PinInit(BOARD_INITPINS_BUZZER_GPIO, BOARD_INITPINS_BUZZER_PIN, &BUZZER_config); + gpio_pin_config_t TFT_BL_config = { + .pinDirection = kGPIO_DigitalOutput, + .outputLogic = 0U + }; + /* Initialize GPIO functionality on pin PTC3 (pin 106) */ + GPIO_PinInit(BOARD_INITPINS_TFT_BL_GPIO, BOARD_INITPINS_TFT_BL_PIN, &TFT_BL_config); + + gpio_pin_config_t TFT_RESET_config = { + .pinDirection = kGPIO_DigitalOutput, + .outputLogic = 0U + }; + /* Initialize GPIO functionality on pin PTC19 (pin 126) */ + GPIO_PinInit(BOARD_INITPINS_TFT_RESET_GPIO, BOARD_INITPINS_TFT_RESET_PIN, &TFT_RESET_config); + /* PORTA12 (pin 64) is configured as RMII0_RXD1 */ PORT_SetPinMux(PORTA, 12U, kPORT_MuxAlt4); @@ -230,9 +249,15 @@ void BOARD_InitPins(void) /* PORTC17 (pin 124) is configured as FB_CS4_b */ PORT_SetPinMux(PORTC, 17U, kPORT_MuxAlt5); + /* PORTC19 (pin 126) is configured as PTC19 */ + PORT_SetPinMux(BOARD_INITPINS_TFT_RESET_PORT, BOARD_INITPINS_TFT_RESET_PIN, kPORT_MuxAsGpio); + /* PORTC2 (pin 105) is configured as FB_AD12 */ PORT_SetPinMux(PORTC, 2U, kPORT_MuxAlt5); + /* PORTC3 (pin 106) is configured as PTC3 */ + PORT_SetPinMux(BOARD_INITPINS_TFT_BL_PORT, BOARD_INITPINS_TFT_BL_PIN, kPORT_MuxAsGpio); + /* PORTC4 (pin 109) is configured as FB_AD11 */ PORT_SetPinMux(PORTC, 4U, kPORT_MuxAlt5); diff --git a/board/pin_mux.h b/board/pin_mux.h index c594838..eba5d8e 100644 --- a/board/pin_mux.h +++ b/board/pin_mux.h @@ -42,6 +42,32 @@ void BOARD_InitBootPins(void); #define BOARD_INITPINS_BUZZER_PIN_MASK (1U << 6U) /*!<@brief PORT pin mask */ /* @} */ +/*! @name PORTC3 (number 106), TFT_BL + @{ */ + +/* Symbols to be used with GPIO driver */ +#define BOARD_INITPINS_TFT_BL_GPIO GPIOC /*!<@brief GPIO peripheral base pointer */ +#define BOARD_INITPINS_TFT_BL_GPIO_PIN_MASK (1U << 3U) /*!<@brief GPIO pin mask */ + +/* Symbols to be used with PORT driver */ +#define BOARD_INITPINS_TFT_BL_PORT PORTC /*!<@brief PORT peripheral base pointer */ +#define BOARD_INITPINS_TFT_BL_PIN 3U /*!<@brief PORT pin number */ +#define BOARD_INITPINS_TFT_BL_PIN_MASK (1U << 3U) /*!<@brief PORT pin mask */ + /* @} */ + +/*! @name PORTC19 (number 126), TFT_RESET + @{ */ + +/* Symbols to be used with GPIO driver */ +#define BOARD_INITPINS_TFT_RESET_GPIO GPIOC /*!<@brief GPIO peripheral base pointer */ +#define BOARD_INITPINS_TFT_RESET_GPIO_PIN_MASK (1U << 19U) /*!<@brief GPIO pin mask */ + +/* Symbols to be used with PORT driver */ +#define BOARD_INITPINS_TFT_RESET_PORT PORTC /*!<@brief PORT peripheral base pointer */ +#define BOARD_INITPINS_TFT_RESET_PIN 19U /*!<@brief PORT pin number */ +#define BOARD_INITPINS_TFT_RESET_PIN_MASK (1U << 19U) /*!<@brief PORT pin mask */ + /* @} */ + /*! * @brief Configures pin routing and optionally pin electrical features. * diff --git a/lib/lcd b/lib/lcd new file mode 160000 index 0000000..0e9e078 --- /dev/null +++ b/lib/lcd @@ -0,0 +1 @@ +Subproject commit 0e9e078fc212b063c04224cb75302841d88bc0c9 diff --git a/src/lcd_impl.c b/src/lcd_impl.c new file mode 100644 index 0000000..373b450 --- /dev/null +++ b/src/lcd_impl.c @@ -0,0 +1,52 @@ +/* Drivers */ +#include "fsl_clock.h" +#include "fsl_common.h" +#include "fsl_edma.h" +#include "fsl_gpio.h" + +/* Board */ +#include "peripherals.h" +#include "pin_mux.h" + +/* LCD panel */ +#include "epd-spi/panel/lcd_generic_ssd1289.h" + +#define IMPL_LCD_COMMAND_BASE (*(uint16_t *)0x70000000) +#define IMPL_LCD_DATA_BASE (*(uint16_t *)0x78000000) + +epd_ret_t epd_impl_write_command(void *handle, uint8_t *command, uint32_t len) { + uint32_t param_len = (len - 1) / 2; + + IMPL_LCD_COMMAND_BASE = command[0]; + + for (uint32_t i = 0; i < param_len; i++) { + uint16_t le_param = (command[2 * i + 1] << 8) | command[2 * i + 2]; + IMPL_LCD_DATA_BASE = le_param; + } + + return EPD_OK; +} + +epd_ret_t epd_impl_write_data(void *handle, uint8_t *data, uint32_t len) { + uint32_t data_len = (len / 2); + + for (uint32_t i = 0; i < data_len; i++) { + IMPL_LCD_DATA_BASE = ((uint16_t *)data)[i]; + } + + return EPD_OK; +} + +epd_ret_t epd_impl_reset(void *handle) { + uint32_t delay = CLOCK_GetCoreSysClkFreq() / 50; /* 20 msec */ + + GPIO_WritePinOutput(BOARD_INITPINS_TFT_RESET_GPIO, BOARD_INITPINS_TFT_RESET_PIN, 0U); + + for (uint32_t i = 0; i < delay; i++) { + asm("nop"); + } + + GPIO_WritePinOutput(BOARD_INITPINS_TFT_RESET_GPIO, BOARD_INITPINS_TFT_RESET_PIN, 1U); + + return EPD_OK; +} \ No newline at end of file diff --git a/src/main.c b/src/main.c index 3fa1aa0..a73acd6 100644 --- a/src/main.c +++ b/src/main.c @@ -1,21 +1,63 @@ +/* Board */ #include "board.h" #include "clock_config.h" #include "peripherals.h" #include "pin_mux.h" + +/* Utilities */ #include "system_utilities.h" +/* SDK debug console */ #include "fsl_debug_console.h" +/* LCD */ +#include "epd-spi/panel/lcd_generic_ssd1289.h" + +epd_ret_t epd_impl_write_command(void *handle, uint8_t *command, uint32_t len); +epd_ret_t epd_impl_write_data(void *handle, uint8_t *data, uint32_t len); +epd_ret_t epd_impl_reset(void *handle); + +lcd_generic_ssd1289_t lcd = { + .cb = + { + .write_command_cb = epd_impl_write_command, + .write_data_cb = epd_impl_write_data, + .reset_cb = epd_impl_reset, + }, + .mode = LCD_GENERIC_SSD1289_MODE_XBRG8888, + .dir = LCD_GENETIC_SSD1289_DIR_HORIZONTAL, +}; + +uint32_t disp_data[320]; + int main(void) { BOARD_InitBootPins(); BOARD_BootClockRUN(); BOARD_InitBootPeripherals(); BOARD_InitDebugConsole(); + BOARD_EnableRTC(); + BOARD_EnableLCD(); print_hardware(); sram_test(); + for (uint32_t i = 0; i < 320; i++) { + disp_data[i] = 0xFF0000; + } + + lcd_generic_ssd1289_init(&lcd); + + epd_coord_t coord; + coord.x_start = 0; + coord.x_end = 319; + + for (uint32_t i = 0; i < 239; i++) { + coord.y_start = i; + coord.y_end = i; + lcd_generic_ssd1289_upload(&lcd, &coord, (uint8_t *)disp_data); + } + for (;;) { __WFI(); }