io.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. #ifndef __IO_H
  2. #define __IO_H
  3. #include <stdbool.h>
  4. // -------------------------------------------------------------------------- //
  5. // Дискретые входы
  6. #define DI_NUMBER 8 // Количество входов
  7. #define DI_MODE_IN 0 // Режим обычного входа
  8. #define DI_MODE_CNT 1 // Режим счетного входа
  9. // -------------------------------------------------------------------------- //
  10. // Дискретные выходы
  11. #define DO_NUMBER 8 // Количество выходов
  12. #define DEBOUNCE_CNT 50
  13. // -------------------------------------------------------------------------- //
  14. // Аналоговые входы.
  15. #define AI_ALL_NUMBER 16 // Общее количество
  16. #define AI_COMMON_NUMBER 12 // Основные 12
  17. #define AI_ADD_NUMBER 4 // Дополнительные 4 входа
  18. // -------------------------------------------------------------------------- //
  19. //
  20. void io_port_enable(void);
  21. // -------------------------------------------------------------------------- //
  22. typedef struct
  23. {
  24. gpio_type *port;
  25. uint16_t pin;
  26. } simple_gpio_t;
  27. typedef struct
  28. {
  29. gpio_type *port;
  30. uint16_t pin;
  31. uint16_t mode; // 0 - обычный вход, 1 - счетный вход
  32. uint32_t deb_counter;
  33. uint32_t cnt;
  34. bool p_flag;
  35. bool cnt_flag;
  36. } din_t;
  37. typedef struct
  38. {
  39. gpio_type *port;
  40. uint16_t pin;
  41. uint16_t mode; // 0 - обычный выход, 1 - режим ШИМ
  42. uint16_t pwm_period_cnt;
  43. uint16_t pwm_duty_cnt;
  44. uint16_t pwm_flag;
  45. uint16_t pwm_period;
  46. uint16_t pwm_duty;
  47. } out_t;
  48. extern uint16_t output_state_bit;
  49. extern uint16_t output_mode_bit;
  50. extern uint16_t output_pwm[];
  51. extern uint16_t output_pwm_save[];
  52. extern uint16_t output_pwm_period[];
  53. extern uint16_t output_pwm_period_save[];
  54. //
  55. // контроль состояний - обрыв, КЗ, норма
  56. typedef struct
  57. {
  58. uint16_t state; // состояние выхода
  59. uint16_t pwm; //
  60. uint16_t mode; // режим работы, 0 - выход, 1 - PWM
  61. uint16_t smode_state; // значение в безопасном режиме,
  62. // 0 - разомкнут, 1 - замкнут
  63. uint16_t smode_pwm; // значение PWM в безопасном режиме (%)
  64. uint16_t normal_state; // нормальное состояние выхода
  65. // 0 - разомкнут, 1 - замкнут
  66. } output_t;
  67. typedef struct
  68. {
  69. uint16_t smode; // безопасный режим 0 - включен, 1 - выключен
  70. uint16_t com_timeout; // время ожидания запроса от мастера
  71. } system_t;
  72. #endif // __IO_H