📄 sysinit.c
字号:
/*******************************************************************
*
********************************************************************/
#include "include\macro.h"
#include "include\HardConfig.h"
#include "include\SysConfig.h"
#include "include\SubConfig.h"
#include "include\data.h"
#include "include\bitdef.h"
#include "include\FunAnnounce.h"
/*
**-----------------------------------------------------------------------------
**
** Abstract:
** system function initialize when MCU reset,
** include OSC,PORT,INTERRUPT,TIMER,ETC.
** Parameters:
** None
**
** Returns:
** None
**
**-----------------------------------------------------------------------------
*/
void Init_CPU()
{
/* Clock generator initiate */
Clock_Init();
/* Port initiate */
PORT_Init();
/* AD initiate */
AD_Init();
/* TM00 initiate */
TM00_Init();
/* wait for stabilization after 750ms */
WaitFor750ms();
/* LVI initiate */
LVI_Init();
/* wait for power on */
if(PowerCk()== 1) Sys_err(); //dead loop.
/* TM50 initiate */
TM50_Init();
/* TM51 initiate */
TM51_Init();
/* TMH0 initiate */
TMH0_Init();
/* TMH1 initiate */
TMH1_Init();
/* HL6024 initiate */
InitLCD();
/* user ram initiate */
UserRAM_init();
// BLED_Open();
/* WT initiate */
WT_Init();
/* INT initiate */
INT_Init();
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void Clock_Init(void)
{
PCC = 0B01000000;
RCM = 0;
MCM = 0X01;
ClrIORBit(OSCCTL, 0x20); /* XT1 input mode */
SetIORBit(OSCCTL, 0x10);
MOC = 0X80;
PCC = 0;
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void PORT_Init( void )
{
/* initialize the port registers */
P0 = PORT_P0;
P1 = PORT_P1;
P2 = PORT_P2;
P3 = PORT_P3;
P4 = PORT_P4;
P6 = PORT_P6;
P7 = PORT_P7;
P12 = PORT_P12;
/* initialize the Pull-up resistor option registers */
PU0 = PORT_PU0;
PU1 = PORT_PU1;
PU3 = PORT_PU3;
PU4 = PORT_PU4;
PU7 = PORT_PU7;
PU12 = PORT_PU12;
/* initialize the mode registers */
PM0 = PORT_PM0;
PM1 = PORT_PM1;
PM2 = PORT_PM2;
ADPC = PORT_ADPC;
PM3 = PORT_PM3;
PM4 = PORT_PM4;
PM6 = PORT_PM6;
PM7 = PORT_PM7;
PM12 = PORT_PM12;
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void INT_Init( void )
{
EGP = 0b00100100;
EGN = 0b00000100; //INT5 ,raise eage interrupt!!
PM1.6 = 1; /* set P16 input mode */
PM3.1 = 1;
PPR5 = 0;
PIF5 = 0;
PMK5 = 0; /* enable INTP5 */
PPR2 = 0;
PIF2 = 0;
PMK2 = 0; /* enable INTP5 */
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void WT_Init( void )
{
WTM = 0; //CLOSE
WTM = 0B10110000;
WTMK = 0;
WTIMK = 0;
WTM |=0x03; // open
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void UART0_Init( void )
{
pin_IRTXD = 1;
PM1.1 = 0;
ASIM0 = 0;
ASIM0 = 0b00011101; // data length 8 bits
// stop length 1 bits
// even parity mode
BRGC0 = UART0_TM50_DIVISION_VALUE;
SRIF0 = 0;
STIF0 = 0;
SRMK0 = 0; //receive end interrupt enable
STMK0 = 0; //transfer end interrupt enable
ASIM0.7 =1;
ASIM0.6 =1;
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void AD_Init( void )
{
ADPC = AD_ADPC;
ADS = 0;
ADM = 0;
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void WaitFor750ms( void )
{
Delay_ms(250);
WDTE=0xAC; // clr WDT
NOP();
Delay_ms(250);
WDTE=0xAC; // clr WDT
NOP();
Delay_ms(250);
WDTE=0xAC; // clr WDT
NOP();
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void UART6_Init( void )
{
ASIM6 = 0;
pin_485TXD = 1;
PM1.3 = 0;
CKSR6=0x04; // set f = fxp/32 (fxp = 8MHZ)
BRGC6=208; // set 1200 bps
ASICL6=0x2; //LSB frist
POWER6 = 1; //enable internal clock operation
ASIM6 |= 0b01111101; //enable transmission
//enable reception
//even parity
//character lenght of data = 8-bits
//number of stop bits = 1
//“INTSR6” occurs in case of error (at this time, INTSRE6 does not occur).
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void TM00_Init(void)
{
TMC00=0x00;
}
/*********************************************************************
**
*********************************************************************/
void TM50_Init( void )
{
TCE50 = 0;
TCL50 = TM_TM50_CLOCK; // Fprs/4 = 2M,
TMC50 = 02;
CR50 = TM_TM50_INTERVALVALUE; /* TM50 interval */
TCE50 = 1;
}
/*********************************************************************
**
*********************************************************************/
void TM51_Init( void )
{
TCE51 = 0;
TCL51 = TM_TM51_CLOCK; /* internal countclock */
/* TM51 squarewave output */
P3.3 = 0;
PM3.3 =0;
TMC51 =0x07;
CR51 = TM_TM51_SQUAREWIDTH;
}
/*********************************************************************
**
*********************************************************************/
void TMH0_Init( void )
{
TMHE0 = 0; //close
/* internal countclock */
TMHMD0 = 0b00101001; /* TMH0 PWM output */
P1.5 = 0;
PM1.5 = 0;
CMP00 = TM_TMH0_PWMCYCLE;
CMP10 = TM_TMH0_PWMDELAY;
TMHE0 = 1; //
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void TMH1_Init( void )
{
ClrIORBit(TMHMD1, 0x80);
//TMHMD1 |= (TM_TMH1_CLOCK << 4);
// CMP01 = TM_TMH1_INTERVALVALUE;
}
/*********************************************************************
**
*********************************************************************/
void TMH1_User_Init(uchar cnt)
{
TMHE1 = 0; ;//Close H1
TMHMD1|=(0x01<<4);//CLK Set;2M speed
CMP01=cnt; // Time Set
TMIFH1 = 0;
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void LVI_Init( void )
{
PM12.0 =1;
LVION = 0;
NOP();
LVIMK = 1;
LVISEL = 1;
LVIS = 0x0e; //limit is 2.04V
LVION =1;
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
NOP();
}
/*********************************************************************
** void Clock_Init(void);
*********************************************************************/
void UserRAM_init( void )
{
MEM_Read(E2P_TENDEC, (uchar*)&Sram.T_ENdec, 0x05); // get energy decimal data and low pluse count
MEM_Read(E2P_EADJ, (uchar*)&Sram.Factor[0], 0x02); //
CheckSystemSub();
Comm.status = COMM_STATUS_INIT;
LCDStatus_Trig(DISTG_RESERT);
MDLoad.ptr = 0;
MDLoad.mpower[0] = 0;
MDLoad.mpower[1] = 0;
MDLoad.mpower[2] = 0;
MDLoad.buff[0] = 0;
MDLoad.buff[1] = 0;
MDLoad.buff[2] = 0;
MDLoad.buff[3] = 0;
MDLoad.buff[4] = 0;
MDLoad.status =0x00;
Relay.status = 0;
Relay.tmr_oprea = 0;
Relay.tmr_status = 0;
Sram.SYSErr_status = SYSERR_OK;
Sram.creditSTU = 0xff;
Flag.even = 0;
Flag.run = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -