io.c 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include "at32f403a_407.h"
  2. #include "io.h"
  3. #include "FreeRTOS.h"
  4. #include "task.h"
  5. #include "input.h"
  6. #include "output.h"
  7. #include "settings_api.h"
  8. #include "io_utils.h"
  9. #include <stdio.h>
  10. uint16_t output_state_bit;
  11. uint16_t output_mode_bit;
  12. uint16_t output_pwm[DO_NUMBER];
  13. uint16_t output_pwm_save[DO_NUMBER];
  14. uint16_t output_pwm_period[DO_NUMBER];
  15. uint16_t output_pwm_period_save[DO_NUMBER];
  16. //
  17. void io_port_enable(void)
  18. {
  19. crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
  20. crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);
  21. crm_periph_clock_enable(CRM_GPIOC_PERIPH_CLOCK, TRUE);
  22. crm_periph_clock_enable(CRM_GPIOD_PERIPH_CLOCK, TRUE);
  23. crm_periph_clock_enable(CRM_GPIOE_PERIPH_CLOCK, TRUE);
  24. crm_periph_clock_enable(CRM_IOMUX_PERIPH_CLOCK, TRUE);
  25. crm_periph_clock_enable(CRM_PWC_PERIPH_CLOCK, TRUE);
  26. crm_periph_clock_enable(CRM_BPR_PERIPH_CLOCK, TRUE);
  27. pwc_battery_powered_domain_access(TRUE);
  28. }
  29. //
  30. void io_init(void)
  31. {
  32. #if 0
  33. for (int i = 0; i < DI_NUMBER; i++)
  34. {
  35. in_init(&inputs[i]);
  36. }
  37. output_state_bit = settings.do_bits;
  38. output_mode_bit = settings.do_mode_bits;
  39. // Таймер для выходов в режиме PWM
  40. out_pwm_tim_init();
  41. for (int i = 0; i < DO_NUMBER; i++)
  42. {
  43. output_pwm[i] = settings.do_pwm[i];
  44. output_pwm_save[i] = settings.do_pwm_save[i];
  45. output_pwm_period[i] = settings.do_pwm_period[i];
  46. output_pwm_period_save[i] = settings.do_pwm_period_save[i];
  47. if (save_mode_get()) {
  48. outputs[i].pwm_duty = settings.do_pwm_save[i];
  49. outputs[i].pwm_period = settings.do_pwm_period_save[i];
  50. }
  51. else {
  52. outputs[i].pwm_duty = settings.do_pwm[i];
  53. outputs[i].pwm_period = settings.do_pwm_period[i];
  54. }
  55. out_gpio_init(&outputs[i], i);
  56. }
  57. #endif
  58. }