1024X768 8BPP with NGW100

Go To Last Post
6 posts / 0 new
Author
Message
#1
  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hi,

I have built a daughter board with NGW100. This board contains the DAC to driver TFT monitors.

I am doing stand alone development.

I am successful in driving the TFT monitor with the resolution 1024x768 8 BPP. It works ok.

Now, I need to do some math operations like, sin, cos, sqrt, etc. Only these three functions are called every few seconds.

Now, sometimes the monitor goes out of sync and the picture shifts vertically or horizontally or both. I read the posts in the forum and the application notes, on configuring the HMATRIX (about default master and priority). I have done this but this did not help.

Then, I tried enabling and disabling the LCDC and the DMA controller on the FIFO underflow interrupt. This did solve my problem, but introduced another one.
The monitor displays the image correctly, but it flickers, whenever the underflow interrupt occurs. In short, whenever an underflow interrupt occurs, I reset the DMA controller and re-initialize the LCDC controller.

I am trying my best to get things working.

Any help or comments are appreciated.

Please do let me know, if I need to post more information.

Thanks,
drt

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Hmm, are you running your application out of internal SRAM or SDRAM? If the only use of SDRAM is framebuffer for the LCD, you should be home free. The LCDC will be the only peripheral accessing the SDRAM.

You should not need to reinitialize the LCDC, only toggling the DMA enable should do it? I've not pushed an application so far, so do not really know how to tweak the application.

Hans-Christian

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Thanks for the reply

I am running the application out of flash. Other stuff like stack and global variables are mapped in the INTRAM. I use the SDRAM only for LCD framebuffer.

I am not doing extensive calculations as I mentioned before, I wonder what the problem would be.

I am using the LCD framebuffer address as 0x10000000 which is cacheable. Will this matter? Or I must use the address 0xa0000000, which is not cacheable.

-drt

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

I would recommend using the non-cacheable area, so you do not have to do cache instructions. But that would only show as graphics corruptions (i.e. only partly drawed images).

Perhaps you should use double buffering? How often do you change the contents of the image? It might be wise to update a new image in the currently not used framebuffer, and toggle them.

Hans-Christian

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

Well, right now I do not change the whole image but only a part of it.

I do some math and then depending upon this math I update a line on the image. So, these are just bunch of pixels been updated.

I tried doing the DMA enable and disable in the underflow interrupt, but this did not help.

  • 1
  • 2
  • 3
  • 4
  • 5
Total votes: 0

hce wrote:
I would recommend using the non-cacheable area, so you do not have to do cache instructions. But that would only show as graphics corruptions (i.e. only partly drawed images).

Perhaps you should use double buffering? How often do you change the contents of the image? It might be wise to update a new image in the currently not used framebuffer, and toggle them.

Opening up an old thread.

How do I use the non-cacheable area of memory? Do I have to program the MMU to use it?

Thanks for help,
-drt