⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddi_display_controller_hx8347a_20070920.c

📁 sigmatel STMP36XX MP4方案下1289控制器和HX8347控制器
💻 C
📖 第 1 页 / 共 4 页
字号:
        {
            // For 16-bit, data is ok as 16 bits
    #ifdef DEBUG
        ret1 =
    #endif
            ddi_lcdif_WriteDirect(eCommMode, (void *)&u32Command, sizeof(DDI_DISPLAY_WORD_TYPE));
        }
    }
    #ifdef DEBUG
        assert(!ret1);
        assert(!ret2);
    #endif        
}

////////////////////////////////////////////////////////////////////////////////
//! \fn RtStatus_t ddi_display_controller_GetLcdifInitStruct(hw_lcdif_Init_t *pInit, gfx_BitmapTypeEnum_t eBitmapType)
//!
//! \brief Copies the LCDIF init struct that corresponds to the given color format
//!
//! \fntype Function
//!
//! \param[in,out] pInit - Pointer to init struct to copy to  
//! \param[in] eBitmapType - Graphics color format specifier
//!
//! \retval SUCCESS No error
//!
//! \retval ERROR_DDI_DISPLAY_CONTROLLER_BITMAP_TYPE_UNSUPPORTED - This
//!         controller does not support the given bitmap color type
//!
//! This function is implemented per controller or display.  The appropriate
//! LCDIF init parameters are copied to the given init struct pointer according
//! to the type of color format is specified.  Not all controllers/displays are
//! capable of all color formats, so this function may return an error
//! indicating that the given color format is not supported.
//!
////////////////////////////////////////////////////////////////////////////////
RtStatus_t ddi_display_controller_GetLcdifInitStruct(hw_lcdif_Init_t *pInit, gfx_BitmapTypeEnum_t eBitmapType)
{
    //! Init structure for LCDIF, may be loaded from a resource
    hw_lcdif_Init_t LcdifInit =
    {
        //! No busy line, no byte-swapping, bring LCD module out of reset
        false,                          //! m_bBusyEnable
        DDI_DISPLAY_DATA_SWIZZLE,       //! m_eDataSwizzle
        LCDRESET_HIGH,                  //! m_eReset
        BUSMODE_8080,                   //! m_eBusMode
        DDI_DISPLAY_WORDLENGTH,         //! m_eWordLength
        //! Bus timing info
        //! 1XCLK ~= 168ns
        {
            DDI_DISPLAY_DATA_SETUP_XCLKS,              //! m_u8DataSetup
            DDI_DISPLAY_DATA_HOLD_XCLKS,              //! m_u8DataHold
            DDI_DISPLAY_CMD_SETUP_XCLKS,              //! m_u8CmdSetup
            DDI_DISPLAY_CMD_HOLD_XCLKS,               //! m_u8CmdHold
        }
    };

    if( BITMAP_TYPE_16BPP_565 != eBitmapType )
        return ERROR_DDI_DISPLAY_CONTROLLER_BITMAP_TYPE_UNSUPPORTED;

    memcpy(pInit, &LcdifInit, sizeof(hw_lcdif_Init_t));

    return SUCCESS;
}

////////////////////////////////////////////////////////////////////////////////
//! \fn static void InitPwmBacklight(void)
//!
//! \brief Sets up the PWM backlight control signal
//!
//! \fntype Function
//!
//! Inits the PWM hardware block and sets up the GPIOs for PWM mode.
//! The initial backlight frequency is set, but the duty cycle is set to zero
//!
////////////////////////////////////////////////////////////////////////////////
static void InitPwmBacklight(void)
{
    // Do a raw init of the PWM GPIO
    if( !ddi_etm_IsPresent() ) {
        HW_PINCTRL_MUXSEL6_CLR(0x00300000 << (2*DDI_DISPLAY_BACKLIGHT_PWM_CHANNEL));
    }
    // Set up the backlight
    BF_CLR(PWM_CTRL, SFTRST);
    BF_CLR(PWM_CTRL, CLKGATE);

    // Initialize to 0% duty cycle
    if(g_bInitializeLCDController)//LCD_SPlash_
    {
    HW_PWMn_ACTIVE_WR(DDI_DISPLAY_BACKLIGHT_PWM_CHANNEL, 0);
    }
    else
    {
        // Initialize to 1/2 duty cycle
        BF_CS2n(PWMn_ACTIVE, DDI_DISPLAY_BACKLIGHT_PWM_CHANNEL, 
    		ACTIVE, 0,
    		INACTIVE, ((BACKLIGHT_PWM_PERIOD*(MIN_BRIGHTNESS_PERCENTAGE+MAX_BRIGHTNESS_PERCENTAGE)/2)/100) );
    }
    BF_CS5n(PWMn_PERIOD, DDI_DISPLAY_BACKLIGHT_PWM_CHANNEL,
            MATT, 0, 
            CDIV, BACKLIGHT_PWM_CDIV,
            INACTIVE_STATE, BV_PWMn_PERIOD_INACTIVE_STATE__0,
            ACTIVE_STATE, BV_PWMn_PERIOD_ACTIVE_STATE__1,
            PERIOD, BACKLIGHT_PWM_PERIOD);

    if(g_bInitializeLCDController)//LCD_SPLASH_BUG FIXED
    {
    HW_PWM_CTRL_CLR(1 << DDI_DISPLAY_BACKLIGHT_PWM_CHANNEL);
    }
    else
    {
    HW_PWM_CTRL_SET(1 << DDI_DISPLAY_BACKLIGHT_PWM_CHANNEL);
    }
}

////////////////////////////////////////////////////////////////////////////////
//! \fn static void SendControllerInitSeq(gfx_BitmapTypeEnum_t eBitmapType, uint32_t u32Width, uint32_t u32Height)
//!
//! \brief Sends commands to initialize the controller from reset
//!
//! \fntype Function
//!
//! \param[in] eBitmapType - Graphics color format specifier
//! \param[in] u32Width - Desired screen width setting
//! \param[in] u32Height - Desired screen height setting
//!
//! This function sends commands to initialize the controller after it has
//! been taken out of reset.
//!
//! \retval SUCCESS No error
//!
//! \retval ERROR_DDI_DISPLAY_CONTROLLER_BITMAP_TYPE_UNSUPPORTED - This
//!         controller does not support the given bitmap color type
//!
//! \retval ERROR_DDI_DISPLAY_CONTROLLER_SCREEN_SIZE - This
//!         controller does not support the given screen dimensions
//!
////////////////////////////////////////////////////////////////////////////////
static void SendControllerInitSeq(gfx_BitmapTypeEnum_t eBitmapType, uint32_t u32Width, uint32_t u32Height)
{
    if(g_bInitializeLCDController)	
    {
    //WriteDirect(CMD_MODE,0x22); 
       //Gamma Setting

    HW_PWM_CTRL_CLR(1 << DDI_DISPLAY_BACKLIGHT_PWM_CHANNEL);
    WriteDirect(CMD_MODE,0x46);    
    WriteDirect(DATA_MODE,0x00D2);

    WriteDirect(CMD_MODE,0x47);    
    WriteDirect(DATA_MODE,0x0050);

    WriteDirect(CMD_MODE,0x48);    
    WriteDirect(DATA_MODE,0x0007); 

    WriteDirect(CMD_MODE,0x49);    
    WriteDirect(DATA_MODE,0x0043);

    WriteDirect(CMD_MODE,0x4A);    
    WriteDirect(DATA_MODE,0x0044);

    WriteDirect(CMD_MODE,0x4B);    
    WriteDirect(DATA_MODE,0x0077);

    WriteDirect(CMD_MODE,0x4C);    
    WriteDirect(DATA_MODE,0x0066);

    WriteDirect(CMD_MODE,0x4D);    
    WriteDirect(DATA_MODE,0x0016); 

    WriteDirect(CMD_MODE,0x4E);    
    WriteDirect(DATA_MODE,0x0012);

    WriteDirect(CMD_MODE,0x4F);    
    WriteDirect(DATA_MODE,0x004C);

    WriteDirect(CMD_MODE,0x50);    
    WriteDirect(DATA_MODE,0x0046);

    WriteDirect(CMD_MODE,0x51);    
    WriteDirect(DATA_MODE,0x0044);
    //Gamma end

//240*320window setting  
    
    WriteDirect(CMD_MODE,0x02);    
    WriteDirect(DATA_MODE,0x0000); 

    WriteDirect(CMD_MODE,0x03);    
    WriteDirect(DATA_MODE,0x0000); 

    WriteDirect(CMD_MODE,0x04);    
    WriteDirect(DATA_MODE,0x0000); 

    WriteDirect(CMD_MODE,0x05);    
    WriteDirect(DATA_MODE,0x00EF); 

    WriteDirect(CMD_MODE,0x06);    
    WriteDirect(DATA_MODE,0x0000); 

    WriteDirect(CMD_MODE,0x07);    
    WriteDirect(DATA_MODE,0x0000); 

    WriteDirect(CMD_MODE,0x08);    
    WriteDirect(DATA_MODE,0x0001); 

    WriteDirect(CMD_MODE,0x09);    
    WriteDirect(DATA_MODE,0x003F); 

    //WriteDirect(CMD_MODE,0x22);
//Display setting 
    WriteDirect(CMD_MODE,0x01);    
    WriteDirect(DATA_MODE,0x0006); //0x0006

    WriteDirect(CMD_MODE,0x16);    
    WriteDirect(DATA_MODE,0x00A8);//0X48//0x00C8//0x0068//0x0008//0x00A8

    WriteDirect(CMD_MODE,0x23);    
    WriteDirect(DATA_MODE,0x0095); 

    WriteDirect(CMD_MODE,0x24);    
    WriteDirect(DATA_MODE,0x0095); 

    WriteDirect(CMD_MODE,0x25);    
    WriteDirect(DATA_MODE,0x00FF); 

    WriteDirect(CMD_MODE,0x27);    
    WriteDirect(DATA_MODE,0x0002); 

    WriteDirect(CMD_MODE,0x28);    
    WriteDirect(DATA_MODE,0x0002); 

    WriteDirect(CMD_MODE,0x29);    
    WriteDirect(DATA_MODE,0x0002); 

    WriteDirect(CMD_MODE,0x2A);    
    WriteDirect(DATA_MODE,0x0002); 

    WriteDirect(CMD_MODE,0x2C);    
    WriteDirect(DATA_MODE,0x0002); 

    WriteDirect(CMD_MODE,0x2D);    
    WriteDirect(DATA_MODE,0x0002); 

    WriteDirect(CMD_MODE,0x3A);    
    WriteDirect(DATA_MODE,0x0001); 

    WriteDirect(CMD_MODE,0x3B);    
    WriteDirect(DATA_MODE,0x0001);

    WriteDirect(CMD_MODE,0x3C);    
    WriteDirect(DATA_MODE,0x00F0);

    WriteDirect(CMD_MODE,0x3D);    
    WriteDirect(DATA_MODE,0x0000);
    delay(20);

    WriteDirect(CMD_MODE,0x35);    
    WriteDirect(DATA_MODE,0x0038);

    WriteDirect(CMD_MODE,0x36);    
    WriteDirect(DATA_MODE,0x0078);

    WriteDirect(CMD_MODE,0x3E);    
    WriteDirect(DATA_MODE,0x0038);

    WriteDirect(CMD_MODE,0x40);    
    WriteDirect(DATA_MODE,0x000F);

    WriteDirect(CMD_MODE,0x41);    
    WriteDirect(DATA_MODE,0x00F0);

    WriteDirect(CMD_MODE,0x19);    
    WriteDirect(DATA_MODE,0x0049);

    WriteDirect(CMD_MODE,0x93);    
    WriteDirect(DATA_MODE,0x0003);
     delay(10);

    WriteDirect(CMD_MODE,0x20);    
    WriteDirect(DATA_MODE,0x0020);

    WriteDirect(CMD_MODE,0x1D);    
    WriteDirect(DATA_MODE,0x0005);
    delay(10);

    WriteDirect(CMD_MODE,0x1E);    
    WriteDirect(DATA_MODE,0x0006); 

    WriteDirect(CMD_MODE,0x1F);    
    WriteDirect(DATA_MODE,0x0008);

    //VCOM setting
    WriteDirect(CMD_MODE,0x44);    
    WriteDirect(DATA_MODE,0x0040);

    WriteDirect(CMD_MODE,0x45);    
    WriteDirect(DATA_MODE,0x0012);
    delay(10);

    WriteDirect(CMD_MODE,0x1C);    
    WriteDirect(DATA_MODE,0x0004);
    delay(20);

    WriteDirect(CMD_MODE,0x43);    
    WriteDirect(DATA_MODE,0x0080);
     delay(5);

    WriteDirect(CMD_MODE,0x1B);    
    WriteDirect(DATA_MODE,0x0008);//0X00,0X08
    delay(40);

    WriteDirect(CMD_MODE,0x1B);    
    WriteDirect(DATA_MODE,0x0010);//0X00,0X10
    delay(40);

    WriteDirect(CMD_MODE,0x43);    
    WriteDirect(DATA_MODE,0x0080);
    delay(10);
    //Display ON setting
    WriteDirect(CMD_MODE,0x90);    
    WriteDirect(DATA_MODE,0x007F);

    WriteDirect(CMD_MODE,0x26);    
    WriteDirect(DATA_MODE,0x0004);
    delay(40);

    WriteDirect(CMD_MODE,0x26);    
    WriteDirect(DATA_MODE,0x0024);
    delay(40);

    WriteDirect(CMD_MODE,0x26);    
    WriteDirect(DATA_MODE,0x002C);
    delay(40);

    WriteDirect(CMD_MODE,0x26);    
    WriteDirect(DATA_MODE,0x003C);

//Set internal VDDD voltage
    WriteDirect(CMD_MODE,0x57);    
    WriteDirect(DATA_MODE,0x0002);

    WriteDirect(CMD_MODE,0x55);    
    WriteDirect(DATA_MODE,0x0000);

    WriteDirect(CMD_MODE,0x57);    
    WriteDirect(DATA_MODE,0x0000);

    HW_PWM_CTRL_SET(1 << DDI_DISPLAY_BACKLIGHT_PWM_CHANNEL);
    }
    g_bInitializeLCDController = TRUE;
}

/*

#ifdef RTOS_THREADX     // VSYNC only supported in threadx builds
////////////////////////////////////////////////////////////////////////////////
//! \fn static void ddi_display_controllerVsyncIsr(void *)
//! 
//! \brief Services the VSYNC interrupt
//!
//! \fntype Deferred service routine
//!
//! This function signals the occurrence of the VSYNC signal.  The VSYNC event
//! is signalled via semaphore.
//!
////////////////////////////////////////////////////////////////////////////////
static void ddi_display_controller_VsyncIsr(void *vUnused)
{
    // Check to see if this is our interrupt
    if( CHECK_VSYNC_IRQ_STATUS() )
    {
        // Put the VSYNC semaphore as a binary semaphore
        // There only ever needs to be at most one instance
        tx_semaphore_put(pVideoSemaphore);

        // Disable and clear the interrupt
        DISABLE_VSYNC_IRQ();
        CLEAR_VSYNC_IRQ_STATUS();

    }

    // If it's not our interrupt, ignore this
}
*/
////////////////////////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -