wdt.lua 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. --- 模块功能:外部硬件看门狗
  2. -- @module wdt
  3. -- @author 稀饭放姜
  4. -- @license MIT
  5. -- @copyright openLuat
  6. -- @release 2017.09.23 11:34
  7. module(..., package.seeall)
  8. -- require "log"
  9. require "pins"
  10. --[[模块和看门狗互喂任务
  11. -- @return 无
  12. -- @usage local RST_SCMWD_PIN,RST_SCMWD_PIN
  13. -- @usage taskWdt()
  14. --]]
  15. local function taskWdt(rst, wd)
  16. -- 初始化喂狗引脚电平(初始高电平,喂狗拉低2秒)
  17. rst(1)
  18. wd(1)
  19. -- 模块<--->看门狗 相互循环喂脉冲
  20. while true do
  21. -- 模块 ---> 看门狗 喂脉冲
  22. wd(0)
  23. log.info("wdt.taskWdt", "AirM2M --> WATCHDOG : OK")
  24. sys.wait(2000)
  25. -- 看门狗 ---> 模块 喂脉冲
  26. for i = 1, 30 do
  27. if 0 ~= wd() then
  28. sys.wait(100)
  29. else
  30. log.info("wdt.taskWdt", "AirM2M <-- WatchDog : OK")
  31. break
  32. end
  33. -- 狗死了
  34. if 30 == i then
  35. -- 复位狗
  36. rst(0)
  37. log.error("wdt.taskWdt", "WatchDog <--> AirM2M didn't respond : wdt reset 153b")
  38. sys.wait(100)
  39. end
  40. end
  41. -- 2分钟后再喂
  42. sys.wait(120000)
  43. end
  44. end
  45. --- 配置模块与看门狗通讯IO并启动任务
  46. -- @param rst -- 模块复位单片机引脚(pio.P0_31)
  47. -- @param wd -- 模块和单片机相互喂狗引脚(pio.P0_29)
  48. -- @return 无
  49. -- @usage setup(pio.P0_31,pio.P0_29)
  50. function setup(rst, wd)
  51. sys.taskInit(taskWdt, pins.setup(rst, 0), pins.setup(wd, 0))
  52. end