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();
}