io.h 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  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. #define AO_NUMBER 4 // Количество выходов
  21. // -------------------------------------------------------------------------- //
  22. //
  23. void io_port_enable(void);
  24. // -------------------------------------------------------------------------- //
  25. typedef struct
  26. {
  27. gpio_type *port;
  28. uint16_t pin;
  29. } simple_gpio_t;
  30. //
  31. typedef struct
  32. {
  33. uint8_t state; // 0 - выкл, 1 - вкл
  34. } di_t;
  35. #if 0
  36. uint16_t do_mode_bits; // режим работы выхода 0 - выход, 1 - ШИМ
  37. uint16_t do_mode_save_bits; // режим работы выхода в безопасном режиме 0 - выход, 1 - ШИМ
  38. uint16_t do_bits; // последнее сохраненное значение на выходах
  39. uint16_t do_save_bits; // значение на выходах в бесопасном режиме работы
  40. uint16_t do_pwm[DO_NUMBER]; // значение заполнения ШИМ
  41. uint16_t do_pwm_save[DO_NUMBER]; // значение заполнения ШИМ в безопасном режиме
  42. uint16_t do_pwm_period[DO_NUMBER]; // период ШИМ в [0.1с (10..1000)]
  43. uint16_t do_pwm_period_save[DO_NUMBER]; // период ШИМ в безопасном режиме [0.1с (10..1000)]
  44. #endif
  45. //
  46. typedef struct
  47. {
  48. uint8_t state; // 0 - выкл, 1 - вкл
  49. uint8_t mode; // режим работы, 0 - вход, 1 - счетчик импульсов
  50. uint8_t value; // значение на выходе в режиме обычного выхода
  51. uint16_t pwm_duty; // значение заполнения ШИМ
  52. uint16_t pwm_period; // период ШИМ в [0.1с (10..1000)]
  53. } do_t;
  54. typedef struct
  55. {
  56. gpio_type *port;
  57. uint16_t pin;
  58. uint16_t mode; // 0 - обычный вход, 1 - счетный вход
  59. uint32_t deb_counter;
  60. uint32_t cnt;
  61. bool p_flag;
  62. bool cnt_flag;
  63. } din_t;
  64. typedef struct
  65. {
  66. gpio_type *port;
  67. uint16_t pin;
  68. uint16_t mode; // 0 - обычный выход, 1 - режим ШИМ
  69. uint16_t pwm_period_cnt;
  70. uint16_t pwm_duty_cnt;
  71. uint16_t pwm_flag;
  72. uint16_t pwm_period;
  73. uint16_t pwm_duty;
  74. } out_t;
  75. extern uint16_t output_state_bit;
  76. extern uint16_t output_state_save_bit;
  77. extern uint16_t output_value_bit;
  78. extern uint16_t output_value_save_bit;
  79. extern uint16_t output_mode_bit;
  80. extern uint16_t output_mode_save_bit;
  81. extern uint16_t output_pwm[];
  82. extern uint16_t output_pwm_save[];
  83. extern uint16_t output_pwm_period[];
  84. extern uint16_t output_pwm_period_save[];
  85. //
  86. // контроль состояний - обрыв, КЗ, норма
  87. typedef struct
  88. {
  89. uint16_t state; // состояние выхода
  90. uint16_t pwm; //
  91. uint16_t mode; // режим работы, 0 - выход, 1 - PWM
  92. uint16_t smode_state; // значение в безопасном режиме,
  93. // 0 - разомкнут, 1 - замкнут
  94. uint16_t smode_pwm; // значение PWM в безопасном режиме (%)
  95. uint16_t normal_state; // нормальное состояние выхода
  96. // 0 - разомкнут, 1 - замкнут
  97. } output_t;
  98. typedef struct
  99. {
  100. uint16_t smode; // безопасный режим 0 - включен, 1 - выключен
  101. uint16_t com_timeout; // время ожидания запроса от мастера
  102. } system_t;
  103. #endif // __IO_H