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

📄 msgpio.c

📁 mstar 776 开发的车载dvd
💻 C
📖 第 1 页 / 共 2 页
字号:
////////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 2006-2007 MStar Semiconductor, Inc.
// All rights reserved.
//
// Unless otherwise stipulated in writing, any and all information contained
// herein regardless in any format shall remain the sole proprietary of
// MStar Semiconductor Inc. and be kept in strict confidence
// (¨MStar Confidential Information〃) by the recipient.
// Any unauthorized act including without limitation unauthorized disclosure,
// copying, use, reproduction, sale, distribution, modification, disassembling,
// reverse engineering and compiling of the contents of MStar Confidential
// Information is unlawful and strictly prohibited. MStar hereby reserves the
// rights to any and all damages, losses, costs and expenses resulting therefrom.
//
///@file msGPIO.c
///@brief General Purpose I/O Module
///@author MStarSemi Inc.
///////////////////////////////////////////////////////////////////////////////

#include "board.h"

#define _MSGPIO_C_

#include "analog_reg.h"
#include "hwreg.h"
#include "drvsys.h"
#include "mreg51.h"
#include "msGPIO.h"
#include "drvGlobal.h"
#include "DrvTimer.h"
#include "Panel.h"
#include "drvScaler.h"
#include "drvGPIO.h"
#include "msAPI_Scaler.h"
#include "msAPI_Timer.h"
#include "msAPI_Mode.h"

/******************************************************************************/
/*                                 Global                                     */
/******************************************************************************/
U8 g_u8TransientBacklight = 0;
BOOLEAN g_bIsSoftStartValid = FALSE;

/******************************************************************************/
/*                                 Local                                      */
/******************************************************************************/

/******************************************************************************/
///Set PWMD0 duty cycle
///@param u8duty \b IN: 8bits duty cycle
/******************************************************************************/
void msPWMD0_DutyCycle(U8 u8duty)
{
     #ifdef  INVERTER_PWM0_PERIOD
        u8duty=~u8duty;
    #endif
    XBYTE[PWM0_PERIOD_DUTY] = u8duty;
}

/******************************************************************************/
///Set PWMD1 duty cycle
///@param u8duty \b IN: 8bits duty cycle
/******************************************************************************/
void msPWMD1_DutyCycle(U8 u8duty)
{
    XBYTE[PWM1_PERIOD_DUTY] = u8duty;
}

/******************************************************************************/
///Set PWMD2 duty cycle
///@param u8duty \b IN: 8bits duty cycle
/******************************************************************************/
void msPWMD2_DutyCycle(U8 u8duty)
{
    #ifdef  INVERTER_PWM2_PERIOD
        u8duty=~u8duty;
    #endif
    XBYTE[PWM2_PERIOD_DUTY] = (u8duty & 0x7f );
    if ( u8duty & 0x80 )
        XBYTE[PWM2_POLARITY] = 1;
    else
        XBYTE[PWM2_POLARITY] = 0;
}

/******************************************************************************/
///Set PWMD3 duty cycle
///@param u8duty \b IN: 8bits duty cycle
/******************************************************************************/
void msPWMD3_DutyCycle(U8 u8duty)
{
    XBYTE[PWM3_PERIOD_DUTY] = u8duty;
}

/******************************************************************************/
//select PWM0~3 in normal mode or enhance mode
/******************************************************************************/
void PWM0_IS_MODE(U8 Mode)
{
  if (Mode == NORMAL_MODE)
    XBYTE[PWM0_PWM1_CTRL]&=~BIT1;
  else
    XBYTE[PWM0_PWM1_CTRL]|=BIT1;
}
void PWM1_IS_MODE(U8 Mode)
{
  if (Mode == NORMAL_MODE)
    XBYTE[PWM0_PWM1_CTRL]&=~BIT3;
  else
    XBYTE[PWM0_PWM1_CTRL]|=BIT3;
}
void PWM2_IS_MODE(U8 Mode)
{
   if (Mode == NORMAL_MODE)
      XBYTE[PWM2_PWM3_CTRL]&=~BIT1;
   else
    XBYTE[PWM2_PWM3_CTRL]|=BIT1;
}
void PWM3_IS_MODE(U8 Mode)
{
   if (Mode == NORMAL_MODE)
      XBYTE[PWM2_PWM3_CTRL]&=~BIT3;
   else
      XBYTE[PWM2_PWM3_CTRL]|=BIT3;
}

/******************************************************************************/
///Enable/Disable Panel backlight
///@param bEnable \b IN:
///- TRUE: Enable
///- FALSE: Disable
/******************************************************************************/

#define MAX_BACKLIGHT	100

void SetPanelBacklight(bit bEnable)
{
	g_u8TransientBacklight = 0;

    if ( bEnable )
    {
        U8 i;
        i = 0;

        MDrv_Scaler_SetPanelBacklight(ENABLE);

//        printf("before interrupt\n");

		msAPI_Timer_Delayms( 10 );
//        printf("after interrupt\n");

		Panel_Backlight_Max_Current(PANEL_DIMMING_CTL);

		g_bIsSoftStartValid = TRUE;

		while ( g_bIsSoftStartValid == TRUE )
		{
			if ( g_u8TransientBacklight < MAX_BACKLIGHT )
			{
				g_u8TransientBacklight += 5;
			}

			g_u8TransientBacklight = MIN(g_u8TransientBacklight, MAX_BACKLIGHT);

			msAPI_Scaler_SetBacklight(N100toReallyValue( g_u8TransientBacklight, PANEL_MIN_PWM_DIM, PANEL_MAX_PWM_DIM ));

			msAPI_Timer_Delayms( 10 );
			if ( g_u8TransientBacklight == MAX_BACKLIGHT )
			{
				g_bIsSoftStartValid = FALSE;

			}
		}
    }
    else
    {
		Panel_Backlight_Max_Current( 0 );
	    msAPI_Scaler_SetBacklight( 0 );

	    msAPI_Timer_Delayms( 5 );
        MDrv_Scaler_SetPanelBacklight(DISABLE);
    }
}

