/***********************************************************************************************************************
* DISCLAIMER
* This software is supplied by Renesas Electronics Corporation and is only intended for use with Renesas products.
* No other uses are authorized. This software is owned by Renesas Electronics Corporation and is protected under all
* applicable laws, including copyright laws. 
* THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING THIS SOFTWARE, WHETHER EXPRESS, IMPLIED
* OR STATUTORY, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NON-INFRINGEMENT.  ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED.TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY
* LAW, NEITHER RENESAS ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE FOR ANY DIRECT,
* INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR
* ITS AFFILIATES HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability 
* of this software. By using this software, you agree to the additional terms and conditions found by accessing the 
* following link:
* http://www.renesas.com/disclaimer
*
* Copyright (C) 2012, 2021 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/

/***********************************************************************************************************************
* File Name    : r_cg_timer_user.c
* Version      : CodeGenerator for RL78/F13 V2.03.07.02 [08 Nov 2021]
* Device(s)    : R5F10BBG
* Tool-Chain   : CCRL
* Description  : This file implements device driver for TAU module.
* Creation Date: 2023-07-10
***********************************************************************************************************************/

/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_timer.h"
/* Start user code for include. Do not edit comment generated here */
#include "appTask.h"
#include "can_user.h"
#include "CanNw.h"

/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"

/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
//#pragma interrupt r_tau0_channel0_interrupt(vect=INTTM00)
//#pragma interrupt r_tau0_channel1_interrupt(vect=INTTM01)
/* Start user code for pragma. Do not edit comment generated here */

#if DEBUG
#pragma interrupt r_tau0_channel0_interrupt(vect = INTTM00)
#pragma interrupt r_tau0_channel1_interrupt(vect = INTTM01)
#endif

/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
unsigned char Timer_Interrupt;
unsigned char iictimeout;

/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
* Function Name: r_tau0_channel0_interrupt
* Description  : This function is INTTM00 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void __near r_tau0_channel0_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
    Timer_Interrupt=1;
    Timer_Pro();
    /* End user code. Do not edit comment generated here */
}

/***********************************************************************************************************************
* Function Name: r_tau0_channel1_interrupt
* Description  : This function is INTTM01 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void __near r_tau0_channel1_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
    //ADCS = 1;
    /* End user code. Do not edit comment generated here */
}

/* Start user code for adding. Do not edit comment generated here */
void Count_Down_Timer_8Bit(unsigned char *Target_Timer)
{
	if(*Target_Timer>0)
		(*Target_Timer)--;
}

void Count_Down_Timer_16Bit(unsigned int *Target_Timer)
{
	if(*Target_Timer>0)
		(*Target_Timer)--;
}
void AutoLoad_CountUp_Timer_8Bit(unsigned char *Target_Timer,unsigned int Time_Limit,
unsigned char *Count,unsigned char Count_Limit)
{
	if(*Target_Timer!=Time_Limit)
		(*Target_Timer)++;
	else
	{
		(*Target_Timer)=0;
		if(*Count!=Count_Limit)
		(*Count)++;
		else
		{
			*Count=0;
		}
	}
}
void AutoLoad_CountUp_Timer_16Bit(unsigned int *Target_Timer,unsigned int Time_Limit,
unsigned char *Count,unsigned char Count_Limit)
{
	if(*Target_Timer!=Time_Limit)
		(*Target_Timer)++;
	else
	{
		(*Target_Timer)=0;
		if(*Count!=Count_Limit)
		(*Count)++;
		else
		{
			*Count=0;
		}
	}
}


void Timer_Pro(void)
{
	static unsigned int Timer_1ms_tick_count;
    
    Count_Down_Timer_16Bit(&air_req_timer);	
    Count_Down_Timer_8Bit(&iictimeout);	
    Count_Down_Timer_16Bit(&CAN_LostCount);
    Count_Down_Timer_16Bit(&uiNwPduCycCnt);
    Count_Down_Timer_16Bit(&DiagCnt);
    
    uiNwTimCnt++;
    uiNwToutCnt++;                           //网络管理定时器
	if(uiNwRMSCnt > 0)
		uiNwRMSCnt--;
    if(uiNwLocWkpOffCnt > 0)
	{
		uiNwLocWkpOffCnt--;
	}
    
    if(uiBusOffCnt > 0)
			uiBusOffCnt--;

    
	Timer_1ms_tick_count++;
	if(Timer_1ms_tick_count%5==0)
	{
		Timer_5ms_flag=1;
	}
	if(Timer_1ms_tick_count%10==0)
	{
		Timer_10ms_flag=1;
	}
	if(Timer_1ms_tick_count%20==0)
	{
		Timer_20ms_flag=1;
	}
    if(Timer_1ms_tick_count%50==0)
	{
		Timer_50ms_flag=1;
	}
	if(Timer_1ms_tick_count%1000==0)
	{
		Timer_1000ms_flag = 1;
	}
	if(Timer_1ms_tick_count>=5000)
	{
		Timer_1ms_tick_count=0;
	}
	Can_1ms_count_alive++;
	if(BusOff_Detect_delay_count>0)
	{
		BusOff_Detect_delay_count--;
	}
	if(Timer_Interrupt)
	{
		Timer_Interrupt=0;
		Timer_1ms_flag=1;
		
	}
}
/* End user code. Do not edit comment generated here */
