1. MCU系统初时化
typedef union{ struct{ unsigned char _16hz:1; unsigned char _8hz:1; unsigned char _4hz:1; unsigned char _2hz:1; unsigned char _1hz:1; unsigned char _05hz:1; unsigned char undefined:2; }TICK_BIT; unsigned char sys_tick_flag; }SYS_TICK;
volatile SYS_TICK tick_flag;
/*@ MCU系统,时钟等初时化处理 @*/ void init_SyS() { _smod = 0xe1; /*配置系统时钟,选用8M时钟,FH */ _wdtc = 0xaf; //不使用看门狗 _ctrl = 0x00; //关闭看门狗ctrl寄存器 _lvrc = 0x55; //不使用低电压复位功能 _lvdc = 0x00; //不使用低电压检查功能 // _fsubc= 0x55; //LCD工作时钟 _tbc = 0xa3; //必须初始化 tick_flag.sys_tick_flag = 0; _mf4e = 1; //多功能中断使能 _tb0e = 1; //时基0中断使能 _tb1e = 1; //时基1中断使能 _emi = 1; //总中断使能 }
2.中断函数定义
DEFINE_ISR(isr_int0,0x04) { }
DEFINE_ISR(isr_int1,0x08) { }
DEFINE_ISR(isr_m1,0x10) { } DEFINE_ISR(isr_m2,0x14) { } DEFINE_ISR(isr_m3,0x18) { } DEFINE_ISR(isr_adc,0x1c) { } DEFINE_ISR(isr_uart,0x20) { } DEFINE_ISR(isr_int2,0x24) { } DEFINE_ISR(isr_int3,0x28) { }
/*@ 时基中断函数 @*/ DEFINE_ISR(isr_m4,0x2c) { static unsigned char cnt = 0; _emi = 0; //关总中断 if(_tb0f){ tick_flag.TICK_BIT._16hz = 1; _tb0f = 0; } if(_tb1f) { tick_flag.TICK_BIT._2hz = 1; if((++cnt & 0x1)==0) { tick_flag.TICK_BIT._1hz = 1; } _tb1f = 0; } _emi = 1; //开总中断 }
3.切换到快速时钟
/*@ 切换到快钟 @*/ void switchToHclk(void) { _fsyson = 0; _smod = 0xe1; while(_hto != 1){ GCC_NOP(); } }
4.切换到慢速时钟
/*@ 切换到慢钟 @*/ void switchToLclk(void) { _lxtlp = 0; // fast start mode _smod = 0x20; //fsub LXT while(_lto != 1) { GCC_NOP(); } }