//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
void msPWM0_Period(U16 Period )
{
    XBYTE[PWM0_PERIOD_LOW] = (U8)( Period &0xff );
    XBYTE[PWM0_PERIOD_HIGH] = (U8)( (Period >> 8) &0xff );
}

void msPWM1_Period(U16 Period )
{
    XBYTE[PWM1_PERIOD_LOW] = (U8)( Period &0xff );
    XBYTE[PWM1_PERIOD_HIGH] = (U8)( (Period >> 8) &0xff );
}

void msPWM2_Period(U16 Period )
{
    XBYTE[PWM2_PERIOD_LOW] = (U8)( Period &0xff );
    XBYTE[PWM2_PERIOD_HIGH] = (U8)( (Period >> 8) &0xff );
}

void msPWM3_Period(U16 Period )
{
    XBYTE[PWM3_PERIOD_LOW] = (U8)( Period &0xff );
    XBYTE[PWM3_PERIOD_HIGH] = (U8)( (Period >> 8) &0xff );
}

//------------------------------------------------------------------------------
void msPWM0_Setting( U8 x )
{
    if ( x == ENABLE )
    {
        XBYTE[REG_MUX_FUNC_SEL2] &= (~BIT0);  //pad is PWM0
        //lachesis_070313 disable enhance mode temporary.
        //Board need to generate more than 1khz. but enhance mode can't generate more than 700hz
        PWM0_IS_MODE( NORMAL_MODE );
        XBYTE[REG_MUX_CONFIG_5] &=~PWM0_ENABLE;  //clear if set to PWM

        XBYTE[PWM0_PWM1_CTRL] |= (BIT5);  //reset and strt
        XBYTE[PWM0_PWM1_CTRL] &= ~BIT5;
    }
    else
    {
        XBYTE[REG_MUX_FUNC_SEL2] |= (BIT0);   //pad is GPIO
        XBYTE[PWM0_PWM1_CTRL] &= (~BIT1);
        XBYTE[REG_MUX_CONFIG_5] |=PWM0_ENABLE;
        XBYTE[REG_GPIO_OE_0] &= (~BIT5 );  //assign as output port
    }
}

//------------------------------------------------------------------------------
void msPWM1_Setting( U8 x )
{
    if ( x == ENABLE )
    {
        XBYTE[REG_MUX_FUNC_SEL2] &= (~BIT1);  //pad is PWM0
        XBYTE[REG_MUX_CONFIG_5] &=~PWM1_ENABLE;  //clear if setting PWM
        PWM1_IS_MODE( ENHANCE_MODE );

        XBYTE[PWM0_PWM1_CTRL] |= (BIT6); //reset and strt
        XBYTE[PWM0_PWM1_CTRL] &= ~BIT6;

    }
    else
    {
        XBYTE[REG_MUX_FUNC_SEL2] |= (BIT1);   //pad is GPIO
        XBYTE[PWM0_PWM1_CTRL] &= (~BIT3);
        XBYTE[REG_MUX_CONFIG_5] |=PWM1_ENABLE;
        XBYTE[REG_GPIO_OE_0] &= (~BIT6 );  //assign as output port
    }
}
//------------------------------------------------------------------------------
void msPWM2_Setting( U8 x )
{
    if ( x == ENABLE )
    {
        XBYTE[REG_MUX_FUNC_SEL2] &= (~BIT2);
        //lachesis_070313 disable enhance mode temporary.
        //Board need to generate more than 1khz. but enhance mode can't generate more than 700hz
        PWM2_IS_MODE( NORMAL_MODE );
        XBYTE[REG_MUX_FUNC_SEL0]= PWM2_MUX_SEL;
        XBYTE[REG_MUX_CONFIG_5] &=~PWM2_ENABLE;   //claer if set to PWM

        XBYTE[PWM2_PWM3_CTRL] |= (BIT5); //reset and strt
        XBYTE[PWM2_PWM3_CTRL] &= ~BIT5;
    }
    else
    {
        XBYTE[REG_MUX_FUNC_SEL2] |= BIT2;
        XBYTE[PWM2_PWM3_CTRL] &= (~BIT1);
        XBYTE[REG_MUX_CONFIG_5] |=PWM2_ENABLE;
        XBYTE[REG_GPIO_OE_0] &= (~BIT7 );  //assign as output port
    }
}

//------------------------------------------------------------------------------
void msPWM3_Setting( U8 x )
{
    if ( x == ENABLE )
    {
        XBYTE[REG_MUX_FUNC_SEL2] &= (~BIT3);
        XBYTE[REG_MUX_CONFIG_5] &=~PWM3_ENABLE;  //claer if set to PWM
        PWM3_IS_MODE( ENHANCE_MODE );

        XBYTE[PWM2_PWM3_CTRL] |= ( BIT6);  //reser and strt
        XBYTE[PWM2_PWM3_CTRL] &= ~BIT6;
    }
    else
    {
        XBYTE[REG_MUX_FUNC_SEL2] |= BIT3;
        XBYTE[PWM2_PWM3_CTRL] &= (~BIT3);
        XBYTE[REG_MUX_CONFIG_5] |=PWM3_ENABLE;
        XBYTE[REG_GPIO_OE_1] &= (~BIT0 );  //assign as output port

⌨️ 快捷键说明

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