MCF5329 LCD controller not working

Nicolas Pinault <[email protected]> Fri, 23 May 2008 11:36:45 +0200
Newsgroups gmane.comp.hardware.motorola.microcontrollers.coldfire
Organization AATON
Message-ID <[email protected]>
Hi all,

I'm trying to use MCF5329 LCD controller but no signals are output from 
the chip. No clk, no sync, no data.
My LCD panel is a 640x480 color TFT panel.

Here is an excerpt of my code :

    MCF_GPIO_PAR_LCDDATA = MCF_GPIO_PAR_LCDDATA_PAR_LD7_0(3)  | // LCD
                           MCF_GPIO_PAR_LCDDATA_PAR_LD15_8(3) | // LCD
                           MCF_GPIO_PAR_LCDDATA_PAR_LD16(3)   | // LCD
                           MCF_GPIO_PAR_LCDDATA_PAR_LD17(3);    // LCD
   
    MCF_GPIO_PAR_LCDCTL = //MCF_GPIO_PAR_LCDCTL_PAR_CLS       |   // LCD
                          //MCF_GPIO_PAR_LCDCTL_PAR_PS        |   // LCD
                          //MCF_GPIO_PAR_LCDCTL_PAR_REV       |   // LCD
                          //MCF_GPIO_PAR_LCDCTL_PAR_SPL_SPR   |   // LCD
                          MCF_GPIO_PAR_LCDCTL_PAR_CONTRAST  |   // LCD
                          MCF_GPIO_PAR_LCDCTL_PAR_LSCLK     |   // LCD
                          MCF_GPIO_PAR_LCDCTL_PAR_LP_HSYNC  |   // LCD
                          MCF_GPIO_PAR_LCDCTL_PAR_FLM_VSYNC |   // LCD
                          MCF_GPIO_PAR_LCDCTL_PAR_ACD_OE;       // LCD
       
    MCF_GPIO_PDDR_LCDCTLH  = 0x01;  // Tout en sortie
    MCF_GPIO_PDDR_LCDCTLL  = 0xFF;  // Tout en sortie
    MCF_GPIO_PDDR_LCDDATAH = 0x03;  // Tout en sortie
    MCF_GPIO_PDDR_LCDDATAM = 0xFF;  // Tout en sortie
    MCF_GPIO_PDDR_LCDDATAL = 0xFF;  // Tout en sortie
   
    MCF_GPIO_DSCR_LCD = MCF_GPIO_DSCR_LCD_LCD_DSE(3);   // Maximum drive 
strength

    // Bursting
    MCF_SCM_BCR = MCF_SCM_BCR_GBR |
                  MCF_SCM_BCR_GBW |
                  0xFF;

    // Panel configuration
    MCF_LCDC_LPCR = MCF_LCDC_LPCR_PCD(4) |      // TODO : 2 ?
                    //MCF_LCDC_LPCR_SHARP |
                    MCF_LCDC_LPCR_SCLKSEL |
                    MCF_LCDC_LPCR_ACD(0) |
                    MCF_LCDC_LPCR_ACDSEL |
                    //MCF_LCDC_LPCR_REV_VS |
                    MCF_LCDC_LPCR_SWAP_SEL |
                    MCF_LCDC_LPCR_ENDSEL |
                    MCF_LCDC_LPCR_SCLKIDLE |
                    MCF_LCDC_LPCR_OEPOL |
                    MCF_LCDC_LPCR_CLKPOL |
                    MCF_LCDC_LPCR_LPPOL |
                    MCF_LCDC_LPCR_FLM |
                    //MCF_LCDC_LPCR_PIXPOL |
                    MCF_LCDC_LPCR_BPIX_18bpp |
                    MCF_LCDC_LPCR_PBSIZ_8 |
                    MCF_LCDC_LPCR_COLOR |
                    MCF_LCDC_LPCR_TFT;
   
    // Horizontal configuration
    MCF_LCDC_LHCR = MCF_LCDC_LHCR_H_WAIT_2(78-3) |    // tHBP
                    MCF_LCDC_LHCR_H_WAIT_1(88-1) |    // tHFP
                    MCF_LCDC_LHCR_H_WIDTH(2-1);
   
    // Vertical configuration
    MCF_LCDC_LVCR = MCF_LCDC_LVCR_V_WAIT_2(1) |
                    MCF_LCDC_LVCR_V_WAIT_1(6) |
                    MCF_LCDC_LVCR_V_WIDTH(1);
   
    // Start Address
    MCF_LCDC_LSSAR = MCF_LCDC_LSSAR_SSA((INT32U)BackgroundPlane);
   
    // Width and Height
    MCF_LCDC_LSR = MCF_LCDC_LSR_XMAX(480/16) |
                   MCF_LCDC_LSR_YMAX(640);
   
    // Virtual width
    MCF_LCDC_LVPWR = MCF_LCDC_LVPWR_VPW(480);
   
    // Cursor
    MCF_LCDC_LCPR = MCF_LCDC_LCPR_CXP(100) |
                    MCF_LCDC_LCPR_CYP(100) |
                    MCF_LCDC_LCPR_CC_XOR |
                    MCF_LCDC_LCPR_OP_ON;
   
    // Cursor Width Height and Blink
    MCF_LCDC_LCWHBR = MCF_LCDC_LCWHBR_BD(32) |
                      MCF_LCDC_LCWHBR_CH(10) |
                      MCF_LCDC_LCWHBR_CW(20) |
                      MCF_LCDC_LCWHBR_BK_EN_ON;
   
    // Color cursor mapping
    MCF_LCDC_LCCMR = MCF_LCDC_LCCMR_CUR_COL_R(0x30) |   // midscale
                     MCF_LCDC_LCCMR_CUR_COL_G(0x30) |
                     MCF_LCDC_LCCMR_CUR_COL_B(0x30);
   
   
    // Panning offset
    MCF_LCDC_LPOR = MCF_LCDC_LPOR_POS(0);
   
    // Dma control
    MCF_LCDC_LDCR = MCF_LCDC_LDCR_TM(4) |
                    MCF_LCDC_LDCR_HM(8) |
                    MCF_LCDC_LDCR_BURST;
   
    // Refresh mode
    MCF_LCDC_LRMCR = MCF_LCDC_LRMCR_SEL_REF;
   
    // Interrupt configuration
    MCF_LCDC_LICR = 0;
   
    // Interrupt enable
    MCF_LCDC_LIER = 0;
   
//    // Graphic window start address
//    MCF_LCDC_LGWSAR = MCF_LCDC_LGWSAR_GWSA((INT32U)GraphicPlane);
//   
//    // Graphic window size
////    MCF_LCDC_LGWSR = MCF_LCDC_LGWSR_GWH(640) |
////                     MCF_LCDC_LGWSR_GWW(480/16);
//    MCF_LCDC_LGWSR = MCF_LCDC_LGWSR_GWH(1) |
//                     MCF_LCDC_LGWSR_GWW(1);
//   
//    // Graphic window virtual page width
//    MCF_LCDC_LGWVPWR = MCF_LCDC_LGWVPWR_GWVPW(480);
//   
//    // Graphic window panning offset
//    MCF_LCDC_LGWPOR = MCF_LCDC_LGWPOR_GWPO(0);
//   
//    // Graphic window position
//    MCF_LCDC_LGWPR = MCF_LCDC_LGWPR_GWYP(0) |
//                     MCF_LCDC_LGWPR_GWXP(0);
   
    // Graphic window control
    MCF_LCDC_LGWCR = MCF_LCDC_LGWCR_GWCKB(0x3F) |
                     MCF_LCDC_LGWCR_GWCKG(0x3F) |
                     MCF_LCDC_LGWCR_GWCKR(0x3F) |
                     //MCF_LCDC_LGWCR_GW_RVS  |
                     //MCF_LCDC_LGWCR_GWE |
                     //MCF_LCDC_LGWCR_GWCKE |
                     MCF_LCDC_LGWCR_GWAV(0);
   
    // Graphic window DMA control
    MCF_LCDC_LGWDCR = MCF_LCDC_LGWDCR_GWTM(4) |
                      MCF_LCDC_LGWDCR_GWHM(8) |
                      MCF_LCDC_LGWDCR_GWBT;
   
    // Mapping RAM registers
   
   
    // Enable LCD controller
    MCF_CCM_MISCCR |= MCF_CCM_MISCCR_LCD_CHEN;

I am obviously missing something but what ?
Any help would be appreciated.

Best regards,
Nicolas Pinault