#include "epd-spi/panel/lcd_zjy350c4001.h" #include "fsl_flexcomm.h" #include "fsl_gpio.h" #include "fsl_spi.h" #include "pin_mux.h" #define DMA_TRANSFER 0 #define LCD_SPI SPI3 #define SET_GPIO(x, v) \ GPIO_PinWrite(BOARD_INITPMODPINS_LCD_##x##_GPIO, BOARD_INITPMODPINS_LCD_##x##_PORT, \ BOARD_INITPMODPINS_LCD_##x##_PIN, v) void lcd_impl_init(void) { SET_GPIO(DC, 1U); SET_GPIO(RST_0IN9, 1U); } epd_ret_t lcd_impl_write_cmd(void *handle, uint8_t *cmd, uint32_t len) { SET_GPIO(DC, 0U); spi_transfer_t xfer = { .txData = cmd, .rxData = NULL, .dataSize = 1U, .configFlags = kSPI_FrameAssert, }; SPI_MasterTransferBlocking(LCD_SPI, &xfer); if (len > 1) { SET_GPIO(DC, 1U); xfer.txData = &cmd[1]; xfer.dataSize = len - 1; SPI_MasterTransferBlocking(LCD_SPI, &xfer); } return EPD_OK; } epd_ret_t lcd_impl_write_data(void *handle, uint8_t *data, uint32_t len) { SET_GPIO(DC, 1U); spi_transfer_t xfer = { .txData = data, .rxData = NULL, .dataSize = len, .configFlags = kSPI_FrameAssert, }; SPI_MasterTransferBlocking(LCD_SPI, &xfer); return EPD_OK; } epd_ret_t lcd_impl_reset(void *handle) { SET_GPIO(RST_0IN9, 0U); SDK_DelayAtLeastUs(50 * 1000, CLOCK_GetCoreSysClkFreq()); SET_GPIO(RST_0IN9, 1U); SDK_DelayAtLeastUs(50 * 1000, CLOCK_GetCoreSysClkFreq()); return EPD_OK; }