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();
}
}