Сохранить русские комментарии и настройки проекта в UTF-8

Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
This commit is contained in:
2026-10-12 12:24:48 +03:00
parent 378e06a281
commit f741741cf8
137 changed files with 21576 additions and 2134 deletions

View File

@@ -1,8 +1,13 @@
/* Настройка АЦП, обработка преобразований и первичная фильтрация измерений. Русские пояснения сохранены в UTF-8. */
/* Объявляет adc_table_lem — АЦП table lem. Память определена в другом модуле. */
extern Uint16 adc_table_lem[];
/* Объявляет ADC_table — АЦП table. Память определена в другом модуле. */
extern Uint16 ADC_table[];
/* Настраивает каналы, последовательность преобразований и запуск АЦП. */
void setup_adc(void);
/* Объявляет WAKE — данные WAKE; WAKE_TIME — данные WAKE_TIME. Память определена в другом модуле. */
extern long WAKE,WAKE_TIME;

View File

@@ -1,18 +1,30 @@
/* Выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. Русские пояснения сохранены в UTF-8. */
/* В такте Timer1 проверяет команды, напряжение и давность CAN; управляет STOP, повторным пуском и током ЦАП. */
void Load_runner(void);
/* Объявляет интерфейс функции Anal_output; реализация вызывается через этот прототип. */
void Anal_output(long vrot, long maxx);
/* Объявляет интерфейс функции Init_DAC; реализация вызывается через этот прототип. */
void Init_DAC(void);
/* Вычисляет такты ЦАП; для недопустимого сохранённого тайм-аута CAN возвращает 600 мс. */
void Setup_DAC_time(void);
/* Счётчик пускового импульса и выдержки инициализации доступны логгеру. */
/* Счётчик пускового импульса и выдержки инициализации доступны логгеру. */
/* Объявляет IMPowse — данные IMPowse; WAKEpowse — данные WAKEpowse. Память определена в другом модуле. */
extern unsigned long IMPowse, WAKEpowse;
/* Объявляет period_dac — период ЦАП; time_dac — time ЦАП. Память определена в другом модуле. */
extern unsigned int period_dac, time_dac;
/* Call once before IRQ; complete technological CAN packets update voltage. */
/* Сбрасывает все переменные автомата нагрузки до разрешения прерываний; COFF не обнуляет всю .ebss. */
void Load_control_init(void);
/* Принимает напряжение выбранной нагрузки из достоверных слов CAN и сбрасывает возраст только нужного измерения. */
void Load_voltage_can(unsigned int header, unsigned int a,
/* Объявляет b — данные b. */
unsigned int b, unsigned int c);
/* 0x1300/8 words: signature, version, simulation, timeout, status, attempts,
* voltage, age. Only 0x1302 (simulation) and 0x1303 (timeout) are writable. */
/* Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */
unsigned int Load_protection_prepare(unsigned int function, unsigned int address,
/* Объявляет value — данные value; out — данные out. Хранит указатель на данные. */
unsigned int value, unsigned int *out, unsigned int *error);

View File

