Tuesday, December 12th 2017, 10:44pm UTC+1

You are not logged in.

  • Login
  • Register

Dear visitor, welcome to SEGGER Forum. If this is your first visit here, please read the Help. It explains how this page works. You must be registered before you can use all the page's features. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

disideris

Beginner

Date of registration: Mar 17th 2017

Posts: 20

1

Tuesday, October 10th 2017, 10:51am

ILI9341, RGB INTERFACE and emwin

Hi there,

From the help i found in this forum i managed to port emwin to my custom pcb with a tft screen with ST7735 controller. The interface i used was SPI.

Thanks a lot. I need some more help.

I am now finalizing the functionality of my custom pcb. I use an LPC4367 microcontroller and a TFT 320x240 with an ILI9341 controller. Pcb has an external sdram of 64mbyte.

All components are working. TFT without emwin is working. The interface that i am using is RGB interface. LPC4367 has its own lcd controller and provides the timings of hsync vsync etc.
ILI9341 which is the onboard TFT LCD module is configured to function under rgb interface. Everything works fine

My final desirable setting is using RGB interface and having emwin on top.

I have tried to port my previous working emwin code of SPI to RGB but i cannot find any information that explains well enough the relation between RGB interface and emwin.


Can I please have some help?

If a discussion opens i am willing to share any specific information about my code and where the problems are.

Thanks a lot in advance!

This post has been edited 2 times, last edit by "disideris" (Oct 10th 2017, 11:03am)


SEGGER - Schoenen

Super Moderator

Date of registration: Aug 13th 2015

Posts: 442

2

Tuesday, October 10th 2017, 11:48am

Hi,

Since you are using the LCD controller of the LPC4367 you should you use the GUIDRV_Lin driver. Also there must be a framebuffer somewhere the on board LCD controller has access to.

Now you need to configure emWin, and the GUIDRV_Lin driver, to access the same framebuffer. In general this should be all.

Attached is a generic LCDConf.c for the GUIDRV_Lin driver. You have to set the proper display size, the address of the framebuffer (#define VRAM_ADDR ...) and the color depth to be used (COLOR_CONVERSION and DISPLAY_DRIVER).

In the function _InitiControler() you initialize the controller and any other display related HW. The other function beginning with an underscore are not entirely necessary.

Regards
Sven
SEGGER - Schoenen has attached the following file:
  • LCDConf.zip (1.84 kB - 52 times downloaded - Last download: Dec 10th 2017, 8:06pm)

disideris

Beginner

Date of registration: Mar 17th 2017

Posts: 20

3

Tuesday, October 10th 2017, 2:01pm

Hi,

Thanks a lot for the reply.

Quoted

you should you use the GUIDRV_Lin driver
So i have to use GUIDRV_Lin for driving LPC onbard controller and not GUIDRV_FlexColor for driving ILI9341?


Quoted

Also there must be a framebuffer somewhere the on board LCD controller has access to
This is working

Quoted

In the function _InitiControler() you initialize the controller and any other display related HW.
This is the part that might confuse me. InitController must initialize the Lpc onboard lcd controller (which i already have done the initialization) or the ILI9341? As far as i know ILI9341 must be configured in the first place through SPI in order to function with RGB interface.

If i understood, you suggest that ILI9341 does not need to be initialized at all?

This is what i am doing so far when not using emwin and LCD works.

Initialize ili9341 through SPI to obtain RGB interface functionality.
Initialize lpc onboard lcd controller with the correct timings HSYNC, VSYNC, etc.
Load framebuffer that points to external sdram an image array.
Image is dispayed in LCD.

Can you be more specific about the role that both controllers(onboard and ILI) are playing and what needs to be configured for emwin.

Thanks a lot!

SEGGER - Schoenen

Super Moderator

Date of registration: Aug 13th 2015

Posts: 442

4

Tuesday, October 10th 2017, 3:19pm

Hi,

Quoted

So i have to use GUIDRV_Lin for driving LPC onbard controller and not GUIDRV_FlexColor for driving ILI9341?
This depends on the mode you are driving the ILI9341 in.
If you use the R-G-B mode the signals (such as HSYNC, pixel clock, R-G-B, etc.) are getting generated by the controller on the LPC4367. In this case you should use GUIDRV_Lin. This driver writes into a framebuffer and according the content of this framebuffer the on board controller of the LPC4367 generates the signals accordingly.

If you are using the MCU mode of the ILI9341 the signals for HSYNC, pixel clock, etc. are getting generated by the ILI9341 itself. In this case you have to send the display data vie a serial interface (like SPI, 8080, ...).

Quoted

This is the part that might confuse me. InitController must initialize
the Lpc onboard lcd controller (which i already have done the
initialization) or the ILI9341? As far as i know ILI9341 must be
configured in the first place through SPI in order to function with RGB
interface.
You are absolutely right, both controllers have to be initialized. Initialize the ILI9341 to work in RGB mode and configure the LPC4367 to generate the signals as the ILI expects them.

- Initialize the ILI9341 to work in RGB mode (via SPI or any other serial interface).

- Initialize the LPC4367 on board controller to generate the proper signals for the ILI.

- The LPC4367 on board controller reads from a framebuffer (most likely placed in external RAM).

- Configure emWin to use GUIDRV_Lin (as shown in the LCDConf.c from my last post).

- When setting up GUIDRV_Lin in LCD_X_Config() 'tell' emWin where the framebuffer is (the same as for the on board controller). To do so use LCD_SetVRAMAddrEx(0, (void *)VRAM_ADDR), where VRAM_ADDR is the address of the framebuffer.

The LPC generates the signals according to the framebuffer content.

If the framebuffer is not initialized with zero you should see 'pixel garbage' if it is 'zeroed' it is black.

When you draw something with emWin it simply writes into the framebuffer (shared with the on board controller) and the LPC4367 controller generates the signals. That's almost all.

Regards
Sven

disideris

Beginner

Date of registration: Mar 17th 2017

Posts: 20

5

Tuesday, October 10th 2017, 4:04pm

Hi i followed your suggestion and HardFault exception occurs.

Here is the trace bottom up.

HardFault_Handler() at cr_startup_lpc43xx.c:452 0x1a0001fc
<signal handler called>() at 0xfffffff9
_RemoveHoles() at 0x1a002a76
GUI_ALLOC_GetFixedBlock() at 0x1a002d06
GUI_DEVICE_Create() at 0x1a00210a
GUI_DEVICE_CreateAndLink() at 0x1a0021f8
LCD_X_Config() at LCDConf.c:469 0x1a000700
GUI__Config() at 0x1a00230c
GUI_Init() at 0x1a00232e
main() at main.c:116 0x1a000e40


Is there any sample GuiConf file?


Below main, LCDConf.c and GUIConf.c are attached
disideris has attached the following file:
  • lcd_disideris.zip (6.58 kB - 47 times downloaded - Last download: Yesterday, 8:03pm)

SEGGER - Schoenen

Super Moderator

Date of registration: Aug 13th 2015

Posts: 442

6

Tuesday, October 10th 2017, 4:24pm

Hi,

On the first glance the LCDConf.c and GUIConf.c look good. There are only small changes I suggest.

In LCDConfc.:

Change DISPLAY_DRIVER to GUIDRV_LIN_16 if you use a color conversion for 16bpp (GUICC_M565).

In GUIConf.c:

Delete the function call of GUI_ALLOC_SetAvBlockSize(). This is obsolete.

Is the RAM, where the GUI memory is placed in, 8, 16 and 32 bit wise accessible?

This is mandatory as stated in the emWin user manual in chapter 38.4.1.1 'API functions to be used in GUI_X_Config()' at the describtion of GUI_ALLOC_AssignMemory().

Regards
Sven

disideris

Beginner

Date of registration: Mar 17th 2017

Posts: 20

7

Tuesday, October 10th 2017, 4:28pm

Already tried ur suggestions but hard fault goes on.

HardFault_Handler() at cr_startup_lpc43xx.c:452 0x1a0001fc
<signal handler called>() at 0xfffffff9
_Alloc() at 0x1a002eda
_EnlargeBlocks() at 0x1a002c2e
_InitOnce() at 0x1a002cee
GUI_ALLOC_GetFixedBlock() at 0x1a002d0a
GUI_DEVICE_Create() at 0x1a002166
GUI_DEVICE_CreateAndLink() at 0x1a002254
LCD_X_Config() at LCDConf.c:364 0x1a00068c
GUI__Config() at 0x1a002368

disideris

Beginner

Date of registration: Mar 17th 2017

Posts: 20

8

Tuesday, October 10th 2017, 5:36pm

Quoted

Is the RAM, where the GUI memory is placed in, 8, 16 and 32 bit wise accessible?
Lpc4367 has an external memory controller (EMC) that is used as interface with the external sdram. Sdram is 16-bit addressable in physical terms.
EMC on top of this can handle memory as we want to. I can write 32bit values with no problem to memory.

I am not sure what 32bit accessible means though.

disideris

Beginner

Date of registration: Mar 17th 2017

Posts: 20

9

Wednesday, October 11th 2017, 2:30pm

Btw this is the external sdram i use
disideris has attached the following file:
  • sdram.zip (951.53 kB - 41 times downloaded - Last download: Yesterday, 7:54pm)

disideris

Beginner

Date of registration: Mar 17th 2017

Posts: 20

10

Thursday, October 12th 2017, 4:55pm

It works!

Thanks a lot for your help and suggestions.

The
files that i posted above are working. The issue was a misconfiguration
in sdram and it was not working at all in the emwin project.

FYI both GUIDRV_LIN_32 and GUIDRV_LIN_16 work. GUIDRV_LIN_32 dispays larger text though.

Similar threads