/* * optical_bus.h * * Created on: 18 авг. 2020 г. * Author: stud */ #ifndef SRC_MAIN_OPTICAL_BUS_H_ #define SRC_MAIN_OPTICAL_BUS_H_ #include "xp_cds_tk_23550.h" enum { CODE_READY_CMD_NOT_READY=0, //// 0 - not ready CODE_READY_CMD_READY1, //1-ready1 CODE_READY_CMD_READY1TO2, //2-ready1to2 CODE_READY_CMD_READY2 //3 -ready2 }; enum { CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_OFF=0, //0 - можно включать расцепитель, свой выключен CODE_RASCEPITEL_CMD_ENABLE_ON_AND_THIS_ON, // 1 - можно включать расцепитель, свой включен CODE_RASCEPITEL_CMD_REQUEST_AND_THIS_OFF, // 2 - запрос на включение, свой выключен CODE_RASCEPITEL_CMD_DISABLE_THIS_ON // 3 - запрет подключения расцепителя, свой включен }; typedef union { struct { unsigned int wdog_tick :1; //посылаем 0_1_0 и т.д. unsigned int statusQTV :1; //1-QTV On, QTV - off unsigned int master :1; // 1 -Master, 0 - not Master unsigned int slave :1; // 1 -Slave, 0 - not Slave unsigned int sync_line_detect :1; // 1 - yes, 0 - no синхросигнал принимается unsigned int sync_1_2 :1; // 1 - yes, 0 - no есть синхронизация между ПЧ unsigned int alarm :1; // 1 - yes, 0 - no авария unsigned int ready_cmd :2; // 00 - not ready,01-ready1,10-ready1to2, 11 -ready2 unsigned int prepare_stop_PWM :1; // 0 - regul turns; 1 - power режим работы // unsigned int ready_to_go :1; // 1 - yes, 0 - no схема собрана, готовы давать шим unsigned int start_pwm :1; // 1 - yes, 0 - no идет команда на запуск шима unsigned int stop_pwm :1; // 1 - yes, 0 - no идет команда на стоп шима unsigned int pwm_status :1; // 1 -On, 0 - Off текущее значение шима // unsigned int can_on_rascepitel :1; // 1 - yes, 0 - no можно подключать расцепитель unsigned int maybe_master :1; // 1 - yes, 0 - no запрос на захват режима Master unsigned int rascepitel_cmd :2; // // 00 - можно включать расцепитель, свой выключен // 01 - можно включать расцепитель, свой включен // 10 - запрос на включение, свой выключен // 11 - запрет подключения расцепителя, свой включен } bit; unsigned int all; } OPTICAL_BUS_DATA_LOW_CMD; // typedef union { // struct { // unsigned int ready :1; // данные готовы // unsigned int overfull :1; //данные потеряны // unsigned int recive_error :1; //данные пришли с ошибкой // unsigned int send_error :1; //данные ушли с ошибкой // unsigned int wait :1; //данные ожидаются // unsigned int timeout :1; //данных давно не было // } bit; // unsigned int all; // } OPTICAL_BUS_CODE_STATUS; typedef struct { int pzad_or_wzad; //given turns or power, depends on controlMode; int angle_pwm; //current rotor turns int iq_zad_i_zad; // Iq_zadan or Izad OPTICAL_BUS_DATA_LOW_CMD cmd; } OPTICAL_BUS_DATA_LOW; typedef struct { OPTICAL_BUS_DATA_LOW raw; OPTICAL_BUS_DATA_LOW data; unsigned int status; unsigned int overfull_data; unsigned int timer; unsigned int flag_clear; unsigned int data_was_update_between_pwm_int; unsigned int error_wdog; unsigned int count_error_wdog; unsigned int count_read_optical_bus_old_data; // счетчик времени сколько данные не обновлялись // OPTICAL_BUS_CODE_STATUS code_status; } OPTICAL_BUS_DATA; #define OPTICAL_BUS_DATA_DEFAULT {{0,0,0,0},{0,0,0,0},0,0,0,0,0,0,0,0} extern OPTICAL_BUS_DATA optical_write_data; extern OPTICAL_BUS_DATA optical_read_data; void optical_bus_read(void); STATUS_DATA_READ_OPT_BUS optical_bus_get_status_and_read(void); void optical_bus_write(void); void optical_bus_read_clear_count_error(void); void optical_bus_update_data_write(void); #endif /* SRC_MAIN_OPTICAL_BUS_H_ */