@@ -1,387 +1,654 @@
/* Таблица назначения GPIO и макросы аппаратных сигналов платы. Русские пояснения сохранены в UTF-8. */
/* Задаёт COMM_gpio00_dir = 0UL; COMM линия GPIO 00 dir. */
#define COMM_gpio00_dir 0UL
/* Задаёт COMM_gpio01_dir = 0UL; COMM линия GPIO 01 dir. */
#define COMM_gpio01_dir 0UL
/* Задаёт COMM_gpio02_dir = 0UL; COMM линия GPIO 02 dir. */
#define COMM_gpio02_dir 0UL
/* Задаёт COMM_gpio03_dir = 0UL; COMM линия GPIO 03 dir. */
#define COMM_gpio03_dir 0UL
/* Задаёт COMM_gpio04_dir = 0UL; COMM линия GPIO 04 dir. */
#define COMM_gpio04_dir 0UL
/* Задаёт COMM_gpio05_dir = 0UL; COMM линия GPIO 05 dir. */
#define COMM_gpio05_dir 0UL
/* Задаёт COMM_gpio06_dir = 0UL; COMM линия GPIO 06 dir. */
#define COMM_gpio06_dir 0UL
/* Задаёт COMM_gpio07_dir = 0UL; COMM линия GPIO 07 dir. */
#define COMM_gpio07_dir 0UL
/* Задаёт COMM_gpio08_dir = 0UL; COMM линия GPIO 08 dir. */
#define COMM_gpio08_dir 0UL
/* Задаёт COMM_gpio09_dir = 0UL; COMM линия GPIO 09 dir. */
#define COMM_gpio09_dir 0UL
/* Задаёт COMM_gpio10_dir = 0UL; COMM линия GPIO 10 dir. */
#define COMM_gpio10_dir 0UL
/* Задаёт COMM_gpio11_dir = 0UL; COMM линия GPIO 11 dir. */
#define COMM_gpio11_dir 0UL
#define COMM_gpio19_dir 1UL // 63 — SPI
/* Задаёт COMM_gpio19_dir = 1UL; COMM линия GPIO 19 dir. */
#define COMM_gpio19_dir 1UL // 63 — SPI
/* Задаёт COMM_gpio20_dir = 0UL; COMM линия GPIO 20 dir. */
#define COMM_gpio20_dir 0UL // 64 2:9B mode 2
/* Задаёт COMM_gpio21_dir = 0UL; COMM линия GPIO 21 dir. */
#define COMM_gpio21_dir 0UL // 65 2:9A mode 4
/* Задаёт COMM_gpio22_dir = 0UL; COMM линия GPIO 22 dir. */
#define COMM_gpio22_dir 0UL // 66 2:12C mode 1
/* Задаёт COMM_gpio23_dir = 0UL; COMM линия GPIO 23 dir. */
#define COMM_gpio23_dir 0UL
/* Задаёт COMM_gpio24_dir = 1UL; COMM линия GPIO 24 dir. */
#define COMM_gpio24_dir 1UL // 68 2:12A select
/* Задаёт COMM_gpio25_dir = 1UL; COMM линия GPIO 25 dir. */
#define COMM_gpio25_dir 1UL // 69 2:11C select
/* Задаёт COMM_gpio26_dir = 0UL; COMM линия GPIO 26 dir. */
#define COMM_gpio26_dir 0UL
/* Задаёт COMM_gpio27_dir = 1UL; COMM линия GPIO 27 dir. */
#define COMM_gpio27_dir 1UL // 73 2:11A select
/* Задаёт COMM_gpio32_dir = 1UL; COMM линия GPIO 32 dir. */
#define COMM_gpio32_dir 1UL // 74 2:10B DIOD green
/* Задаёт COMM_gpio33_dir = 0UL; COMM линия GPIO 33 dir. */
#define COMM_gpio33_dir 0UL
#define COMM_gpio34_dir 1UL // 142 — SCI
/* Задаёт COMM_gpio34_dir = 1UL; COMM линия GPIO 34 dir. */
#define COMM_gpio34_dir 1UL // 142 — SCI
/* Задаёт COMM_gpio48_dir = 1UL; COMM линия GPIO 48 dir. */
#define COMM_gpio48_dir 1UL // 88 2:14C DIOD red
/* Задаёт COMM_gpio49_dir = 1UL; COMM линия GPIO 49 dir. */
#define COMM_gpio49_dir 1UL // 89 2:14B select
/* Задаёт COMM_gpio50_dir = 0UL; COMM линия GPIO 50 dir. */
#define COMM_gpio50_dir 0UL // 90 2:14A input 2
/* Задаёт COMM_gpio51_dir = 0UL; COMM линия GPIO 51 dir. */
#define COMM_gpio51_dir 0UL // 91 2:13C mode !8
/* Задаёт COMM_gpio52_dir = 1UL; COMM линия GPIO 52 dir. */
#define COMM_gpio52_dir 1UL // 94 2:13B select
/* Задаёт COMM_gpio53_dir = 0UL; COMM линия GPIO 53 dir. */
#define COMM_gpio53_dir 0UL // 95 2:13A input 1
/* Задаёт COMM_gpio58_dir = 1UL; COMM линия GPIO 58 dir. */
#define COMM_gpio58_dir 1UL // 100 1:13C rez 1
/* Задаёт COMM_gpio59_dir = 1UL; COMM линия GPIO 59 dir. */
#define COMM_gpio59_dir 1UL // 110 1:13B gotov
/* Задаёт COMM_gpio60_dir = 1UL; COMM линия GPIO 60 dir. */
#define COMM_gpio60_dir 1UL // 111 1:13A led 1
/* Задаёт COMM_gpio61_dir = 1UL; COMM линия GPIO 61 dir. */
#define COMM_gpio61_dir 1UL // 112 1:14C rez 2
#define COMM_gpio62_dir 0UL
/* Задаёт COMM_gpio62_dir = 0UL; COMM линия GPIO 62 dir. */
#define COMM_gpio62_dir 0UL
/* Задаёт COMM_gpio63_dir = 1UL; COMM линия GPIO 63 dir. */
#define COMM_gpio63_dir 1UL // 114 1:14A led 2
//===========================================================================
/* Задаёт BKSD_gpio00_dir = 0UL; BKSD линия GPIO 00 dir. */
#define BKSD_gpio00_dir 0UL // 5 2:7A oil
/* Задаёт BKSD_gpio01_dir = 1UL; BKSD линия GPIO 01 dir. */
#define BKSD_gpio01_dir 1UL // 6 2:4A select
/* Задаёт BKSD_gpio02_dir = 0UL; BKSD линия GPIO 02 dir. */
#define BKSD_gpio02_dir 0UL // 7 2:7B oil
/* Задаёт BKSD_gpio03_dir = 1UL; BKSD линия GPIO 03 dir. */
#define BKSD_gpio03_dir 1UL // 10 2:4B select
/* Задаёт BKSD_gpio04_dir = 0UL; BKSD линия GPIO 04 dir. */
#define BKSD_gpio04_dir 0UL // 11 2:7C oil
/* Задаёт BKSD_gpio05_dir = 0UL; BKSD линия GPIO 05 dir. */
#define BKSD_gpio05_dir 0UL
/* Задаёт BKSD_gpio06_dir = 0UL; BKSD линия GPIO 06 dir. */
#define BKSD_gpio06_dir 0UL
/* Задаёт BKSD_gpio07_dir = 1UL; BKSD линия GPIO 07 dir. */
#define BKSD_gpio07_dir 1UL // 16 2:3A select
/* Задаёт BKSD_gpio08_dir = 1UL; BKSD линия GPIO 08 dir. */
#define BKSD_gpio08_dir 1UL // 17 2:6B select
/* Задаёт BKSD_gpio09_dir = 1UL; BKSD линия GPIO 09 dir. */
#define BKSD_gpio09_dir 1UL // 18 2:3B select
/* Задаёт BKSD_gpio10_dir = 0UL; BKSD линия GPIO 10 dir. */
#define BKSD_gpio10_dir 0UL // 19 2:6C oil
/* Задаёт BKSD_gpio11_dir = 1UL; BKSD линия GPIO 11 dir. */
#define BKSD_gpio11_dir 1UL // 20 2:3C select
#define BKSD_gpio19_dir 1UL // 63 — SPI
/* Задаёт BKSD_gpio19_dir = 1UL; BKSD линия GPIO 19 dir. */
#define BKSD_gpio19_dir 1UL // 63 — SPI
/* Задаёт BKSD_gpio20_dir = 0UL; BKSD линия GPIO 20 dir. */
#define BKSD_gpio20_dir 0UL // 64 2:9B mode 2
/* Задаёт BKSD_gpio21_dir = 0UL; BKSD линия GPIO 21 dir. */
#define BKSD_gpio21_dir 0UL // 65 2:9A mode 4
/* Задаёт BKSD_gpio22_dir = 0UL; BKSD линия GPIO 22 dir. */
#define BKSD_gpio22_dir 0UL // 66 2:12C mode 1
/* Задаёт BKSD_gpio23_dir = 0UL; BKSD линия GPIO 23 dir. */
#define BKSD_gpio23_dir 0UL
/* Задаёт BKSD_gpio24_dir = 0UL; BKSD линия GPIO 24 dir. */
#define BKSD_gpio24_dir 0UL
/* Задаёт BKSD_gpio25_dir = 0UL; BKSD линия GPIO 25 dir. */
#define BKSD_gpio25_dir 0UL
/* Задаёт BKSD_gpio26_dir = 0UL; BKSD линия GPIO 26 dir. */
#define BKSD_gpio26_dir 0UL
/* Задаёт BKSD_gpio27_dir = 0UL; BKSD линия GPIO 27 dir. */
#define BKSD_gpio27_dir 0UL
/* Задаёт BKSD_gpio32_dir = 1UL; BKSD линия GPIO 32 dir. */
#define BKSD_gpio32_dir 1UL // 74 2:10B DIOD green
/* Задаёт BKSD_gpio33_dir = 0UL; BKSD линия GPIO 33 dir. */
#define BKSD_gpio33_dir 0UL
#define BKSD_gpio34_dir 1UL // 142 — SCI
/* Задаёт BKSD_gpio34_dir = 1UL; BKSD линия GPIO 34 dir. */
#define BKSD_gpio34_dir 1UL // 142 — SCI
/* Задаёт BKSD_gpio48_dir = 1UL; BKSD линия GPIO 48 dir. */
#define BKSD_gpio48_dir 1UL // 88 2:14C DIOD red
/* Задаёт BKSD_gpio49_dir = 0UL; BKSD линия GPIO 49 dir. */
#define BKSD_gpio49_dir 0UL // 89 2:14B input 2
/* Задаёт BKSD_gpio50_dir = 0UL; BKSD линия GPIO 50 dir. */
#define BKSD_gpio50_dir 0UL // 90 2:14A input 1
/* Задаёт BKSD_gpio51_dir = 0UL; BKSD линия GPIO 51 dir. */
#define BKSD_gpio51_dir 0UL // 91 2:13C mode !8
/* Задаёт BKSD_gpio52_dir = 0UL; BKSD линия GPIO 52 dir. */
#define BKSD_gpio52_dir 0UL
/* Задаёт BKSD_gpio53_dir = 0UL; BKSD линия GPIO 53 dir. */
#define BKSD_gpio53_dir 0UL
/* Задаёт BKSD_gpio58_dir = 0UL; BKSD линия GPIO 58 dir. */
#define BKSD_gpio58_dir 0UL
/* Задаёт BKSD_gpio59_dir = 1UL; BKSD линия GPIO 59 dir. */
#define BKSD_gpio59_dir 1UL // 110 1:13B gotov
/* Задаёт BKSD_gpio60_dir = 1UL; BKSD линия GPIO 60 dir. */
#define BKSD_gpio60_dir 1UL // 111 1:13A led 1
/* Задаёт BKSD_gpio61_dir = 1UL; BKSD линия GPIO 61 dir. */
#define BKSD_gpio61_dir 1UL // 112 1:14C rez 2
/* Задаёт BKSD_gpio62_dir = 1UL; BKSD линия GPIO 62 dir. */
#define BKSD_gpio62_dir 1UL // 113 1:14B rez 1
/* Задаёт BKSD_gpio63_dir = 1UL; BKSD линия GPIO 63 dir. */
#define BKSD_gpio63_dir 1UL // 114 1:14A led 2
//===========================================================================
/* Задаёт BKST_gpio00_dir = 1UL; BKST линия GPIO 00 dir. */
#define BKST_gpio00_dir 1UL // 5 2:7A select
/* Задаёт BKST_gpio01_dir = 1UL; BKST линия GPIO 01 dir. */
#define BKST_gpio01_dir 1UL // 6 2:4A select
/* Задаёт BKST_gpio02_dir = 0UL; BKST линия GPIO 02 dir. */
#define BKST_gpio02_dir 0UL
/* Задаёт BKST_gpio03_dir = 1UL; BKST линия GPIO 03 dir. */
#define BKST_gpio03_dir 1UL // 10 2:4B select
/* Задаёт BKST_gpio04_dir = 0UL; BKST линия GPIO 04 dir. */
#define BKST_gpio04_dir 0UL
/* Задаёт BKST_gpio05_dir = 0UL; BKST линия GPIO 05 dir. */
#define BKST_gpio05_dir 0UL
/* Задаёт BKST_gpio06_dir = 1UL; BKST линия GPIO 06 dir. */
#define BKST_gpio06_dir 1UL // 13 2:6A select
/* Задаёт BKST_gpio07_dir = 1UL; BKST линия GPIO 07 dir. */
#define BKST_gpio07_dir 1UL // 16 2:3A select
/* Задаёт BKST_gpio08_dir = 1UL; BKST линия GPIO 08 dir. */
#define BKST_gpio08_dir 1UL // 17 2:6B select
/* Задаёт BKST_gpio09_dir = 1UL; BKST линия GPIO 09 dir. */
#define BKST_gpio09_dir 1UL // 18 2:3B select
/* Задаёт BKST_gpio10_dir = 0UL; BKST линия GPIO 10 dir. */
#define BKST_gpio10_dir 0UL
/* Задаёт BKST_gpio11_dir = 1UL; BKST линия GPIO 11 dir. */
#define BKST_gpio11_dir 1UL // 20 2:3C select
#define BKST_gpio19_dir 1UL // 63 — SPI
/* Задаёт BKST_gpio19_dir = 1UL; BKST линия GPIO 19 dir. */
#define BKST_gpio19_dir 1UL // 63 — SPI
/* Задаёт BKST_gpio20_dir = 0UL; BKST линия GPIO 20 dir. */
#define BKST_gpio20_dir 0UL // 64 2:9B mode 2
/* Задаёт BKST_gpio21_dir = 0UL; BKST линия GPIO 21 dir. */
#define BKST_gpio21_dir 0UL // 65 2:9A mode 4
/* Задаёт BKST_gpio22_dir = 0UL; BKST линия GPIO 22 dir. */
#define BKST_gpio22_dir 0UL // 66 2:12C mode 1
/* Задаёт BKST_gpio23_dir = 0UL; BKST линия GPIO 23 dir. */
#define BKST_gpio23_dir 0UL
/* Задаёт BKST_gpio24_dir = 1UL; BKST линия GPIO 24 dir. */
#define BKST_gpio24_dir 1UL // 68 2:12A select
/* Задаёт BKST_gpio25_dir = 0UL; BKST линия GPIO 25 dir. */
#define BKST_gpio25_dir 0UL
/* Задаёт BKST_gpio26_dir = 0UL; BKST линия GPIO 26 dir. */
#define BKST_gpio26_dir 0UL
/* Задаёт BKST_gpio27_dir = 1UL; BKST линия GPIO 27 dir. */
#define BKST_gpio27_dir 1UL // 73 2:11A select
/* Задаёт BKST_gpio32_dir = 1UL; BKST линия GPIO 32 dir. */
#define BKST_gpio32_dir 1UL // 74 2:10B DIOD green
/* Задаёт BKST_gpio33_dir = 0UL; BKST линия GPIO 33 dir. */
#define BKST_gpio33_dir 0UL
#define BKST_gpio34_dir 1UL // 142 — SCI
/* Задаёт BKST_gpio34_dir = 1UL; BKST линия GPIO 34 dir. */
#define BKST_gpio34_dir 1UL // 142 — SCI
/* Задаёт BKST_gpio48_dir = 1UL; BKST линия GPIO 48 dir. */
#define BKST_gpio48_dir 1UL // 88 2:14C DIOD red
/* Задаёт BKST_gpio49_dir = 0UL; BKST линия GPIO 49 dir. */
#define BKST_gpio49_dir 0UL
/* Задаёт BKST_gpio50_dir = 1UL; BKST линия GPIO 50 dir. */
#define BKST_gpio50_dir 1UL // 90 2:14A select
/* Задаёт BKST_gpio51_dir = 0UL; BKST линия GPIO 51 dir. */
#define BKST_gpio51_dir 0UL // 91 2:13C mode !8
/* Задаёт BKST_gpio52_dir = 0UL; BKST линия GPIO 52 dir. */
#define BKST_gpio52_dir 0UL
/* Задаёт BKST_gpio53_dir = 1UL; BKST линия GPIO 53 dir. */
#define BKST_gpio53_dir 1UL // 95 2:13A select
/* Задаёт BKST_gpio58_dir = 1UL; BKST линия GPIO 58 dir. */
#define BKST_gpio58_dir 1UL // 100 1:13C rez 1
/* Задаёт BKST_gpio59_dir = 1UL; BKST линия GPIO 59 dir. */
#define BKST_gpio59_dir 1UL // 110 1:13B gotov
/* Задаёт BKST_gpio60_dir = 1UL; BKST линия GPIO 60 dir. */
#define BKST_gpio60_dir 1UL // 111 1:13A led 1
/* Задаёт BKST_gpio61_dir = 1UL; BKST линия GPIO 61 dir. */
#define BKST_gpio61_dir 1UL // 112 1:14C rez 2
/* Задаёт BKST_gpio62_dir = 1UL; BKST линия GPIO 62 dir. */
#define BKST_gpio62_dir 1UL // 113 1:14B led 2
/* Задаёт BKST_gpio63_dir = 0UL; BKST линия GPIO 63 dir. */
#define BKST_gpio63_dir 0UL // 114 1:14A input
//===========================================================================
/* Задаёт PULT_gpio00_dir = 1UL; PULT линия GPIO 00 dir. */
#define PULT_gpio00_dir 1UL // 5 2:7A gotov
/* Задаёт PULT_gpio01_dir = 0UL; PULT линия GPIO 01 dir. */
#define PULT_gpio01_dir 0UL
/* Задаёт PULT_gpio02_dir = 1UL; PULT линия GPIO 02 dir. */
#define PULT_gpio02_dir 1UL // 7 2:7B ro 1
/* Задаёт PULT_gpio03_dir = 0UL; PULT линия GPIO 03 dir. */
#define PULT_gpio03_dir 0UL
/* Задаёт PULT_gpio04_dir = 0UL; PULT линия GPIO 04 dir. */
#define PULT_gpio04_dir 0UL
/* Задаёт PULT_gpio05_dir = 0UL; PULT линия GPIO 05 dir. */
#define PULT_gpio05_dir 0UL
/* Задаёт PULT_gpio06_dir = 1UL; PULT линия GPIO 06 dir. */
#define PULT_gpio06_dir 1UL // 13 2:6A kanal
/* Задаёт PULT_gpio07_dir = 0UL; PULT линия GPIO 07 dir. */
#define PULT_gpio07_dir 0UL
/* Задаёт PULT_gpio08_dir = 1UL; PULT линия GPIO 08 dir. */
#define PULT_gpio08_dir 1UL // 17 2:6B kanal
/* Задаёт PULT_gpio09_dir = 0UL; PULT линия GPIO 09 dir. */
#define PULT_gpio09_dir 0UL
/* Задаёт PULT_gpio10_dir = 0UL; PULT линия GPIO 10 dir. */
#define PULT_gpio10_dir 0UL
/* Задаёт PULT_gpio11_dir = 0UL; PULT линия GPIO 11 dir. */
#define PULT_gpio11_dir 0UL
#define PULT_gpio19_dir 1UL // 63 — SPI
/* Задаёт PULT_gpio19_dir = 1UL; PULT линия GPIO 19 dir. */
#define PULT_gpio19_dir 1UL // 63 — SPI
/* Задаёт PULT_gpio20_dir = 0UL; PULT линия GPIO 20 dir. */
#define PULT_gpio20_dir 0UL // 64 2:9B mode 2
/* Задаёт PULT_gpio21_dir = 0UL; PULT линия GPIO 21 dir. */
#define PULT_gpio21_dir 0UL // 65 2:9A mode 4
/* Задаёт PULT_gpio22_dir = 0UL; PULT линия GPIO 22 dir. */
#define PULT_gpio22_dir 0UL // 66 2:12C mode 1
/* Задаёт PULT_gpio23_dir = 0UL; PULT линия GPIO 23 dir. */
#define PULT_gpio23_dir 0UL // 67 2:12B button
/* Задаёт PULT_gpio24_dir = 0UL; PULT линия GPIO 24 dir. */
#define PULT_gpio24_dir 0UL // 68 2:12A button
/* Задаёт PULT_gpio25_dir = 0UL; PULT линия GPIO 25 dir. */
#define PULT_gpio25_dir 0UL
/* Задаёт PULT_gpio26_dir = 0UL; PULT линия GPIO 26 dir. */
#define PULT_gpio26_dir 0UL // 72 2:11B button
/* Задаёт PULT_gpio27_dir = 0UL; PULT линия GPIO 27 dir. */
#define PULT_gpio27_dir 0UL // 73 2:11A button
/* Задаёт PULT_gpio32_dir = 1UL; PULT линия GPIO 32 dir. */
#define PULT_gpio32_dir 1UL // 74 2:10B DIOD green
/* Задаёт PULT_gpio33_dir = 0UL; PULT линия GPIO 33 dir. */
#define PULT_gpio33_dir 0UL
#define PULT_gpio34_dir 1UL // 142 — SCI
/* Задаёт PULT_gpio34_dir = 1UL; PULT линия GPIO 34 dir. */
#define PULT_gpio34_dir 1UL // 142 — SCI
/* Задаёт PULT_gpio48_dir = 1UL; PULT линия GPIO 48 dir. */
#define PULT_gpio48_dir 1UL // 88 2:14C DIOD red
/* Задаёт PULT_gpio49_dir = 0UL; PULT линия GPIO 49 dir. */
#define PULT_gpio49_dir 0UL // 89 2:14B button
/* Задаёт PULT_gpio50_dir = 0UL; PULT линия GPIO 50 dir. */
#define PULT_gpio50_dir 0UL // 90 2:14A button
/* Задаёт PULT_gpio51_dir = 0UL; PULT линия GPIO 51 dir. */
#define PULT_gpio51_dir 0UL // 91 2:13C mode !8
/* Задаёт PULT_gpio52_dir = 0UL; PULT линия GPIO 52 dir. */
#define PULT_gpio52_dir 0UL // 94 2:13B button
/* Задаёт PULT_gpio53_dir = 0UL; PULT линия GPIO 53 dir. */
#define PULT_gpio53_dir 0UL // 95 2:13A button
/* Задаёт PULT_gpio58_dir = 0UL; PULT линия GPIO 58 dir. */
#define PULT_gpio58_dir 0UL
/* Задаёт PULT_gpio59_dir = 0UL; PULT линия GPIO 59 dir. */
#define PULT_gpio59_dir 0UL
/* Задаёт PULT_gpio60_dir = 0UL; PULT линия GPIO 60 dir. */
#define PULT_gpio60_dir 0UL
/* Задаёт PULT_gpio61_dir = 0UL; PULT линия GPIO 61 dir. */
#define PULT_gpio61_dir 0UL
/* Задаёт PULT_gpio62_dir = 0UL; PULT линия GPIO 62 dir. */
#define PULT_gpio62_dir 0UL
/* Задаёт PULT_gpio63_dir = 0UL; PULT линия GPIO 63 dir. */
#define PULT_gpio63_dir 0UL
//===========================================================================
/* Задаёт PLT2_gpio00_dir = 1UL; 2 линия GPIO 00 dir. */
#define PLT2_gpio00_dir 1UL // 5 2:7A gotov
/* Задаёт PLT2_gpio01_dir = 0UL; 2 линия GPIO 01 dir. */
#define PLT2_gpio01_dir 0UL
/* Задаёт PLT2_gpio02_dir = 0UL; 2 линия GPIO 02 dir. */
#define PLT2_gpio02_dir 0UL
/* Задаёт PLT2_gpio03_dir = 1UL; 2 линия GPIO 03 dir. */
#define PLT2_gpio03_dir 1UL // 10 2:4B res_pb
/* Задаёт PLT2_gpio04_dir = 0UL; 2 линия GPIO 04 dir. */
#define PLT2_gpio04_dir 0UL // 11 2:7C button
/* Задаёт PLT2_gpio05_dir = 0UL; 2 линия GPIO 05 dir. */
#define PLT2_gpio05_dir 0UL // 12 2:4C button
/* Задаёт PLT2_gpio06_dir = 1UL; 2 линия GPIO 06 dir. */
#define PLT2_gpio06_dir 1UL // 13 2:6A kanal
/* Задаёт PLT2_gpio07_dir = 0UL; 2 линия GPIO 07 dir. */
#define PLT2_gpio07_dir 0UL
/* Задаёт PLT2_gpio08_dir = 1UL; 2 линия GPIO 08 dir. */
#define PLT2_gpio08_dir 1UL // 17 2:6B kanal
/* Задаёт PLT2_gpio09_dir = 1UL; 2 линия GPIO 09 dir. */
#define PLT2_gpio09_dir 1UL // 18 2:3B res_lb
/* Задаёт PLT2_gpio10_dir = 0UL; 2 линия GPIO 10 dir. */
#define PLT2_gpio10_dir 0UL
/* Задаёт PLT2_gpio11_dir = 0UL; 2 линия GPIO 11 dir. */
#define PLT2_gpio11_dir 0UL
#define PLT2_gpio19_dir 1UL // 63 × SPI
/* Задаёт PLT2_gpio19_dir = 1UL; 2 линия GPIO 19 dir. */
#define PLT2_gpio19_dir 1UL // 63 Ч SPI
/* Задаёт PLT2_gpio20_dir = 0UL; 2 линия GPIO 20 dir. */
#define PLT2_gpio20_dir 0UL // 64 2:9B mode 2
/* Задаёт PLT2_gpio21_dir = 0UL; 2 линия GPIO 21 dir. */
#define PLT2_gpio21_dir 0UL // 65 2:9A mode 4
/* Задаёт PLT2_gpio22_dir = 0UL; 2 линия GPIO 22 dir. */
#define PLT2_gpio22_dir 0UL // 66 2:12C mode 1
/* Задаёт PLT2_gpio23_dir = 0UL; 2 линия GPIO 23 dir. */
#define PLT2_gpio23_dir 0UL // 67 2:12B button
/* Задаёт PLT2_gpio24_dir = 0UL; 2 линия GPIO 24 dir. */
#define PLT2_gpio24_dir 0UL // 68 2:12A button
/* Задаёт PLT2_gpio25_dir = 0UL; 2 линия GPIO 25 dir. */
#define PLT2_gpio25_dir 0UL // 69 2:11C button
/* Задаёт PLT2_gpio26_dir = 0UL; 2 линия GPIO 26 dir. */
#define PLT2_gpio26_dir 0UL // 72 2:11B button
/* Задаёт PLT2_gpio27_dir = 0UL; 2 линия GPIO 27 dir. */
#define PLT2_gpio27_dir 0UL // 73 2:11A button
/* Задаёт PLT2_gpio32_dir = 1UL; 2 линия GPIO 32 dir. */
#define PLT2_gpio32_dir 1UL // 74 2:10B DIOD green
/* Задаёт PLT2_gpio33_dir = 0UL; 2 линия GPIO 33 dir. */
#define PLT2_gpio33_dir 0UL // 75 2:10C button
#define PLT2_gpio34_dir 1UL // 142 × SCI
/* Задаёт PLT2_gpio34_dir = 1UL; 2 линия GPIO 34 dir. */
#define PLT2_gpio34_dir 1UL // 142 Ч SCI
/* Задаёт PLT2_gpio48_dir = 0UL; 2 линия GPIO 48 dir. */
#define PLT2_gpio48_dir 0UL // 88 2:14C button
/* Задаёт PLT2_gpio49_dir = 0UL; 2 линия GPIO 49 dir. */
#define PLT2_gpio49_dir 0UL // 89 2:14B button
/* Задаёт PLT2_gpio50_dir = 0UL; 2 линия GPIO 50 dir. */
#define PLT2_gpio50_dir 0UL // 90 2:14A button
/* Задаёт PLT2_gpio51_dir = 0UL; 2 линия GPIO 51 dir. */
#define PLT2_gpio51_dir 0UL // 91 2:13C mode !8
/* Задаёт PLT2_gpio52_dir = 0UL; 2 линия GPIO 52 dir. */
#define PLT2_gpio52_dir 0UL // 94 2:13B button
/* Задаёт PLT2_gpio53_dir = 0UL; 2 линия GPIO 53 dir. */
#define PLT2_gpio53_dir 0UL // 95 2:13A button
/* Задаёт PLT2_gpio58_dir = 0UL; 2 линия GPIO 58 dir. */
#define PLT2_gpio58_dir 0UL
/* Задаёт PLT2_gpio59_dir = 0UL; 2 линия GPIO 59 dir. */
#define PLT2_gpio59_dir 0UL
/* Задаёт PLT2_gpio60_dir = 0UL; 2 линия GPIO 60 dir. */
#define PLT2_gpio60_dir 0UL
/* Задаёт PLT2_gpio61_dir = 0UL; 2 линия GPIO 61 dir. */
#define PLT2_gpio61_dir 0UL
/* Задаёт PLT2_gpio62_dir = 0UL; 2 линия GPIO 62 dir. */
#define PLT2_gpio62_dir 0UL
/* Задаёт PLT2_gpio63_dir = 0UL; 2 линия GPIO 63 dir. */
#define PLT2_gpio63_dir 0UL
//===========================================================================
/* Задаёт SHKF_gpio00_dir = 0UL; SHKF линия GPIO 00 dir. */
#define SHKF_gpio00_dir 0UL // 5 2:7A input
/* Задаёт SHKF_gpio01_dir = 0UL; SHKF линия GPIO 01 dir. */
#define SHKF_gpio01_dir 0UL // 6 2:4A input
/* Задаёт SHKF_gpio02_dir = 0UL; SHKF линия GPIO 02 dir. */
#define SHKF_gpio02_dir 0UL // 7 2:7B input
/* Задаёт SHKF_gpio03_dir = 0UL; SHKF линия GPIO 03 dir. */
#define SHKF_gpio03_dir 0UL // 10 2:4B input
/* Задаёт SHKF_gpio04_dir = 0UL; SHKF линия GPIO 04 dir. */
#define SHKF_gpio04_dir 0UL // 11 2:7C input
/* Задаёт SHKF_gpio05_dir = 0UL; SHKF линия GPIO 05 dir. */
#define SHKF_gpio05_dir 0UL // 12 2:4C input
/* Задаёт SHKF_gpio06_dir = 0UL; SHKF линия GPIO 06 dir. */
#define SHKF_gpio06_dir 0UL // 13 2:6A input
/* Задаёт SHKF_gpio07_dir = 0UL; SHKF линия GPIO 07 dir. */
#define SHKF_gpio07_dir 0UL // 16 2:3A input
/* Задаёт SHKF_gpio08_dir = 0UL; SHKF линия GPIO 08 dir. */
#define SHKF_gpio08_dir 0UL // 17 2:6B input
/* Задаёт SHKF_gpio09_dir = 0UL; SHKF линия GPIO 09 dir. */
#define SHKF_gpio09_dir 0UL // 18 2:3B input
/* Задаёт SHKF_gpio10_dir = 0UL; SHKF линия GPIO 10 dir. */
#define SHKF_gpio10_dir 0UL // 19 2:6C input
/* Задаёт SHKF_gpio11_dir = 0UL; SHKF линия GPIO 11 dir. */
#define SHKF_gpio11_dir 0UL // 20 2:3C input
#define SHKF_gpio19_dir 1UL // 63 — SPI
/* Задаёт SHKF_gpio19_dir = 1UL; SHKF линия GPIO 19 dir. */
#define SHKF_gpio19_dir 1UL // 63 — SPI
/* Задаёт SHKF_gpio20_dir = 0UL; SHKF линия GPIO 20 dir. */
#define SHKF_gpio20_dir 0UL // 64 2:9B mode 2
/* Задаёт SHKF_gpio21_dir = 0UL; SHKF линия GPIO 21 dir. */
#define SHKF_gpio21_dir 0UL // 65 2:9A mode 4
/* Задаёт SHKF_gpio22_dir = 0UL; SHKF линия GPIO 22 dir. */
#define SHKF_gpio22_dir 0UL // 66 2:12C mode 1
/* Задаёт SHKF_gpio23_dir = 0UL; SHKF линия GPIO 23 dir. */
#define SHKF_gpio23_dir 0UL // 67 2:12B input
/* Задаёт SHKF_gpio24_dir = 0UL; SHKF линия GPIO 24 dir. */
#define SHKF_gpio24_dir 0UL // 68 2:12A input
/* Задаёт SHKF_gpio25_dir = 0UL; SHKF линия GPIO 25 dir. */
#define SHKF_gpio25_dir 0UL // 69 2:11C input
/* Задаёт SHKF_gpio26_dir = 0UL; SHKF линия GPIO 26 dir. */
#define SHKF_gpio26_dir 0UL // 72 2:11B input
/* Задаёт SHKF_gpio27_dir = 0UL; SHKF линия GPIO 27 dir. */
#define SHKF_gpio27_dir 0UL // 73 2:11A input
/* Задаёт SHKF_gpio32_dir = 0UL; SHKF линия GPIO 32 dir. */
#define SHKF_gpio32_dir 0UL // 74 2:10B input
/* Задаёт SHKF_gpio33_dir = 0UL; SHKF линия GPIO 33 dir. */
#define SHKF_gpio33_dir 0UL // 75 2:10C input
#define SHKF_gpio34_dir 1UL // 142 — SCI
/* Задаёт SHKF_gpio34_dir = 1UL; SHKF линия GPIO 34 dir. */
#define SHKF_gpio34_dir 1UL // 142 — SCI
/* Задаёт SHKF_gpio48_dir = 1UL; SHKF линия GPIO 48 dir. */
#define SHKF_gpio48_dir 1UL // 88 2:14C DIOD red
/* Задаёт SHKF_gpio49_dir = 0UL; SHKF линия GPIO 49 dir. */
#define SHKF_gpio49_dir 0UL // 89 2:14B input
/* Задаёт SHKF_gpio50_dir = 0UL; SHKF линия GPIO 50 dir. */
#define SHKF_gpio50_dir 0UL // 90 2:14A input
/* Задаёт SHKF_gpio51_dir = 0UL; SHKF линия GPIO 51 dir. */
#define SHKF_gpio51_dir 0UL // 91 2:13C mode !8
/* Задаёт SHKF_gpio52_dir = 0UL; SHKF линия GPIO 52 dir. */
#define SHKF_gpio52_dir 0UL // 94 2:13B input
/* Задаёт SHKF_gpio53_dir = 0UL; SHKF линия GPIO 53 dir. */
#define SHKF_gpio53_dir 0UL // 95 2:13A input
/* Задаёт SHKF_gpio58_dir = 1UL; SHKF линия GPIO 58 dir. */
#define SHKF_gpio58_dir 1UL // 100 1:13C rez 1
/* Задаёт SHKF_gpio59_dir = 1UL; SHKF линия GPIO 59 dir. */
#define SHKF_gpio59_dir 1UL // 110 1:13B gotov
/* Задаёт SHKF_gpio60_dir = 1UL; SHKF линия GPIO 60 dir. */
#define SHKF_gpio60_dir 1UL // 111 1:13A led 1
/* Задаёт SHKF_gpio61_dir = 1UL; SHKF линия GPIO 61 dir. */
#define SHKF_gpio61_dir 1UL // 112 1:14C rez 2
/* Задаёт SHKF_gpio62_dir = 0UL; SHKF линия GPIO 62 dir. */
#define SHKF_gpio62_dir 0UL
/* Задаёт SHKF_gpio63_dir = 1UL; SHKF линия GPIO 63 dir. */
#define SHKF_gpio63_dir 1UL // 114 1:14A led 2
//===========================================================================
/* Задаёт LOAD_gpio00_dir = 0UL; LOAD линия GPIO 00 dir. */
#define LOAD_gpio00_dir 0UL
/* Задаёт LOAD_gpio01_dir = 1UL; LOAD линия GPIO 01 dir. */
#define LOAD_gpio01_dir 1UL // 6 2:4A led 2
/* Задаёт LOAD_gpio02_dir = 0UL; LOAD линия GPIO 02 dir. */
#define LOAD_gpio02_dir 0UL
/* Задаёт LOAD_gpio03_dir = 1UL; LOAD линия GPIO 03 dir. */
#define LOAD_gpio03_dir 1UL // 10 2:4B res_out 2
/* Задаёт LOAD_gpio04_dir = 0UL; LOAD линия GPIO 04 dir. */
#define LOAD_gpio04_dir 0UL
/* Задаёт LOAD_gpio05_dir = 0UL; LOAD линия GPIO 05 dir. */
#define LOAD_gpio05_dir 0UL
/* Задаёт LOAD_gpio06_dir = 0UL; LOAD линия GPIO 06 dir. */
#define LOAD_gpio06_dir 0UL // 13 2:6A omega d
/* Задаёт LOAD_gpio07_dir = 1UL; LOAD линия GPIO 07 dir. */
#define LOAD_gpio07_dir 1UL // 16 2:3A led 1
/* Задаёт LOAD_gpio08_dir = 0UL; LOAD линия GPIO 08 dir. */
#define LOAD_gpio08_dir 0UL // 17 2:6B start 1
/* Задаёт LOAD_gpio09_dir = 1UL; LOAD линия GPIO 09 dir. */
#define LOAD_gpio09_dir 1UL // 18 2:3B res_out 1
/* Задаёт LOAD_gpio10_dir = 0UL; LOAD линия GPIO 10 dir. */
#define LOAD_gpio10_dir 0UL
/* Задаёт LOAD_gpio11_dir = 0UL; LOAD линия GPIO 11 dir. */
#define LOAD_gpio11_dir 0UL // 20 2:3C res_in 0
#define LOAD_gpio19_dir 1UL // 63 — SPI
/* Задаёт LOAD_gpio19_dir = 1UL; LOAD линия GPIO 19 dir. */
#define LOAD_gpio19_dir 1UL // 63 — SPI
/* Задаёт LOAD_gpio20_dir = 0UL; LOAD линия GPIO 20 dir. */
#define LOAD_gpio20_dir 0UL // 64 2:9B mode 2
/* Задаёт LOAD_gpio21_dir = 0UL; LOAD линия GPIO 21 dir. */
#define LOAD_gpio21_dir 0UL // 65 2:9A mode 4
/* Задаёт LOAD_gpio22_dir = 0UL; LOAD линия GPIO 22 dir. */
#define LOAD_gpio22_dir 0UL // 66 2:12C mode 1
/* Задаёт LOAD_gpio23_dir = 0UL; LOAD линия GPIO 23 dir. */
#define LOAD_gpio23_dir 0UL
/* Задаёт LOAD_gpio24_dir = 0UL; LOAD линия GPIO 24 dir. */
#define LOAD_gpio24_dir 0UL
/* Задаёт LOAD_gpio25_dir = 0UL; LOAD линия GPIO 25 dir. */
#define LOAD_gpio25_dir 0UL
/* Задаёт LOAD_gpio26_dir = 0UL; LOAD линия GPIO 26 dir. */
#define LOAD_gpio26_dir 0UL
/* Задаёт LOAD_gpio27_dir = 0UL; LOAD линия GPIO 27 dir. */
#define LOAD_gpio27_dir 0UL
/* Задаёт LOAD_gpio32_dir = 1UL; LOAD линия GPIO 32 dir. */
#define LOAD_gpio32_dir 1UL // 74 2:10B DIOD green
/* Задаёт LOAD_gpio33_dir = 0UL; LOAD линия GPIO 33 dir. */
#define LOAD_gpio33_dir 0UL
#define LOAD_gpio34_dir 1UL // 142 — SCI
/* Задаёт LOAD_gpio34_dir = 1UL; LOAD линия GPIO 34 dir. */
#define LOAD_gpio34_dir 1UL // 142 — SCI
/* Задаёт LOAD_gpio48_dir = 1UL; LOAD линия GPIO 48 dir. */
#define LOAD_gpio48_dir 1UL // 88 2:14C DIOD red
/* Задаёт LOAD_gpio49_dir = 0UL; LOAD линия GPIO 49 dir. */
#define LOAD_gpio49_dir 0UL
/* Задаёт LOAD_gpio50_dir = 0UL; LOAD линия GPIO 50 dir. */
#define LOAD_gpio50_dir 0UL
/* Задаёт LOAD_gpio51_dir = 0UL; LOAD линия GPIO 51 dir. */
#define LOAD_gpio51_dir 0UL // 91 2:13C mode !8
/* Задаёт LOAD_gpio52_dir = 0UL; LOAD линия GPIO 52 dir. */
#define LOAD_gpio52_dir 0UL
/* Задаёт LOAD_gpio53_dir = 0UL; LOAD линия GPIO 53 dir. */
#define LOAD_gpio53_dir 0UL
/* Задаёт LOAD_gpio58_dir = 1UL; LOAD линия GPIO 58 dir. */
#define LOAD_gpio58_dir 1UL // 100 1:13C stop_dptb
/* Задаёт LOAD_gpio59_dir = 1UL; LOAD линия GPIO 59 dir. */
#define LOAD_gpio59_dir 1UL // 110 1:13B csdac
/* Задаёт LOAD_gpio60_dir = 1UL; LOAD линия GPIO 60 dir. */
#define LOAD_gpio60_dir 1UL // 111 1:13A didac
/* Задаёт LOAD_gpio61_dir = 1UL; LOAD линия GPIO 61 dir. */
#define LOAD_gpio61_dir 1UL // 112 1:14C gotov
/* Задаёт LOAD_gpio62_dir = 1UL; LOAD линия GPIO 62 dir. */
#define LOAD_gpio62_dir 1UL // 113 1:14B start_dptb
/* Задаёт LOAD_gpio63_dir = 1UL; LOAD линия GPIO 63 dir. */
#define LOAD_gpio63_dir 1UL // 114 1:14A clkdac
//===========================================================================
/* Задаёт COMM_GPADIR = (COMM_gpio00_dir ) + (COMM_gpio01_dir<<1) + (COMM_gpio02_dir<<2) + (COMM_gpio03_dir<<3) +; данные COMM_GPADIR. */
#define COMM_GPADIR (COMM_gpio00_dir ) + (COMM_gpio01_dir<<1) + (COMM_gpio02_dir<<2) + (COMM_gpio03_dir<<3) + \
(COMM_gpio04_dir<<4) + (COMM_gpio05_dir<<5) + (COMM_gpio06_dir<<6) + (COMM_gpio07_dir<<7) + \
(COMM_gpio08_dir<<8) + (COMM_gpio09_dir<<9) + (COMM_gpio10_dir<<10)+ (COMM_gpio11_dir<<11)+ \
(COMM_gpio19_dir<<19)+ \
(COMM_gpio20_dir<<20)+ (COMM_gpio21_dir<<21)+ (COMM_gpio22_dir<<22)+ (COMM_gpio23_dir<<23)+ \
(COMM_gpio24_dir<<24)+ (COMM_gpio25_dir<<25)+ (COMM_gpio26_dir<<26)+ (COMM_gpio27_dir<<27);
(COMM_gpio04_dir<<4) + (COMM_gpio05_dir<<5) + (COMM_gpio06_dir<<6) + (COMM_gpio07_dir<<7) + /* Продолжает список аргументов, полей или выражение (COMM_gpio04_dir<<4) + (COMM_gpio05_dir<<5) + (COMM_gpio06_dir<<6) + (COMM_gpio07_dir<<7) +; порядок элементов сохраняется. */ \
(COMM_gpio08_dir<<8) + (COMM_gpio09_dir<<9) + (COMM_gpio10_dir<<10)+ (COMM_gpio11_dir<<11)+ /* Продолжает список аргументов, полей или выражение (COMM_gpio08_dir<<8) + (COMM_gpio09_dir<<9) + (COMM_gpio10_dir<<10)+ (COMM_gpio11_dir<<11)+; порядок элементов сохраняется. */ \
(COMM_gpio19_dir<<19)+ /* Продолжает список аргументов, полей или выражение (COMM_gpio19_dir<<19)+; порядок элементов сохраняется. */ \
(COMM_gpio20_dir<<20)+ (COMM_gpio21_dir<<21)+ (COMM_gpio22_dir<<22)+ (COMM_gpio23_dir<<23)+ /* Продолжает список аргументов, полей или выражение (COMM_gpio20_dir<<20)+ (COMM_gpio21_dir<<21)+ (COMM_gpio22_dir<<22)+ (COMM_gpio23_dir<<23)+; порядок элементов сохраняется. */ \
(COMM_gpio24_dir<<24)+ (COMM_gpio25_dir<<25)+ (COMM_gpio26_dir<<26)+ (COMM_gpio27_dir<<27); /* Продолжает список аргументов, полей или выражение (COMM_gpio24_dir<<24)+ (COMM_gpio25_dir<<25)+ (COMM_gpio26_dir<<26)+ (COMM_gpio27_dir<<27);; порядок элементов сохраняется. */
/* Задаёт COMM_GPBDIR = (COMM_gpio32_dir )+ (COMM_gpio33_dir<<1) + (COMM_gpio34_dir<<2 )+; данные COMM_GPBDIR. */
#define COMM_GPBDIR (COMM_gpio32_dir )+ (COMM_gpio33_dir<<1) + (COMM_gpio34_dir<<2 )+ \
(COMM_gpio48_dir<<16)+ (COMM_gpio49_dir<<17)+ (COMM_gpio50_dir<<18)+ (COMM_gpio51_dir<<19)+ \
(COMM_gpio52_dir<<20)+ (COMM_gpio53_dir<<21)+ \
(COMM_gpio58_dir<<26)+ (COMM_gpio59_dir<<27)+ \
(COMM_gpio60_dir<<28)+ (COMM_gpio61_dir<<29)+ (COMM_gpio62_dir<<30)+ (COMM_gpio63_dir<<31);
(COMM_gpio48_dir<<16)+ (COMM_gpio49_dir<<17)+ (COMM_gpio50_dir<<18)+ (COMM_gpio51_dir<<19)+ /* Продолжает список аргументов, полей или выражение (COMM_gpio48_dir<<16)+ (COMM_gpio49_dir<<17)+ (COMM_gpio50_dir<<18)+ (COMM_gpio51_dir<<19)+; порядок элементов сохраняется. */ \
(COMM_gpio52_dir<<20)+ (COMM_gpio53_dir<<21)+ /* Продолжает список аргументов, полей или выражение (COMM_gpio52_dir<<20)+ (COMM_gpio53_dir<<21)+; порядок элементов сохраняется. */ \
(COMM_gpio58_dir<<26)+ (COMM_gpio59_dir<<27)+ /* Продолжает список аргументов, полей или выражение (COMM_gpio58_dir<<26)+ (COMM_gpio59_dir<<27)+; порядок элементов сохраняется. */ \
(COMM_gpio60_dir<<28)+ (COMM_gpio61_dir<<29)+ (COMM_gpio62_dir<<30)+ (COMM_gpio63_dir<<31); /* Продолжает список аргументов, полей или выражение (COMM_gpio60_dir<<28)+ (COMM_gpio61_dir<<29)+ (COMM_gpio62_dir<<30)+ (COMM_gpio63_dir<<31);; порядок элементов сохраняется. */
/* Задаёт BKSD_GPADIR = (BKSD_gpio00_dir ) + (BKSD_gpio01_dir<<1) + (BKSD_gpio02_dir<<2) + (BKSD_gpio03_dir<<3) +; данные BKSD_GPADIR. */
#define BKSD_GPADIR (BKSD_gpio00_dir ) + (BKSD_gpio01_dir<<1) + (BKSD_gpio02_dir<<2) + (BKSD_gpio03_dir<<3) + \
(BKSD_gpio04_dir<<4) + (BKSD_gpio05_dir<<5) + (BKSD_gpio06_dir<<6) + (BKSD_gpio07_dir<<7) + \
(BKSD_gpio08_dir<<8) + (BKSD_gpio09_dir<<9) + (BKSD_gpio10_dir<<10)+ (BKSD_gpio11_dir<<11)+ \
(BKSD_gpio19_dir<<19)+ \
(BKSD_gpio20_dir<<20)+ (BKSD_gpio21_dir<<21)+ (BKSD_gpio22_dir<<22)+ (BKSD_gpio23_dir<<23)+ \
(BKSD_gpio24_dir<<24)+ (BKSD_gpio25_dir<<25)+ (BKSD_gpio26_dir<<26)+ (BKSD_gpio27_dir<<27);
(BKSD_gpio04_dir<<4) + (BKSD_gpio05_dir<<5) + (BKSD_gpio06_dir<<6) + (BKSD_gpio07_dir<<7) + /* Продолжает список аргументов, полей или выражение (BKSD_gpio04_dir<<4) + (BKSD_gpio05_dir<<5) + (BKSD_gpio06_dir<<6) + (BKSD_gpio07_dir<<7) +; порядок элементов сохраняется. */ \
(BKSD_gpio08_dir<<8) + (BKSD_gpio09_dir<<9) + (BKSD_gpio10_dir<<10)+ (BKSD_gpio11_dir<<11)+ /* Продолжает список аргументов, полей или выражение (BKSD_gpio08_dir<<8) + (BKSD_gpio09_dir<<9) + (BKSD_gpio10_dir<<10)+ (BKSD_gpio11_dir<<11)+; порядок элементов сохраняется. */ \
(BKSD_gpio19_dir<<19)+ /* Продолжает список аргументов, полей или выражение (BKSD_gpio19_dir<<19)+; порядок элементов сохраняется. */ \
(BKSD_gpio20_dir<<20)+ (BKSD_gpio21_dir<<21)+ (BKSD_gpio22_dir<<22)+ (BKSD_gpio23_dir<<23)+ /* Продолжает список аргументов, полей или выражение (BKSD_gpio20_dir<<20)+ (BKSD_gpio21_dir<<21)+ (BKSD_gpio22_dir<<22)+ (BKSD_gpio23_dir<<23)+; порядок элементов сохраняется. */ \
(BKSD_gpio24_dir<<24)+ (BKSD_gpio25_dir<<25)+ (BKSD_gpio26_dir<<26)+ (BKSD_gpio27_dir<<27); /* Продолжает список аргументов, полей или выражение (BKSD_gpio24_dir<<24)+ (BKSD_gpio25_dir<<25)+ (BKSD_gpio26_dir<<26)+ (BKSD_gpio27_dir<<27);; порядок элементов сохраняется. */
/* Задаёт BKSD_GPBDIR = (BKSD_gpio32_dir )+ (BKSD_gpio33_dir<<1) + (BKSD_gpio34_dir<<2 )+; данные BKSD_GPBDIR. */
#define BKSD_GPBDIR (BKSD_gpio32_dir )+ (BKSD_gpio33_dir<<1) + (BKSD_gpio34_dir<<2 )+ \
(BKSD_gpio48_dir<<16)+ (BKSD_gpio49_dir<<17)+ (BKSD_gpio50_dir<<18)+ (BKSD_gpio51_dir<<19)+ \
(BKSD_gpio52_dir<<20)+ (BKSD_gpio53_dir<<21)+ \
(BKSD_gpio58_dir<<26)+ (BKSD_gpio59_dir<<27)+ \
(BKSD_gpio60_dir<<28)+ (BKSD_gpio61_dir<<29)+ (BKSD_gpio62_dir<<30)+ (BKSD_gpio63_dir<<31);
(BKSD_gpio48_dir<<16)+ (BKSD_gpio49_dir<<17)+ (BKSD_gpio50_dir<<18)+ (BKSD_gpio51_dir<<19)+ /* Продолжает список аргументов, полей или выражение (BKSD_gpio48_dir<<16)+ (BKSD_gpio49_dir<<17)+ (BKSD_gpio50_dir<<18)+ (BKSD_gpio51_dir<<19)+; порядок элементов сохраняется. */ \
(BKSD_gpio52_dir<<20)+ (BKSD_gpio53_dir<<21)+ /* Продолжает список аргументов, полей или выражение (BKSD_gpio52_dir<<20)+ (BKSD_gpio53_dir<<21)+; порядок элементов сохраняется. */ \
(BKSD_gpio58_dir<<26)+ (BKSD_gpio59_dir<<27)+ /* Продолжает список аргументов, полей или выражение (BKSD_gpio58_dir<<26)+ (BKSD_gpio59_dir<<27)+; порядок элементов сохраняется. */ \
(BKSD_gpio60_dir<<28)+ (BKSD_gpio61_dir<<29)+ (BKSD_gpio62_dir<<30)+ (BKSD_gpio63_dir<<31); /* Продолжает список аргументов, полей или выражение (BKSD_gpio60_dir<<28)+ (BKSD_gpio61_dir<<29)+ (BKSD_gpio62_dir<<30)+ (BKSD_gpio63_dir<<31);; порядок элементов сохраняется. */
/* Задаёт BKST_GPADIR = (BKST_gpio00_dir ) + (BKST_gpio01_dir<<1) + (BKST_gpio02_dir<<2) + (BKST_gpio03_dir<<3) +; данные BKST_GPADIR. */
#define BKST_GPADIR (BKST_gpio00_dir ) + (BKST_gpio01_dir<<1) + (BKST_gpio02_dir<<2) + (BKST_gpio03_dir<<3) + \
(BKST_gpio04_dir<<4) + (BKST_gpio05_dir<<5) + (BKST_gpio06_dir<<6) + (BKST_gpio07_dir<<7) + \
(BKST_gpio08_dir<<8) + (BKST_gpio09_dir<<9) + (BKST_gpio10_dir<<10)+ (BKST_gpio11_dir<<11)+ \
(BKST_gpio19_dir<<19)+ \
(BKST_gpio20_dir<<20)+ (BKST_gpio21_dir<<21)+ (BKST_gpio22_dir<<22)+ (BKST_gpio23_dir<<23)+ \
(BKST_gpio24_dir<<24)+ (BKST_gpio25_dir<<25)+ (BKST_gpio26_dir<<26)+ (BKST_gpio27_dir<<27);
(BKST_gpio04_dir<<4) + (BKST_gpio05_dir<<5) + (BKST_gpio06_dir<<6) + (BKST_gpio07_dir<<7) + /* Продолжает список аргументов, полей или выражение (BKST_gpio04_dir<<4) + (BKST_gpio05_dir<<5) + (BKST_gpio06_dir<<6) + (BKST_gpio07_dir<<7) +; порядок элементов сохраняется. */ \
(BKST_gpio08_dir<<8) + (BKST_gpio09_dir<<9) + (BKST_gpio10_dir<<10)+ (BKST_gpio11_dir<<11)+ /* Продолжает список аргументов, полей или выражение (BKST_gpio08_dir<<8) + (BKST_gpio09_dir<<9) + (BKST_gpio10_dir<<10)+ (BKST_gpio11_dir<<11)+; порядок элементов сохраняется. */ \
(BKST_gpio19_dir<<19)+ /* Продолжает список аргументов, полей или выражение (BKST_gpio19_dir<<19)+; порядок элементов сохраняется. */ \
(BKST_gpio20_dir<<20)+ (BKST_gpio21_dir<<21)+ (BKST_gpio22_dir<<22)+ (BKST_gpio23_dir<<23)+ /* Продолжает список аргументов, полей или выражение (BKST_gpio20_dir<<20)+ (BKST_gpio21_dir<<21)+ (BKST_gpio22_dir<<22)+ (BKST_gpio23_dir<<23)+; порядок элементов сохраняется. */ \
(BKST_gpio24_dir<<24)+ (BKST_gpio25_dir<<25)+ (BKST_gpio26_dir<<26)+ (BKST_gpio27_dir<<27); /* Продолжает список аргументов, полей или выражение (BKST_gpio24_dir<<24)+ (BKST_gpio25_dir<<25)+ (BKST_gpio26_dir<<26)+ (BKST_gpio27_dir<<27);; порядок элементов сохраняется. */
/* Задаёт BKST_GPBDIR = (BKST_gpio32_dir )+ (BKST_gpio33_dir<<1) + (BKST_gpio34_dir<<2 )+; данные BKST_GPBDIR. */
#define BKST_GPBDIR (BKST_gpio32_dir )+ (BKST_gpio33_dir<<1) + (BKST_gpio34_dir<<2 )+ \
(BKST_gpio48_dir<<16)+ (BKST_gpio49_dir<<17)+ (BKST_gpio50_dir<<18)+ (BKST_gpio51_dir<<19)+ \
(BKST_gpio52_dir<<20)+ (BKST_gpio53_dir<<21)+ \
(BKST_gpio58_dir<<26)+ (BKST_gpio59_dir<<27)+ \
(BKST_gpio60_dir<<28)+ (BKST_gpio61_dir<<29)+ (BKST_gpio62_dir<<30)+ (BKST_gpio63_dir<<31);
(BKST_gpio48_dir<<16)+ (BKST_gpio49_dir<<17)+ (BKST_gpio50_dir<<18)+ (BKST_gpio51_dir<<19)+ /* Продолжает список аргументов, полей или выражение (BKST_gpio48_dir<<16)+ (BKST_gpio49_dir<<17)+ (BKST_gpio50_dir<<18)+ (BKST_gpio51_dir<<19)+; порядок элементов сохраняется. */ \
(BKST_gpio52_dir<<20)+ (BKST_gpio53_dir<<21)+ /* Продолжает список аргументов, полей или выражение (BKST_gpio52_dir<<20)+ (BKST_gpio53_dir<<21)+; порядок элементов сохраняется. */ \
(BKST_gpio58_dir<<26)+ (BKST_gpio59_dir<<27)+ /* Продолжает список аргументов, полей или выражение (BKST_gpio58_dir<<26)+ (BKST_gpio59_dir<<27)+; порядок элементов сохраняется. */ \
(BKST_gpio60_dir<<28)+ (BKST_gpio61_dir<<29)+ (BKST_gpio62_dir<<30)+ (BKST_gpio63_dir<<31); /* Продолжает список аргументов, полей или выражение (BKST_gpio60_dir<<28)+ (BKST_gpio61_dir<<29)+ (BKST_gpio62_dir<<30)+ (BKST_gpio63_dir<<31);; порядок элементов сохраняется. */
/* Задаёт PULT_GPADIR = (PULT_gpio00_dir ) + (PULT_gpio01_dir<<1) + (PULT_gpio02_dir<<2) + (PULT_gpio03_dir<<3) +; данные PULT_GPADIR. */
#define PULT_GPADIR (PULT_gpio00_dir ) + (PULT_gpio01_dir<<1) + (PULT_gpio02_dir<<2) + (PULT_gpio03_dir<<3) + \
(PULT_gpio04_dir<<4) + (PULT_gpio05_dir<<5) + (PULT_gpio06_dir<<6) + (PULT_gpio07_dir<<7) + \
(PULT_gpio08_dir<<8) + (PULT_gpio09_dir<<9) + (PULT_gpio10_dir<<10)+ (PULT_gpio11_dir<<11)+ \
(PULT_gpio19_dir<<19)+ \
(PULT_gpio20_dir<<20)+ (PULT_gpio21_dir<<21)+ (PULT_gpio22_dir<<22)+ (PULT_gpio23_dir<<23)+ \
(PULT_gpio24_dir<<24)+ (PULT_gpio25_dir<<25)+ (PULT_gpio26_dir<<26)+ (PULT_gpio27_dir<<27);
(PULT_gpio04_dir<<4) + (PULT_gpio05_dir<<5) + (PULT_gpio06_dir<<6) + (PULT_gpio07_dir<<7) + /* Продолжает список аргументов, полей или выражение (PULT_gpio04_dir<<4) + (PULT_gpio05_dir<<5) + (PULT_gpio06_dir<<6) + (PULT_gpio07_dir<<7) +; порядок элементов сохраняется. */ \
(PULT_gpio08_dir<<8) + (PULT_gpio09_dir<<9) + (PULT_gpio10_dir<<10)+ (PULT_gpio11_dir<<11)+ /* Продолжает список аргументов, полей или выражение (PULT_gpio08_dir<<8) + (PULT_gpio09_dir<<9) + (PULT_gpio10_dir<<10)+ (PULT_gpio11_dir<<11)+; порядок элементов сохраняется. */ \
(PULT_gpio19_dir<<19)+ /* Продолжает список аргументов, полей или выражение (PULT_gpio19_dir<<19)+; порядок элементов сохраняется. */ \
(PULT_gpio20_dir<<20)+ (PULT_gpio21_dir<<21)+ (PULT_gpio22_dir<<22)+ (PULT_gpio23_dir<<23)+ /* Продолжает список аргументов, полей или выражение (PULT_gpio20_dir<<20)+ (PULT_gpio21_dir<<21)+ (PULT_gpio22_dir<<22)+ (PULT_gpio23_dir<<23)+; порядок элементов сохраняется. */ \
(PULT_gpio24_dir<<24)+ (PULT_gpio25_dir<<25)+ (PULT_gpio26_dir<<26)+ (PULT_gpio27_dir<<27); /* Продолжает список аргументов, полей или выражение (PULT_gpio24_dir<<24)+ (PULT_gpio25_dir<<25)+ (PULT_gpio26_dir<<26)+ (PULT_gpio27_dir<<27);; порядок элементов сохраняется. */
/* Задаёт PULT_GPBDIR = (PULT_gpio32_dir )+ (PULT_gpio33_dir<<1) + (PULT_gpio34_dir<<2 )+; данные PULT_GPBDIR. */
#define PULT_GPBDIR (PULT_gpio32_dir )+ (PULT_gpio33_dir<<1) + (PULT_gpio34_dir<<2 )+ \
(PULT_gpio48_dir<<16)+ (PULT_gpio49_dir<<17)+ (PULT_gpio50_dir<<18)+ (PULT_gpio51_dir<<19)+ \
(PULT_gpio52_dir<<20)+ (PULT_gpio53_dir<<21)+ \
(PULT_gpio58_dir<<26)+ (PULT_gpio59_dir<<27)+ \
(PULT_gpio60_dir<<28)+ (PULT_gpio61_dir<<29)+ (PULT_gpio62_dir<<30)+ (PULT_gpio63_dir<<31);
(PULT_gpio48_dir<<16)+ (PULT_gpio49_dir<<17)+ (PULT_gpio50_dir<<18)+ (PULT_gpio51_dir<<19)+ /* Продолжает список аргументов, полей или выражение (PULT_gpio48_dir<<16)+ (PULT_gpio49_dir<<17)+ (PULT_gpio50_dir<<18)+ (PULT_gpio51_dir<<19)+; порядок элементов сохраняется. */ \
(PULT_gpio52_dir<<20)+ (PULT_gpio53_dir<<21)+ /* Продолжает список аргументов, полей или выражение (PULT_gpio52_dir<<20)+ (PULT_gpio53_dir<<21)+; порядок элементов сохраняется. */ \
(PULT_gpio58_dir<<26)+ (PULT_gpio59_dir<<27)+ /* Продолжает список аргументов, полей или выражение (PULT_gpio58_dir<<26)+ (PULT_gpio59_dir<<27)+; порядок элементов сохраняется. */ \
(PULT_gpio60_dir<<28)+ (PULT_gpio61_dir<<29)+ (PULT_gpio62_dir<<30)+ (PULT_gpio63_dir<<31); /* Продолжает список аргументов, полей или выражение (PULT_gpio60_dir<<28)+ (PULT_gpio61_dir<<29)+ (PULT_gpio62_dir<<30)+ (PULT_gpio63_dir<<31);; порядок элементов сохраняется. */
/* Задаёт PLT2_GPADIR = (PLT2_gpio00_dir ) + (PLT2_gpio01_dir<<1) + (PLT2_gpio02_dir<<2) + (PLT2_gpio03_dir<<3) +; данные PLT2_GPADIR. */
#define PLT2_GPADIR (PLT2_gpio00_dir ) + (PLT2_gpio01_dir<<1) + (PLT2_gpio02_dir<<2) + (PLT2_gpio03_dir<<3) + \
(PLT2_gpio04_dir<<4) + (PLT2_gpio05_dir<<5) + (PLT2_gpio06_dir<<6) + (PLT2_gpio07_dir<<7) + \
(PLT2_gpio08_dir<<8) + (PLT2_gpio09_dir<<9) + (PLT2_gpio10_dir<<10)+ (PLT2_gpio11_dir<<11)+ \
(PLT2_gpio19_dir<<19)+ \
(PLT2_gpio20_dir<<20)+ (PLT2_gpio21_dir<<21)+ (PLT2_gpio22_dir<<22)+ (PLT2_gpio23_dir<<23)+ \
(PLT2_gpio24_dir<<24)+ (PLT2_gpio25_dir<<25)+ (PLT2_gpio26_dir<<26)+ (PLT2_gpio27_dir<<27);
(PLT2_gpio04_dir<<4) + (PLT2_gpio05_dir<<5) + (PLT2_gpio06_dir<<6) + (PLT2_gpio07_dir<<7) + /* Продолжает список аргументов, полей или выражение (PLT2_gpio04_dir<<4) + (PLT2_gpio05_dir<<5) + (PLT2_gpio06_dir<<6) + (PLT2_gpio07_dir<<7) +; порядок элементов сохраняется. */ \
(PLT2_gpio08_dir<<8) + (PLT2_gpio09_dir<<9) + (PLT2_gpio10_dir<<10)+ (PLT2_gpio11_dir<<11)+ /* Продолжает список аргументов, полей или выражение (PLT2_gpio08_dir<<8) + (PLT2_gpio09_dir<<9) + (PLT2_gpio10_dir<<10)+ (PLT2_gpio11_dir<<11)+; порядок элементов сохраняется. */ \
(PLT2_gpio19_dir<<19)+ /* Продолжает список аргументов, полей или выражение (PLT2_gpio19_dir<<19)+; порядок элементов сохраняется. */ \
(PLT2_gpio20_dir<<20)+ (PLT2_gpio21_dir<<21)+ (PLT2_gpio22_dir<<22)+ (PLT2_gpio23_dir<<23)+ /* Продолжает список аргументов, полей или выражение (PLT2_gpio20_dir<<20)+ (PLT2_gpio21_dir<<21)+ (PLT2_gpio22_dir<<22)+ (PLT2_gpio23_dir<<23)+; порядок элементов сохраняется. */ \
(PLT2_gpio24_dir<<24)+ (PLT2_gpio25_dir<<25)+ (PLT2_gpio26_dir<<26)+ (PLT2_gpio27_dir<<27); /* Продолжает список аргументов, полей или выражение (PLT2_gpio24_dir<<24)+ (PLT2_gpio25_dir<<25)+ (PLT2_gpio26_dir<<26)+ (PLT2_gpio27_dir<<27);; порядок элементов сохраняется. */
/* Задаёт PLT2_GPBDIR = (PLT2_gpio32_dir )+ (PLT2_gpio33_dir<<1) + (PLT2_gpio34_dir<<2 )+; данные PLT2_GPBDIR. */
#define PLT2_GPBDIR (PLT2_gpio32_dir )+ (PLT2_gpio33_dir<<1) + (PLT2_gpio34_dir<<2 )+ \
(PLT2_gpio48_dir<<16)+ (PLT2_gpio49_dir<<17)+ (PLT2_gpio50_dir<<18)+ (PLT2_gpio51_dir<<19)+ \
(PLT2_gpio52_dir<<20)+ (PLT2_gpio53_dir<<21)+ \
(PLT2_gpio58_dir<<26)+ (PLT2_gpio59_dir<<27)+ \
(PLT2_gpio60_dir<<28)+ (PLT2_gpio61_dir<<29)+ (PLT2_gpio62_dir<<30)+ (PLT2_gpio63_dir<<31);
(PLT2_gpio48_dir<<16)+ (PLT2_gpio49_dir<<17)+ (PLT2_gpio50_dir<<18)+ (PLT2_gpio51_dir<<19)+ /* Продолжает список аргументов, полей или выражение (PLT2_gpio48_dir<<16)+ (PLT2_gpio49_dir<<17)+ (PLT2_gpio50_dir<<18)+ (PLT2_gpio51_dir<<19)+; порядок элементов сохраняется. */ \
(PLT2_gpio52_dir<<20)+ (PLT2_gpio53_dir<<21)+ /* Продолжает список аргументов, полей или выражение (PLT2_gpio52_dir<<20)+ (PLT2_gpio53_dir<<21)+; порядок элементов сохраняется. */ \
(PLT2_gpio58_dir<<26)+ (PLT2_gpio59_dir<<27)+ /* Продолжает список аргументов, полей или выражение (PLT2_gpio58_dir<<26)+ (PLT2_gpio59_dir<<27)+; порядок элементов сохраняется. */ \
(PLT2_gpio60_dir<<28)+ (PLT2_gpio61_dir<<29)+ (PLT2_gpio62_dir<<30)+ (PLT2_gpio63_dir<<31); /* Продолжает список аргументов, полей или выражение (PLT2_gpio60_dir<<28)+ (PLT2_gpio61_dir<<29)+ (PLT2_gpio62_dir<<30)+ (PLT2_gpio63_dir<<31);; порядок элементов сохраняется. */
/* Задаёт SHKF_GPADIR = (SHKF_gpio00_dir ) + (SHKF_gpio01_dir<<1) + (SHKF_gpio02_dir<<2) + (SHKF_gpio03_dir<<3) +; данные SHKF_GPADIR. */
#define SHKF_GPADIR (SHKF_gpio00_dir ) + (SHKF_gpio01_dir<<1) + (SHKF_gpio02_dir<<2) + (SHKF_gpio03_dir<<3) + \
(SHKF_gpio04_dir<<4) + (SHKF_gpio05_dir<<5) + (SHKF_gpio06_dir<<6) + (SHKF_gpio07_dir<<7) + \
(SHKF_gpio08_dir<<8) + (SHKF_gpio09_dir<<9) + (SHKF_gpio10_dir<<10)+ (SHKF_gpio11_dir<<11)+ \
(SHKF_gpio19_dir<<19)+ \
(SHKF_gpio20_dir<<20)+ (SHKF_gpio21_dir<<21)+ (SHKF_gpio22_dir<<22)+ (SHKF_gpio23_dir<<23)+ \
(SHKF_gpio24_dir<<24)+ (SHKF_gpio25_dir<<25)+ (SHKF_gpio26_dir<<26)+ (SHKF_gpio27_dir<<27);
(SHKF_gpio04_dir<<4) + (SHKF_gpio05_dir<<5) + (SHKF_gpio06_dir<<6) + (SHKF_gpio07_dir<<7) + /* Продолжает список аргументов, полей или выражение (SHKF_gpio04_dir<<4) + (SHKF_gpio05_dir<<5) + (SHKF_gpio06_dir<<6) + (SHKF_gpio07_dir<<7) +; порядок элементов сохраняется. */ \
(SHKF_gpio08_dir<<8) + (SHKF_gpio09_dir<<9) + (SHKF_gpio10_dir<<10)+ (SHKF_gpio11_dir<<11)+ /* Продолжает список аргументов, полей или выражение (SHKF_gpio08_dir<<8) + (SHKF_gpio09_dir<<9) + (SHKF_gpio10_dir<<10)+ (SHKF_gpio11_dir<<11)+; порядок элементов сохраняется. */ \
(SHKF_gpio19_dir<<19)+ /* Продолжает список аргументов, полей или выражение (SHKF_gpio19_dir<<19)+; порядок элементов сохраняется. */ \
(SHKF_gpio20_dir<<20)+ (SHKF_gpio21_dir<<21)+ (SHKF_gpio22_dir<<22)+ (SHKF_gpio23_dir<<23)+ /* Продолжает список аргументов, полей или выражение (SHKF_gpio20_dir<<20)+ (SHKF_gpio21_dir<<21)+ (SHKF_gpio22_dir<<22)+ (SHKF_gpio23_dir<<23)+; порядок элементов сохраняется. */ \
(SHKF_gpio24_dir<<24)+ (SHKF_gpio25_dir<<25)+ (SHKF_gpio26_dir<<26)+ (SHKF_gpio27_dir<<27); /* Продолжает список аргументов, полей или выражение (SHKF_gpio24_dir<<24)+ (SHKF_gpio25_dir<<25)+ (SHKF_gpio26_dir<<26)+ (SHKF_gpio27_dir<<27);; порядок элементов сохраняется. */
/* Задаёт SHKF_GPBDIR = (SHKF_gpio32_dir )+ (SHKF_gpio33_dir<<1) + (SHKF_gpio34_dir<<2 )+; данные SHKF_GPBDIR. */
#define SHKF_GPBDIR (SHKF_gpio32_dir )+ (SHKF_gpio33_dir<<1) + (SHKF_gpio34_dir<<2 )+ \
(SHKF_gpio48_dir<<16)+ (SHKF_gpio49_dir<<17)+ (SHKF_gpio50_dir<<18)+ (SHKF_gpio51_dir<<19)+ \
(SHKF_gpio52_dir<<20)+ (SHKF_gpio53_dir<<21)+ \
(SHKF_gpio58_dir<<26)+ (SHKF_gpio59_dir<<27)+ \
(SHKF_gpio60_dir<<28)+ (SHKF_gpio61_dir<<29)+ (SHKF_gpio62_dir<<30)+ (SHKF_gpio63_dir<<31);
(SHKF_gpio48_dir<<16)+ (SHKF_gpio49_dir<<17)+ (SHKF_gpio50_dir<<18)+ (SHKF_gpio51_dir<<19)+ /* Продолжает список аргументов, полей или выражение (SHKF_gpio48_dir<<16)+ (SHKF_gpio49_dir<<17)+ (SHKF_gpio50_dir<<18)+ (SHKF_gpio51_dir<<19)+; порядок элементов сохраняется. */ \
(SHKF_gpio52_dir<<20)+ (SHKF_gpio53_dir<<21)+ /* Продолжает список аргументов, полей или выражение (SHKF_gpio52_dir<<20)+ (SHKF_gpio53_dir<<21)+; порядок элементов сохраняется. */ \
(SHKF_gpio58_dir<<26)+ (SHKF_gpio59_dir<<27)+ /* Продолжает список аргументов, полей или выражение (SHKF_gpio58_dir<<26)+ (SHKF_gpio59_dir<<27)+; порядок элементов сохраняется. */ \
(SHKF_gpio60_dir<<28)+ (SHKF_gpio61_dir<<29)+ (SHKF_gpio62_dir<<30)+ (SHKF_gpio63_dir<<31); /* Продолжает список аргументов, полей или выражение (SHKF_gpio60_dir<<28)+ (SHKF_gpio61_dir<<29)+ (SHKF_gpio62_dir<<30)+ (SHKF_gpio63_dir<<31);; порядок элементов сохраняется. */
/* Задаёт LOAD_GPADIR = (LOAD_gpio00_dir ) + (LOAD_gpio01_dir<<1) + (LOAD_gpio02_dir<<2) + (LOAD_gpio03_dir<<3) +; данные LOAD_GPADIR. */
#define LOAD_GPADIR (LOAD_gpio00_dir ) + (LOAD_gpio01_dir<<1) + (LOAD_gpio02_dir<<2) + (LOAD_gpio03_dir<<3) + \
(LOAD_gpio04_dir<<4) + (LOAD_gpio05_dir<<5) + (LOAD_gpio06_dir<<6) + (LOAD_gpio07_dir<<7) + \
(LOAD_gpio08_dir<<8) + (LOAD_gpio09_dir<<9) + (LOAD_gpio10_dir<<10)+ (LOAD_gpio11_dir<<11)+ \
(LOAD_gpio19_dir<<19)+ \
(LOAD_gpio20_dir<<20)+ (LOAD_gpio21_dir<<21)+ (LOAD_gpio22_dir<<22)+ (LOAD_gpio23_dir<<23)+ \
(LOAD_gpio24_dir<<24)+ (LOAD_gpio25_dir<<25)+ (LOAD_gpio26_dir<<26)+ (LOAD_gpio27_dir<<27);
(LOAD_gpio04_dir<<4) + (LOAD_gpio05_dir<<5) + (LOAD_gpio06_dir<<6) + (LOAD_gpio07_dir<<7) + /* Продолжает список аргументов, полей или выражение (LOAD_gpio04_dir<<4) + (LOAD_gpio05_dir<<5) + (LOAD_gpio06_dir<<6) + (LOAD_gpio07_dir<<7) +; порядок элементов сохраняется. */ \
(LOAD_gpio08_dir<<8) + (LOAD_gpio09_dir<<9) + (LOAD_gpio10_dir<<10)+ (LOAD_gpio11_dir<<11)+ /* Продолжает список аргументов, полей или выражение (LOAD_gpio08_dir<<8) + (LOAD_gpio09_dir<<9) + (LOAD_gpio10_dir<<10)+ (LOAD_gpio11_dir<<11)+; порядок элементов сохраняется. */ \
(LOAD_gpio19_dir<<19)+ /* Продолжает список аргументов, полей или выражение (LOAD_gpio19_dir<<19)+; порядок элементов сохраняется. */ \
(LOAD_gpio20_dir<<20)+ (LOAD_gpio21_dir<<21)+ (LOAD_gpio22_dir<<22)+ (LOAD_gpio23_dir<<23)+ /* Продолжает список аргументов, полей или выражение (LOAD_gpio20_dir<<20)+ (LOAD_gpio21_dir<<21)+ (LOAD_gpio22_dir<<22)+ (LOAD_gpio23_dir<<23)+; порядок элементов сохраняется. */ \
(LOAD_gpio24_dir<<24)+ (LOAD_gpio25_dir<<25)+ (LOAD_gpio26_dir<<26)+ (LOAD_gpio27_dir<<27); /* Продолжает список аргументов, полей или выражение (LOAD_gpio24_dir<<24)+ (LOAD_gpio25_dir<<25)+ (LOAD_gpio26_dir<<26)+ (LOAD_gpio27_dir<<27);; порядок элементов сохраняется. */
/* Задаёт LOAD_GPBDIR = (LOAD_gpio32_dir )+ (LOAD_gpio33_dir<<1) + (LOAD_gpio34_dir<<2 )+; данные LOAD_GPBDIR. */
#define LOAD_GPBDIR (LOAD_gpio32_dir )+ (LOAD_gpio33_dir<<1) + (LOAD_gpio34_dir<<2 )+ \
(LOAD_gpio48_dir<<16)+ (LOAD_gpio49_dir<<17)+ (LOAD_gpio50_dir<<18)+ (LOAD_gpio51_dir<<19)+ \
(LOAD_gpio52_dir<<20)+ (LOAD_gpio53_dir<<21)+ \
(LOAD_gpio58_dir<<26)+ (LOAD_gpio59_dir<<27)+ \
(LOAD_gpio60_dir<<28)+ (LOAD_gpio61_dir<<29)+ (LOAD_gpio62_dir<<30)+ (LOAD_gpio63_dir<<31);
(LOAD_gpio48_dir<<16)+ (LOAD_gpio49_dir<<17)+ (LOAD_gpio50_dir<<18)+ (LOAD_gpio51_dir<<19)+ /* Продолжает список аргументов, полей или выражение (LOAD_gpio48_dir<<16)+ (LOAD_gpio49_dir<<17)+ (LOAD_gpio50_dir<<18)+ (LOAD_gpio51_dir<<19)+; порядок элементов сохраняется. */ \
(LOAD_gpio52_dir<<20)+ (LOAD_gpio53_dir<<21)+ /* Продолжает список аргументов, полей или выражение (LOAD_gpio52_dir<<20)+ (LOAD_gpio53_dir<<21)+; порядок элементов сохраняется. */ \
(LOAD_gpio58_dir<<26)+ (LOAD_gpio59_dir<<27)+ /* Продолжает список аргументов, полей или выражение (LOAD_gpio58_dir<<26)+ (LOAD_gpio59_dir<<27)+; порядок элементов сохраняется. */ \
(LOAD_gpio60_dir<<28)+ (LOAD_gpio61_dir<<29)+ (LOAD_gpio62_dir<<30)+ (LOAD_gpio63_dir<<31); /* Продолжает список аргументов, полей или выражение (LOAD_gpio60_dir<<28)+ (LOAD_gpio61_dir<<29)+ (LOAD_gpio62_dir<<30)+ (LOAD_gpio63_dir<<31);; порядок элементов сохраняется. */
//===========================================================================
// No more.

View File

@@ -1,143 +1,225 @@
/* Приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: _RS485 ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef _RS485
/* Определяет защитный символ или переключатель _RS485 для последующей компиляции. */
#define _RS485
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
extern "C" {
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
//#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
//#include "DSP2833x_Sci.h"
//#include "cntrl_adr.h"
//#include "params.h"
/* Начинает условие: RS232_USE_FIFO ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef RS232_USE_FIFO
/* Задаёт RS232_USE_FIFO = 1; выбор FIFO для COM_1; COM_2 сохраняет отдельную логику RS485. */
#define RS232_USE_FIFO 1
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Задаёт COM_1 = 1; номер первого последовательного порта, SCI-A. */
#define COM_1 1
/* Задаёт COM_2 = 2; номер второго последовательного порта, SCI-B. */
#define COM_2 2
/* Задаёт MAX_RECEIVE_LENGTH = 400; MAX приём длина. */
#define MAX_RECEIVE_LENGTH 400 // 80 //150
/* Задаёт MAX_SEND_LENGTH = 400; MAX SEND длина. */
#define MAX_SEND_LENGTH 400 //150
#define TIME_WAIT_RS_BYTE_OUT 1000
/* Задаёт TIME_WAIT_RS_BYTE_OUT = 1000; данные TIME_WAIT_RS_BYTE_OUT. */
#define TIME_WAIT_RS_BYTE_OUT 1000
/* Задаёт TIME_WAIT_RS_LOST_BYTE = 100; данные TIME_WAIT_RS_LOST_BYTE. */
#define TIME_WAIT_RS_LOST_BYTE 100
/* Задаёт RS_TIME_OUT = (SECOND*10); данные RS_TIME_OUT. */
#define RS_TIME_OUT (SECOND*10)
/* Задаёт Rec_Bloc_Begin = 0x200000; данные Rec_Bloc_Begin. */
#define Rec_Bloc_Begin 0x200000
/* Задаёт Rec_Bloc_End = 0x2F0000; данные Rec_Bloc_End. */
#define Rec_Bloc_End 0x2F0000
/* Задаёт Rec_Bloc_Length = (Rec_Bloc_End-Rec_Bloc_Begin); Rec Bloc длина. */
#define Rec_Bloc_Length (Rec_Bloc_End-Rec_Bloc_Begin)
/* Message RS declaration */
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef struct
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Продолжает список аргументов, полей или выражение volatile struct SCI_REGS *SciRegs;; порядок элементов сохраняется. */
volatile struct SCI_REGS *SciRegs;
unsigned int commnumber; // Номер порта
unsigned long RS_Length; // Длина пакета
/* Объявляет commnumber — данные commnumber. */
unsigned int commnumber; // Номер порта
/* Объявляет RS_Length — RS длина. */
unsigned long RS_Length; // Длина пакета
unsigned int *pRS_RecvPtr; // Буфер приема
unsigned int *pRS_SendPtr; // Буфер посылки
unsigned int *pRecvPtr;
/* Объявляет pRS_RecvPtr — данные pRS_RecvPtr. Хранит указатель на данные. */
unsigned int *pRS_RecvPtr; // Буфер приема
/* Объявляет pRS_SendPtr — данные pRS_SendPtr. Хранит указатель на данные. */
unsigned int *pRS_SendPtr; // Буфер посылки
/* Объявляет pRecvPtr — данные pRecvPtr. Хранит указатель на данные. */
unsigned int *pRecvPtr;
unsigned int RS_PrevCmd; // Предыдущаа комманда
unsigned int RS_Cmd; // Текущаа комманда
unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Заголовок
unsigned int flag_TIMEOUT_to_Send; // Флаг ожиданиа таймаута на отсылку
unsigned int flag_TIMEOUT_to_Receive; // Флаг ожиданиа таймаута на прием
unsigned int RS_DataReady; // Флаг готовности RS данных
unsigned int buffer[MAX_SEND_LENGTH]; // Буфер дла отсылки по RS
/* Объявляет RS_PrevCmd — данные RS_PrevCmd. */
unsigned int RS_PrevCmd; // Предыдущаа комманда
/* Объявляет RS_Cmd — данные RS_Cmd. */
unsigned int RS_Cmd; // Текущаа комманда
/* Объявляет RS_Header — данные RS_Header. */
unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Заголовок
/* Объявляет flag_TIMEOUT_to_Send — флаг TIMEOUT to Send. */
unsigned int flag_TIMEOUT_to_Send; // Флаг ожиданиа таймаута на отсылку
/* Объявляет flag_TIMEOUT_to_Receive — флаг TIMEOUT to приём. */
unsigned int flag_TIMEOUT_to_Receive; // Флаг ожиданиа таймаута на прием
/* Объявляет RS_DataReady — RS данные Ready. */
unsigned int RS_DataReady; // Флаг готовности RS данных
/* Объявляет buffer — буфер. */
unsigned int buffer[MAX_SEND_LENGTH]; // Буфер дла отсылки по RS
unsigned int addr_answer; // адрес куда отвечать в режиме ведущего
unsigned int addr_recive; // адрес по которому нас запросили
unsigned int flag_LEADING; // Флаг режима контроллера (по умолчанию ведомый)
unsigned long RS_RecvLen;
unsigned long RS_SLength; // Длина пакета дла посылки
unsigned long RS_SendLen; // Количество байт уже передали
char RS_SendBlockMode; // Режим передачи
char RS_Flag9bit; // дла RS485????????
int BS_LoadOK; // Флаг успешности приема блока
/* Объявляет addr_answer — данные addr_answer. */
unsigned int addr_answer; // адрес куда отвечать в режиме ведущего
/* Объявляет addr_recive — данные addr_recive. */
unsigned int addr_recive; // адрес по которому нас запросили
/* Объявляет flag_LEADING — флаг LEADING. */
unsigned int flag_LEADING; // Флаг режима контроллера (по умолчанию ведомый)
/* Объявляет RS_RecvLen — данные RS_RecvLen. */
unsigned long RS_RecvLen;
/* Объявляет RS_SLength — RS S длина. */
unsigned long RS_SLength; // Длина пакета дла посылки
/* Объявляет RS_SendLen — данные RS_SendLen. */
unsigned long RS_SendLen; // Количество байт уже передали
/* Объявляет RS_SendBlockMode — RS Send Block режим. */
char RS_SendBlockMode; // Режим передачи
/* Объявляет RS_Flag9bit — RS флаг 9 бит. */
char RS_Flag9bit; // дла RS485????????
/* Объявляет BS_LoadOK — данные BS_LoadOK. */
int BS_LoadOK; // Флаг успешности приема блока
/* Объявляет RS_FlagBegin — RS флаг Begin. */
int RS_FlagBegin;
/* Объявляет RS_HeaderCnt — данные RS_HeaderCnt. */
int RS_HeaderCnt;
/* Объявляет RS_FlagSkiping — RS флаг Skiping. */
int RS_FlagSkiping;
/* Объявляет curr_baud — curr скорость передачи. */
unsigned long curr_baud;
/* Объявляет time_wait_rs_out — данные time_wait_rs_out. */
unsigned long time_wait_rs_out;
/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */
#if RS232_USE_FIFO
/* Объявляет fifo_tx_active — данные fifo_tx_active; fifo_rx_guard — данные fifo_rx_guard. volatile требует фактического чтения или записи при каждом доступе. */
volatile unsigned int fifo_tx_active, fifo_rx_guard;
/* Объявляет fifo_rx_errors — данные fifo_rx_errors; fifo_overflows — данные fifo_overflows. volatile требует фактического чтения или записи при каждом доступе. */
volatile unsigned long fifo_rx_errors, fifo_overflows;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
} RS_DATA;
/* Продолжает список аргументов, полей или выражение } RS_DATA;; порядок элементов сохраняется. */
} RS_DATA;
/* Объявляет rs_a — данные rs_a; rs_b — данные rs_b. Память определена в другом модуле. */
extern RS_DATA rs_a,rs_b;
/* Объявляет . Память определена в другом модуле. */
extern unsigned int
RS_Len[70]; /* Действительнаа длина команды (отладочной) + 1 */
RS_Len[70]; /* Действительнаа длина команды (отладочной) + 1 */ /* Продолжает список аргументов, полей или выражение RS_Len[70];; порядок элементов сохраняется. */
/* Объявляет обработчик RSA_RX_Handler; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void RSA_RX_Handler(void);
/* Объявляет обработчик RSA_TX_Handler; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void RSA_TX_Handler(void);
/* Объявляет обработчик RSB_RX_Handler; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void RSB_RX_Handler(void);
/* Объявляет обработчик RSB_TX_Handler; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void RSB_TX_Handler(void);
/* иницилизациа переменных rs_a,rs_b*/
/* иницилизациа переменных rs_a,rs_b*/
/* Инициализирует структуры обоих SCI и таблицу длин команд. */
void create_uart_vars(char size_cmd15);
/** Повторнаа инициализациа последовательного порта, используетса после подвиса */
/** Настройка режима приема/передачи */
/** Повторнаа инициализациа последовательного порта, используетса после подвиса */
/** Настройка режима приема/передачи */
/* Объявляет интерфейс функции RS_SetBitMode; реализация вызывается через этот прототип. */
void RS_SetBitMode(RS_DATA *rs_arr, int n);
/** Посылка блока байтов.
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
@param buf адрес массива
@param len количество байт
/** Посылка блока байтов.
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
@param buf адрес массива
@param len количество байт
@see RS_BSend, RS_TRANSMIT_INTR
*/
/* Передаёт массив слов через SCI в выбранном режиме упаковки. */
int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
/** Посылка блока упакованных байтов.
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
@param buf адрес массива
@param len количество 8-битных байт
/** Посылка блока упакованных байтов.
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
@param buf адрес массива
@param len количество 8-битных байт
@see RS_Send, RS_TRANSMIT_INTR
*/
/* Передаёт последовательность 8-битных октетов, упакованных в слова C28x. */
int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
/** Инициализациа последовательного порта */
void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - скорость линии в бодах */
/** Инициализациа последовательного порта */
void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - скорость линии в бодах */ /* Настраивает выбранный SCI, скорость и обработчики прерываний. */
/* Объявляет интерфейс функции RS_SetLineMode; реализация вызывается через этот прототип. */
void RS_SetLineMode(RS_DATA *rs_arr, int bit, char parity, int stop);
/* Объявляет интерфейс функции RS_SetLineSpeed; реализация вызывается через этот прототип. */
void RS_SetLineSpeed(RS_DATA *rs_arr, unsigned long speed);
// Transmit a character from the SCI'
/* Задаёт SCI_send = x->SciRegs->SCITXBUF=(unsigned char)(y); SCI send. */
#define SCI_send(x,y) x->SciRegs->SCITXBUF=(unsigned char)(y)
// Ожидание завершениа передачи UART
// Ожидание завершениа передачи UART
// wait for TRDY =1 for empty state
/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */
#if RS232_USE_FIFO
/* Ожидает завершения аппаратной передачи FIFO и сдвигового регистра SCI. */
void RS_FifoWait(RS_DATA *rs_arr);
/* Уменьшает защитную паузу RX FIFO по миллисекундному такту. */
void RS_FifoTick1ms(void);
/* Задаёт RS_Wait4OK = RS_FifoWait(x); данные RS_Wait4OK. */
#define RS_Wait4OK(x) RS_FifoWait(x)
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Задаёт RS_Wait4OK = while(!(x->SciRegs->SCICTL2.bit.TXEMPTY)); данные RS_Wait4OK. */
#define RS_Wait4OK(x) while(!(x->SciRegs->SCICTL2.bit.TXEMPTY))
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/** Переключение линии на прием */
/** Переключение линии на прием */
/* Задаёт RS_Line_to_receive = if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 1;; RS Line to приём. */
#define RS_Line_to_receive(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 1;
/** Переключение линии на передачу */
/** Переключение линии на передачу */
/* Задаёт RS_Line_to_send = if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 0;; данные RS_Line_to_send. */
#define RS_Line_to_send(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 0;
/** Разрешение прерываний по получению символа и ошибкам от UART */
/** Разрешение прерываний по получению символа и ошибкам от UART */
/* Задаёт enableUARTInt = x->SciRegs->SCICTL2.all=2; разрешение UART Int. */
#define enableUARTInt(x) x->SciRegs->SCICTL2.all=2
/* Задаёт enableUARTIntW = x->SciRegs->SCICTL2.all=1; разрешение UART Int W. */
#define enableUARTIntW(x) x->SciRegs->SCICTL2.all=1
/* Объявляет интерфейс функции clear_timer_rs_live; реализация вызывается через этот прототип. */
void clear_timer_rs_live(RS_DATA *rs_arr);
/* Объявляет интерфейс функции test_rs_live; реализация вызывается через этот прототип. */
void test_rs_live(RS_DATA *rs_arr);
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
#endif /* _RS485 */
#endif /* _RS485 */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */

View File

@@ -1,22 +1,39 @@
/* Коды и объявления команд последовательного загрузчика. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: _BIOS_DSP ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef _BIOS_DSP
/* Определяет защитный символ или переключатель _BIOS_DSP для последующей компиляции. */
#define _BIOS_DSP
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
extern "C" {
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Задаёт BM_PACKED = 1; данные BM_PACKED. */
#define BM_PACKED 1
/* Задаёт BM_CHAR32 = 0; данные BM_CHAR32. */
#define BM_CHAR32 0
/* Задаёт CHIEF = 1; данные CHIEF. */
#define CHIEF 1
/* Задаёт SLAVE = 0; данные SLAVE. */
#define SLAVE 0
/* Задаёт ADR_FOR_SPECIAL = 0x100; данные ADR_FOR_SPECIAL. */
#define ADR_FOR_SPECIAL 0x100
/* Задаёт CMD_MODBUS_3 = 3; данные CMD_MODBUS_3. */
#define CMD_MODBUS_3 3
/* Задаёт ANS_MODBUS_4 = 4; данные ANS_MODBUS_4. */
#define ANS_MODBUS_4 4
/* Задаёт CMD_MODBUS_15 = 5; данные CMD_MODBUS_15. */
#define CMD_MODBUS_15 5
/* Задаёт CMD_MODBUS_6 = 6; данные CMD_MODBUS_6. */
#define CMD_MODBUS_6 6
/* Задаёт ANS_MODBUS_6 = 7; данные ANS_MODBUS_6. */
#define ANS_MODBUS_6 7
/* Задаёт CMD_MODBUS_16 = 16; данные CMD_MODBUS_16. */
#define CMD_MODBUS_16 16
/*
@@ -27,85 +44,110 @@ CMD_MODBUS_3 = 3,
ANS_MODBUS_6 = 7,
CMD_MODBUS_16 = 16,
*/
/* Продолжает список аргументов, полей или выражение enum {; порядок элементов сохраняется. */
enum {
CMD_LOAD=51, CMD_UPLOAD, CMD_RUN, CMD_XFLASH, CMD_TFLASH,
/* Записывает CMD_LOAD значением 51, CMD_UPLOAD, CMD_RUN, CMD_XFLASH, CMD_TFLASH,; данные CMD_LOAD. */
CMD_LOAD=51, CMD_UPLOAD, CMD_RUN, CMD_XFLASH, CMD_TFLASH,
/* Продолжает список аргументов, полей или выражение CMD_PEEK, CMD_POKE, CMD_INITLOAD, CMD_INIT,CMD_EXTEND,; порядок элементов сохраняется. */
CMD_PEEK, CMD_POKE, CMD_INITLOAD, CMD_INIT,CMD_EXTEND,
/* Записывает CMD_VECTOR значением 61,; данные CMD_VECTOR. */
CMD_VECTOR=61,
/* Продолжает список аргументов, полей или выражение CMD_IMPULSE,; порядок элементов сохраняется. */
CMD_IMPULSE,
/* стандартные команды */
/* стандартные команды */
/* Записывает CMD_STD значением 65, CMD_STD_ANS; данные CMD_STD. */
CMD_STD=65, CMD_STD_ANS
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
};
/* Записывает false значением 0, true}; данные false. */
enum {false=0, true};
/** Возвращает номер комманды, если есть или -1 если транзакций не было */
/** Возвращает номер комманды, если есть или -1 если транзакций не было */
/* Объявляет интерфейс функции get_command; реализация вызывается через этот прототип. */
int get_command(RS_DATA *rs_arr);
/** Стандартный ответ, без параметров */
/** Стандартный ответ, без параметров */
/* Объявляет интерфейс функции Answer; реализация вызывается через этот прототип. */
void Answer(RS_DATA *rs_arr,int n);
/* начальные установки (не работает)*/
/* начальные установки (не работает)*/
/* Объявляет интерфейс функции init; реализация вызывается через этот прототип. */
void init(RS_DATA *rs_arr);
/**@name Комманды
* Комманды, вызываемые через последовательный канал*/
/**@name Комманды
* Комманды, вызываемые через последовательный канал*/
//@{
/** Инициировать загрузку блока.
Настраивает прием блока данных */
void initload(RS_DATA *rs_arr);
/** Инициировать загрузку блока.
Настраивает прием блока данных */
/* Объявляет интерфейс функции initload; реализация вызывается через этот прототип. */
void initload(RS_DATA *rs_arr);
/** Загрузка блока.
Вызываетса после загрузки блока через RS */
/** Загрузка блока.
Вызываетса после загрузки блока через RS */
/* Объявляет интерфейс функции load; реализация вызывается через этот прототип. */
void load(RS_DATA *rs_arr);
/** Выполнить программу в формате Serial Boot.
@precondition Должна быть произведена загрузка блока
Адрес программы беретса из заголовка и
сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load
/** Выполнить программу в формате Serial Boot.
@precondition Должна быть произведена загрузка блока
Адрес программы беретса из заголовка и
сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load
@see load */
void run (RS_DATA *rs_arr);
/* Объявляет интерфейс функции run; реализация вызывается через этот прототип. */
void run (RS_DATA *rs_arr);
/** Прочитать ачейку памати */
/** Прочитать ачейку памати */
/* Объявляет интерфейс функции peek; реализация вызывается через этот прототип. */
void peek(RS_DATA *rs_arr);
/** Записать в ачейку памати */
void poke(RS_DATA *rs_arr);
/** Записать в ачейку памати */
/* Объявляет интерфейс функции poke; реализация вызывается через этот прототип. */
void poke(RS_DATA *rs_arr);
/** Передать блок памати */
void upload(RS_DATA *rs_arr);
/** Передать блок памати */
/* Объявляет интерфейс функции upload; реализация вызывается через этот прототип. */
void upload(RS_DATA *rs_arr);
/** Прошить XILINX.
@precondition Должна быть произведена загрузка блока
Адрес и длина прошивки беретса из заголовка и
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load,
так же смотрит магическое слово в начале прошивки
/** Прошить XILINX.
@precondition Должна быть произведена загрузка блока
Адрес и длина прошивки беретса из заголовка и
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load,
так же смотрит магическое слово в начале прошивки
@see load */
void xflash(RS_DATA *rs_arr);
/* Объявляет интерфейс функции xflash; реализация вызывается через этот прототип. */
void xflash(RS_DATA *rs_arr);
/** Прошить TMS.
@precondition Должна быть произведена загрузка блока
Адрес и длина прошивки беретса из заголовка и
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
/** Прошить TMS.
@precondition Должна быть произведена загрузка блока
Адрес и длина прошивки беретса из заголовка и
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
@see load */
void tflash(RS_DATA *rs_arr);
/* Объявляет интерфейс функции tflash; реализация вызывается через этот прототип. */
void tflash(RS_DATA *rs_arr);
/* расширенные команды дла биоса */
/* расширенные команды дла биоса */
/* Объявляет интерфейс функции extendbios; реализация вызывается через этот прототип. */
void extendbios(RS_DATA *rs_arr);
/* Объявляет интерфейс функции write_memory; реализация вызывается через этот прототип. */
void write_memory(unsigned long addr, unsigned int data);
/* Объявляет интерфейс функции read_memory; реализация вызывается через этот прототип. */
unsigned int read_memory(unsigned long addr);
//@}
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
#endif/* _BIOS_DSP */
#endif/* _BIOS_DSP */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */

View File

@@ -1,69 +1,105 @@
/* Заводские калибровочные значения датчиков. Русские пояснения сохранены в UTF-8. */
/* Условие компиляции BALSAM == 167: выбранный блок включается в текущий вариант прошивки. */
#if BALSAM == 167 //-------------------------------------------------------------
/* Объявляет def_cal[][8] = {. Начальное значение задаётся справа от знака равенства. */
int def_cal[][8] = {
// ÁÊÑÑ òðàíñ 100 1 100 2 150 1 150 2
0, 0, 0, 0, 455, 441, 2459, 2392, // Áîðò 0
0, 0, 0, 0, 462, 439, 2442, 2400, // Áîðò 1
// БКСС транс 100 1 100 2 150 1 150 2
/* Элемент постоянной таблицы 0, 0, 0, 0, 455, 441, 2459, 2392,; порядок значений совпадает с порядком индексов потребителя. */
0, 0, 0, 0, 455, 441, 2459, 2392, // Борт 0
/* Элемент постоянной таблицы 0, 0, 0, 0, 462, 439, 2442, 2400,; порядок значений совпадает с порядком индексов потребителя. */
0, 0, 0, 0, 462, 439, 2442, 2400, // Борт 1
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
4936, 4877, 4972, 4857, 1886, 1898, 2517, 2535, // Áîðò 0
4876, 5005, 4876, 4847, 1898, 1873, 2535, 2502, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
/* Элемент постоянной таблицы 4936, 4877, 4972, 4857, 1886, 1898, 2517, 2535,; порядок значений совпадает с порядком индексов потребителя. */
4936, 4877, 4972, 4857, 1886, 1898, 2517, 2535, // Борт 0
/* Элемент постоянной таблицы 4876, 5005, 4876, 4847, 1898, 1873, 2535, 2502,; порядок значений совпадает с порядком индексов потребителя. */
4876, 5005, 4876, 4847, 1898, 1873, 2535, 2502, // Борт 1
// ÓÌÏ UA UC IA IC 20mA O 4mA O 20mA I 4mA I
7580, 7540, 2310, 2420, 1736, 683, 854, 14, // Áîðò 0 1062 1980
7580, 7540, 2310, 2420, 1745, 689, 860, 17, // Áîðò 1 1720 2405
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
/* Элемент постоянной таблицы 7580, 7540, 2310, 2420, 1736, 683, 854, 14,; порядок значений совпадает с порядком индексов потребителя. */
7580, 7540, 2310, 2420, 1736, 683, 854, 14, // Борт 0 1062 1980
/* Элемент постоянной таблицы 7580, 7540, 2310, 2420, 1745, 689, 860, 17,; порядок значений совпадает с порядком индексов потребителя. */
7580, 7540, 2310, 2420, 1745, 689, 860, 17, // Борт 1 1720 2405
// ÁÊÑÑÄ 100 Ohm 150 Ohm
// БКССД 100 Ohm 150 Ohm
/* Элемент постоянной таблицы 1281, 1272, 0, 0, 622, 2263, 0, 0,; порядок значений совпадает с порядком индексов потребителя. */
1281, 1272, 0, 0, 622, 2263, 0, 0,
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
/* Элемент постоянной таблицы 1290, 1285, 0, 0, 2045, 2045, 2725, 2725 };; порядок значений совпадает с порядком индексов потребителя. */
1290, 1285, 0, 0, 2045, 2045, 2725, 2725 };
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif //---------------------------------------------------------------------
/* Условие компиляции BALSAM == 166: выбранный блок включается в текущий вариант прошивки. */
#if BALSAM == 166 //-------------------------------------------------------------
/* Объявляет def_cal[][8] = {. Начальное значение задаётся справа от знака равенства. */
int def_cal[][8] = {
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
4936, 4877, 4972, 4857, 1960, 1920, 2610, 2570, // Áîðò 0
4876, 5005, 4876, 4847, 1950, 1965, 2600, 2615, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
/* Элемент постоянной таблицы 4936, 4877, 4972, 4857, 1960, 1920, 2610, 2570,; порядок значений совпадает с порядком индексов потребителя. */
4936, 4877, 4972, 4857, 1960, 1920, 2610, 2570, // Борт 0
/* Элемент постоянной таблицы 4876, 5005, 4876, 4847, 1950, 1965, 2600, 2615,; порядок значений совпадает с порядком индексов потребителя. */
4876, 5005, 4876, 4847, 1950, 1965, 2600, 2615, // Борт 1
// ÓÌÏ UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3820, 3790, 3505, 3380, 1718, 673, 854, 14, // Áîðò 0
3835, 3785, 3522, 3332, 1697, 653, 860, 17, // Áîðò 1
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
/* Элемент постоянной таблицы 3820, 3790, 3505, 3380, 1718, 673, 854, 14,; порядок значений совпадает с порядком индексов потребителя. */
3820, 3790, 3505, 3380, 1718, 673, 854, 14, // Борт 0
/* Элемент постоянной таблицы 3835, 3785, 3522, 3332, 1697, 653, 860, 17,; порядок значений совпадает с порядком индексов потребителя. */
3835, 3785, 3522, 3332, 1697, 653, 860, 17, // Борт 1
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
/* Элемент постоянной таблицы 1281, 1272, 0, 0, 2049, 2050, 2749, 2750 };; порядок значений совпадает с порядком индексов потребителя. */
1281, 1272, 0, 0, 2049, 2050, 2749, 2750 };
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif //---------------------------------------------------------------------
/* Условие компиляции BALSAM == 165: выбранный блок включается в текущий вариант прошивки. */
#if BALSAM == 165 //-------------------------------------------------------------
/* Объявляет def_cal[][8] = {. Начальное значение задаётся справа от знака равенства. */
int def_cal[][8] = {
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
5130, 4960, 4925, 5070, 1881, 1881, 2506, 2516, // Áîðò 0
5020, 5040, 4950, 5030, 1871, 1879, 2507, 2514, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
/* Элемент постоянной таблицы 5130, 4960, 4925, 5070, 1881, 1881, 2506, 2516,; порядок значений совпадает с порядком индексов потребителя. */
5130, 4960, 4925, 5070, 1881, 1881, 2506, 2516, // Борт 0
/* Элемент постоянной таблицы 5020, 5040, 4950, 5030, 1871, 1879, 2507, 2514,; порядок значений совпадает с порядком индексов потребителя. */
5020, 5040, 4950, 5030, 1871, 1879, 2507, 2514, // Борт 1
// ÓÌÏ UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3890, 3865, 5100, 4850, 1730, 675, 854, 14, // Áîðò 0
3845, 3800, 3250, 3100, 1044, 0, 860, 17, // Áîðò 1
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
/* Элемент постоянной таблицы 3890, 3865, 5100, 4850, 1730, 675, 854, 14,; порядок значений совпадает с порядком индексов потребителя. */
3890, 3865, 5100, 4850, 1730, 675, 854, 14, // Борт 0
/* Элемент постоянной таблицы 3845, 3800, 3250, 3100, 1044, 0, 860, 17,; порядок значений совпадает с порядком индексов потребителя. */
3845, 3800, 3250, 3100, 1044, 0, 860, 17, // Борт 1
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
/* Элемент постоянной таблицы 1289, 1280, 0, 0, 2073, 2071, 2773, 2771 };; порядок значений совпадает с порядком индексов потребителя. */
1289, 1280, 0, 0, 2073, 2071, 2773, 2771 };
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif //---------------------------------------------------------------------
/* Условие компиляции BALSAM == 164: выбранный блок включается в текущий вариант прошивки. */
#if BALSAM == 164 //-------------------------------------------------------------
/* Объявляет def_cal[][8] = {. Начальное значение задаётся справа от знака равенства. */
int def_cal[][8] = {
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
7573, 7573, 7573, 7573, 1979, 1888, 2592, 2513, // Áîðò 0
7573, 7573, 7573, 7573, 1970, 1907, 2584, 2558, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
/* Элемент постоянной таблицы 7573, 7573, 7573, 7573, 1979, 1888, 2592, 2513,; порядок значений совпадает с порядком индексов потребителя. */
7573, 7573, 7573, 7573, 1979, 1888, 2592, 2513, // Борт 0
/* Элемент постоянной таблицы 7573, 7573, 7573, 7573, 1970, 1907, 2584, 2558,; порядок значений совпадает с порядком индексов потребителя. */
7573, 7573, 7573, 7573, 1970, 1907, 2584, 2558, // Борт 1
// ÓÌÏ UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3920, 3905, 3300, 3220, 1015, 0, 854, 14, // Áîðò 0
3835, 3785, 5100, 4600, 1750, 680, 860, 17, // Áîðò 1
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
/* Элемент постоянной таблицы 3920, 3905, 3300, 3220, 1015, 0, 854, 14,; порядок значений совпадает с порядком индексов потребителя. */
3920, 3905, 3300, 3220, 1015, 0, 854, 14, // Борт 0
/* Элемент постоянной таблицы 3835, 3785, 5100, 4600, 1750, 680, 860, 17,; порядок значений совпадает с порядком индексов потребителя. */
3835, 3785, 5100, 4600, 1750, 680, 860, 17, // Борт 1
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
/* Элемент постоянной таблицы 1266, 1267, 0, 0, 2063, 2040, 2678, 2655 };; порядок значений совпадает с порядком индексов потребителя. */
1266, 1267, 0, 0, 2063, 2040, 2678, 2655 };
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif //---------------------------------------------------------------------
@@ -71,15 +107,15 @@
#if PXXXXX == 1 //-------------------------------------------------------------
int def_cal[][6] = {
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Áîðò 0
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Борт 0
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Борт 1
// ÓÌÏ UA UC IA IC 20mA 4mA
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Áîðò 0
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Áîðò 1
// УМП UA UC IA IC 20mA 4mA
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Борт 0
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Борт 1
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
1270, 1270, 0, 0, 1950, 1950, 2600, 2600 };
#endif //---------------------------------------------------------------------
*/

View File

@@ -1,34 +1,51 @@
/* Собственный и универсальный адрес устройства. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: _CNTRL_ADR ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef _CNTRL_ADR
/* Определяет защитный символ или переключатель _CNTRL_ADR для последующей компиляции. */
#define _CNTRL_ADR
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
extern "C" {
#endif
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/** àäðåñ êîíòðîëëåðà äëà ïîñûëêè âñåì ÀÈÍàì */
/** адрес контроллера дла посылки всем АИНам */
/* Объявляет ADDR_FOR_ALL — данные ADDR_FOR_ALL. Память определена в другом модуле. */
extern int ADDR_FOR_ALL;
/** àäðåñ êîíòðîëëåðà äëà ïîñûëêè îòâåòà */
extern const int ADDR_ANSWER;
/** àäðåñà òåðìèíàëà äëà ïîñûëêè îòâåòà */
extern const int ADDR_TERMINAL;
/** адрес контроллера дла посылки ответа */
/* Объявляет ADDR_ANSWER — данные ADDR_ANSWER. Память определена в другом модуле. */
extern const int ADDR_ANSWER;
/* Àäðåñ êîíòðîëëåðà */
/** адреса терминала дла посылки ответа */
/* Объявляет ADDR_TERMINAL — данные ADDR_TERMINAL. Память определена в другом модуле. */
extern const int ADDR_TERMINAL;
/* Адрес контроллера */
/* Объявляет CNTRL_ADDR — данные CNTRL_ADDR. Память определена в другом модуле. */
extern int CNTRL_ADDR;
/* Óíèâåðñàëüíûé àäðåñ êîíòðîëëåðà */
/* Универсальный адрес контроллера */
/* Объявляет CNTRL_ADDR_UNIVERSAL — данные CNTRL_ADDR_UNIVERSAL. Память определена в другом модуле. */
extern const int CNTRL_ADDR_UNIVERSAL;
/** Óñòàíîâêà àäðåñà êîíòðîëëåðà äëà ïðîøèâêè */
/** Установка адреса контроллера дла прошивки */
/* Устанавливает собственный и универсальный адрес для проверки адресованных команд. */
void set_cntrl_addr (int cntrl_addr,int cntrl_addr_for_all);
/* Объявляет cntr_addr_c — данные cntr_addr_c. Память определена в другом модуле. */
extern int cntr_addr_c;
/* Объявляет cntr_addr_c_all — данные cntr_addr_c_all. Память определена в другом модуле. */
extern int cntr_addr_c_all;
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
#endif /* _CNTRL_ADR */
#endif /* _CNTRL_ADR */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */

View File

@@ -1,8 +1,15 @@
/* Таблицы и функции вычисления контрольных сумм CRC. Русские пояснения сохранены в UTF-8. */
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef unsigned short WORD;
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef unsigned char byte;
/* Объявляет интерфейс функции get_crc_ccitt; реализация вызывается через этот прототип. */
unsigned int get_crc_ccitt(unsigned int crc, unsigned int *buf, unsigned long size );
/* Объявляет интерфейс функции get_crc_16; реализация вызывается через этот прототип. */
unsigned int get_crc_16(unsigned int crc,unsigned int *buf,unsigned long size );
/* Объявляет интерфейс функции get_crc_16b; реализация вызывается через этот прототип. */
unsigned int get_crc_16b(unsigned int crc,unsigned int *buf,unsigned long size );
/* Объявляет интерфейс функции get_crc16; реализация вызывается через этот прототип. */
int get_crc16(unsigned int *buf, int size );

View File

@@ -1,6 +1,11 @@
/* Штатный eCAN и отдельный служебный обмен УМП/GAS. Русские пояснения сохранены в UTF-8. */
/* Настраивает eCAN, скорость, почтовые ящики и маршрутизацию прерываний для выбранного режима платы. */
void InitCan(int Port, int DevNum);
/* Упаковывает адрес и технологические слова в штатный CAN-кадр и запускает передачу mailbox. */
void CAN_send(int Port, int data[], int Addr);
/* Объявляет CAN_input_data — CAN вход данные. Память определена в другом модуле. */
extern int CAN_input_data[];
/* Неблокирующая передача ответов логгера отдельным CAN mailbox. */
/* Неблокирующая передача ответов логгера отдельным CAN mailbox. */
/* В главном цикле готовит замороженный ответ служебного CAN и отправляет его двухсловными фрагментами. */
void UMP_CAN_service(void);

View File

@@ -1,15 +1,26 @@
/* Выбор профиля физически установленной EEPROM при сборке. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: BALSAM167_EEPROM_CONFIG_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef BALSAM167_EEPROM_CONFIG_H
/* Определяет защитный символ или переключатель BALSAM167_EEPROM_CONFIG_H для последующей компиляции. */
#define BALSAM167_EEPROM_CONFIG_H
/* Build-time checkbox: 0 = AT25256B (32 KiB), 1 = M95M02-DR (256 KiB).
* This must match the soldered part BEFORE startup loads saved parameters.
* CCS: change the value below, then Project > Clean and Rebuild.
* Command-line builds may override EEPROM_M95M02 for that build only.
* A GUI checkbox cannot change SPI ROM boot or startup initialization.
/* Аппаратный профиль выбирается при сборке: 0 — AT25256B (32 КиБ),
* 1 — M95M02-DR (256 КиБ). Он обязан соответствовать установленной микросхеме
* до загрузки сохранённых параметров при старте.
* В CCS измените определение ниже, затем выполните Clean/Rebuild.
* Ключ компилятора может переопределить значение только для своей сборки.
* Выбор профиля во время работы не меняет загрузку ROM по SPI и начальную адресацию.
*/
/* Начинает условие: EEPROM_M95M02 ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef EEPROM_M95M02
/* Задаёт EEPROM_M95M02 = 0; выбор аппаратной EEPROM при сборке: 0 — AT25256B 32 КиБ, 1 — M95M02 256 КиБ и GAS. */
#define EEPROM_M95M02 0
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции EEPROM_M95M02 != 0 и EEPROM_M95M02 != 1: выбранный блок включается в текущий вариант прошивки. */
#if EEPROM_M95M02 != 0 && EEPROM_M95M02 != 1
/* Останавливает сборку при недопустимой конфигурации: EEPROM_M95M02_must_be_0_or_1. */
#error EEPROM_M95M02_must_be_0_or_1
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif

View File

@@ -1,49 +1,82 @@
/* Накопительный фильтр измерительных каналов. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: _FILTER_BAT2 ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef _FILTER_BAT2
/* Определяет защитный символ или переключатель _FILTER_BAT2 для последующей компиляции. */
#define _FILTER_BAT2
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
extern "C" {
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Задаёт K1_FILTER_BATTER2_1HZ = 0.0000096; данные K1_FILTER_BATTER2_1HZ. */
#define K1_FILTER_BATTER2_1HZ 0.0000096
/* Задаёт K2_FILTER_BATTER2_1HZ = 1.94468056; данные K2_FILTER_BATTER2_1HZ. */
#define K2_FILTER_BATTER2_1HZ 1.94468056
/* Задаёт K3_FILTER_BATTER2_1HZ = -0.94471895; данные K3_FILTER_BATTER2_1HZ. */
#define K3_FILTER_BATTER2_1HZ -0.94471895
/* Задаёт K1_FILTER_BATTER2_3HZ = 0.00008766; данные K1_FILTER_BATTER2_3HZ. */
#define K1_FILTER_BATTER2_3HZ 0.00008766
/* Задаёт K2_FILTER_BATTER2_3HZ = 1.97347532; данные K2_FILTER_BATTER2_3HZ. */
#define K2_FILTER_BATTER2_3HZ 1.97347532
/* Задаёт K3_FILTER_BATTER2_3HZ = -0.97382594; данные K3_FILTER_BATTER2_3HZ. */
#define K3_FILTER_BATTER2_3HZ -0.97382594
/* Задаёт K1_FILTER_BATTER2_5HZ = 0.00024135; данные K1_FILTER_BATTER2_5HZ. */
#define K1_FILTER_BATTER2_5HZ 0.00024135
/* Задаёт K2_FILTER_BATTER2_5HZ = 1.95581276; данные K2_FILTER_BATTER2_5HZ. */
#define K2_FILTER_BATTER2_5HZ 1.95581276
/* Задаёт K3_FILTER_BATTER2_5HZ = -0.95677816; данные K3_FILTER_BATTER2_5HZ. */
#define K3_FILTER_BATTER2_5HZ -0.95677816
/* Задаёт K1_FILTER_BATTER2_10HZ = 0.00094411; данные K1_FILTER_BATTER2_10HZ. */
#define K1_FILTER_BATTER2_10HZ 0.00094411
/* Задаёт K2_FILTER_BATTER2_10HZ = 1.91126422; данные K2_FILTER_BATTER2_10HZ. */
#define K2_FILTER_BATTER2_10HZ 1.91126422
/* Задаёт K3_FILTER_BATTER2_10HZ = -0.91504065; данные K3_FILTER_BATTER2_10HZ. */
#define K3_FILTER_BATTER2_10HZ -0.91504065
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef struct { float k_0;
/* Объявляет k_1 — данные k_1. */
float k_1;
/* Объявляет k_2 — данные k_2. */
float k_2;
/* Объявляет i_0 — данные i_0. */
float i_0;
/* Объявляет i_1 — данные i_1. */
float i_1;
/* Объявляет i_2 — данные i_2. */
float i_2;
/* Объявляет u_0 — данные u_0. */
float u_0;
/* Объявляет u_1 — данные u_1. */
float u_1;
/* Объявляет u_2 — данные u_2. */
float u_2;
} FILTERBAT;
/* Продолжает список аргументов, полей или выражение } FILTERBAT;; порядок элементов сохраняется. */
} FILTERBAT;
/* Задаёт DEF_FILTERBAT = { K1_FILTER_BATTER2_3HZ,; данные DEF_FILTERBAT. */
#define DEF_FILTERBAT { K1_FILTER_BATTER2_3HZ, \
K2_FILTER_BATTER2_3HZ, \
K3_FILTER_BATTER2_3HZ, \
0,0,0,0,0,0}
K2_FILTER_BATTER2_3HZ, /* Продолжает список аргументов, полей или выражение K2_FILTER_BATTER2_3HZ,; порядок элементов сохраняется. */ \
K3_FILTER_BATTER2_3HZ, /* Продолжает список аргументов, полей или выражение K3_FILTER_BATTER2_3HZ,; порядок элементов сохраняется. */ \
0,0,0,0,0,0} /* Элемент постоянной таблицы 0,0,0,0,0,0}; порядок значений совпадает с порядком индексов потребителя. */
/* Обновляет скользящий фильтр измерительного канала и его накопленные значения. */
float filterbat(FILTERBAT *b, float InpVarCurr);
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
#endif /* _FILTER_BAT2 */
#endif /* _FILTER_BAT2 */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */

