📄 sys_main.c
字号:
/****************************************************************************************************************
** IIII NN NN VV VV EEEEEE NN NN TTTTTTTT RRRRRR OOOOO NN NN IIII CCCCCC **
** II NN N NN VV VV EE NN N NN TT RR RR OO OO NN N NN II CC **
** II NN N NN VV VV EEEEEE NN N NN TT RRRRRR OO OO NN N NN II CCC **
** II NN N NN VV VV EE NN N NN TT RR RR OO OO NN N NN II CC **
** IIII NN NN VVV EEEEEE NN NN TT RR RR OOOOO NN NN IIII CCCCCC **
****************************************************************************************************************/
#include "includes.h"
void _mcu_io_init(void)
{
WDTE = 0xAC;
PM12 = 0;
P12 = 0;
PU12 = 0;
PM7 = 0;
PU7 = 0;
P7 = 0x0E;
PM6 = 0;
P6 = 0;
PM4 = 0;
PU4 = 0;
P4 = 0;
PM3 = 0;
P3 = 0;
PU3 = 0;
ClrIORBit( ADM, 0x81 );
SetIORBit( ADPC, 0x08 );
PM2 = 0xCE;
SetIORBit( P2, MODULE_DSR );
ClrIORBit( P2, MODULE_CTS );
PM1 = 0;
SetIORBit( PM1, RS232_RXD );
SetIORBit( PM1, MODULE_TXD );
P1 |= RS232_TXD;
P1 |= MODULE_RXD;
PM0 = 0;
P0 = 0;
delay( 0x1FFF );
}
void _mcu_clock_init(void)
{
unsigned char i;
unsigned char temp_stabset, temp_stabwait;
SetIORBit( PM12, 0x06 );
ClrIORBit( OSCCTL, 0x80 );
SetIORBit( OSCCTL, 0x40 );
ClrIORBit( MOC, 0x80 );
temp_stabset = CG_X1STAB_STA;
do
{
clr_wdt();
temp_stabwait = OSTC;
temp_stabwait &= temp_stabset;
}while( temp_stabwait != temp_stabset );
OSTS = CG_X1STAB_SEL;
for( i = 0; i <= 50; i++ ) NOP();
ClrIORBit( OSCCTL, 0x01 );
SetIORBit( MCM, 0x05 );
SetIORBit( PM12, 0x18 );
ClrIORBit( OSCCTL, 0x20 );
SetIORBit( OSCCTL, 0x10 );
SetIORBit( RCM, 0x01 );
PCC = CG_CPU_CLOCKSEL;
}
void _mcu_init(void)
{
_disable_interrupt();
_mcu_clock_init();
_mcu_io_init();
_enable_interrupt();
}
const unsigned char _mcu_sw_ver[] = { MCU_SW_VER_DATE,MCU_SW_VER_MON, MCU_SW_VER_YEAR };
void _mcu_sw_ver_init(void)
{
unsigned char temp[3],i,Sflag;
for( i = 0; i < 3; i++ )
{
E2promRead( MCU_SW_VER, (unsigned char *)&temp[0], 3 );
if( is_equal( ( unsigned char * )&temp[0], (unsigned char *)&_mcu_sw_ver[0], 3 ) == OK )
{
break;
}
}
if( i == 3 )
{
// 初始化MCU 软件版本号
E2promWrite( MCU_SW_VER, (unsigned char *)&_mcu_sw_ver[0], 3 );
// 打开安全开关
_memset0xff_and_write_E2prom( MANUFACTURER_SOFT_SWITCH, 3 );
// 运行在厂家设置状态
Sflag = MaderConfig;
E2promWrite( CONFIG_GRADE, &Sflag, 1 );
// 清厂家默认IP 地址
E2promWrite( CLIENT_DEFAULT_IP_ADDRESS, (unsigned char *)&_NO_IP_ADDR2[0], LEN_IP_ADDRESS );
// 清客户默认IP 地址
E2promWrite( MANUFACTURER_DEFAULT_IP_ADDRESS, (unsigned char *)&_NO_IP_ADDR2[0], LEN_IP_ADDRESS );
// AT 命令初始化
ClrE2prom( ADDR_ATCOMMAND_START, 50, 10 );
// 自动上线时间间隔60 分钟
temp[0] = 12;
E2promWrite( MANUFACTURER_AUTOLOAD_TIME, (unsigned char *)&temp[0], 1 );
E2promWrite( CLIENT_AUTOLOAD_TIME, (unsigned char *)&temp[0], 1 );
// 波特率为9600
temp[0] = 5;
E2promWrite( MANUFACTURER_BAUD_RATE, (unsigned char *)&temp[0], 1 );
E2promWrite( CLIENT_BAUD_RATE, (unsigned char *)&temp[0], 1 );
}
E2promRead( CONFIG_GRADE, &Sflag, 1 );
if( Sflag == MaderConfig )
{
soft_switch |= SOFT_SWITCH_GRADE;
E2promRead( MANUFACTURER_SOFT_SWITCH, &Sflag, 1 );
}
else
{
soft_switch &=~ SOFT_SWITCH_GRADE;
E2promRead( CLIENT_SOFT_SWITCH, &Sflag, 1 );
}
if( ( Sflag & SWITCH_SET_CALL_LOAD_BIT ) != 0 )
{
soft_switch |= SOFT_SWITCH_CALL_LOAD;
}
if( ( Sflag & SWITCH_SET_AUTO_LOAD_BIT ) != 0 )
{
soft_switch |= SOFT_SWITCH_AUTO_LOAD;
}
}
void _device_init(void)
{
TM51_Init();
modem_uart_init();
mcu_uart_init();
TimerCounter[TIMER_PROC_MODEM_INIT] = 1;
}
const EVENT_PROC_PTR _sys_evt_proc[]=
{
on_tick,
on_frmmcu_frame,
on_frmmodem_frame,
on_second,
on_minute,
on_modem_uart_init,
on_mcu_uart_init
};
#define SYS_EVENT_MAX (sizeof(_sys_evt_proc) / sizeof(EVENT_PROC_PTR))
#define SYS_EVENT_MASK ((1 << SYS_EVENT_MAX) - 1)
#define SYS_EVT_PROC(pos) _sys_evt_proc[pos]()
void main(void)
{
unsigned char pos;
_sys_evt_word_t int_event_mask;
_mcu_init();
_mcu_sw_ver_init();
_device_init();
test_evt:
int_event_mask = 1;
for( pos=0; pos<SYS_EVENT_MAX; pos++ )
{
if( int_event_mask & SYS_EVT_VAR )
{
SYS_EVT_PROC(pos);
sys_evt_del(int_event_mask);
clr_wdt();
goto test_evt;
}
if( ( SYS_EVT_VAR & SYS_EVENT_MASK ) == 0 )
{
break;
}
int_event_mask <<= 1;
}
goto test_evt;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -