LPCXpresso55S69_LCD/src/epd_impl.c

66 lines
1.6 KiB
C

#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;
}