View File

@@ -1,28 +1,47 @@
/* Дополнительная карта GAS 167/v1 только для новой EEPROM M95M02. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: BALSAM167_GAS_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef BALSAM167_GAS_H
/* Определяет защитный символ или переключатель BALSAM167_GAS_H для последующей компиляции. */
#define BALSAM167_GAS_H
/* Подключает "eeprom_config.h": выбор профиля физически установленной EEPROM при сборке. */
#include "eeprom_config.h"
/* Подключает <stdint.h>: настройки и интерфейс stdint. */
#include <stdint.h>
/* Board profile 167/v1, word addresses, independent of the wire transport.
* The original register and UMP addresses remain valid in both builds.
* Only the physically fitted M95M02 version exposes the additional regions. */
/* Профиль платы 167/v1 использует словные адреса независимо от транспорта.
* Штатные адреса технологических регистров и УМП остаются доступными в обеих сборках.
* Дополнительные области GAS присутствуют только при установленной M95M02.
*/
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
#if EEPROM_M95M02
/* Задаёт GAS167_REG_BASE = 0x5000U; начало псевдонимов 128 технологических регистров GAS, адрес 0x5000. */
#define GAS167_REG_BASE 0x5000U
/* Задаёт GAS167_REG_COUNT = 128U; число технологических слов GAS; скрытое слово modbus[128] в диапазон не входит. */
#define GAS167_REG_COUNT 128U
/* Задаёт GAS167_INFO_BASE = 0x5F00U; начало доступного только для чтения дескриптора GAS, адрес 0x5F00. */
#define GAS167_INFO_BASE 0x5F00U
/* Задаёт GAS167_INFO_WORDS = 8U; длина дескриптора GAS — восемь 16-битных слов. */
#define GAS167_INFO_WORDS 8U
/* Задаёт GAS167_MAX_WORDS = 124U; максимальная длина чтения GAS — 124 слова; служебный CAN требует чётную длину. */
#define GAS167_MAX_WORDS 124U
/* Задаёт GAS167_PROFILE_VERSION = 1U; версия карты адресов GAS 167/v1. */
#define GAS167_PROFILE_VERSION 1U
#define GAS167_CAPABILITIES 7U /* bit 0 RTU, bit 1 service CAN, bit 2 FC06 */
#define GAS167_CAPABILITIES 7U /* Бит 0 — RTU, бит 1 — служебный CAN, бит 2 — запись FC06. */ /* Задаёт GAS167_CAPABILITIES = 7U; маска возможностей: бит 0 — RTU, бит 1 — служебный CAN, бит 2 — FC06. */
/* Called by the main-loop transports under their snapshot IRQ lock.
* Capacity: at least GAS167_MAX_WORDS uint16_t words.
* RTU reads: 1..124 words; paired service CAN reads: 2..124, even.
* Successful reads return their count. Writes/errors return address/value.
* error uses Modbus codes 0 (success), 1 (function), 2 (address), 3 (value).
* No EEPROM I/O, allocation, or changes to the existing logger. */
/* Вызывается транспортами из главного цикла под краткой блокировкой IRQ.
* Буфер ответа должен вмещать не меньше GAS167_MAX_WORDS слов uint16_t.
* RTU читает 1..124 слова; служебный CAN — чётное число слов 2..124.
* Успешное чтение возвращает число слов. Запись или ошибка возвращает адрес/значение.
* error: 0 — успех, 1 — функция, 2 — адрес, 3 — значение.
* Здесь нет обмена EEPROM, выделения памяти или изменения устройства регистратора.
*/
/* Проверяет принадлежность адреса одному из двух диапазонов GAS 167/v1; доступно только для M95M02. */
int gas167_contains(uint16_t address);
/* Проверяет весь запрос FC03/FC06 до доступа к данным и формирует снимок регистров или дескриптора GAS. */
unsigned gas167_prepare(unsigned function, uint16_t address, uint16_t value,
/* Объявляет can — CAN; reply — данные reply. Хранит указатель на данные. */
int can, uint16_t *reply, unsigned *error);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif

View File

@@ -1 +1,3 @@
/* Последовательный вывод данных канала индикации. Русские пояснения сохранены в UTF-8. */
/* Объявляет интерфейс функции kanal_Send; реализация вызывается через этот прототип. */
void kanal_Send(int adr, long dat, int dot);

View File

@@ -1,57 +1,94 @@
/* Двухбанковый регистратор событий нагрузки во внешней RAM. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: _LOG_TO_MEM ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef _LOG_TO_MEM
#define _LOG_TO_MEM
/* Определяет защитный символ или переключатель _LOG_TO_MEM для последующей компиляции. */
#define _LOG_TO_MEM
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
extern "C" {
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Определениa длa работы логгера */
/* Определениa длa работы логгера */
/* Задаёт LOG_PAGE_START = 0x0200000; данные LOG_PAGE_START. */
#define LOG_PAGE_START 0x0200000
/* Задаёт LOG_PAGE_LEN = 0xFA00; данные LOG_PAGE_LEN. */
#define LOG_PAGE_LEN 0xFA00
extern int no_write, never_write; // Флаги, чтобы не писать (если что)
/* Объявляет no_write — no запись; never_write — never запись. Память определена в другом модуле. */
extern int no_write, never_write; // Флаги, чтобы не писать (если что)
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef struct
{
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет Start — данные Start. */
unsigned long Start;
/* Объявляет Finis — данные Finis. */
unsigned long Finis;
/* Объявляет Adres — данные Adres. */
unsigned long Adres;
/* Объявляет Circl — данные Circl. */
unsigned int Circl;
/* Продолжает список аргументов, полей или выражение } LOG;; порядок элементов сохраняется. */
} LOG;
/* Объявляет Log — данные Log. Память определена в другом модуле. */
extern LOG Log;
/* Запись словa в памать, где логи лежат */
/* Запись словa в памать, где логи лежат */
/* Задаёт Log_to_mem = *(int *)(Log.Adres++) = x; данные Log_to_mem. */
#define Log_to_mem(x) *(int *)(Log.Adres++) = x
/* Проверка границы памати дла логов */
/* Проверка границы памати дла логов */
//#define Test_mem_limit(x) if(Log.Adres > (Log.Finis - (x))) Log.Adres = Log.Start
/* Задаёт Test_mem_limit = if(Log.Adres > (Log.Finis - (x))) Log.Adres -=(x); данные Test_mem_limit. */
#define Test_mem_limit(x) if(Log.Adres > (Log.Finis - (x))) Log.Adres -=(x)
/* Очистка памати (обнуление) */
/* Очистка памати (обнуление) */
/* Обнуляет выделенный диапазон внешней RAM журнала и задаёт границы кольцевого буфера. */
void clear_mem();
/* Логгер УМП: отдельное адресное пространство Modbus, без изменения
* 128 технологических регистров. Два банка по 760 записей:
* текущий кольцевой журнал и зафиксированный фрагмент отключения. */
/* Логгер УМП: отдельное адресное пространство Modbus, без изменения
* 128 технологических регистров. Два банка по 760 записей:
* текущий кольцевой журнал и зафиксированный фрагмент отключения. */
/* Задаёт UMP_LOG_BASE = 0x1000U; данные UMP_LOG_BASE. */
#define UMP_LOG_BASE 0x1000U
/* Задаёт UMP_LOG_DATA = 0x1010U; UMP LOG данные. */
#define UMP_LOG_DATA 0x1010U
/* Задаёт UMP_LOG_WORDS = 42U; UMP LOG слова. */
#define UMP_LOG_WORDS 42U
/* Задаёт UMP_LOG_CAPACITY = 760U; данные UMP_LOG_CAPACITY. */
#define UMP_LOG_CAPACITY 760U
/* Задаёт UMP_LOG_LIVE_RECORDS = (120U / UMP_LOG_WORDS); данные UMP_LOG_LIVE_RECORDS. */
#define UMP_LOG_LIVE_RECORDS (120U / UMP_LOG_WORDS)
/* Задаёт UMP_LOG_LIVE = 0x1100U; данные UMP_LOG_LIVE. */
#define UMP_LOG_LIVE 0x1100U
/* Объявляет ump_dac_ramp — ump ЦАП ramp; ump_dac_duration — ump ЦАП duration; ump_dac_go10 — ump ЦАП go 10; ump_dac_stop10 — ump ЦАП stop 10; ump_dac_position — ump ЦАП position. Память определена в другом модуле. */
extern unsigned int ump_dac_ramp, ump_dac_duration, ump_dac_go10, ump_dac_stop10, ump_dac_position;
/* Явно инициализирует оба банка регистратора до включения IRQ; повторный старт записи архив не стирает. */
void ump_log_init(void);
/* Продвигает время регистратора в Timer1 и снимает записи с заданным периодом. */
void ump_log_tick(void);
/* Обслуживает изменения дискретных входов и выходов из главного цикла. */
void ump_log_io(void);
/* Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */
void ump_log_can(unsigned int header, unsigned int a, unsigned int b, unsigned int c);
/* Регистрирует изменение слова команд после записи по последовательному интерфейсу. */
void ump_log_rs(void);
/* Проверяет область чтения регистратора и возвращает слова состояния либо архивной записи. */
unsigned int ump_log_read(unsigned int address);
/* Применяет допустимые команды управления регистратором, сохраняя ограничения адресов. */
int ump_log_write(unsigned int address, unsigned int value);
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
#endif /* _LOG_TO_MEM */
#endif /* _LOG_TO_MEM */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */

View File

@@ -1,121 +1,212 @@
/* Обработка датчиков, вычисление величин и миллисекундный такт системы. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: _MEASURE ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef _MEASURE
/* Определяет защитный символ или переключатель _MEASURE для последующей компиляции. */
#define _MEASURE
/* Выполняет миллисекундный такт датчиков, таймеров связи, регистратора и защиты нагрузки. */
interrupt void cpu_timer1_isr_SENS(void);
/* Объявляет интерфейс функции Init_sensors; реализация вызывается через этот прототип. */
void Init_sensors(void);
/* Объявляет интерфейс функции Init_sensors_more; реализация вызывается через этот прототип. */
void Init_sensors_more(void);
/* Объявляет интерфейс функции Init_packMask; реализация вызывается через этот прототип. */
void Init_packMask(void);
/* Объявляет интерфейс функции Temper_count; реализация вызывается через этот прототип. */
void Temper_count(int chan, int ovn);
/* Объявляет интерфейс функции Current_count; реализация вызывается через этот прототип. */
void Current_count(int chan);
/* Объявляет интерфейс функции Power_count; реализация вызывается через этот прототип. */
void Power_count(int chan);
/* Объявляет интерфейс функции calc_sensor_koef; реализация вызывается через этот прототип. */
void calc_sensor_koef(void);
/* Объявляет интерфейс функции Is_Voltage_Hi; реализация вызывается через этот прототип. */
void Is_Voltage_Hi(void);
/* Объявляет интерфейс функции calc_volta_edge; реализация вызывается через этот прототип. */
void calc_volta_edge(void);
/* Объявляет интерфейс функции er_anal; реализация вызывается через этот прототип. */
int er_anal(int term, unsigned int * count, long edge, int pre);
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef union
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */
struct
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Битовое поле Tear, ширина 1 бит; данные Tear. */
unsigned int Tear :1;
/* Битовое поле res, ширина 1 бит; данные res. */
unsigned int res :1;
/* Битовое поле Wry, ширина 1 бит; данные Wry. */
unsigned int Wry :1;
/* Битовое поле Out, ширина 1 бит; данные Out. */
unsigned int Out :1;
/* Битовое поле Over, ширина 1 бит; данные Over. */
unsigned int Over :1;
/* Битовое поле Hyper, ширина 1 бит; данные Hyper. */
unsigned int Hyper :1;
/* Битовое поле Contr, ширина 1 бит; данные Contr. */
unsigned int Contr :1;
/* Битовое поле res2, ширина 1 бит; данные res2. */
unsigned int res2 :1;
/* Битовое поле Stop, ширина 1 бит; данные Stop. */
unsigned int Stop :1;
/* Битовое поле Ready, ширина 1 бит; данные Ready. */
unsigned int Ready :1;
/* Битовое поле Discr1, ширина 1 бит; данные Discr1. */
unsigned int Discr1 :1;
/* Битовое поле Discr2, ширина 1 бит; данные Discr2. */
unsigned int Discr2 :1;
/* Битовое поле Discr3, ширина 1 бит; данные Discr3. */
unsigned int Discr3 :1;
/* Битовое поле Discr4, ширина 1 бит; данные Discr4. */
unsigned int Discr4 :1;
/* Битовое поле Ignor, ширина 1 бит; данные Ignor. */
unsigned int Ignor :1;
/* Битовое поле Bypas, ширина 1 бит; данные Bypas. */
unsigned int Bypas :1;
/* Продолжает список аргументов, полей или выражение } bit;; порядок элементов сохраняется. */
} bit;
/* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */
unsigned int all;
/* Задаёт Imit = Discr4; данные Imit. */
#define Imit Discr4
/* Продолжает список аргументов, полей или выражение } ERROR;; порядок элементов сохраняется. */
} ERROR;
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef union
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */
struct
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Битовое поле Error, ширина 1 бит; ошибка. */
unsigned int Error :1;
/* Битовое поле Alarm, ширина 1 бит; данные Alarm. */
unsigned int Alarm :1;
/* Битовое поле OverHeat, ширина 1 бит; данные OverHeat. */
unsigned int OverHeat :1;
/* Битовое поле SubHeat, ширина 1 бит; данные SubHeat. */
unsigned int SubHeat :1;
/* Битовое поле OutHeat, ширина 1 бит; данные OutHeat. */
unsigned int OutHeat :1;
/* Битовое поле Test_lamp, ширина 1 бит; данные Test_lamp. */
unsigned int Test_lamp :1;
/* Продолжает список аргументов, полей или выражение } bit;; порядок элементов сохраняется. */
} bit;
/* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */
unsigned int all;
/* Продолжает список аргументов, полей или выражение } FLAG;; порядок элементов сохраняется. */
} FLAG;
/* Задаёт NOER = 0xE000; данные NOER. */
#define NOER 0xE000//C
/* Задаёт EROR = 0x01FF; данные EROR. */
#define EROR 0x01FF
#define READY_FREQ (500.0 * 2)// Ãö
#define BLINK_FREQ 2 // Ãö
/* Задаёт READY_FREQ = (500.0 * 2); частота основного такта Timer1 в герцах. */
#define READY_FREQ (500.0 * 2)// Гц
/* Задаёт BLINK_FREQ = 2; данные BLINK_FREQ. */
#define BLINK_FREQ 2 // Гц
/* Задаёт BLINK_TIME = (READY_FREQ / BLINK_FREQ); данные BLINK_TIME. */
#define BLINK_TIME (READY_FREQ / BLINK_FREQ)
/* Задаёт CANPOWSE = 20; данные CANPOWSE. */
#define CANPOWSE 20
#define ADC_FREQ 3750 //3885.0//777//2000//20000 //777 //3885 // Ãö (777*5)
#define DAC_FREQ 200//5 // Ãö
/* Задаёт ADC_FREQ = 3750; частота запуска последовательности АЦП в герцах. */
#define ADC_FREQ 3750 //3885.0//777//2000//20000 //777 //3885 // Гц (777*5)
/* Задаёт DAC_FREQ = 200; частота обновления тока ЦАП в герцах. */
#define DAC_FREQ 200//5 // Гц
/* Задаёт LOAD_TIME = 30; время нарастания тока нагрузки в секундах. */
#define LOAD_TIME 30//15 // sec
/* Объявляет Caliber_time — данные Caliber_time. Память определена в другом модуле. */
extern unsigned int Caliber_time;
/* Задаёт SENS_ERR_WAIT = 10; данные SENS_ERR_WAIT. */
#define SENS_ERR_WAIT 10
/* Задаёт maximum_bright = 10; данные maximum_bright. */
#define maximum_bright 10
/* Задаёт Pi = 3.1415926535897932384626433832795; данные Pi. */
#define Pi 3.1415926535897932384626433832795
/* Задаёт Pi_2 = 1.5707963267948966192313216916398; данные Pi_2. */
#define Pi_2 1.5707963267948966192313216916398
/* Задаёт ZERO = 27; данные ZERO. */
#define ZERO 27
#define Cooling 5 // (°Ñ) Ãèñòåðåçèñ ïî ñíàòèþ ïåðåãðåâà
/* Задаёт Cooling = 5; данные Cooling. */
#define Cooling 5 // (°С) Гистерезис по снатию перегрева
/* Задаёт COSPi6 = 0.86602540378443864676372317075294; данные COSPi6. */
#define COSPi6 0.86602540378443864676372317075294
/* Задаёт RADIX2 = 1.4142135623730950488016887242097; данные RADIX2. */
#define RADIX2 1.4142135623730950488016887242097
#define POWER_380 0 // ïèòàíèå 380Â
#define POWER_38O 1 // ïèòàíèå 380Â
#define CURRENT 2 // òîê
#define VOLTAGE 3 // íàïðàæåíèå
#define POWER_31 4 // ïèòàíèå 31Â
#define POWER_27 5 // ïèòàíèå 24Â
#define POWER_24 6 // ïèòàíèå 24Â
#define POWER_15 7 // ïèòàíèå 15Â
#define TERMO_AD 8 // òåðìîäàò÷èê ìåëêîñõåìà
#define TERMO_RS 9 // òåðìîðåçèñòîð
#define TRM_OBEH 10 // òåðìîäàò÷èê îâåí
/* Задаёт POWER_380 = 0; данные POWER_380. */
#define POWER_380 0 // питание 380В
/* Задаёт POWER_38O = 1; данные POWER_38O. */
#define POWER_38O 1 // питание 380В
/* Задаёт CURRENT = 2; данные CURRENT. */
#define CURRENT 2 // ток
/* Задаёт VOLTAGE = 3; данные VOLTAGE. */
#define VOLTAGE 3 // напражение
/* Задаёт POWER_31 = 4; данные POWER_31. */
#define POWER_31 4 // питание 31В
/* Задаёт POWER_27 = 5; данные POWER_27. */
#define POWER_27 5 // питание 24В
/* Задаёт POWER_24 = 6; данные POWER_24. */
#define POWER_24 6 // питание 24В
/* Задаёт POWER_15 = 7; данные POWER_15. */
#define POWER_15 7 // питание 15В
/* Задаёт TERMO_AD = 8; данные TERMO_AD. */
#define TERMO_AD 8 // термодатчик мелкосхема
/* Задаёт TERMO_RS = 9; данные TERMO_RS. */
#define TERMO_RS 9 // терморезистор
/* Задаёт TRM_OBEH = 10; данные TRM_OBEH. */
#define TRM_OBEH 10 // термодатчик овен
/* Объявляет TPL_CANS — данные TPL_CANS; tpl_cans — данные tpl_cans. Память определена в другом модуле. */
extern int TPL_CANS,tpl_cans;
/* Объявляет READY — данные READY. Память определена в другом модуле. */
extern int READY;
/* Объявляет filter — данные filter. Память определена в другом модуле. */
extern FILTERBAT filter[];
/* Объявляет adc_filter — АЦП filter. Память определена в другом модуле. */
extern FILTERBAT adc_filter[];
/* Объявляет out_filter — данные out_filter. Память определена в другом модуле. */
extern FILTERBAT out_filter[];
/* Объявляет sens_type — данные sens_type. Память определена в другом модуле. */
extern int sens_type[];
/* Объявляет ext_temp — данные ext_temp; ext_diag — данные ext_diag. Память определена в другом модуле. */
extern int ext_temp[], ext_diag[];
/* Объявляет Lonely — данные Lonely. Память определена в другом модуле. */
extern unsigned long Lonely;
/* Объявляет CanPowse — CAN Powse; CanGO — CAN GO. Память определена в другом модуле. */
extern unsigned int CanPowse,CanGO;
/* Объявляет Maska[][8];. Память определена в другом модуле. */
extern unsigned int Maska[][8];
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif //_MEASURE

View File

@@ -1,42 +1,75 @@
/* Обработка Modbus, заводские параметры и сохранение настроек. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: MESSAGE_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef MESSAGE_H
/* Определяет защитный символ или переключатель MESSAGE_H для последующей компиляции. */
#define MESSAGE_H
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef unsigned char CHAR;
#define ANSWER_LEN 0x80 //70 // 16+16+16+16+6
#define REPLY_LEN 0x19
/* Задаёт ANSWER_LEN = 0x80; данные ANSWER_LEN. */
#define ANSWER_LEN 0x80 //70 // 16+16+16+16+6
/* Задаёт REPLY_LEN = 0x19; данные REPLY_LEN. */
#define REPLY_LEN 0x19
/* Задаёт byte_hi = byte_1; данные byte_hi. */
#define byte_hi byte_1
/* Задаёт byte_lo = byte_0; данные byte_lo. */
#define byte_lo byte_0
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef struct
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
unsigned char Address; // Àäðåñ êîíòðîëëåðà
unsigned char Number; // Íîìåð êîìàíäû
/* Объявляет Address — адрес. */
unsigned char Address; // Адрес контроллера
/* Объявляет Number — данные Number. */
unsigned char Number; // Номер команды
/* Продолжает список аргументов, полей или выражение BAITE byte0;; порядок элементов сохраняется. */
BAITE byte0;
/* Продолжает список аргументов, полей или выражение BAITE byte1;; порядок элементов сохраняется. */
BAITE byte1;
/* Продолжает список аргументов, полей или выражение BAITE byte2;; порядок элементов сохраняется. */
BAITE byte2;
/* Продолжает список аргументов, полей или выражение BAITE byte3;; порядок элементов сохраняется. */
BAITE byte3;
/* Продолжает список аргументов, полей или выражение BAITE byte4;; порядок элементов сохраняется. */
BAITE byte4;
/* Продолжает список аргументов, полей или выражение BAITE byte5;; порядок элементов сохраняется. */
BAITE byte5;
/* Продолжает список аргументов, полей или выражение BAITE byte6;; порядок элементов сохраняется. */
BAITE byte6;
/* Продолжает список аргументов, полей или выражение BAITE byte7;; порядок элементов сохраняется. */
BAITE byte7;
/* Объявляет crc_lo — данные crc_lo. */
unsigned char crc_lo;
/* Объявляет crc_hi — данные crc_hi. */
unsigned char crc_hi;
/* Объявляет add_byte — данные add_byte. */
unsigned char add_byte;
/* Продолжает список аргументов, полей или выражение } CMD_TO_TMS;; порядок элементов сохраняется. */
} CMD_TO_TMS;
extern int modbus[];
/* Объявляет modbus — массив технологических регистров; слово int на C28x занимает 16 бит. Память определена в другом модуле. */
extern int modbus[];
/* Обслуживает чтение регистров FC03 с проверкой адреса, длины и формированием ответа RTU. */
void ReceiveCommandModbus3(RS_DATA *rs_arr);
void ReceiveCommandModbus6(RS_DATA *rs_arr);
/* Обслуживает одиночную запись FC06, проверяя доступность регистра и допустимость значения. */
void ReceiveCommandModbus6(RS_DATA *rs_arr);
/* Объявляет интерфейс функции SendCommandModbus4; реализация вызывается через этот прототип. */
void SendCommandModbus4(RS_DATA *rs_arr);
void ReceiveAnswerModbus4(RS_DATA *rs_arr);
/* Объявляет интерфейс функции ReceiveAnswerModbus4; реализация вызывается через этот прототип. */
void ReceiveAnswerModbus4(RS_DATA *rs_arr);
/* Сохраняет технологические регистры в область параметров, отделённую от загрузочного образа EEPROM. */
void Save_params(void);
/* Читает сохранённые регистры из области параметров EEPROM и применяет настройки платы. */
void Load_params(void);
/* Заполняет регистры заводскими значениями; тайм-аут CAN нагрузки по умолчанию равен 600 мс. */
void Default_params(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif //MESSAGE_H

View File

@@ -1,172 +1,300 @@
/* Адреса устройств, типы плат и псевдонимы технологических регистров. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: PACKAGE ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef PACKAGE
/* Определяет защитный символ или переключатель PACKAGE для последующей компиляции. */
#define PACKAGE
/* Задаёт BALSAM = 167; данные BALSAM. */
#define BALSAM 167
/* Условие компиляции BALSAM == 167: выбранный блок включается в текущий вариант прошивки. */
#if BALSAM == 167
/* Задаёт OBOROT = STRAIGHT; данные OBOROT. */
#define OBOROT STRAIGHT
/* Определяет защитный символ или переключатель CALIB_RS для последующей компиляции. */
#define CALIB_RS
/* Определяет защитный символ или переключатель OWEN для последующей компиляции. */
#define OWEN
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции BALSAM == 166: выбранный блок включается в текущий вариант прошивки. */
#if BALSAM == 166
/* Задаёт OBOROT = REVERSE; данные OBOROT. */
#define OBOROT REVERSE
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции BALSAM == 165: выбранный блок включается в текущий вариант прошивки. */
#if BALSAM == 165
/* Задаёт OBOROT = STRAIGHT; данные OBOROT. */
#define OBOROT STRAIGHT
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции BALSAM == 164: выбранный блок включается в текущий вариант прошивки. */
#if BALSAM == 164
/* Задаёт OBOROT = REVERSE; данные OBOROT. */
#define OBOROT REVERSE
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Определяет защитный символ или переключатель ONBOARDCALIBER для последующей компиляции. */
#define ONBOARDCALIBER
/* Задаёт TERMOPAIR = 14; данные TERMOPAIR. */
#define TERMOPAIR 14
/* Задаёт CURRENTOS = (TERMOPAIR*2); данные CURRENTOS. */
#define CURRENTOS (TERMOPAIR*2)
//-----------------------------------------------
/* Задаёт adr_TRN1 = 1; данные adr_TRN1. */
#define adr_TRN1 1
/* Задаёт adr_TRN2 = 2; данные adr_TRN2. */
#define adr_TRN2 2
/* Задаёт adr_POW1 = 3; данные adr_POW1. */
#define adr_POW1 3
/* Задаёт adr_POW2 = 4; данные adr_POW2. */
#define adr_POW2 4
/* Задаёт adr_LOA1 = 5; данные adr_LOA1. */
#define adr_LOA1 5
/* Задаёт adr_LOA2 = 6; данные adr_LOA2. */
#define adr_LOA2 6
/* Задаёт adr_ENG1 = 7; данные adr_ENG1. */
#define adr_ENG1 7
/* Задаёт adr_PULT = 8; данные adr_PULT. */
#define adr_PULT 8
/* Задаёт adr_SHKF = 9; данные adr_SHKF. */
#define adr_SHKF 9
//-------------------
/* Задаёт adr_REC1 = 0xff; данные adr_REC1. */
#define adr_REC1 0xff
/* Задаёт adr_REC2 = 0xff; данные adr_REC2. */
#define adr_REC2 0xff
/* Задаёт adr_INV1 = 0xff; данные adr_INV1. */
#define adr_INV1 0xff
/* Задаёт adr_INV2 = 0xff; данные adr_INV2. */
#define adr_INV2 0xff
/* Задаёт adr_BRK1 = 0xff; данные adr_BRK1. */
#define adr_BRK1 0xff
/* Задаёт adr_BRK2 = 0xff; данные adr_BRK2. */
#define adr_BRK2 0xff
/* Задаёт adr_ENG2 = 0xff; данные adr_ENG2. */
#define adr_ENG2 0xff
/* Задаёт adr_PLT1 = 0xff; данные adr_PLT1. */
#define adr_PLT1 0xff
/* Задаёт adr_PLT2 = 0xff; данные adr_PLT2. */
#define adr_PLT2 0xff
/* Задаёт adr_DSTR = 0xff; данные adr_DSTR. */
#define adr_DSTR 0xff
//-----------------------------------------------
/* Задаёт dsk_COMM = 1; данные dsk_COMM. */
#define dsk_COMM 1
/* Задаёт dsk_BKSD = 2; данные dsk_BKSD. */
#define dsk_BKSD 2
/* Задаёт dsk_BKST = 3; данные dsk_BKST. */
#define dsk_BKST 3
/* Задаёт dsk_EPLT = 4; данные dsk_EPLT. */
#define dsk_EPLT 4
/* Задаёт dsk_SHKF = 5; данные dsk_SHKF. */
#define dsk_SHKF 5
/* Задаёт dsk_LOAD = 6; код платы нагрузки. */
#define dsk_LOAD 6
//-----------------------------------------------
//-----------------------------------------------
/* Задаёт TPL_TRN = 10; данные TPL_TRN. */
#define TPL_TRN 10
/* Условие компиляции BALSAM == 167: выбранный блок включается в текущий вариант прошивки. */
#if BALSAM == 167
/* Задаёт TPL_POW = 7; данные TPL_POW. */
#define TPL_POW 7
/* Задаёт OWEN_DT = 2; данные OWEN_DT. */
#define OWEN_DT 2
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Задаёт TPL_POW = 8; данные TPL_POW. */
#define TPL_POW 8
/* Задаёт OWEN_DT = 0; данные OWEN_DT. */
#define OWEN_DT 0
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Задаёт TPL_ENG = 8; данные TPL_ENG. */
#define TPL_ENG 8
/* Задаёт TPL_SHK = 15; данные TPL_SHK. */
#define TPL_SHK 15
//-----------------------------------------------
/* Задаёт Modbus = ((WORDE *)modbus); данные Modbus. */
#define Modbus ((WORDE *)modbus)
/* Задаёт start_error = 0x00; start ошибка. */
#define start_error 0x00
/* Задаёт start_data = 0x18; start данные. */
#define start_data 0x18
/* Задаёт start_hi_edge = 0x30; данные start_hi_edge. */
#define start_hi_edge 0x30
/* Задаёт start_lo_edge = 0x48; данные start_lo_edge. */
#define start_lo_edge 0x48
/* Задаёт sens_error = ((ERROR *)(modbus+start_error)); sens ошибка. */
#define sens_error ((ERROR *)(modbus+start_error))
/* Задаёт sens_data = (modbus+start_data); sens данные. */
#define sens_data (modbus+start_data)
/* Задаёт sens_hi_edge = (modbus+start_hi_edge); данные sens_hi_edge. */
#define sens_hi_edge (modbus+start_hi_edge)
/* Задаёт sens_lo_edge = (modbus+start_lo_edge); данные sens_lo_edge. */
#define sens_lo_edge (modbus+start_lo_edge)
/* Задаёт InputRep0 = Modbus[0].bit.bitA; вход Rep 0. */
#define InputRep0 Modbus[0].bit.bitA
/* Задаёт InputRep1 = Modbus[0].bit.bitB; вход Rep 1. */
#define InputRep1 Modbus[0].bit.bitB
/* Задаёт InputRep2 = Modbus[0].bit.bitC; вход Rep 2. */
#define InputRep2 Modbus[0].bit.bitC
/* Задаёт Inputs = Modbus[0x10]; данные Inputs. */
#define Inputs Modbus[0x10]
/* Задаёт Buttons = Modbus[0x16]; данные Buttons. */
#define Buttons Modbus[0x16]
/* Задаёт Jumpers = modbus[0x17]; данные Jumpers. */
#define Jumpers modbus[0x17]
/* Задаёт bTestLamp = Buttons.bit.bit0; данные bTestLamp. */
#define bTestLamp Buttons.bit.bit0
/* Задаёт bSecretBt = Buttons.bit.bit1; данные bSecretBt. */
#define bSecretBt Buttons.bit.bit1
/* Задаёт bTermoCal = Buttons.bit.bit2; данные bTermoCal. */
#define bTermoCal Buttons.bit.bit2
// Ïðèøëî âðåìà!
#define DAC_go modbus[0x50] // íà÷àëî çàðàäà
#define DAC_stop modbus[0x51] // êîíåö çàðàäà
// Пришло врема!
/* Задаёт DAC_go = modbus[0x50]; начальный ток нагрузки в мА, технологический регистр 0x50. */
#define DAC_go modbus[0x50] // начало зарада
/* Задаёт DAC_stop = modbus[0x51]; конечный ток нагрузки в мА, технологический регистр 0x51. */
#define DAC_stop modbus[0x51] // конец зарада
/* LOAD-only persistent CAN timeout (ms), read-only status and attempts. */
/* Задаёт LOAD_CAN_TIMEOUT = modbus[0x52]; сохраняемый тайм-аут свежести напряжения CAN в миллисекундах, регистр 0x52. */
#define LOAD_CAN_TIMEOUT modbus[0x52]
/* Задаёт LOAD_STATUS = modbus[0x7C]; слово состояния защиты нагрузки для чтения, регистр 0x7C. */
#define LOAD_STATUS modbus[0x7C]
/* Задаёт LOAD_ATTEMPTS = modbus[0x7D]; число попыток пуска для чтения, регистр 0x7D. */
#define LOAD_ATTEMPTS modbus[0x7D]
#define Cancount (modbus+0x60) // ïàóçà ìåæäó I ïîñûëêàìè CAN
#define Bright (modbus+0x62) // àðêîñòü ñèãíàëüíûõ ëàìïî÷åê
#define Brightness modbus[0x62] // àðêîñòü ñèãíàëüíûõ ëàìïî÷åê
/* Задаёт Cancount = (modbus+0x60); данные Cancount. */
#define Cancount (modbus+0x60) // пауза между I посылками CAN
/* Задаёт Bright = (modbus+0x62); данные Bright. */
#define Bright (modbus+0x62) // аркость сигнальных лампочек
/* Задаёт Brightness = modbus[0x62]; данные Brightness. */
#define Brightness modbus[0x62] // аркость сигнальных лампочек
#define Owncount modbus[0x63] // ïàóçà ìåæäó îïðîñàìè OWEN
/* Задаёт Owncount = modbus[0x63]; данные Owncount. */
#define Owncount modbus[0x63] // пауза между опросами OWEN
/* Задаёт m_FAST = 0; данные m_FAST. */
#define m_FAST 0
/* Задаёт m_SLOW = 1; данные m_SLOW. */
#define m_SLOW 1
/* Задаёт Zero_lev = (modbus+0x70); данные Zero_lev. */
#define Zero_lev (modbus+0x70)
/* Задаёт DAC_20 = modbus[0x6E]; ЦАП 20. */
#define DAC_20 modbus[0x6E]
/* Задаёт DAC_04 = modbus[0x6F]; ЦАП 04. */
#define DAC_04 modbus[0x6F]
/* Задаёт DAC_max = modbus[0x78]; ЦАП max. */
#define DAC_max() modbus[0x78] // 751//0x0000 804
/* Задаёт DAC_min = modbus[0x79]; ЦАП min. */
#define DAC_min() modbus[0x79] // 2162//0x0FFF 2373
/* Задаёт DAC_cal = modbus[0x7A]; ЦАП cal. */
#define DAC_cal() modbus[0x7A]
/* Задаёт Caliber = (modbus+0x74); данные Caliber. */
#define Caliber (modbus+0x74)
/* Задаёт K380_1 = Caliber[0]; данные K380_1. */
#define K380_1 Caliber[0]
/* Задаёт K380_2 = Caliber[1]; данные K380_2. */
#define K380_2 Caliber[1]
/* Задаёт KPOW_1 = Caliber[0]; данные KPOW_1. */
#define KPOW_1 Caliber[0]
/* Задаёт KPOW_2 = Caliber[1]; данные KPOW_2. */
#define KPOW_2 Caliber[1]
/* Задаёт KPOW_3 = Caliber[2]; данные KPOW_3. */
#define KPOW_3 Caliber[2]
/* Задаёт KPOW_4 = Caliber[3]; данные KPOW_4. */
#define KPOW_4 Caliber[3]
/* Задаёт NormaU = Caliber[8]; данные NormaU. */
#define NormaU Caliber[8]
/* Задаёт DeltaU = Caliber[9]; данные DeltaU. */
#define DeltaU Caliber[9]
/* Задаёт TCaliber = (modbus+0x78); данные TCaliber. */
#define TCaliber (modbus+0x78)
/* Задаёт K300_1 = TCaliber[0]; данные K300_1. */
#define K300_1 TCaliber[0]
/* Задаёт K300_2 = TCaliber[1]; данные K300_2. */
#define K300_2 TCaliber[1]
/* Задаёт K400_1 = TCaliber[2]; данные K400_1. */
#define K400_1 TCaliber[2]
/* Задаёт K400_2 = TCaliber[3]; данные K400_2. */
#define K400_2 TCaliber[3]
/* Задаёт K100_1 = TCaliber[0]; данные K100_1. */
#define K100_1 TCaliber[0]
/* Задаёт K100_2 = TCaliber[1]; данные K100_2. */
#define K100_2 TCaliber[1]
/* Задаёт K150_1 = TCaliber[2]; данные K150_1. */
#define K150_1 TCaliber[2]
/* Задаёт K150_2 = TCaliber[3]; данные K150_2. */
#define K150_2 TCaliber[3]
/* Задаёт K100_D = TCaliber[0]; данные K100_D. */
#define K100_D TCaliber[0]
/* Задаёт K150_D = TCaliber[1]; данные K150_D. */
#define K150_D TCaliber[1]
/* Задаёт LastMode = Modbus[126].all; последний режим платы, технологический регистр 126. */
#define LastMode Modbus[126].all
/* Задаёт Commands = Modbus[127].all; слово команд, технологический регистр 127. */
#define Commands Modbus[127].all
/* Задаёт cTestLamp = Modbus[127].bit.bit0; данные cTestLamp. */
#define cTestLamp Modbus[127].bit.bit0
/* Задаёт cDefParam = Modbus[127].bit.bit1; данные cDefParam. */
#define cDefParam Modbus[127].bit.bit1
/* Задаёт cSaveParam = Modbus[127].bit.bit2; данные cSaveParam. */
#define cSaveParam Modbus[127].bit.bit2
/* Задаёт cLoadParam = Modbus[127].bit.bit3; данные cLoadParam. */
#define cLoadParam Modbus[127].bit.bit3
/* Задаёт cTermoCal = Modbus[127].bit.bit4; данные cTermoCal. */
#define cTermoCal Modbus[127].bit.bit4
/* Задаёт cKoefCalc = Modbus[127].bit.bit5; данные cKoefCalc. */
#define cKoefCalc Modbus[127].bit.bit5
/* Задаёт cUMPreset = Modbus[127].bit.bit6; данные cUMPreset. */
#define cUMPreset Modbus[127].bit.bit6
/* Задаёт cUMPstart = Modbus[127].bit.bit7; данные cUMPstart. */
#define cUMPstart Modbus[127].bit.bit7
/* Задаёт cInitDac = Modbus[127].bit.bit8; c Init ЦАП. */
#define cInitDac Modbus[127].bit.bit8
/* Задаёт cCalibrDac = Modbus[127].bit.bit9; c Calibr ЦАП. */
#define cCalibrDac Modbus[127].bit.bit9
/* Задаёт cSecretBt = Modbus[127].bit.bitA; данные cSecretBt. */
#define cSecretBt Modbus[127].bit.bitA
/* Задаёт cLiteFire = Modbus[127].bit.bitB; данные cLiteFire. */
#define cLiteFire Modbus[127].bit.bitB
/* Задаёт cRawMeat = Modbus[127].bit.bitC; данные cRawMeat. */
#define cRawMeat Modbus[127].bit.bitC
/* Задаёт cReset = Modbus[127].bit.bitF; c сброс. */
#define cReset Modbus[127].bit.bitF
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif //PACKAGE

View File

@@ -1,153 +1,282 @@
/* Перемычки режима платы, дискретные входы и выходы. Русские пояснения сохранены в UTF-8. */
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
/* Объявляет Mode — рабочий адрес или режим платы, выбранный перемычками; Desk — аппаратно определённый тип платы; TermoAD — данные TermoAD; TermoRS — данные TermoRS; TermoSW — данные TermoSW. Память определена в другом модуле. */
extern int Mode,Desk,TermoAD,TermoRS,TermoSW,Kurrent,Kalibro,Owen;
/* Объявляет интерфейс функции setup_leds_line; реализация вызывается через этот прототип. */
void setup_leds_line(void);
/* Объявляет интерфейс функции unsetup_leds_line; реализация вызывается через этот прототип. */
void unsetup_leds_line(void);
/* Задаёт led1_toggle = GpioDataRegs.GPBTOGGLE.bit.GPIO32=1; данные led1_toggle. */
#define led1_toggle() GpioDataRegs.GPBTOGGLE.bit.GPIO32=1
/* Задаёт led2_toggle = GpioDataRegs.GPBTOGGLE.bit.GPIO48=1; данные led2_toggle. */
#define led2_toggle() GpioDataRegs.GPBTOGGLE.bit.GPIO48=1
/* Задаёт led1_off = GpioDataRegs.GPBSET.bit.GPIO32=1; данные led1_off. */
#define led1_off() GpioDataRegs.GPBSET.bit.GPIO32=1
/* Задаёт led2_off = GpioDataRegs.GPBSET.bit.GPIO48=1; данные led2_off. */
#define led2_off() GpioDataRegs.GPBSET.bit.GPIO48=1
/* Задаёт led1_on = GpioDataRegs.GPBCLEAR.bit.GPIO32=1; данные led1_on. */
#define led1_on() GpioDataRegs.GPBCLEAR.bit.GPIO32=1
/* Задаёт led2_on = GpioDataRegs.GPBCLEAR.bit.GPIO48=1; данные led2_on. */
#define led2_on() GpioDataRegs.GPBCLEAR.bit.GPIO48=1
// READY ---------------------------------------------------------
/* Начинает функцию dat_READY; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void dat_READY(int x)
/* Записывает GpioDataRegs.GPBDAT.bit.GPIO61 значением !x; else; аппаратная линия ввода/вывода GPIO61. */
{ if(Desk==dsk_LOAD) GpioDataRegs.GPBDAT.bit.GPIO61=!x; else
/* Записывает GpioDataRegs.GPBDAT.bit.GPIO59 значением !x; }; аппаратная линия ввода/вывода GPIO59. */
GpioDataRegs.GPBDAT.bit.GPIO59=!x; }
/* Начинает функцию set_READY; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void set_READY(void)
/* Записывает GpioDataRegs.GPBCLEAR.bit.GPIO61 значением 1; else; аппаратная линия ввода/вывода GPIO61. */
{ if(Desk==dsk_LOAD) GpioDataRegs.GPBCLEAR.bit.GPIO61=1; else
/* Записывает GpioDataRegs.GPBCLEAR.bit.GPIO59 значением 1; }; аппаратная линия ввода/вывода GPIO59. */
GpioDataRegs.GPBCLEAR.bit.GPIO59=1; }
/* Начинает функцию clear_READY; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void clear_READY(void)
/* Записывает GpioDataRegs.GPBSET.bit.GPIO61 значением 1; else; аппаратная линия ввода/вывода GPIO61. */
{ if(Desk==dsk_LOAD) GpioDataRegs.GPBSET.bit.GPIO61=1; else
/* Записывает GpioDataRegs.GPBSET.bit.GPIO59 значением 1; }; аппаратная линия ввода/вывода GPIO59. */
GpioDataRegs.GPBSET.bit.GPIO59=1; }
/* Начинает функцию toggle_READY; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void toggle_READY(void)
/* Записывает GpioDataRegs.GPBTOGGLE.bit.GPIO61 значением 1;else; аппаратная линия ввода/вывода GPIO61. */
{ if(Desk==dsk_LOAD) GpioDataRegs.GPBTOGGLE.bit.GPIO61=1;else
/* Записывает GpioDataRegs.GPBTOGGLE.bit.GPIO59 значением 1;}; аппаратная линия ввода/вывода GPIO59. */
GpioDataRegs.GPBTOGGLE.bit.GPIO59=1;}
// PULT READY -----------------------------------------------------
/* Начинает функцию dat_ONLINE; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void dat_ONLINE(int x)
/* Записывает GpioDataRegs.GPADAT.bit.GPIO0 значением !x; }; аппаратная линия ввода/вывода GPIO0. */
{ GpioDataRegs.GPADAT.bit.GPIO0=!x; }
/* Начинает функцию set_ONLINE; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void set_ONLINE(void)
/* Записывает GpioDataRegs.GPASET.bit.GPIO0 значением 1; }; аппаратная линия ввода/вывода GPIO0. */
{ GpioDataRegs.GPASET.bit.GPIO0=1; }
/* Начинает функцию clear_ONLINE; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void clear_ONLINE(void)
/* Записывает GpioDataRegs.GPACLEAR.bit.GPIO0 значением 1; }; аппаратная линия ввода/вывода GPIO0. */
{ GpioDataRegs.GPACLEAR.bit.GPIO0=1; }
/* Начинает функцию toggle_ONLINE; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void toggle_ONLINE(void)
/* Записывает GpioDataRegs.GPATOGGLE.bit.GPIO0 значением 1; }; аппаратная линия ввода/вывода GPIO0. */
{ GpioDataRegs.GPATOGGLE.bit.GPIO0=1; }
// LED OUT 1 -----------------------------------------------------
/* Начинает функцию dat_LED_OUT_1; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void dat_LED_OUT_1(int x)
{ if(Desk==dsk_BKST || Desk==dsk_COMM)
/* Продолжает список аргументов, полей или выражение { if(Desk==dsk_BKST || Desk==dsk_COMM); порядок элементов сохраняется. */
{ if(Desk==dsk_BKST || Desk==dsk_COMM)
/* Записывает GpioDataRegs.GPBDAT.bit.GPIO60 значением !x; else; аппаратная линия ввода/вывода GPIO60. */
GpioDataRegs.GPBDAT.bit.GPIO60=!x; else
/* Проверяет if(Desk==dsk_LOAD) GpioDataRegs.GPADAT.bit.GPIO7=!x; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_LOAD) GpioDataRegs.GPADAT.bit.GPIO7=!x; else
/* Записывает GpioDataRegs.GPBDAT.bit.GPIO60 значением x; }; аппаратная линия ввода/вывода GPIO60. */
GpioDataRegs.GPBDAT.bit.GPIO60=x; }
/* Начинает функцию set_LED_OUT_1; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void set_LED_OUT_1(void)
{ if(Desk==dsk_BKST || Desk==dsk_COMM)
/* Продолжает список аргументов, полей или выражение { if(Desk==dsk_BKST || Desk==dsk_COMM); порядок элементов сохраняется. */
{ if(Desk==dsk_BKST || Desk==dsk_COMM)
/* Записывает GpioDataRegs.GPBCLEAR.bit.GPIO60 значением 1; else; аппаратная линия ввода/вывода GPIO60. */
GpioDataRegs.GPBCLEAR.bit.GPIO60=1; else
/* Проверяет if(Desk==dsk_LOAD) GpioDataRegs.GPACLEAR.bit.GPIO7=1; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_LOAD) GpioDataRegs.GPACLEAR.bit.GPIO7=1; else
/* Записывает GpioDataRegs.GPBSET.bit.GPIO60 значением 1; }; аппаратная линия ввода/вывода GPIO60. */
GpioDataRegs.GPBSET.bit.GPIO60=1; }
/* Начинает функцию clear_LED_OUT_1; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void clear_LED_OUT_1(void)
{ if(Desk==dsk_BKST || Desk==dsk_COMM)
/* Продолжает список аргументов, полей или выражение { if(Desk==dsk_BKST || Desk==dsk_COMM); порядок элементов сохраняется. */
{ if(Desk==dsk_BKST || Desk==dsk_COMM)
/* Записывает GpioDataRegs.GPBSET.bit.GPIO60 значением 1; else; аппаратная линия ввода/вывода GPIO60. */
GpioDataRegs.GPBSET.bit.GPIO60=1; else
/* Проверяет if(Desk==dsk_LOAD) GpioDataRegs.GPASET.bit.GPIO7=1; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_LOAD) GpioDataRegs.GPASET.bit.GPIO7=1; else
/* Записывает GpioDataRegs.GPBCLEAR.bit.GPIO60 значением 1; }; аппаратная линия ввода/вывода GPIO60. */
GpioDataRegs.GPBCLEAR.bit.GPIO60=1; }
/* Начинает функцию toggle_LED_OUT_1; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void toggle_LED_OUT_1(void)
/* Записывает GpioDataRegs.GPATOGGLE.bit.GPIO7 значением 1; else; аппаратная линия ввода/вывода GPIO7. */
{ if(Desk==dsk_LOAD) GpioDataRegs.GPATOGGLE.bit.GPIO7=1; else
/* Записывает GpioDataRegs.GPBTOGGLE.bit.GPIO60 значением 1;}; аппаратная линия ввода/вывода GPIO60. */
GpioDataRegs.GPBTOGGLE.bit.GPIO60=1;}
// LED OUT 2 -----------------------------------------------------
/* Начинает функцию dat_LED_OUT_2; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void dat_LED_OUT_2(int x)
/* Записывает GpioDataRegs.GPADAT.bit.GPIO1 значением !x; else; аппаратная линия ввода/вывода GPIO1. */
{ if(Desk==dsk_LOAD) GpioDataRegs.GPADAT.bit.GPIO1=!x; else
/* Проверяет if(Desk==dsk_BKST) GpioDataRegs.GPBDAT.bit.GPIO62=!x; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_BKST) GpioDataRegs.GPBDAT.bit.GPIO62=!x; else
/* Проверяет if(Desk==dsk_COMM) GpioDataRegs.GPBDAT.bit.GPIO63=!x; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_COMM) GpioDataRegs.GPBDAT.bit.GPIO63=!x; else
/* Записывает GpioDataRegs.GPBDAT.bit.GPIO63 значением x; }; аппаратная линия ввода/вывода GPIO63. */
GpioDataRegs.GPBDAT.bit.GPIO63=x; }
/* Начинает функцию set_LED_OUT_2; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void set_LED_OUT_2(void)
/* Записывает GpioDataRegs.GPACLEAR.bit.GPIO1 значением 1; else; аппаратная линия ввода/вывода GPIO1. */
{ if(Desk==dsk_LOAD) GpioDataRegs.GPACLEAR.bit.GPIO1=1; else
/* Проверяет if(Desk==dsk_BKST) GpioDataRegs.GPBCLEAR.bit.GPIO62=1; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_BKST) GpioDataRegs.GPBCLEAR.bit.GPIO62=1; else
/* Проверяет if(Desk==dsk_COMM) GpioDataRegs.GPBCLEAR.bit.GPIO63=1; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_COMM) GpioDataRegs.GPBCLEAR.bit.GPIO63=1; else
/* Записывает GpioDataRegs.GPBSET.bit.GPIO63 значением 1; }; аппаратная линия ввода/вывода GPIO63. */
GpioDataRegs.GPBSET.bit.GPIO63=1; }
/* Начинает функцию clear_LED_OUT_2; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void clear_LED_OUT_2(void)
/* Записывает GpioDataRegs.GPASET.bit.GPIO7 значением 1; else; аппаратная линия ввода/вывода GPIO7. */
{ if(Desk==dsk_LOAD) GpioDataRegs.GPASET.bit.GPIO7=1; else
/* Проверяет if(Desk==dsk_BKST) GpioDataRegs.GPBSET.bit.GPIO62=1; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_BKST) GpioDataRegs.GPBSET.bit.GPIO62=1; else
/* Проверяет if(Desk==dsk_COMM) GpioDataRegs.GPBSET.bit.GPIO63=1; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_COMM) GpioDataRegs.GPBSET.bit.GPIO63=1; else
/* Записывает GpioDataRegs.GPBCLEAR.bit.GPIO63 значением 1; }; аппаратная линия ввода/вывода GPIO63. */
GpioDataRegs.GPBCLEAR.bit.GPIO63=1; }
/* Начинает функцию toggle_LED_OUT_2; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void toggle_LED_OUT_2(void)
/* Записывает GpioDataRegs.GPATOGGLE.bit.GPIO1 значением 1; else; аппаратная линия ввода/вывода GPIO1. */
{ if(Desk==dsk_LOAD) GpioDataRegs.GPATOGGLE.bit.GPIO1=1; else
/* Проверяет if(Desk==dsk_BKST) GpioDataRegs.GPBTOGGLE.bit.GPIO62=1;else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_BKST) GpioDataRegs.GPBTOGGLE.bit.GPIO62=1;else
/* Записывает GpioDataRegs.GPBTOGGLE.bit.GPIO63 значением 1;}; аппаратная линия ввода/вывода GPIO63. */
GpioDataRegs.GPBTOGGLE.bit.GPIO63=1;}
// RES OUT 1 -----------------------------------------------------
/* Начинает функцию dat_RES_OUT_1; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void dat_RES_OUT_1(int x)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(Desk==dsk_LOAD или Desk==dsk_EPLT); последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Записывает GpioDataRegs.GPADAT.bit.GPIO9 значением !x; else; аппаратная линия ввода/вывода GPIO9. */
GpioDataRegs.GPADAT.bit.GPIO9=!x; else
/* Проверяет if(Desk==dsk_BKSD) GpioDataRegs.GPBDAT.bit.GPIO62=!x; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_BKSD) GpioDataRegs.GPBDAT.bit.GPIO62=!x; else
/* Записывает GpioDataRegs.GPBDAT.bit.GPIO58 значением !x; }; аппаратная линия ввода/вывода GPIO58. */
GpioDataRegs.GPBDAT.bit.GPIO58=!x; }
/* Начинает функцию set_RES_OUT_1; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void set_RES_OUT_1(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(Desk==dsk_LOAD или Desk==dsk_EPLT); последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Записывает GpioDataRegs.GPACLEAR.bit.GPIO9 значением 1; else; аппаратная линия ввода/вывода GPIO9. */
GpioDataRegs.GPACLEAR.bit.GPIO9=1; else
/* Проверяет if(Desk==dsk_BKSD) GpioDataRegs.GPBCLEAR.bit.GPIO62=1; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_BKSD) GpioDataRegs.GPBCLEAR.bit.GPIO62=1; else
/* Записывает GpioDataRegs.GPBCLEAR.bit.GPIO58 значением 1; }; аппаратная линия ввода/вывода GPIO58. */
GpioDataRegs.GPBCLEAR.bit.GPIO58=1; }
/* Начинает функцию clear_RES_OUT_1; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void clear_RES_OUT_1(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(Desk==dsk_LOAD или Desk==dsk_EPLT); последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Записывает GpioDataRegs.GPASET.bit.GPIO9 значением 1; else; аппаратная линия ввода/вывода GPIO9. */
GpioDataRegs.GPASET.bit.GPIO9=1; else
/* Проверяет if(Desk==dsk_BKSD) GpioDataRegs.GPBSET.bit.GPIO62=1; else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_BKSD) GpioDataRegs.GPBSET.bit.GPIO62=1; else
/* Записывает GpioDataRegs.GPBSET.bit.GPIO58 значением 1; }; аппаратная линия ввода/вывода GPIO58. */
GpioDataRegs.GPBSET.bit.GPIO58=1; }
/* Начинает функцию toggle_RES_OUT_1; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void toggle_RES_OUT_1(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(Desk==dsk_LOAD или Desk==dsk_EPLT); последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Записывает GpioDataRegs.GPATOGGLE.bit.GPIO9 значением 1; else; аппаратная линия ввода/вывода GPIO9. */
GpioDataRegs.GPATOGGLE.bit.GPIO9=1; else
/* Проверяет if(Desk==dsk_BKSD) GpioDataRegs.GPBTOGGLE.bit.GPIO62=1;else; последующий оператор выполняется только при истинном условии. */
if(Desk==dsk_BKSD) GpioDataRegs.GPBTOGGLE.bit.GPIO62=1;else
/* Записывает GpioDataRegs.GPBTOGGLE.bit.GPIO58 значением 1;}; аппаратная линия ввода/вывода GPIO58. */
GpioDataRegs.GPBTOGGLE.bit.GPIO58=1;}
// RES OUT 2 -----------------------------------------------------
/* Начинает функцию dat_RES_OUT_2; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void dat_RES_OUT_2(int x)
{ if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Продолжает список аргументов, полей или выражение { if(Desk==dsk_LOAD || Desk==dsk_EPLT); порядок элементов сохраняется. */
{ if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Записывает GpioDataRegs.GPADAT.bit.GPIO3 значением !x; else; аппаратная линия ввода/вывода GPIO3. */
GpioDataRegs.GPADAT.bit.GPIO3=!x; else
/* Записывает GpioDataRegs.GPBDAT.bit.GPIO61 значением x; }; аппаратная линия ввода/вывода GPIO61. */
GpioDataRegs.GPBDAT.bit.GPIO61=x; }
/* Начинает функцию set_RES_OUT_2; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void set_RES_OUT_2(void)
{ if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Продолжает список аргументов, полей или выражение { if(Desk==dsk_LOAD || Desk==dsk_EPLT); порядок элементов сохраняется. */
{ if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Записывает GpioDataRegs.GPACLEAR.bit.GPIO3 значением 1; else; аппаратная линия ввода/вывода GPIO3. */
GpioDataRegs.GPACLEAR.bit.GPIO3=1; else
/* Записывает GpioDataRegs.GPBCLEAR.bit.GPIO61 значением 1; }; аппаратная линия ввода/вывода GPIO61. */
GpioDataRegs.GPBCLEAR.bit.GPIO61=1; }
/* Начинает функцию clear_RES_OUT_2; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void clear_RES_OUT_2(void)
{ if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Продолжает список аргументов, полей или выражение { if(Desk==dsk_LOAD || Desk==dsk_EPLT); порядок элементов сохраняется. */
{ if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Записывает GpioDataRegs.GPASET.bit.GPIO3 значением 1; else; аппаратная линия ввода/вывода GPIO3. */
GpioDataRegs.GPASET.bit.GPIO3=1; else
/* Записывает GpioDataRegs.GPBSET.bit.GPIO61 значением 1; }; аппаратная линия ввода/вывода GPIO61. */
GpioDataRegs.GPBSET.bit.GPIO61=1; }
/* Начинает функцию toggle_RES_OUT_2; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void toggle_RES_OUT_2(void)
{ if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Продолжает список аргументов, полей или выражение { if(Desk==dsk_LOAD || Desk==dsk_EPLT); порядок элементов сохраняется. */
{ if(Desk==dsk_LOAD || Desk==dsk_EPLT)
/* Записывает GpioDataRegs.GPATOGGLE.bit.GPIO3 значением 1; else; аппаратная линия ввода/вывода GPIO3. */
GpioDataRegs.GPATOGGLE.bit.GPIO3=1; else
/* Записывает GpioDataRegs.GPBTOGGLE.bit.GPIO61 значением 1;}; аппаратная линия ввода/вывода GPIO61. */
GpioDataRegs.GPBTOGGLE.bit.GPIO61=1;}
// START DPTB -----------------------------------------------------
/* Начинает функцию dat_START_DPTB; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void dat_START_DPTB(int x)
/* Записывает GpioDataRegs.GPBDAT.bit.GPIO62 значением x; }; аппаратная линия ввода/вывода GPIO62. */
{ GpioDataRegs.GPBDAT.bit.GPIO62=x; }
/* Начинает функцию set_START_DPTB; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void set_START_DPTB(void)
/* Записывает GpioDataRegs.GPBSET.bit.GPIO62 значением 1; }; аппаратная линия ввода/вывода GPIO62. */
{ GpioDataRegs.GPBSET.bit.GPIO62=1; }
/* Начинает функцию clear_START_DPTB; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void clear_START_DPTB(void)
/* Записывает GpioDataRegs.GPBCLEAR.bit.GPIO62 значением 1; }; аппаратная линия ввода/вывода GPIO62. */
{ GpioDataRegs.GPBCLEAR.bit.GPIO62=1; }
/* Начинает функцию toggle_START_DPTB; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void toggle_START_DPTB(void)
/* Записывает GpioDataRegs.GPBTOGGLE.bit.GPIO62 значением 1;}; аппаратная линия ввода/вывода GPIO62. */
{ GpioDataRegs.GPBTOGGLE.bit.GPIO62=1;}
// STOP DPTB -----------------------------------------------------
/* Начинает функцию dat_STOP_DPTB; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void dat_STOP_DPTB(int x)
/* Записывает GpioDataRegs.GPBDAT.bit.GPIO58 значением x; }; аппаратная линия ввода/вывода GPIO58. */
{ GpioDataRegs.GPBDAT.bit.GPIO58=x; }
/* Начинает функцию set_STOP_DPTB; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void set_STOP_DPTB(void)
/* Записывает GpioDataRegs.GPBSET.bit.GPIO58 значением 1; }; аппаратная линия ввода/вывода GPIO58. */
{ GpioDataRegs.GPBSET.bit.GPIO58=1; }
/* Начинает функцию clear_STOP_DPTB; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void clear_STOP_DPTB(void)
/* Записывает GpioDataRegs.GPBCLEAR.bit.GPIO58 значением 1; }; аппаратная линия ввода/вывода GPIO58. */
{ GpioDataRegs.GPBCLEAR.bit.GPIO58=1; }
/* Начинает функцию toggle_STOP_DPTB; назначение модуля — перемычки режима платы, дискретные входы и выходы. */
static inline void toggle_STOP_DPTB(void)
/* Записывает GpioDataRegs.GPBTOGGLE.bit.GPIO58 значением 1;}; аппаратная линия ввода/вывода GPIO58. */
{ GpioDataRegs.GPBTOGGLE.bit.GPIO58=1;}
/* Продолжает список аргументов, полей или выражение extern LONGE DigErr;; порядок элементов сохраняется. */
extern LONGE DigErr;
/* Объявляет интерфейс функции select_tpl_canal; реализация вызывается через этот прототип. */
void select_tpl_canal(int n_tpl);
/* Объявляет интерфейс функции select_tpl_255; реализация вызывается через этот прототип. */
void select_tpl_255(void);
/* Определяет адрес и тип платы по аппаратным перемычкам и задаёт рабочий режим. */
void get_Mode(void);
/* Считывает кнопки, обновляет флаги команд и учитывает текущий тип платы. */
void get_Buttons(void);

