📄 sysstart.c
字号:
#ifndef _SYSSTART_C
#define _SYSSTART_C
#include "syscommon.h"
_UC g_Time2Count = 0;
void Timer2_Start(_UC prescaler, _UC divider, _US count)
{
if (divider >= TIMER_DIVIDER_BUTT)
{
Vos_Printf("The divider(%d) out of the scrope!",divider);
return ;
}
//rINTCON = 5;
//rINTMOD = 0;
prescaler = 250;
count = 1;//定时器周期100 us
rINTMSK &=~(BIT_TIMER2);//定时器2中断使能
// pISR_TIMER2= (_UL)Timer2_Int; //(unsigned)
pISR_TIMER2= (_UL)OSTickISR;
rTCON &= 0xffff0fff; // clear manual update bit, stop Timer2
rTCFG0 = (rTCFG0 & 0xffff00ff)|(prescaler<<8);
//rTCFG0 &= (0xffff00ff + prescaler<<7); // set Timer 2&3 prescaler prescaler
rTCFG1 &= 0xfffff0ff; // set Timer 2 MUX 1/16
rTCFG1 |= 0x00000300;
rTCNTB2 = count; //(MCLK/16)=2.5M; prescaler=1, s=0.4 us;prescaler = 250, s=100 us;prescaler = 25, s=10 us;
//rTCMPB2 = (rTCNTB2*(100-HiRatio))/100; //if set inverter on, when TCNT2<=TCMP2, TOUT is low, TCNT2>TCMP2, TOUT is high
rTCON |= 0x00002000; // 手动更新
rTCON &= 0xffff0fff; // clear manal update bit
rTCON |= 0x0000d000; // auto reload, inverter on, start Timer 2
Vos_Printf("The Timer2 has been start\r\n");
}
void Timer2_Stop(void)
{
rTCON &= ~0x1000;
}
void __irq Timer2_Int(void)
{
rI_ISPC = BIT_TIMER2;
g_Time2Count++;
Led_Display(g_Time2Count%2);
return;
}
void TEMP_Display(_UC LedStatus)
{
//PC1,PC2,PC3 High available
rPDATC = (rPDATC & 0xFFBF )|((LedStatus & 0x1)<<6);
}
void Led_Display(_UC LedStatus)
{
//PC1,PC2,PC3 High available
rPDATC = (rPDATC & 0xFFF1 )|((LedStatus & 0x7)<<1);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -