📄 timer.c
字号:
#include "config.h"
#define PWM_WIDTH_FREQ 1000
#define PWM_MAX_VAL 1024
volatile UDWORD udTickCount;
UDWORD udRunLampTick;
UDWORD udRunLampFreq;
UDWORD udPwm0Count;
UDWORD udPwm0Freq;
UDWORD udPwm1Count;
UDWORD udPwm1Freq;
UDWORD udADS1100Tick;
// 1ms pwm
void __irq IRQ_Timer0(void)
{
// 控制脉冲宽度
T0IR = 0x01;
VICVectAddr = 0x00;
}//void __irq IRQ_Timer0(void)
// 1ms
void __irq IRQ_Timer1(void)
{
udTickCount++;
T1IR = 0x01;
VICVectAddr = 0x00;
}//void __irq IRQ_Timer1(void)
// pwm
void __irq IRQ_PWM(void)
{
PWMIR = 0x01;
VICVectAddr = 0x00;
}//void __irq IRQ_PWM(void)
void Timer0_Init(UDWORD freq)
{
}//void Timer0_Init(void)
void Timer1_Init(UDWORD freq)
{
T1PR = 3;
T1MR0 = (UDWORD)(Fcclk / 4 / freq);
T1MCR = 3;
T1TCR = 3;
T1TCR = 1;
VICIntEnable = (1 << INT_TIMER1);
}//void Timer1_Init(UDWORD freq)
void Pwm2_Init(UDWORD pulwidth)
{
PWMTC = 0;
PWMPC = 0;
PWMPR = 0;
PWMMR0 = (UDWORD)(Fcclk / PWM_WIDTH_FREQ);
PWMMR2 = (UDWORD)(pulwidth * PWMMR0 / PWM_MAX_VAL);
PWMMCR = 3;
PWMPCR = 0x400;
PWMLER = 0x05;
PWMTCR = 0xa;
PWMTCR = 0xa;
PWMTCR = 0x9;
VICIntEnable = 0x100;
}//void Pwm2_Init(void)
void Pwm2_Stop(void)
{
PWMTC = 0;
PWMPC = 0;
PWMPR = 0;
PWMMR0 = (UDWORD)(Fcclk / PWM_WIDTH_FREQ);
PWMMR2 = 0;
PWMMCR = 3;
PWMPCR = 0x400;
PWMLER = 0x05;
PWMTCR = 0xa;
PWMTCR = 0xa;
PWMTCR = 0x9;
VICIntEnable = 0x100;
}//void Pwm2_Stop(void)
void TimeProg(void)
{
// 闪烁运行指示灯,频率由变量udRunLampFreq控制
if(udTickCount > (udRunLampTick + udRunLampFreq))
{
Blink_RunLamp();
udRunLampTick = udTickCount;
}
// 通讯口0超时判断
if(Uart0_udTimeOut > 0)
{
if(udTickCount > Uart0_udTimeOut)
{
if(Uart0_ucReceBuff[0] != Uart_ucAddr) // 为了公司自定协议与RTU984协议兼容
{
Uart0_ucReceLen = 0;
Uart0_udTimeOut = 0;
}
}
}
// 通讯口1超时判断
if(Uart1_udTimeOut > 0)
{
if(udTickCount > Uart1_udTimeOut)
{
if(Uart1_ucReceBuff[0] != Uart_ucAddr) // 为了公司自定协议与RTU984协议兼容
{
Uart1_ucReceLen = 0;
Uart1_udTimeOut = 0;
}
}
}
}//void TimeProg(void)
// 延时x毫秒
void DelayMS(UDWORD x)
{
UDWORD tick;
tick = udTickCount;
while(udTickCount < (tick + x))
{
WatchDog();
TimeProg();
ReadDin();
WriteDout();
Uart0_CheckData();
Uart1_CheckData();
}
}//void DelayMS(UDWORD x)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -