📄 mcu.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 + -