View File

@@ -1,3 +1,5 @@
/* Обмен и индикация пульта. Русские пояснения сохранены в UTF-8. */
//void what_is(void);
/* Обслуживает периодический обмен и индикацию пульта вместо измерительной платы. */
interrupt void cpu_timer1_isr_PULT(void);

View File

@@ -1,132 +1,194 @@
/* Драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: __SPISE2P_H__ ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef __SPISE2P_H__
#define __SPISE2P_H__
/* Определяет защитный символ или переключатель __SPISE2P_H__ для последующей компиляции. */
#define __SPISE2P_H__
/* Physical EEPROM layout shared with the linker and SETGUI. */
/* Подключает "eeprom_config.h": выбор профиля физически установленной EEPROM при сборке. */
#include "eeprom_config.h"
/* Подключает "include/balsam167_eeprom_layout.h": настройки и интерфейс balsam167_eeprom_layout. */
#include "include/balsam167_eeprom_layout.h"
// ¨ìêîñòü ïàìàòè â áàéòàõ
// Ёмкость памати в байтах
/* Preserve compact 16-bit arithmetic for the original 32-KiB build.
* Only the large part needs 32-bit word addresses and transfer lengths. */
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
#if EEPROM_M95M02
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef unsigned long SE2P_SIZE;
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef unsigned int SE2P_SIZE;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Задаёт SEEPROM_LEN = BALSAM167_EEPROM_BYTES; данные SEEPROM_LEN. */
#define SEEPROM_LEN BALSAM167_EEPROM_BYTES
#define NULL 0
/* Задаёт NULL = 0; данные NULL. */
#define NULL 0
/* Задаёт SIXTEEN_BIT = 15; SIXTEEN бит. */
#define SIXTEEN_BIT 15
/* Задаёт EIGHT_BIT = 07; EIGHT бит. */
#define EIGHT_BIT 07
/***************************************************************/
/* Configurable Parameter for SPI bus Serial EEPROM */
/***************************************************************/
#define SPISE2P_DATA_WIDTH SIXTEEN_BIT//EIGHT_BIT
#define SPISE2P_ADDR_WIDTH SIXTEEN_BIT
#define SPIBAUD_REG_VAL 1//12
#define SPICLK_PHASE 1
#define SPICLK_POLARITY 0
/***************************************************************/
/* Configurable Parameter for SPI bus Serial EEPROM */
/***************************************************************/
/* Задаёт SPISE2P_DATA_WIDTH = SIXTEEN_BIT; 2 P данные WIDTH. */
#define SPISE2P_DATA_WIDTH SIXTEEN_BIT//EIGHT_BIT
/* Задаёт SPISE2P_ADDR_WIDTH = SIXTEEN_BIT; данные SPISE2P_ADDR_WIDTH. */
#define SPISE2P_ADDR_WIDTH SIXTEEN_BIT
/* Задаёт SPIBAUD_REG_VAL = 1; данные SPIBAUD_REG_VAL. */
#define SPIBAUD_REG_VAL 1//12
/* Задаёт SPICLK_PHASE = 1; SPICLK фаза. */
#define SPICLK_PHASE 1
/* Задаёт SPICLK_POLARITY = 0; данные SPICLK_POLARITY. */
#define SPICLK_POLARITY 0
/* Задаёт SPIBAUD_RATE = 100000; данные SPIBAUD_RATE. */
#define SPIBAUD_RATE 100000
//10000000
/**************************************************************/
/**************************************************************/
/* Serial EEPROM Command words, left justified */
/* Задаёт SPISE2P_READ_CMD = 0x0300; 2 P чтение CMD. */
#define SPISE2P_READ_CMD 0x0300
/* Задаёт SPISE2P_WRITE_CMD = 0x0200; 2 P запись CMD. */
#define SPISE2P_WRITE_CMD 0x0200
/* Задаёт SPISE2P_WRDI_CMD = 0x0400; данные SPISE2P_WRDI_CMD. */
#define SPISE2P_WRDI_CMD 0x0400
/* Задаёт SPISE2P_WREN_CMD = 0x0600; данные SPISE2P_WREN_CMD. */
#define SPISE2P_WREN_CMD 0x0600
/* Задаёт SPISE2P_RDSR_CMD = 0x0500; данные SPISE2P_RDSR_CMD. */
#define SPISE2P_RDSR_CMD 0x0500
/* Задаёт SPISE2P_WRSR_CMD = 0x0100; данные SPISE2P_WRSR_CMD. */
#define SPISE2P_WRSR_CMD 0x0100
/* Задаёт SPISE2P_RDID_CMD = 0x0A00; данные SPISE2P_RDID_CMD. */
#define SPISE2P_RDID_CMD 0x0A00
/* Задаёт SPISE2P_DUMMY_DATA = 0x0000; 2 P DUMMY данные. */
#define SPISE2P_DUMMY_DATA 0x0000
/* Задаёт SPISE2P_BUSY_MASK = 0x01; 2 P BUSY маска. */
#define SPISE2P_BUSY_MASK 0x01
/* Symbolic constant for SPICCR to transfer 8bit or 16 bit value*/
/* Задаёт SPISE2P_TFR16BIT = 0x80|(SPICLK_POLARITY<<6)|SIXTEEN_BIT; 2 P 16 бит. */
#define SPISE2P_TFR16BIT 0x80|(SPICLK_POLARITY<<6)|SIXTEEN_BIT
/* Задаёт SPISE2P_TFR8BIT = 0x80|(SPICLK_POLARITY<<6)|EIGHT_BIT; 2 P 8 бит. */
#define SPISE2P_TFR8BIT 0x80|(SPICLK_POLARITY<<6)|EIGHT_BIT
/* Status valus */
#define SPISE2P_WRRQ 1 /* Write Requset */
#define SPISE2P_RDRQ 2 /* Read request */
#define SPISE2P_WRIP 4 /* Write in progress */
#define SPISE2P_RDIP 8 /* Read in progress */
#define SPISE2P_WRRQ 1 /* Write Requset */ /* Задаёт SPISE2P_WRRQ = 1; данные SPISE2P_WRRQ. */
#define SPISE2P_RDRQ 2 /* Read request */ /* Задаёт SPISE2P_RDRQ = 2; данные SPISE2P_RDRQ. */
#define SPISE2P_WRIP 4 /* Write in progress */ /* Задаёт SPISE2P_WRIP = 4; данные SPISE2P_WRIP. */
#define SPISE2P_RDIP 8 /* Read in progress */ /* Задаёт SPISE2P_RDIP = 8; данные SPISE2P_RDIP. */
/* Message declaration */
typedef struct {
unsigned int *dataPtr; /* Data pointer */
unsigned long nrData; /* number of data */
unsigned long se2pAddr; /* se2pAddr */
}SE2P_DATA;
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef struct {
unsigned int *dataPtr; /* Data pointer */ /* Объявляет dataPtr — данные Ptr. Хранит указатель на данные. */
unsigned long nrData; /* number of data */ /* Объявляет nrData — nr данные. */
unsigned long se2pAddr; /* se2pAddr */ /* Объявляет se2pAddr — данные se2pAddr. */
/* Продолжает список аргументов, полей или выражение }SE2P_DATA;; порядок элементов сохраняется. */
}SE2P_DATA;
/* Object declaration */
typedef struct {
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef struct {
/* Main loop publishes the descriptor before setting csr; Timer2 consumes it.
* Both accesses are volatile so optimization cannot publish the request first. */
/* Продолжает список аргументов, полей или выражение SE2P_DATA * volatile msgPtr;; порядок элементов сохраняется. */
SE2P_DATA * volatile msgPtr;
volatile unsigned int csr; /* control/status register */
void (*init)(void *);
volatile unsigned int csr; /* control/status register */ /* Объявляет csr — данные csr. volatile требует фактического чтения или записи при каждом доступе. */
/* Вызывает void с аргументами (*init)(void *) в текущей последовательности операций. */
void (*init)(void *);
/* Вызывает void с аргументами (*tick)(void *) в текущей последовательности операций. */
void (*tick)(void *);
void (*csset)(void);
void (*csclr)(void);
}SPISE2P_DRV;
/* Вызывает void с аргументами (*csset)(void) в текущей последовательности операций. */
void (*csset)(void);
/* Вызывает void с аргументами (*csclr)(void) в текущей последовательности операций. */
void (*csclr)(void);
/* Продолжает список аргументов, полей или выражение }SPISE2P_DRV;; порядок элементов сохраняется. */
}SPISE2P_DRV;
/* Задаёт SPISE2P_DRV_DEFAULTS = { NULL,; данные SPISE2P_DRV_DEFAULTS. */
#define SPISE2P_DRV_DEFAULTS { NULL,\
0,\
(void (*)(void *))SPISE2P_DRV_init,\
(void (*)(void *))SPISE2P_DRV_tick,\
(void (*)(void))SPISE2P_DRV_csset,\
(void (*)(void))SPISE2P_DRV_csclr}
0,/* Элемент постоянной таблицы 0,; порядок значений совпадает с порядком индексов потребителя. */ \
(void (*)(void *))SPISE2P_DRV_init,/* Продолжает список аргументов, полей или выражение (void (*)(void *))SPISE2P_DRV_init,; порядок элементов сохраняется. */ \
(void (*)(void *))SPISE2P_DRV_tick,/* Продолжает список аргументов, полей или выражение (void (*)(void *))SPISE2P_DRV_tick,; порядок элементов сохраняется. */ \
(void (*)(void))SPISE2P_DRV_csset,/* Продолжает список аргументов, полей или выражение (void (*)(void))SPISE2P_DRV_csset,; порядок элементов сохраняется. */ \
(void (*)(void))SPISE2P_DRV_csclr} /* Продолжает список аргументов, полей или выражение (void (*)(void))SPISE2P_DRV_csclr}; порядок элементов сохраняется. */
/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */
typedef SPISE2P_DRV *SPISE2P_DRV_handle;
void SPISE2P_DRV_init(SPISE2P_DRV * );
/* Объявляет интерфейс функции SPISE2P_DRV_init; реализация вызывается через этот прототип. */
void SPISE2P_DRV_init(SPISE2P_DRV * );
/* Продвигает неблокирующий автомат SPI EEPROM: команда, адрес, данные и ожидание завершения записи. */
void SPISE2P_DRV_tick(SPISE2P_DRV *);
void SPISE2P_DRV_csset(void);
/* Объявляет интерфейс функции SPISE2P_DRV_csset; реализация вызывается через этот прототип. */
void SPISE2P_DRV_csset(void);
/* Объявляет интерфейс функции SPISE2P_DRV_csclr; реализация вызывается через этот прототип. */
void SPISE2P_DRV_csclr(void);
/* Проверяет завершение текущего задания SPI EEPROM перед постановкой следующего. */
unsigned int spiSe2pFree(SPISE2P_DRV *se2p);
/* Ставит задание записи в SPI-драйвер с учётом состояния занятости EEPROM. */
void spiSe2pWrite(SPISE2P_DRV *se2p, SE2P_DATA *data);
/* Ставит задание чтения в SPI-драйвер с указателем буфера, длиной и физическим адресом. */
void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *data);
/* Условие компиляции (SPISE2P_DATA_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */
#if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT)
/* Задаёт PROM_LEN = BALSAM167_EEPROM_WORDS; данные PROM_LEN. */
#define PROM_LEN BALSAM167_EEPROM_WORDS
/* Задаёт PAGE_LEN = (BALSAM167_EEPROM_PAGE_BYTES / 2); данные PAGE_LEN. */
#define PAGE_LEN (BALSAM167_EEPROM_PAGE_BYTES / 2)
/* Задаёт WORD_LEN = 2; слово LEN. */
#define WORD_LEN 2
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Задаёт PROM_LEN = BALSAM167_EEPROM_BYTES; данные PROM_LEN. */
#define PROM_LEN BALSAM167_EEPROM_BYTES
/* Задаёт PAGE_LEN = BALSAM167_EEPROM_PAGE_BYTES; данные PAGE_LEN. */
#define PAGE_LEN BALSAM167_EEPROM_PAGE_BYTES
/* Задаёт WORD_LEN = 1; слово LEN. */
#define WORD_LEN 1
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Óñòàíîâêà äðàéâåðà ñåðèàëüíîé EEPROM. **
** Èíèöèàëèçàöèà SPI è ïðî÷. Òàêæå íàñòðîéêà òàéìåðà. **
** Äðàéâåð ðàáîòàåò íà ïðåðûâàíèàõ îò òàéìåðà 2! */
/* Установка драйвера сериальной EEPROM. **
** Инициализациа SPI и проч. Также настройка таймера. **
** Драйвер работает на прерываниах от таймера 2! */
/* Объявляет интерфейс функции InitSeeprom; реализация вызывается через этот прототип. */
void InitSeeprom(void);
/* Çàïèñü áëîêà â SEEPROM. Ïàðàìåòðû òàêîâû: **
** adres - àäðåñ â åïðîìêå, êóäà ïèñàòü. **
** adres = 0..0x8000, åñëè äëèíà ñëîâà 8 áèò **
** adres = 0..0x4000, åñëè äëèíà ñëîâà 16 áèò **
** buf - óêàçàòåëü íà ïàìàòü, îòêóäà ïèñàòü. **
** size - äëèíà áëîêà â áàéòàõ. Ïî-ëþáîìó â áàéòàõ! */
/* Запись блока в SEEPROM. Параметры таковы: **
** adres - адрес в епромке, куда писать. **
** adres = 0..0x8000, если длина слова 8 бит **
** adres = 0..0x4000, если длина слова 16 бит **
** buf - указатель на памать, откуда писать. **
** size - длина блока в байтах. По-любому в байтах! */
/* Пишет EEPROM с разделением по физическим страницам; область параметров не пересекает образ прошивки. */
void Seeprom_write(SE2P_SIZE adres, unsigned int buf[], SE2P_SIZE size);
/* ×òåíèå áëîêà èç SEEPROM. Ïàðàìåòðû òàêîâû: **
** adres - àäðåñ â åïðîìêå, îòêóäà ÷èòàòü. **
** adres = 0..0x8000, åñëè äëèíà ñëîâà 8 áèò **
** adres = 0..0x4000, åñëè äëèíà ñëîâà 16 áèò **
** buf - óêàçàòåëü íà ïàìàòü, êóäà ÷èòàòü. **
** size - äëèíà áëîêà â áàéòàõ. Ïî-ëþáîìó â áàéòàõ! */
/* Чтение блока из SEEPROM. Параметры таковы: **
** adres - адрес в епромке, откуда читать. **
** adres = 0..0x8000, если длина слова 8 бит **
** adres = 0..0x4000, если длина слова 16 бит **
** buf - указатель на памать, куда читать. **
** size - длина блока в байтах. По-любому в байтах! */
/* Читает EEPROM порциями; адрес задаётся словами C28x, размер переводится в число передаваемых слов. */
void Seeprom_read(SE2P_SIZE adres, unsigned int buf[], SE2P_SIZE size);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif

View File

@@ -1,7 +1,13 @@
/* Настройка внешней памяти и служебные задержки. Русские пояснения сохранены в UTF-8. */
/* Начинает условие: TOOLS_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef TOOLS_H
/* Определяет защитный символ или переключатель TOOLS_H для последующей компиляции. */
#define TOOLS_H
/* Настраивает временные параметры внешней шины XINTF Zone7 для RAM регистратора. */
void init_zone7(void);
/* Формирует задержку в микросекундах через калиброванную функцию DSP28x_usDelay. */
void pause_us(unsigned long t);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif //TOOLS_H

View File

@@ -1,9 +1,18 @@
/* Настройки и интерфейс ump_can_protocol. Русские пояснения сохранены в UTF-8. */
/* Shared logger protocol; application owns IRQ protection and CAN scheduling. */
/* Начинает условие: UMP_CAN_PROTOCOL_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef UMP_CAN_PROTOCOL_H
/* Определяет защитный символ или переключатель UMP_CAN_PROTOCOL_H для последующей компиляции. */
#define UMP_CAN_PROTOCOL_H
/* Подключает "log_to_mem.h": двухбанковый регистратор событий нагрузки во внешней RAM. */
#include "log_to_mem.h"
/* Подключает "ump_tms28335.h": настройки и интерфейс ump_tms28335. */
#include "ump_tms28335.h"
/* Задаёт UMP_CAN_MARKER = UMP_MARKER; UMP CAN MARKER. */
#define UMP_CAN_MARKER UMP_MARKER
/* Задаёт UMP_CAN_MAX_WORDS = UMP_MAX_WORDS; UMP CAN MAX слова. */
#define UMP_CAN_MAX_WORDS UMP_MAX_WORDS
/* Задаёт ump_can_prepare = ump_tms28335_prepare; ump CAN prepare. */
#define ump_can_prepare ump_tms28335_prepare
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif