wdt.c 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. #include "at32f403a_407.h"
  2. #include "wdt.h"
  3. //
  4. void wdt_init(void)
  5. {
  6. gpio_init_type gpio_initstructure;
  7. // -----------------------------------------------------------------------------
  8. // GPIO
  9. crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);
  10. gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
  11. gpio_initstructure.gpio_pull = GPIO_PULL_NONE;
  12. gpio_initstructure.gpio_mode = GPIO_MODE_OUTPUT;
  13. gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
  14. gpio_initstructure.gpio_pins = GPIO_PINS_6;
  15. gpio_init(GPIOE, &gpio_initstructure);
  16. // -----------------------------------------------------------------------------
  17. // TIM
  18. crm_clocks_freq_type crm_clocks_freq_struct = {0};
  19. crm_periph_clock_enable(CRM_TMR13_PERIPH_CLOCK, TRUE);
  20. crm_clocks_freq_get(&crm_clocks_freq_struct);
  21. tmr_base_init(TMR13, 999, (crm_clocks_freq_struct.ahb_freq / 10000) - 1);
  22. tmr_cnt_dir_set(TMR13, TMR_COUNT_UP);
  23. tmr_flag_clear(TMR13, TMR_OVF_FLAG);
  24. nvic_irq_enable(TMR8_OVF_TMR13_IRQn, 2, 0);
  25. tmr_counter_enable(TMR13, TRUE);
  26. tmr_interrupt_enable(TMR13, TMR_OVF_INT, TRUE);
  27. }
  28. void TMR8_OVF_TMR13_IRQHandler(void)
  29. {
  30. if (tmr_flag_get(TMR13, TMR_OVF_FLAG) != RESET)
  31. {
  32. tmr_flag_clear(TMR13, TMR_OVF_FLAG);
  33. GPIOE->odt ^= GPIO_PINS_6;
  34. }
  35. }
  36. // Дергаем пином (сброс внешнего WDT)
  37. void wdt_reset(void)
  38. {
  39. GPIOE->odt ^= GPIO_PINS_6;
  40. }