LCD implemented.

This commit is contained in:
imi415 2022-06-12 00:07:18 +08:00
parent 89ec94445c
commit d37193490a
Signed by: imi415
GPG Key ID: 885EC2B5A8A6F8A7
12 changed files with 203 additions and 139 deletions

3
.gitmodules vendored
View File

@ -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

View File

@ -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})

View File

@ -26,6 +26,8 @@
<processor_version>11.0.1</processor_version>
<pin_labels>
<pin_label pin_num="58" pin_signal="PTA6/FTM0_CH3/TRACE_CLKOUT" label="BUZZER" identifier="BUZZER"/>
<pin_label 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_label 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"/>
</pin_labels>
</pins_profile>
<functions_list>
@ -127,6 +129,18 @@
<pin peripheral="ENET" signal="RMII_CRS_DV" pin_num="66" pin_signal="PTA14/SPI0_PCS0/UART0_TX/RMII0_CRS_DV/MII0_RXDV/I2S0_RX_BCLK/I2S0_TXD1"/>
<pin peripheral="ENET" signal="rmii_txen" pin_num="67" pin_signal="PTA15/SPI0_SCK/UART0_RX/RMII0_TXEN/MII0_TXEN/I2S0_RXD0"/>
<pin peripheral="ENET" signal="RMII_CLKIN" pin_num="72" pin_signal="EXTAL0/PTA18/FTM0_FLT2/FTM_CLKIN0"/>
<pin peripheral="GPIOC" signal="GPIO, 3" pin_num="106" pin_signal="CMP1_IN1/PTC3/LLWU_P7/SPI0_PCS1/UART1_RX/FTM0_CH2/CLKOUT/I2S0_TX_BCLK">
<pin_features>
<pin_feature name="identifier" value="TFT_BL"/>
<pin_feature name="direction" value="OUTPUT"/>
<pin_feature name="gpio_init_state" value="false"/>
</pin_features>
</pin>
<pin peripheral="GPIOC" signal="GPIO, 19" pin_num="126" pin_signal="PTC19/UART3_CTS_b/ENET0_1588_TMR3/FB_CS3_b/FB_BE7_0_b/FB_TA_b">
<pin_features>
<pin_feature name="direction" value="OUTPUT"/>
</pin_features>
</pin>
</pins>
</function>
</functions_list>
@ -526,11 +540,11 @@
<setting name="autoAcknowledge" value="true"/>
<setting name="extendTransferAddress" value="false"/>
<setting name="byteLaneShift" value="kFLEXBUS_NotShifted"/>
<setting name="portSize" value="kFLEXBUS_1Byte"/>
<setting name="writeAddressHold" value="kFLEXBUS_Hold1Cycle"/>
<setting name="portSize" value="kFLEXBUS_2Bytes"/>
<setting name="writeAddressHold" value="kFLEXBUS_Hold2Cycles"/>
<setting name="readAddressHold" value="kFLEXBUS_Hold1Or0Cycles"/>
<setting name="addressSetup" value="kFLEXBUS_FirstRisingEdge"/>
<setting name="waitStates" value="0"/>
<setting name="addressSetup" value="kFLEXBUS_SecondRisingEdge"/>
<setting name="waitStates" value="6"/>
<setting name="burstWrite" value="false"/>
<setting name="burstRead" value="false"/>
<setting name="writeProtect" value="false"/>

2
SDK

@ -1 +1 @@
Subproject commit d22b5f5974384786fbc1488f395c3af984a4c466
Subproject commit ede33dcf057746da396088a4d9dcea87b02f3b25

View File

@ -28,10 +28,13 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "board.h"
#include <stdint.h>
#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);
}

View File

@ -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)
}

View File

@ -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,

View File

@ -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);

View File

@ -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.
*

1
lib/lcd Submodule

@ -0,0 +1 @@
Subproject commit 0e9e078fc212b063c04224cb75302841d88bc0c9

52
src/lcd_impl.c Normal file
View File

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

View File

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