/******************************************************************************* 版权所有: 版本号: 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 __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; }