SDAA158 December 2025 MSPM33C321A
The following describes the software configurations that were made for the LVGL example:
| Pin Name | Direction | Initial Value | Assigned Pin |
|---|---|---|---|
|
LCD_SCS |
Output | Set | PB6 |
| LCD_SDC | Output | Cleared | PB30 |
| LCD_RESET | Output | Set | PA10 |
| LCD_PWM | Output | Cleared | PB3 |
| CTP_RST | Output | Set | PC4 |
| CTP_INT | Input | N/A | PC5 |
#define MY_DISP_HOR_RES 480
#define MY_DISP_VER_RES 320
...
#define LV_COLOR_DEPTH 16
...
#define LV_MEM_SIZE (48U * 1024U) // [bytes]
...
#define LV_DRAW_COMPLEX 1
...
#define LV_USE_DEMO_WIDGETS 1void lv_port_disp_init(void)
{
disp_init(); // Initialize your display
static lv_disp_draw_buf_t draw_buf_dsc_1;
static lv_color_t buf_1[MY_DISP_HOR_RES * 10]; /*A buffer for 10 rows*/
lv_disp_draw_buf_init(&draw_buf_dsc_1, buf_1, NULL, MY_DISP_HOR_RES * 10); /*Initialize the display buffer*/
static lv_disp_drv_t disp_drv; /*Descriptor of a display driver*/
lv_disp_drv_init(&disp_drv); /*Basic initialization*/
disp_drv.hor_res = MY_DISP_HOR_RES;
disp_drv.ver_res = MY_DISP_VER_RES;
disp_drv.flush_cb = disp_flush;
disp_drv.draw_buf = &draw_buf_dsc_1;
lv_disp_drv_register(&disp_drv);
}void lv_port_indev_init(void)
{
static lv_indev_drv_t indev_drv;
touchpad_init(); //Initialize your touchpad
lv_indev_drv_init(&indev_drv); //Register a touchpad input device
indev_drv.type = LV_INDEV_TYPE_POINTER;
indev_drv.read_cb = touchpad_read;
indev_touchpad = lv_indev_drv_register(&indev_drv);
}int main(void)
{
SYSCFG_DL_init();
NVIC_EnableIRQ(TIMER_0_INST_INT_IRQN);
lv_init(); // init LVGL
lv_port_disp_init();
lv_port_indev_init();
DL_TimerG_startCounter(TIMER_0_INST);
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
lvgl_LCD_Color_Fill(area->x1, area->y1, area->x2, area->y2, color_p);
lv_disp_flush_ready(disp_drv); //Inform the graphics library that you are ready with the flushing
}static void touchpad_read(lv_indev_drv_t * indev_drv, lv_indev_data_t * data)
{
static lv_coord_t last_x = 0;
static lv_coord_t last_y = 0;
if(touchpad_is_pressed()) {
touchpad_get_xy(&last_x, &last_y); //Save the pressed coordinates and the state
data->state = LV_INDEV_STATE_PR;
}
else {
data->state = LV_INDEV_STATE_REL;
}
data->point.x = last_x; //Set the last pressed coordinates
data->point.y = last_y;
}
void TIMER_0_INST_IRQHandler(void)
{
switch (DL_TimerG_getPendingInterrupt(TIMER_0_INST)) {
case DL_TIMER_IIDX_ZERO:
lv_tick_inc(1); //LVGL Heart Beat
break;
default:
break;
}
}while (1) {
// update LVGL task
lv_task_handler();
delay_cycles(320);
}#include "lv_demo_widgets.h"
...
int main(void)
{
...
lv_demo_widgets();
...
}