📄 msgpio.c
字号:
////////////////////////////////////////////////////////////////////////////////
//
// 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 + -