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

📄 mcu.c

📁 完整的软件学习--显示器驱动视频软件
💻 C
字号:
#include "board.h"
#include "types.h"
#include "misc.h"
#include "debug.h"
#include "Global.h" 
#include "nvram.h"
#include "power.h"

void Init_ExternalInterrupt(void);
void Init_Timer(void);
void Init_SerialPort(void);
void Init_IOPorts(void);
void Enable_SerialPort(void);
void Disable_SerialPort(void);

#if MTV512
void MTV512_IO_Init(void)
{
  PADMOD0=0x00;//P6 setting, bit0~bit3=0, P6.0~P6.3 is P6.0~P6.3
  PADMOD1=0x3F;//P5 setting, bit0~bit5=1, P5.0~P5.5 is P5.0~P5.5
  PADMOD2=0x80;//bit7=0, "P3.0,P3.1" is "P3.0,P3.1"; bit5=0, "P5.6,P5.7" is "P5.6,P5.7"; bit4=1, P6.6 is P6.6
                          //bit7=1, "P3.0,P3.1" is "HSCL1,HSDA1"; bit5=1, "P5.6,P5.7" is "HSCL2,HSDA2"
  PADMOD3=0xFF;//bit0~bit7=1, P5.0~P5.7 define for output pins

  #if PRV772_KeyPad
  PADMOD4=0x30;//P6.0~P6.3, P6.6, P6.7 define for input pins, P6.4~P6.5 define for output pins
  #else
  PADMOD4=0x20;//P6.0~P6.4, P6.6, P6.7 define for input pins, P6.5 define for output pin
  #endif
  
  PADMOD5=0x00;//P1 8051 standard I/O
  PADMOD6=0x00;//bit6=0, P7.6 is P7.6
  PADMOD7=0xC0;//bit7=1, P7.7 define for output pin, bit6=1, P7.6 define for output pin

//other option
  INTEN=0x46;//not Enable  Recive B interrupt //0x40->enable isp
  SLVBADDR=0xB7;
  OPTION=0x00;//normal speed// 0x60->double speed, 253 step
}
#endif

void Init_MCU(void)
{
   	 EA=0; 
	Init_IOPorts();
    	Init_ExternalInterrupt();
    	Init_Timer();
#if MTV512
	MTV512_IO_Init();
#else
    Init_SerialPort();
#endif
    EA=1;
}


