This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C6748: LCD屏驱动无效

Part Number: TMS320C6748


我按照C6748_StarterWare_1_20_04_01里的例程配置了我的LCD,这里是代码,根据LCD实际手册做了参数调整;

/**
 * \file  rasterDisplay.c
 *
 * \brief Sample application for raster
 */

/*
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ 
*
*  Redistribution and use in source and binary forms, with or without 
*  modification, are permitted provided that the following conditions 
*  are met:
*
*    Redistributions of source code must retain the above copyright 
*    notice, this list of conditions and the following disclaimer.
*
*    Redistributions in binary form must reproduce the above copyright
*    notice, this list of conditions and the following disclaimer in the 
*    documentation and/or other materials provided with the   
*    distribution.
*
*    Neither the name of Texas Instruments Incorporated nor the names of
*    its contributors may be used to endorse or promote products derived
*    from this software without specific prior written permission.
*
*  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
*  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
*  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 
*  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
*  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
*  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
*  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
*  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
*  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
*  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#include "raster.h"
#include "psc.h"
#include "interrupt.h"
#include "soc_C6748.h"
#include "hw_psc_C6748.h"
#include "hw_syscfg0_C6748.h"
#include "hw_types.h"
#include "lcdkC6748.h"
//#include "image.h"

#include "bsp_lcd.h"
#include "bsp_pll.h"

void LCDDisplay(void)
{
    unsigned int  status;

    status = RasterIntStatus(SOC_LCDC_0_REGS,RASTER_END_OF_FRAME0_INT_STAT |
                                             RASTER_END_OF_FRAME1_INT_STAT );

    status = RasterClearGetIntStatus(SOC_LCDC_0_REGS, status);

//    if (status & RASTER_END_OF_FRAME0_INT_STAT)
//    {
//        RasterDMAFBConfig(SOC_LCDC_0_REGS,
//                          (unsigned int)image1,
//                          (unsigned int)image1 + sizeof(image1) - 2,
//                          0);
//    }
//
//    if(status & RASTER_END_OF_FRAME1_INT_STAT)
//    {
//        RasterDMAFBConfig(SOC_LCDC_0_REGS,
//                          (unsigned int)image1,
//                          (unsigned int)image1 + sizeof(image1) - 2,
//                          1);
//    }
}

void LCDInit(void)
{
    // Ensure that SysCfg registers are unlocked
    KickUnlock();

    // Increase LCDC Master Priority to 0 to prevent FIFO underruns
    HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_MSTPRI2) &= 0x0FFFFFFF;

    LCDSetupIntc();

    SetUpLCD();

    /* configuring the base ceiling */
    RasterDMAFBConfig(SOC_LCDC_0_REGS,
                      (unsigned int)image1,
                      (unsigned int)image1 + sizeof(image1) - 2,
                      0);

    RasterDMAFBConfig(SOC_LCDC_0_REGS,
                      (unsigned int)image1,
                      (unsigned int)image1 + sizeof(image1) - 2,
                      1);

    /* enable End of frame interrupt */
    RasterEndOfFrameIntEnable(SOC_LCDC_0_REGS);

    /* enable raster */
    RasterEnable(SOC_LCDC_0_REGS);
}

/*
** Configures raster to display image 
*/
void SetUpLCD(void)
{
    PSCModuleControl(SOC_PSC_1_REGS, HW_PSC_LCDC, PSC_POWERDOMAIN_ALWAYS_ON,
             PSC_MDCTL_NEXT_ENABLE);

    LCDPinMuxSetup();

    /* disable raster */
    RasterDisable(SOC_LCDC_0_REGS);
    
    /* configure the pclk */
    RasterClkConfig(SOC_LCDC_0_REGS, 40000000, 150000000);

    /* configuring DMA of LCD controller */ 
    RasterDMAConfig(SOC_LCDC_0_REGS, RASTER_DOUBLE_FRAME_BUFFER,
                    RASTER_BURST_SIZE_16, RASTER_FIFO_THRESHOLD_8,
                    RASTER_BIG_ENDIAN_DISABLE);

    /* configuring modes(ex:tft or stn,color or monochrome etc) for raster controller */
    RasterModeConfig(SOC_LCDC_0_REGS, RASTER_DISPLAY_MODE_TFT,
                     RASTER_PALETTE_DATA, RASTER_COLOR, RASTER_EXTRAPOLATE);

    /* frame buffer data is ordered from least to Most significant bye */
    RasterLSBDataOrderSelect(SOC_LCDC_0_REGS);
    
    /* disable nibble mode */
    RasterNibbleModeDisable(SOC_LCDC_0_REGS);
   
     /* configuring the polarity of timing parameters of raster controller */
    RasterTiming2Configure(SOC_LCDC_0_REGS, RASTER_FRAME_CLOCK_LOW |
                                            RASTER_LINE_CLOCK_LOW  |
                                            RASTER_PIXEL_CLOCK_LOW |
                                            RASTER_SYNC_EDGE_RISING|
                                            RASTER_SYNC_CTRL_ACTIVE|
                                            RASTER_AC_BIAS_HIGH     , 0, 255);

    /* configuring horizontal timing parameter */
   RasterHparamConfig(SOC_LCDC_0_REGS, 800, 40, 354, 46);

    /* configuring vertical timing parameters */
   RasterVparamConfig(SOC_LCDC_0_REGS, 600, 20, 77, 23);

   /* configuring fifo delay to */
   RasterFIFODMADelayConfig(SOC_LCDC_0_REGS, 2);

//   RasterEnable(SOC_LCDC_0_REGS);
}

/*
** configures arm interrupt controller to generate raster interrupt 
*/
void LCDSetupIntc(void)
{
    // Register ISR to vector table
    IntRegister(C674X_MASK_INT7, BspLCDIsr);

    // Map system interrupt to DSP maskable interrupt
    IntEventMap(C674X_MASK_INT7, SYS_INT_LCDC_INT);

    // Enable DSP maskable interrupt
    IntEnable(C674X_MASK_INT7);
}

/*
** For each end of frame interrupt base and ceiling is reconfigured 
*/
void BspLCDIsr(void)
{
    unsigned int  status;

    IntEventClear(SYS_INT_LCDC_INT);

    status = RasterIntStatus(SOC_LCDC_0_REGS,RASTER_END_OF_FRAME0_INT_STAT |
                                             RASTER_END_OF_FRAME1_INT_STAT );

    status = RasterClearGetIntStatus(SOC_LCDC_0_REGS, status);   

    if (status & RASTER_END_OF_FRAME0_INT_STAT)
    {
        RasterDMAFBConfig(SOC_LCDC_0_REGS,
                          (unsigned int)image1,
                          (unsigned int)image1 + sizeof(image1) - 2,
                          0);
    }

    if(status & RASTER_END_OF_FRAME1_INT_STAT)
    {
        RasterDMAFBConfig(SOC_LCDC_0_REGS,
                          (unsigned int)image1,
                          (unsigned int)image1 + sizeof(image1) - 2,
                          1);
    }
}

/***************************** End Of File ************************************/

这里是LCD硬件连接图 这里是LCD部分参数 ,配置完成后,仿真屏幕就只闪一下,然后就没动作了,我代码还有什么地方没配置吗  还是配置有误,望请不吝赐教

  • 请将修改过的参数标红,与EVM板上使用的LCD对比参数有哪些部分不同。

    着重看一下以下API的配置

    RasterClkConfig

    RasterModeConfig

    RasterTiming2Configure

    RasterHparamConfig

    RasterVparamConfig

    引脚信号是否有量过?