samint.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  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. //protect_tbl_qd();
  40. }
  41. #ifdef XDL_ZT //小电流接地
  42. // 小电流突变量启动不受g_adc_sync保护,避免频率跟踪的封锁。
  43. // 由于pit_156us_main启动时所有其它条件都初始化好了,且目前模块退出时已增加
  44. // 此中断的退出,所以因为没啥问题。
  45. xdl_tbl_qd(mod);
  46. #endif
  47. //fa_g_156us();
  48. if(mod == 3)
  49. {
  50. #ifndef CPU_FUXI
  51. dTCounter++; // 系统计数器
  52. #endif
  53. }
  54. #ifdef __IEC61850_GOOSE_FUNC__
  55. // sunxi 20190421 added start
  56. if(is_goose_enable())
  57. {
  58. static unsigned char goose_cnt = 0; // sunxi 20190421
  59. fa_g_packet(false); // sunxi 20190423 从下面的判断移到上面来
  60. goose_cnt ++;
  61. if(goose_cnt == 3)
  62. {
  63. goose_cnt = 0;
  64. goose_recv_wakeup();// sunxi 20180523 added
  65. }
  66. }
  67. // sunxi 20190421 added end
  68. #endif
  69. return 0;
  70. }
  71. /**************************************************************************
  72. 函数名称:SamIntFunction
  73. 函数版本:1.00
  74. 作者:
  75. 创建日期:2008.8.8
  76. 函数功能说明:5毫秒中断调用函数
  77. 输入参数:无
  78. 输出参数:无
  79. 返回值: 无
  80. 函数扇入清单:
  81. ***************************************************************************/
  82. void soe_test(void);
  83. #ifdef DC_OLLECT_NOT_156US_LOOPC
  84. void GetDcAdcValue(int dstep);
  85. #endif
  86. int pit_5ms_main(int dummy)
  87. {
  88. soe_test();
  89. #ifdef BSP_CAN_ENABLE
  90. can_app_timing();
  91. #endif
  92. // 保护巡检
  93. // ADC所有采样点准备好了,sw_init成功,才能进入保护。
  94. // g_adc_sync在两种情况下起作用,1、系统初始化;2、采样频率改变。
  95. if(g_adc_sync == 1 && g_sw_init == 1)
  96. {
  97. protect_polling();
  98. }
  99. //开出,放在保护巡检之后,确保及时开出
  100. dido_do_poll();
  101. // 频率跟踪
  102. #ifndef CPU_FUXI
  103. adc_freq_trace();
  104. #endif
  105. // 可编程逻辑
  106. plc_scan(1);
  107. // 主板直接控制的灯输出
  108. led_polling_5ms();
  109. // RTC时钟芯片时间更新,放在5ms中断的最后
  110. rtc_time_write_5ms();
  111. #ifdef CPU_COLDFIRE
  112. #ifdef DC_OLLECT_NOT_156US_LOOPC
  113. GetDcAdcValue(0);
  114. #endif
  115. #endif
  116. return 0;
  117. }