// Initialize I/O setting
void Init_IOPorts(void)
{
//-----------------------
#if TSUM_Board

  WD_SWZ1 = 0x55;// Disable watch dog.
  WD_SWZ2 = 0xAA;
  P0 = 0x07;
  P1 = 0x68;
  P2 = 0x13;
  P3 = 0x03;
  MCU_P4_OUT_EN=0xff;
  MCU_P4_FMD=0x00;
  	
  Left_key = 1;
  Right_key = 1;
  Menu_key = 1;
  Exit_key = 1;
  Power_key = 1; 

  hw_ClrPanel();
  hw_ClrBackLit();

#elif DVII_Board
    #if MTV512
    P1=0xFF;
    #else
    P0=0xFF;
    #endif	
#if 1//DUAL_INPUT
    #if MTV512
    P5_3=0x00;P5_2=0x00;P5_1=0x00;P5_0=0x00;//Set DVI DDC
    P5_7=0x00;P5_6=0x01;P5_5=0x01;P5_4=0x00;
    #else	
    P1=0x60;//Set DVI DDC
    #endif
#else
    #if MTV512
    P5_3=0x00;P5_2=0x00;P5_1=0x00;P5_0=0x00;//Set DVI DDC
    P5_7=0x00;P5_6=0x01;P5_5=0x00;P5_4=0x00;
    #else	
    P1=0x40;//set DSUB DDC
    #endif
#endif
    #if MTV512
    P6_3=0x00;P6_2=0x01;P6_1=0x00;P6_0=0x00;//Set DVI DDC
    P6_7=0x01;P6_6=0x00;P6_5=0x01;P6_4=0x01;
    P3_4=0x00;P3_5=0x00;P7_6=0x00;P7_7=0x00;
    #else	
    P2=0x34;//P2=0xFA;//Albert
    P3=0x0F;
    #endif
	
//-----------------------	
#elif DSUB_Board
    BYTE temp;
    #if MTV512
    P1=0xFE;//0x0E;
    #else
    P0=0xFE;//0x0E;
    #endif
#if 1//DUAL_INPUT
    #if MTV512
    P5_3=0x01;P5_2=0x00;P5_1=0x00;P5_0=0x00;//Set DVI DDC
    P5_7=0x01;P5_6=0x01;P5_5=0x01;P5_4=0x01;
    #else	
    P1=0xF8; //p1.4 volume mute pin
    #endif
#else
    #if MTV512
    P5_3=0x01;P5_2=0x00;P5_1=0x00;P5_0=0x00;//Set DVI DDC
    P5_7=0x01;P5_6=0x01;P5_5=0x00;P5_4=0x01;
    #else	    
    P1=0xD8;
    #endif	
#endif
    #if MTV512
    P6_3=0x01;P6_2=0x01;P6_1=0x01;P6_0=0x01;//Set DVI DDC
    P6_7=0x01;P6_6=0x01;P6_5=0x00;P6_4=0x01;
    P3_4=0x00;P3_5=0x00;P7_6=0x00;P7_7=0x00;
    #else	
    P2=0xDF;
    P3=0x0F;
    #endif

	Delay1ms(10);
	NVRam_ReadByte(nvrMonitorAddr(Volume), &temp);    
	if(temp==0)
		SetAudio(0);

//-----------------------	
#elif FiveInOne_Board
    P0=0xFF;
    P1=0xFF;
    P2=0xBF;//P2.6=0,EEPROM Write Enable
    P3=0xFF;
#endif

  Power_TurnOffLed();

#if DDRBus //Albert Enable
    Set_ms_WRZ();
    Set_ms_RDZ();
    Clr_ms_ALE();
#endif
}

/* initialize 8051 CPU timer & interrupt routine */
/* TCON.7(   TF1): Timer 1 overflow flag */
/* TCON.6(   TR1): Timer 1 stop/start bit */
/* TCON.5(   TF0): Timer 0 overflow flag */
/* TCON.4(   TR0): Timer 0 stop/start bit */
/* TCON.3(   IE1): Timer 1 INT1 interrupt flag */
/* TCON.2(   IT1): Timer 1 INT1 interrupt style setup*/
/* TCON.1(   IE0): Timer 0 /INT0 interrupt flag */
/* TCON.0(   IT0): Timer 0 /INT0 interrupt style setup */
void Init_ExternalInterrupt(void)
{
#if UseINT
    IT0=1;//1;
    IE0=0;
    EX0=1;  // disable external interrupt 0
#else
    IT0=0;//1;
    IE0=0;
    EX0=0;  // disable external interrupt 0
#endif

#if MTV512
    IT1=1;//1; // set external interrupt 0 & 1 as falling edge trigger
    IE1=0;  // interrupt flag
    EX1=1;  // enable external interrupt 1
#else
    IT1=0;//1; // set external interrupt 0 & 1 as falling edge trigger
    IE1=0;  // interrupt flag
    EX1=0;  // enable external interrupt 1
#endif  
    PX0=1;  //
}

void Init_Timer(void)
{
    WORD clock_period=ClockPeriod;
    
    /* -------------initialize Timer 0 -----------------------------*/
    ET0=1;  // enable timer 0 interrupt
    TH0=clock_period>>8;
    TL0=clock_period&0xFF; // timer 0 counter
    TF0=0; // timer 1 flag
  
#if MTV512//Max debug for Myson MTV512M
    ET1=0;//disable timer 1 interrupt
    TMOD=0x21;//setup Timer mode
#else	
    /* -------------initialize Timer 1 -----------------------------*/
    ET1=0;//disable timer 1 interrupt
    TH1=0;
    TL1=0;//timer 1 counter
    TF1=0;//timer 1 flag
  
    // setup Timer mode
    TMOD=0x11;  // set timer 1 as timer(1) , timer 0 as counter(5)
#endif

    // enable/disable timer
    TR0=1;  // disable timer 0
#if MTV512//Max debug for Myson MTV512M
    ;
#else
    TR1=0;  // disable timer 1
#endif    
}

/*----------Timer 2 -------------------*/
/* T2CON.7(   TF2): overflow flag */
/* T2CON.6(  EXF2): extern enable flag */
/* T2CON.5(  RCLK): receive clock */
/* T2CON.4(  TCLK): transfer clock */
/* T2CON.3( EXEN2): extern enable flag */
/* T2CON.2(   TR2): stop/start timer 2 */
/* T2CON.1(  C_T2): intern clock(0)/extern counter(1) switch */
/* T2CON.0(CP_RL2): capture flag */
#if !MTV512
void Init_SerialPort(void)
{ 
#if MTV512//Max debug for Myson MTV512M
  WORD br_cnt=T1BaudRatePeriod;
  PCON=0x00; //not double baudrate
  SCON=0x50; //serial mode 1
//  TH1=0xfd;//br_cnt;9600
  TH1=br_cnt;// 0xfA;//br_cnt;9600
  RI=0;
  TI=0;
  TR1=1;
  ES=1;//enable serial interrupt
  
#else
    WORD br_cnt=BaudRatePeriod;    
#if 0
    SCON=0x50;
    TMOD|=0x01;
    TH1=0xFD;
    TR1=1;
    TI=0;
#else
    #if MSTMCU
    TH1=252;
    #endif
    T2CON=0x00;
    RCAP2H= br_cnt>>8;
    RCAP2L= br_cnt&0xff;
    SCON=0x50;
    RI=0;
    TI=0;

	NVRam_ReadByte(nvrMonitorAddr(MonitorFlag), &MonitorFlags); 
	
 	if(FactoryModeFlag&&CheckBoard()==FALSE)
	 	Enable_SerialPort();
	else
 		Disable_SerialPort();
#endif
#endif
}
#endif
#if !MTV512
void Enable_SerialPort(void)
{
  #if MTV512
	  PADMOD2=0x10;
  #endif
  #if !MTV512
       T2CON=0x34;
  #endif
	ES=1;   //2005-11-24 update for enter factory menu bug

#if MSTMCU
	IT1=0;// 1; // set external interrupt 0 & 1 as falling edge trigger
  	IE1=0;  // interrupt flag
  	EX1=0;  // enable external interrupt 1
#endif

}
#endif
void Disable_SerialPort(void)
{

  #if MTV512
  PADMOD2=0xB0;
  #endif
  
#if (!Enable232ISP)
    #if !MTV512
    T2CON=0x30;
    #endif
    ES=0;

    #if MSTMCU
    IT1=1;// 1; // set external interrupt 0 & 1 as falling edge trigger
    IE1=0;  // interrupt flag
    EX1=1;  // enable external interrupt 1
    #endif

#else
    #if !MTV512
    T2CON=0x34;
    #endif
    ES=1;
#endif	
}


#if MXICMcu
extern void start_ISP(void);

void EnableISP(void)
{
	Enable_SerialPort();
	start_ISP();
	while(1);
}

#elif WinBondMcu//Winbond ISP
void EnableISP(void)
{	
	Enable_SerialPort();
	TR0=0;
	CHPENR=0x87;
	CHPENR=0x59;
	CHPCON=0x03;
	IP=0x00;
	IP=0x82;
	TL0=0xFE;
	TH0=0xFF;
	TR0=1;
	PCON |= 0x01;
	while (1);	
}

#else
void EnableISP(void)
{
;
}
#endif

⌨️ 快捷键说明

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