samint.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. /*******************************************************************************
  2. 版权所有:
  3. 版本号: 1.00
  4. 文件名: samint.c
  5. 生成日期: 2008.9.18
  6. 作者:
  7. 功能说明:采样中断处理
  8. 修改日志:
  9. 日志1:
  10. 修改者:
  11. 修改日期:
  12. 修改内容:
  13. 修改原因:
  14. ****************************************************************************/
  15. #include "head.h"
  16. #include "goose.h"
  17. /**************************************************************************
  18. 函数名称:SamIntFunction
  19. 函数版本:1.00
  20. 作者:
  21. 创建日期:2008.8.8
  22. 函数功能说明:采样中断调用函数 (经示波器测量,该中断执行时间为21us左右)
  23. 输入参数:无
  24. 输出参数:无
  25. 返回值: 无
  26. 函数扇入清单:
  27. ***************************************************************************/
  28. extern bool is_goose_enable(void);
  29. int pit_156us_main(int mod)
  30. {
  31. // 串口中断处理
  32. #if defined (CPU_COLDFIRE) || defined (CPU_AM335X)
  33. uart_isr();
  34. #endif
  35. // 突变量启动必须放在pit_156us_main函数中,不能放入ADC中断中,
  36. // 否则将导致定值参数没有初始化好,就进行保护逻辑判断。
  37. if(g_adc_sync == 1)
  38. {
  39. #ifdef BSP_DFTU
  40. //protect_tbl_qd();
  41. #endif
  42. }
  43. #ifdef XDL_ZT //小电流接地
  44. // 小电流突变量启动不受g_adc_sync保护,避免频率跟踪的封锁。
  45. // 由于pit_156us_main启动时所有其它条件都初始化好了,且目前模块退出时已增加
  46. // 此中断的退出,所以因为没啥问题。
  47. xdl_tbl_qd(mod);
  48. #endif
  49. //fa_g_156us();
  50. if(mod == 3)
  51. {
  52. #ifndef CPU_FUXI
  53. dTCounter++; // 系统计数器
  54. #endif
  55. #ifdef GD_AREA_ZHUHAI_V2
  56. protect_tbl_qd();
  57. #endif
  58. }
  59. #ifdef __IEC61850_GOOSE_FUNC__
  60. // sunxi 20190421 added start
  61. if(is_goose_enable())
  62. {
  63. static unsigned char goose_cnt = 0; // sunxi 20190421
  64. fa_g_packet(false); // sunxi 20190423 从下面的判断移到上面来
  65. goose_cnt ++;
  66. if(goose_cnt == 3)
  67. {
  68. goose_cnt = 0;
  69. goose_recv_wakeup();// sunxi 20180523 added
  70. }
  71. }
  72. // sunxi 20190421 added end
  73. #endif
  74. return 0;
  75. }
  76. /**************************************************************************
  77. 函数名称:SamIntFunction
  78. 函数版本:1.00
  79. 作者:
  80. 创建日期:2008.8.8
  81. 函数功能说明:5毫秒中断调用函数
  82. 输入参数:无
  83. 输出参数:无
  84. 返回值: 无
  85. 函数扇入清单:
  86. ***************************************************************************/
  87. void soe_test(void);
  88. #ifdef DC_OLLECT_NOT_156US_LOOPC
  89. void GetDcAdcValue(int dstep);
  90. #endif
  91. int pit_5ms_main(int dummy)
  92. {
  93. soe_test();
  94. can_app_timing();
  95. // 保护巡检
  96. // ADC所有采样点准备好了,sw_init成功,才能进入保护。
  97. // g_adc_sync在两种情况下起作用,1、系统初始化;2、采样频率改变。
  98. if(g_adc_sync == 1 && g_sw_init == 1)
  99. {
  100. protect_polling();
  101. }
  102. //开出,放在保护巡检之后,确保及时开出
  103. dido_do_poll();
  104. // 频率跟踪
  105. #ifndef CPU_FUXI
  106. adc_freq_trace();
  107. #endif
  108. // 可编程逻辑
  109. plc_scan(1);
  110. // 主板直接控制的灯输出
  111. led_polling_5ms();
  112. // RTC时钟芯片时间更新,放在5ms中断的最后
  113. rtc_time_write_5ms();
  114. #ifdef CPU_COLDFIRE
  115. #ifdef DC_OLLECT_NOT_156US_LOOPC
  116. GetDcAdcValue(0);
  117. #endif
  118. #endif
  119. return 0;
  120. }