📄 sys_main.c
字号:
#include "sys_main.h"
#include "sys_event.h"
#include "hal.h"
#include "pub_func.h"
#include "uart.h"
#include "storage.h"
#include "data_flash.h"
#include "rf256_drv.h"
#include "indication.h"
/* mcu power up or reboot
*/
void _mcu_init(void)
{
// Init WDT timer
WDTCTL=WDT_ADLY_250;
IE1|=WDTIE;
// init port 1
P1SEL=P1SEL_VAL;
P1DIR=P1DIR_VAL;
P1OUT=P1OUT_VAL;
P1IES=P1IES_VAL;
P1IFG=0;
P1IE=P1IE_VAL;
// init port 2
P2SEL=P2SEL_VAL;
P2DIR=P2DIR_VAL;
P2OUT=P2OUT_VAL;
P2IES=P2IES_VAL;
P2IFG=0;
P2IE=P2IE_VAL;
// init port 3
P3SEL=P3SEL_VAL;
P3DIR=P3DIR_VAL;
P3OUT=P3OUT_VAL;
//P3IES=P3IES_VAL;
//P3IFG=0;
//P3IE=P3IE_VAL;
// init uart
uart_start_to_rx();
// init rf
rf_off();
IND_ON();
_delay(0x1FFF);
IND_OFF();
}
/* table of event handler
*/
const EVENT_PROC_PTR _sys_evt_proc[]=
{
_on_comm,
_on_card,
_on_seconds,
_on_key_down,
};
#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]()
/* system entry point
*/
void main(void)
{
unsigned char pos;
_sys_evt_word_t int_event_mask;
#ifdef TEST_DATAFLASH
unsigned long addr=0;
unsigned char tst[16];
#endif
#ifdef TEST_UART
unsigned char ii,jj=0;
#endif
/*disable interrupt
*/
_disable_interrupt();
/* power up init
*/
_mcu_init();
/* enable interrupt
*/
_enable_interrupt();
load_record_count(_record_cnt);
//if(load_record_count(_record_cnt)==OK)
{
_load_data(ADDR_PERSON_ID,_person_id,LEN_PERSON_ID);
_person_id[4]=sys_do_checksum(_person_id,LEN_PERSON_ID);
_load_data(ADDR_LINE_NUM,(unsigned char *)&_line_num[0],LEN_LINE_NUM);
_line_num[1]=_line_num[0];
_record_cnt[0]=(_record_cnt[0]+MAX_RECORD_COUNT-1)%MAX_RECORD_COUNT;
_record_cnt[0]=ADDR_RECORD+_record_cnt[0]*(LEN_RECORD+OFFSET_CHKSUM);
_load_data(_record_cnt[0],(unsigned char *)&_NewRecord.person_id[0],LEN_RECORD);
_record_cnt[0]=_record_cnt[1];
}
#ifdef TEST_RFCARD
while(1)
{
_on_card();
}
#endif
#ifdef TEST_UART
while(1)
{
_frm_buf.len=FRAME_BUFFER_LEN;
for(ii=0;ii<FRAME_BUFFER_LEN;ii++)
{
_frm_buf.buffer[ii]=jj++;
}
uart_start_to_tx();
}
#endif
#ifdef TEST_DATAFLASH
while(1)
{
_data_flash_read(addr,tst,16);
for(pos=0;pos<16;pos++)
{
tst[pos]=pos;
}
_data_flash_write(addr,tst,16);
memset(tst,0x0,16);
_data_flash_read(addr,tst,16);
addr+=16;
}
#endif
test_evt:
int_event_mask = 1;
for(pos=0; pos<SYS_EVENT_MAX; pos++)
{
if(int_event_mask & SYS_EVT_VAR)
{
//call event handler
SYS_EVT_PROC(pos);
//clear the event after process, this disables re-trigger
_sys_evt_del(int_event_mask);
}
/* we may miss event, just a remind
*/
if((SYS_EVT_VAR & SYS_EVENT_MASK) == 0) {
break;
}
//next
int_event_mask <<= 1;
}
//some other events happened
if(SYS_EVT_VAR) {
goto test_evt;
}
//do check sum.
//So that we may check memory consistancy upon wake up
//clear WDT before sleep
//_clr_wdt();
/*sleep*/
_BIS_SR(LPM3_bits+GIE);
//clear WDT after sleep
//_clr_wdt();
/*new event*/
goto test_evt;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -