/*******************************************************************************
版权所有：	
版本号：    1.00 
文件名：    samint.c 
生成日期：  2008.9.18 
作者：      
功能说明：采样中断处理
	
修改日志：  
日志1：           
修改者：    
修改日期：
修改内容：
修改原因：
****************************************************************************/

#include "head.h"
#include "goose.h"

/**************************************************************************
函数名称：SamIntFunction 
函数版本：1.00 
作者：   
创建日期：2008.8.8     
函数功能说明：采样中断调用函数 (经示波器测量，该中断执行时间为21us左右)
输入参数：无
输出参数：无
返回值：  无
函数扇入清单：
***************************************************************************/
extern bool is_goose_enable(void);
int pit_156us_main(int mod)
{
	// 串口中断处理
#if defined (CPU_COLDFIRE) || defined (CPU_AM335X)	
	uart_isr();
#endif

	// 突变量启动必须放在pit_156us_main函数中，不能放入ADC中断中，
	// 否则将导致定值参数没有初始化好，就进行保护逻辑判断。
	if(g_adc_sync == 1)
	{
		//protect_tbl_qd(); 
	}
#ifdef	XDL_ZT //小电流接地
		// 小电流突变量启动不受g_adc_sync保护，避免频率跟踪的封锁。
		// 由于pit_156us_main启动时所有其它条件都初始化好了，且目前模块退出时已增加
		// 此中断的退出，所以因为没啥问题。
		xdl_tbl_qd(mod);
#endif

	//fa_g_156us();
	if(mod == 3)
	{
#ifndef CPU_FUXI	
		dTCounter++;	// 系统计数器
#endif
	#ifdef GD_AREA_ZHUHAI_V2			
		protect_tbl_qd(); 			
	#endif
	}

#ifdef __IEC61850_GOOSE_FUNC__
	// sunxi 20190421 added start
	if(is_goose_enable())
	{
		static unsigned char goose_cnt = 0; // sunxi 20190421
		fa_g_packet(false); // sunxi 20190423 从下面的判断移到上面来
		goose_cnt ++;
		if(goose_cnt == 3)
		{
			goose_cnt = 0;
			goose_recv_wakeup();// sunxi 20180523 added
		}
	}
	// sunxi 20190421 added end
#endif

	return 0;
}

/**************************************************************************
函数名称：SamIntFunction 
函数版本：1.00 
作者：   
创建日期：2008.8.8     
函数功能说明：5毫秒中断调用函数
输入参数：无
输出参数：无
返回值：  无
函数扇入清单：
***************************************************************************/
void soe_test(void);
#ifdef DC_OLLECT_NOT_156US_LOOPC
void  GetDcAdcValue(int dstep);
#endif

int  pit_5ms_main(int dummy)
{
	soe_test();
#ifdef BSP_CAN_ENABLE	
	can_app_timing();
#endif
	// 保护巡检
	// ADC所有采样点准备好了，sw_init成功，才能进入保护。
	// g_adc_sync在两种情况下起作用，1、系统初始化；2、采样频率改变。
	if(g_adc_sync == 1 && g_sw_init == 1)
	{
		protect_polling();
	}
	
	//开出,放在保护巡检之后，确保及时开出
	dido_do_poll();

	// 频率跟踪
#ifndef CPU_FUXI	
	adc_freq_trace();
#endif

	// 可编程逻辑
	plc_scan(1);

	// 主板直接控制的灯输出
	led_polling_5ms();
	// RTC时钟芯片时间更新，放在5ms中断的最后
	rtc_time_write_5ms();

#ifdef CPU_COLDFIRE
#ifdef DC_OLLECT_NOT_156US_LOOPC
    GetDcAdcValue(0);
#endif
#endif	

	return 0;
}

            
            
