Reg: LCD LIDD DMA: Not working: Interrupt not happening

Dear All,

I am having problem writing to a character 16 x 2 LCD with DMA enabled. Please note that, the same character LCD works fine when DMA is not enabled.

I followed the sequence of:-

  1. Enabling clocks in for LCD_CLKC_ENABLE for the clocks of DMA, LIDD & Core clock. I write and read back the value of 0x07.

  2. I initialize the LCD using the LIDD_CS0_DATA & LIDD_CS0_ADDR. I see the cursor blinking and I also see a number “4” bein displayed when I write 0x34 to LIDD_CS0_DATA.
    So this proves the LCD module is working and the LCD is initialized perfectly and character is also displayed on the LCD. So the LCD is also working.

  3. Next data is written into the virtual memory location allocated by a kernel module from the user space program. The physical memory address of the virtual memory allocated in the kernel module,
    is read by into the user space process and the same physical memory base address is used in step 6. The ceiling address of the physical memory is calculated from the base based on number of words written.

  4. In the LIDD_CTRL, the DMA enable bit, “lidd_dma_en” was always set to 0, right from start of the program. This is to disable the DMA right from start.
    As for the “dma_cs0_cs1” bit is set to 0, so that the DMA uses LIDD CS0 (Frame Buffer0).

  5. The LCDDMA_CTRL is set to 0x00.

  6. The LCDDMA_FB0_BASE is written with the Physical memory address.

  7. The LCDDMA_FB0_CEILING is written with the Physical memory address.

  8. Next the Interrupt is enabled by setting the bit, “done_en_set” of the IRQENABLE_SET.

  9. Next In the LIDD_CTRL, the DMA enable bit, “lidd_dma_en” is set to 1 to enable the DMA.

  10. There is continuous while loop polling of the IRQSTATUS register for the done bit to become set.

But in the program the “done_en_set” of the IRQENABLE_SET never gets set. I don’t know why?.

To verify, if data is getting written in the memory allocated by the kernel module, I read back the data from the memory location and it reads correctly.

So I am not sure if this is problem with DMA of the LIDD LCD module or is there some sequence missing.

So can someone help me is getting the LIDD DMA to work?.

Please help me to resolve this issue.

Thanks & Regards