| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | #ifndef __IO_H#define __IO_H#include <stdbool.h>// -------------------------------------------------------------------------- //// Дискретые входы#define DI_NUMBER           8   // Количество входов#define DI_MODE_IN          0   // Режим обычного входа#define DI_MODE_CNT         1   // Режим счетного входа// -------------------------------------------------------------------------- //// Дискретные выходы#define DO_NUMBER           8   // Количество выходов#define DEBOUNCE_CNT        50// -------------------------------------------------------------------------- //// Аналоговые входы. #define AI_ALL_NUMBER       16  // Общее количество#define AI_COMMON_NUMBER    12  // Основные 12#define AI_ADD_NUMBER       4   // Дополнительные входы// -------------------------------------------------------------------------- //// Аналоговые выходы. #define AO_NUMBER           4   // Количество выходов// -------------------------------------------------------------------------- ////void io_port_enable(void);// -------------------------------------------------------------------------- //typedef struct{    gpio_type *port;    uint16_t pin;    } simple_gpio_t;//typedef struct{    uint8_t state;          // 0 - выкл, 1 - вкл    } di_t;//typedef struct{    uint8_t state;          // 0 - выкл, 1 - вкл    uint8_t mode;           // режим работы, 0 - вход, 1 - счетчик импульсов    uint8_t value;          // значение на выходе в режиме обычного выхода    uint16_t pwm_duty;      // значение заполнения ШИМ    uint16_t pwm_period;    // период ШИМ в [0.1с (10..1000)]    } do_t;typedef struct {    gpio_type *port;    uint16_t pin;    uint16_t mode;  // 0 - обычный вход, 1 - счетный вход    uint32_t deb_counter;    uint32_t cnt;    bool p_flag;    bool cnt_flag;    } din_t;typedef struct{    gpio_type *port;    uint16_t pin;    uint16_t mode;  // 0 - обычный выход, 1 - режим ШИМ    uint16_t pwm_period_cnt;    uint16_t pwm_duty_cnt;    uint16_t pwm_flag;    uint16_t pwm_period;    uint16_t pwm_duty;    } out_t;extern uint16_t output_state_bit;extern uint16_t output_state_save_bit;extern uint16_t output_value_bit;extern uint16_t output_value_save_bit;extern uint16_t output_mode_bit;extern uint16_t output_mode_save_bit;extern uint16_t output_pwm[];extern uint16_t output_pwm_save[];extern uint16_t output_pwm_period[];extern uint16_t output_pwm_period_save[];//// контроль состояний - обрыв, КЗ, нормаtypedef struct{    uint16_t state;         // состояние выхода    uint16_t pwm;           //     uint16_t mode;          // режим работы, 0 - выход, 1 - PWM    uint16_t smode_state;   // значение в безопасном режиме,                            // 0 - разомкнут, 1 - замкнут    uint16_t smode_pwm;     // значение PWM в безопасном режиме (%)    uint16_t normal_state;  // нормальное состояние выхода                            // 0 - разомкнут, 1 - замкнут} output_t;typedef struct{    uint16_t smode;         // безопасный режим 0 - включен, 1 - выключен    uint16_t com_timeout;   // время ожидания запроса от мастера} system_t;#endif  // __IO_H
 |