You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

41 lines
1.3 KiB

1 year ago
  1. #include "chip.hpp"
  2. extern "C" {
  3. static iflytop::ZGPIO g_debuglight;
  4. static Pin_t g_debuglight_pin = PinNull;
  5. static bool g_error_state = false;
  6. void chip_set_error() { g_error_state = true; }
  7. void chip_init(chip_cfg_t *cfg) {
  8. g_debuglight_pin = cfg->debuglight;
  9. if (g_debuglight_pin != PinNull) {
  10. g_debuglight.initAsOutput(g_debuglight_pin, iflytop::ZGPIO::kMode_nopull, false, false);
  11. }
  12. //
  13. zchip_loggger_init(cfg->huart);
  14. //
  15. zchip_clock_cfg_t zchip_clock_cfg;
  16. zchip_clock_cfg.usdleaytim = cfg->us_dleay_tim;
  17. zchip_clock_init(&zchip_clock_cfg);
  18. //
  19. iflytop::ChipTimIrqShceduler::Cfg ChipTimIrqShceduler_cfg;
  20. ChipTimIrqShceduler_cfg.schedulertim = cfg->tim_irq_scheduler_tim;
  21. iflytop::ChipTimIrqShceduler::instance().initialize(&ChipTimIrqShceduler_cfg);
  22. iflytop::ChipTimIrqShceduler::instance().regPeriodJob(
  23. [](iflytop::ChipTimIrqShceduler::Job *job) {
  24. if (g_error_state) return;
  25. if (g_debuglight_pin == PinNull) return;
  26. g_debuglight.toggleState();
  27. },
  28. 300);
  29. iflytop::ChipTimIrqShceduler::instance().regPeriodJob(
  30. [](iflytop::ChipTimIrqShceduler::Job *job) {
  31. if (!g_error_state) return;
  32. if (g_debuglight_pin == PinNull) return;
  33. g_debuglight.toggleState();
  34. },
  35. 50);
  36. }
  37. }