diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..7a2259e --- /dev/null +++ b/.editorconfig @@ -0,0 +1,6 @@ +# Общая кодировка редактируемых файлов проекта. +root = true + +# Русские комментарии сохраняются без BOM в UTF-8. +[*] +charset = utf-8 diff --git a/.gitignore b/.gitignore index 5d7cad2..dfa3c52 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,26 @@ +# Исключает из Git артефакты по шаблону ниже. /Debug/ +# Исключает из Git артефакты по шаблону ниже. /UKSSTMS320F28335.CS_/ +# Исключает из Git артефакты по шаблону ниже. /Bin/UKSSTMS320F28335_*.bin +# Исключает из Git артефакты по шаблону ниже. /Bin/LoggerFix/ +# Исключает из Git артефакты по шаблону ниже. /Bin/LoggerEepromFix/ +# Исключает из Git артефакты по шаблону ниже. /Bin/Rs232FifoTest/ +# Исключает из Git артефакты по шаблону ниже. /Bin/Rs232NoFifoTest/ +# Исключает из Git артефакты по шаблону ниже. /Bin/UartFifoTest/ +# Исключает из Git артефакты по шаблону ниже. /Bin/*.pending +# Исключает из Git артефакты по шаблону ниже. /UKSSTMS320F28335/Generated/ +# Исключает из Git артефакты по шаблону ниже. /Bin/FirmwareIdentity/ +# Исключает из Git артефакты по шаблону ниже. /Bin/*.bin.manifest.json +# Исключает из Git артефакты по шаблону ниже. /Bin/*.bin.sha256 diff --git a/Bin/.gitignore b/Bin/.gitignore index 9f2cd4f..6ab4462 100644 --- a/Bin/.gitignore +++ b/Bin/.gitignore @@ -1 +1,2 @@ +# Исключает из Git артефакты по шаблону ниже. /UKSSTMS320F28335.out diff --git a/Doc/COMMENT_AUDIT.md b/Doc/COMMENT_AUDIT.md new file mode 100644 index 0000000..a68f3e0 --- /dev/null +++ b/Doc/COMMENT_AUDIT.md @@ -0,0 +1,134 @@ +# Проверка комментариев и кодировки + +Проверка относится к редактируемым исходникам C/H, ASM, CMD, тестовым INC и Python. +Каждая непустая строка кода имеет русское пояснение перед ней или на ней. Пустые строки, +текст существующих комментариев и содержимое многострочных строк данных не считаются кодом. +Исходные уведомления TI сохранены. JSON-паспорта, индексы IDE, таблицы XLS и двоичные +результаты сборки не допускают исходных комментариев; их назначение описано в документации. + +UTF-8 проверен в 151 текстовых файлах. Строк кода: 18624. + +| Файл | Строк кода | С русским пояснением | +| --- | ---: | ---: | +| F28335.cmd | 69 | 69 | +| Source/External/v120/DSP2833x_common/include/DSP2833x_DefaultIsr.h | 89 | 89 | +| Source/External/v120/DSP2833x_common/include/DSP2833x_Dma_defines.h | 44 | 44 | +| Source/External/v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h | 89 | 89 | +| Source/External/v120/DSP2833x_common/include/DSP2833x_Examples.h | 33 | 33 | +| Source/External/v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h | 156 | 156 | +| Source/External/v120/DSP2833x_common/include/DSP2833x_I2c_defines.h | 58 | 58 | +| Source/External/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h | 5097 | 5097 | +| Source/External/v120/DSP2833x_common/include/DSP28x_Project.h | 5 | 5 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm | 8 | 8 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c | 14 | 14 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c | 45 | 45 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c | 37 | 37 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_PieVect.c | 143 | 143 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c | 1012 | 1012 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c | 392 | 392 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c | 188 | 188 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c | 123 | 123 | +| Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm | 7 | 7 | +| Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd | 107 | 107 | +| Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd | 108 | 108 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_Adc.h | 201 | 201 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_CpuTimers.h | 93 | 93 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_DMA.h | 142 | 142 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_DevEmu.h | 57 | 57 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_Device.h | 287 | 287 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_ECan.h | 948 | 948 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_ECap.h | 94 | 94 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_EPwm.h | 297 | 297 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_EQep.h | 165 | 165 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_Gpio.h | 320 | 320 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_I2c.h | 126 | 126 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h | 584 | 584 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h | 107 | 107 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_PieVect.h | 141 | 141 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_Sci.h | 142 | 142 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_Spi.h | 109 | 109 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h | 259 | 259 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h | 44 | 44 | +| Source/External/v120/DSP2833x_headers/include/DSP2833x_Xintf.h | 77 | 77 | +| Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c | 301 | 301 | +| Source/Internal/ADC.c | 244 | 244 | +| Source/Internal/DAC.c | 244 | 244 | +| Source/Internal/Include/ADC.h | 4 | 4 | +| Source/Internal/Include/DAC.h | 11 | 11 | +| Source/Internal/Include/GPIO_table.h | 329 | 329 | +| Source/Internal/Include/RS485.h | 84 | 84 | +| Source/Internal/Include/bios_dsp.h | 42 | 42 | +| Source/Internal/Include/caliber.h | 35 | 35 | +| Source/Internal/Include/cntrl_adr.h | 17 | 17 | +| Source/Internal/Include/crc16.h | 6 | 6 | +| Source/Internal/Include/ecan.h | 4 | 4 | +| Source/Internal/Include/eeprom_config.h | 9 | 9 | +| Source/Internal/Include/filter_bat2.h | 36 | 36 | +| Source/Internal/Include/gas167.h | 17 | 17 | +| Source/Internal/Include/kanal.h | 1 | 1 | +| Source/Internal/Include/log_to_mem.h | 37 | 37 | +| Source/Internal/Include/measure.h | 90 | 90 | +| Source/Internal/Include/message.h | 32 | 32 | +| Source/Internal/Include/package.h | 127 | 127 | +| Source/Internal/Include/peripher.h | 128 | 128 | +| Source/Internal/Include/pulto.h | 1 | 1 | +| Source/Internal/Include/spise2p.h | 74 | 74 | +| Source/Internal/Include/tools.h | 5 | 5 | +| Source/Internal/Include/ump_can_protocol.h | 8 | 8 | +| Source/Internal/RS485.c | 530 | 530 | +| Source/Internal/bios.c | 236 | 236 | +| Source/Internal/cntrl_adr.c | 17 | 17 | +| Source/Internal/crc16.c | 158 | 158 | +| Source/Internal/ecan.c | 242 | 242 | +| Source/Internal/filter_bat2.c | 12 | 12 | +| Source/Internal/gas167.c | 53 | 53 | +| Source/Internal/kanal.c | 153 | 153 | +| Source/Internal/log_to_mem.c | 236 | 236 | +| Source/Internal/main.c | 167 | 167 | +| Source/Internal/measure.c | 625 | 625 | +| Source/Internal/message.c | 289 | 289 | +| Source/Internal/peripher.c | 227 | 227 | +| Source/Internal/pulto.c | 88 | 88 | +| Source/Internal/shared_ump.c | 4 | 4 | +| Source/Internal/spise2p.c | 326 | 326 | +| Source/Internal/tools.c | 31 | 31 | +| UKSSTMS320F28335/28335_RAM_lnk.cmd | 58 | 58 | +| UKSSTMS320F28335/firmware_version.h | 6 | 6 | +| UKSSTMS320F28335/prepare_identity.py | 41 | 41 | +| tests/comments/run_test.py | 127 | 127 | +| tests/eeprom_profiles/run_test.py | 20 | 20 | +| tests/eeprom_profiles/spi_test.c | 46 | 46 | +| tests/eeprom_profiles/stubs/DSP2833x_Device.h | 22 | 22 | +| tests/firmware_identity/check_build.py | 35 | 35 | +| tests/firmware_identity/port_test.c | 29 | 29 | +| tests/gas167/check_image.py | 44 | 44 | +| tests/gas167/gas167_test.c | 191 | 191 | +| tests/gas167/run_test.py | 45 | 45 | +| tests/load_control/load_control_test.c | 93 | 93 | +| tests/load_control/run_test.py | 15 | 15 | +| tests/load_control/stubs/DSP2833x_Device.h | 9 | 9 | +| tests/load_control/stubs/DSP2833x_SWPrioritizedIsrLevels.h | 0 | 0 | +| tests/load_control/stubs/RS485.h | 0 | 0 | +| tests/load_control/stubs/filter_bat2.h | 0 | 0 | +| tests/load_control/stubs/measure.h | 4 | 4 | +| tests/load_control/stubs/message.h | 1 | 1 | +| tests/load_control/stubs/package.h | 17 | 17 | +| tests/load_control/stubs/peripher.h | 14 | 14 | +| tests/load_control/stubs/tools.h | 0 | 0 | +| tests/rs232_fifo/model.inc | 113 | 113 | +| tests/rs232_fifo/run_test.py | 53 | 53 | +| tests/ump_logger/init_test.c | 52 | 52 | +| tests/ump_logger/recorder_test.c | 151 | 151 | +| tests/ump_logger/run_init_test.py | 30 | 30 | +| tests/ump_logger/run_test.py | 34 | 34 | +| tests/ump_logger/stubs/ADC.h | 1 | 1 | +| tests/ump_logger/stubs/DAC.h | 1 | 1 | +| tests/ump_logger/stubs/DSP2833x_Device.h | 9 | 9 | +| tests/ump_logger/stubs/RS485.h | 0 | 0 | +| tests/ump_logger/stubs/filter_bat2.h | 0 | 0 | +| tests/ump_logger/stubs/measure.h | 2 | 2 | +| tests/ump_logger/stubs/message.h | 0 | 0 | +| tests/ump_logger/stubs/package.h | 11 | 11 | +| tests/ump_logger/stubs/peripher.h | 0 | 0 | +| tests/ump_logger/test_firmware_image.py | 51 | 51 | +| tests/ump_logger/ti_syntax.h | 2 | 2 | diff --git a/Doc/SOURCE_GUIDE.md b/Doc/SOURCE_GUIDE.md new file mode 100644 index 0000000..3b77994 --- /dev/null +++ b/Doc/SOURCE_GUIDE.md @@ -0,0 +1,108 @@ +# Назначение исходников Бальзам-167 + +Все редактируемые исходники C/H, ASM, CMD и Python используют UTF-8 без BOM. +Каждая строка кода снабжена русским пояснением. Существующие уведомления TI +и сведения о поставляемых файлах сохранены. Таблица покрытия и воспроизводимая +проверка находятся в [COMMENT_AUDIT.md](COMMENT_AUDIT.md) и +../tests/comments/run_test.py. + +## Порядок работы + +main.c сначала настраивает системные такты, PIE, внешнюю RAM, адрес платы, +CAN и оба SCI. Затем запускает EEPROM, очищает RAM журнала, явно инициализирует +регистратор и автомат LOAD, настраивает Timer1 и разрешает прерывания. +Параметры читаются из EEPROM; для LOAD Setup_DAC_time применяет длительность +нарастания тока и проверяет сохранённый тайм-аут CAN. Главный цикл обслуживает +команды, сохранение параметров, события регистратора и передачу служебного CAN. + +Timer1 задаёт основную частоту READY_FREQ=1000 Гц. Для измерительной платы +обработчик находится в measure.c, для пульта — в pulto.c. Автомат нагрузки +выполняется в Timer1: он владеет START/STOP/разрешением и обновлением тока ЦАП. +Главный цикл не включает нагрузку поверх состояния защиты. Timer2 продвигает +автомат EEPROM; ожидание SPI не выполняется внутри длительной блокировки IRQ. + +## Внутренние модули + +| Файл | Назначение и важные ограничения | +| --- | --- | +| main.c | Порядок запуска, общий цикл, команды загрузчика и Modbus; COM_1 115200 с FIFO. | +| ADC.c | Настройка каналов АЦП, обработка преобразований и обновление фильтров. | +| measure.c | Типы датчиков, температурные/токовые/мощностные расчёты, диагностика, периодический такт. | +| filter_bat2.c | Накопительный фильтр; история и сумма обновляются вместе с новым отсчётом. | +| DAC.c | Передача слов ЦАП и автомат нагрузки: свежесть CAN, напряжение, STOP и максимум пять пусков. | +| ecan.c | Штатные CAN-кадры и отдельный служебный обмен УМП/GAS; ISR принимает, главный цикл передаёт ответ. | +| RS485.c | SCI-A/SCI-B, разбор кадров и упаковка слов; FIFO используется только первым портом. | +| message.c | FC03/FC06, маршрутизация УМП/GAS, заводские и сохраняемые параметры. | +| gas167.c | Карта 167/v1; проверка всего диапазона до чтения; ограничение записи такое же, как у обычного Modbus. | +| log_to_mem.c | Два банка RAM регистратора, события START/STOP/CAN/RS, замороженный архив и чтение через УМП. | +| shared_ump.c | Подключение общего протокола и паспорта из соседнего репозитория; логика общей библиотеки здесь не дублируется. | +| spise2p.c | SPI EEPROM: команда, адрес, порции данных, границы страниц и ожидание окончания записи. | +| bios.c | Последовательный загрузчик, команды памяти и EXTEND; адрес EEPROM проверяется отдельно от RAM. | +| cntrl_adr.c | Установка собственного/универсального адреса устройства. | +| peripher.c | Аппаратные перемычки, тип платы, кнопки, выбор канала и служебные GPIO. | +| kanal.c | Последовательная передача битов индикации выбранного канала. | +| pulto.c | Периодический обработчик и обмен пульта. | +| crc16.c | Таблицы и алгоритмы CRC для используемых пакетов. | +| tools.c | Внешняя шина XINTF Zone7 и задержки в микросекундах. | + +## Заголовки проекта + +package.h определяет аппаратные адреса и псевдонимы modbus. Стартовый ток +находится в 0x50, конечный — в 0x51. Сохраняемый LOAD_CAN_TIMEOUT занимает 0x52: +разрешено 1..60000 мс; заводское значение 600 мс устанавливается Default_params. +Setup_DAC_time исправляет недопустимое сохранённое значение на 600 мс. +Load_runner дополнительно использует 600 мс для локальной страховки при +недопустимом значении. LOAD_STATUS=0x7C и LOAD_ATTEMPTS=0x7D доступны для чтения. + +eeprom_config.h выбирает физическую микросхему при сборке. spise2p.h задаёт +ширину адреса, длину страницы и типы задания SPI. gas167.h описывает границы +профиля и контракт снимка. log_to_mem.h задаёт формат точек и ёмкость банков. +RS485.h описывает состояние портов, буферы, FIFO и тайм-ауты. +measure.h хранит частоты, типы датчиков и битовые состояния диагностики. +caliber.h содержит заводские калибровочные значения. GPIO_table.h и peripher.h +задают аппаратные сигналы. Остальные заголовки объявляют интерфейсы одноимённых +модулей. + +## Слово C28x и физические байты + +На C28x int и char имеют ширину 16 бит. Адреса технологических регистров и GAS +считаются словами. Размеры EEPROM, загрузочного SCI8 BIN и октеты RTU считаются +8-битными байтами. Поэтому преобразование адреса EEPROM в байты выполняется +явно. Хостовые проверки используют uint16_t и модель аппаратных регистров, +чтобы обычные 8-битные char/32-битные int ПК не меняли смысл пакетов. + +F28335.cmd размещает код в RAM и экспортирует абсолютные символы границ EEPROM. +EEPROM не является памятью, доступной ядру напрямую: ROM загружает образ по SPI +в RAM. Увеличение EEPROM не расширяет .text или RAM регистратора. Секция .logg +остаётся в Zone7A. Подробные пределы: [EEPROM_LAYOUT.md](EEPROM_LAYOUT.md). + +## Поставляемые TI файлы + +DSP2833x_headers/include содержит структуры аппаратных регистров и их битовые +поля. GlobalVariableDefs.c размещает структуры в именованных секциях; файлы +Headers_BIOS.cmd/Headers_nonBIOS.cmd связывают их с аппаратными адресами. +Рабочая сборка использует nonBIOS. + +DSP2833x_common содержит начальную настройку тактов, таймеров, АЦП, PIE и XINTF, +таблицы векторов и программные приоритеты ISR. В SWPrioritizedIsrLevels.h +приоритет 0 исключает источник, меньшее ненулевое значение означает более +высокий приоритет; MINT и MG вычисляют соответствующие маски. +ADC_cal.asm и usDelay.asm обеспечивают фабричную калибровку/задержку C28x. +Комментарии описывают исходный порядок инструкций; код поставляемых модулей +не изменён. + +## Настройки и результаты сборки + +.project регистрирует связанные исходники и заголовки, .cproject задаёт Debug, +Release, флаги, пути и pre/post-build. .ccsproject описывает устройство и +инструментарий, .settings/*.prefs — настройки Eclipse/CCS. Эти XML и properties +содержат русские комментарии без изменения значений опций. + +firmware_identity.json — входные product/target. Паспорт BIN и +profile-comparison.json — структурированные данные; комментарии JSON +недопустимы. Их поля описаны в FIRMWARE_IDENTITY.md и GAS_167_M95M02.md. +.bin/.hex/.out/.map, EXE, LIB и XLS — данные или результаты сторонних инструментов; +их нельзя снабжать комментариями как исходный C-код. .paf2/.sbl и корневые +.pjt/.lkf относятся к старым данным IDE/сборки. postBuildStep_Debug.old и fixya.bat +сохранены как старые служебные сценарии; действующие шаги CCS определены в +.cproject и соседних шаблонах. diff --git a/F28335.cmd b/F28335.cmd index a472cd4..5396127 100644 --- a/F28335.cmd +++ b/F28335.cmd @@ -1,3 +1,4 @@ +/* Распределение памяти линкером и абсолютные границы загрузочного образа EEPROM. Русские пояснения сохранены в UTF-8. */ /* // TI File $Revision: /main/10 $ // Checkin $Date: July 9, 2008 13:43:56 $ @@ -16,24 +17,24 @@ /* ====================================================== // For Code Composer Studio V2.2 and later // --------------------------------------- -// In addition to this memory linker command file, -// add the header linker command file directly to the project. +// In addition to this memory linker command file, +// add the header linker command file directly to the project. // The header linker command file is required to link the -// peripheral structures to the proper locations within +// peripheral structures to the proper locations within // the memory map. // // The header linker files are found in \DSP2833x_Headers\cmd -// +// // For BIOS applications add: DSP2833x_Headers_BIOS.cmd -// For nonBIOS applications add: DSP2833x_Headers_nonBIOS.cmd +// For nonBIOS applications add: DSP2833x_Headers_nonBIOS.cmd ========================================================= */ /* ====================================================== // For Code Composer Studio prior to V2.2 // -------------------------------------- -// 1) Use one of the following -l statements to include the +// 1) Use one of the following -l statements to include the // header linker command file in the project. The header linker -// file is required to link the peripheral structures to the proper +// file is required to link the peripheral structures to the proper // locations within the memory map */ /* Uncomment this line to include file only for non-BIOS applications */ @@ -43,29 +44,29 @@ /* -l DSP2833x_Headers_BIOS.cmd */ /* 2) In your project add the path to \DSP2833x_headers\cmd to the - library search path under project->build options, linker tab, + library search path under project->build options, linker tab, library search path (-i). /*========================================================= */ -/* Define the memory block start/length for the F28335 +/* Define the memory block start/length for the F28335 PAGE 0 will be used to organize program sections PAGE 1 will be used to organize data sections - Notes: + Notes: Memory blocks on F28335 are uniform (ie same - physical memory) in both PAGE 0 and PAGE 1. + physical memory) in both PAGE 0 and PAGE 1. That is the same memory region should not be defined for both PAGE 0 and PAGE 1. - Doing so will result in corruption of program - and/or data. - + Doing so will result in corruption of program + and/or data. + L0/L1/L2 and L3 memory blocks are mirrored - that is they can be accessed in high memory or low memory. For simplicity only one instance is used in this - linker file. - - Contiguous SARAM memory blocks can be combined - if required to create a larger memory block. + linker file. + + Contiguous SARAM memory blocks can be combined + if required to create a larger memory block. */ @@ -73,142 +74,179 @@ * region at address zero: SPI boot copies its table into the RAM areas below. * Export its physical layout as absolute byte/word symbols for .map/debugging. * The final SCI8 image size (including boot headers) is checked after hex2000. */ +/* Подключает "Source/Internal/Include/eeprom_config.h": выбор профиля физически установленной EEPROM при сборке. */ #include "Source/Internal/Include/eeprom_config.h" +/* Подключает "include/balsam167_eeprom_layout.h": настройки и интерфейс balsam167_eeprom_layout. */ #include "include/balsam167_eeprom_layout.h" +/* Записывает _EEPROM_TOTAL_BYTES значением BALSAM167_EEPROM_BYTES; данные _EEPROM_TOTAL_BYTES. */ _EEPROM_TOTAL_BYTES = BALSAM167_EEPROM_BYTES; +/* Записывает _EEPROM_FIRMWARE_LIMIT_BYTES значением BALSAM167_EEPROM_FIRMWARE_BYTES; данные _EEPROM_FIRMWARE_LIMIT_BYTES. */ _EEPROM_FIRMWARE_LIMIT_BYTES = BALSAM167_EEPROM_FIRMWARE_BYTES; +/* Записывает _EEPROM_PARAMS_START_WORD значением BALSAM167_EEPROM_PARAMS_START_WORD; EEPROM PARAMS START слово. */ _EEPROM_PARAMS_START_WORD = BALSAM167_EEPROM_PARAMS_START_WORD; +/* Записывает _EEPROM_PARAMS_START_BYTE значением BALSAM167_EEPROM_FIRMWARE_BYTES; данные _EEPROM_PARAMS_START_BYTE. */ _EEPROM_PARAMS_START_BYTE = BALSAM167_EEPROM_FIRMWARE_BYTES; +/* Записывает _EEPROM_PARAMS_END_BYTE значением BALSAM167_EEPROM_PARAMS_END_WORD * 2; данные _EEPROM_PARAMS_END_BYTE. */ _EEPROM_PARAMS_END_BYTE = BALSAM167_EEPROM_PARAMS_END_WORD * 2; +/* Начинает описание физических блоков памяти для линкера. */ MEMORY +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { -PAGE 0: /* Program Memory */ +PAGE 0: /* Program Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */ /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */ - ZONE0 : origin = 0x004000, length = 0x001000 /* XINTF zone 0 */ - RAML0 : origin = 0x008000, length = 0x004000 /* on-chip RAM block L0 */ + ZONE0 : origin = 0x004000, length = 0x001000 /* XINTF zone 0 */ /* Записывает origin значением 0x004000, length = 0x001000; данные origin. */ + RAML0 : origin = 0x008000, length = 0x004000 /* on-chip RAM block L0 */ /* Записывает origin значением 0x008000, length = 0x004000; данные origin. */ /* RAML1 : origin = 0x009000, length = 0x001000 /* on-chip RAM block L1 */ /* RAML2 : origin = 0x00A000, length = 0x001000 /* on-chip RAM block L2 */ // RAML3 : origin = 0x00B000, length = 0x001000 /* on-chip RAM block L3 */ - RAML4 : origin = 0x00C000, length = 0x001000 /* on-chip RAM block L1 */ + RAML4 : origin = 0x00C000, length = 0x001000 /* on-chip RAM block L1 */ /* Записывает origin значением 0x00C000, length = 0x001000; данные origin. */ - ZONE6 : origin = 0x0100000, length = 0x100000 /* XINTF zone 6 */ - FLASHH : origin = 0x300000, length = 0x008000 /* on-chip FLASH */ - FLASHG : origin = 0x308000, length = 0x008000 /* on-chip FLASH */ - FLASHF : origin = 0x310000, length = 0x008000 /* on-chip FLASH */ - FLASHE : origin = 0x318000, length = 0x008000 /* on-chip FLASH */ - FLASHD : origin = 0x320000, length = 0x008000 /* on-chip FLASH */ - FLASHC : origin = 0x328000, length = 0x008000 /* on-chip FLASH */ - FLASHA : origin = 0x338000, length = 0x007F80 /* on-chip FLASH */ - CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */ - BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */ - CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ - OTP : origin = 0x380400, length = 0x000400 /* on-chip OTP */ - ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved memory */ - - IQTABLES : origin = 0x3FE000, length = 0x000b50 /* IQ Math Tables in Boot ROM */ - IQTABLES2 : origin = 0x3FEB50, length = 0x00008c /* IQ Math Tables in Boot ROM */ - FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* FPU Tables in Boot ROM */ - ROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */ - RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */ - VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */ + ZONE6 : origin = 0x0100000, length = 0x100000 /* XINTF zone 6 */ /* Записывает origin значением 0x0100000, length = 0x100000; данные origin. */ + FLASHH : origin = 0x300000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x300000, length = 0x008000; данные origin. */ + FLASHG : origin = 0x308000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x308000, length = 0x008000; данные origin. */ + FLASHF : origin = 0x310000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x310000, length = 0x008000; данные origin. */ + FLASHE : origin = 0x318000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x318000, length = 0x008000; данные origin. */ + FLASHD : origin = 0x320000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x320000, length = 0x008000; данные origin. */ + FLASHC : origin = 0x328000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x328000, length = 0x008000; данные origin. */ + FLASHA : origin = 0x338000, length = 0x007F80 /* on-chip FLASH */ /* Записывает origin значением 0x338000, length = 0x007F80; данные origin. */ + CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */ /* Записывает origin значением 0x33FF80, length = 0x000076; данные origin. */ + BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */ /* Записывает origin значением 0x33FFF6, length = 0x000002; данные origin. */ + CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ /* Записывает origin значением 0x33FFF8, length = 0x000008; данные origin. */ + OTP : origin = 0x380400, length = 0x000400 /* on-chip OTP */ /* Записывает origin значением 0x380400, length = 0x000400; данные origin. */ + ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved memory */ /* Записывает origin значением 0x380080, length = 0x000009; данные origin. */ -PAGE 1 : /* Data Memory */ + IQTABLES : origin = 0x3FE000, length = 0x000b50 /* IQ Math Tables in Boot ROM */ /* Записывает origin значением 0x3FE000, length = 0x000b50; данные origin. */ + IQTABLES2 : origin = 0x3FEB50, length = 0x00008c /* IQ Math Tables in Boot ROM */ /* Записывает origin значением 0x3FEB50, length = 0x00008c; данные origin. */ + FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* FPU Tables in Boot ROM */ /* Записывает origin значением 0x3FEBDC, length = 0x0006A0; данные origin. */ + ROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */ /* Записывает origin значением 0x3FF27C, length = 0x000D44; данные origin. */ + RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */ /* Записывает origin значением 0x3FFFC0, length = 0x000002; данные origin. */ + VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */ /* Записывает origin значением 0x3FFFC2, length = 0x00003E; данные origin. */ + +PAGE 1 : /* Data Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */ /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */ /* Registers remain on PAGE1 */ - - BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */ - RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ - RAML5 : origin = 0x00D000, length = 0x003000 /* on-chip RAM block L1 */ + + BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */ /* Записывает origin значением 0x000000, length = 0x000050; данные origin. */ + RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */ /* Записывает origin значением 0x000050, length = 0x0003B0; данные origin. */ + RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ /* Записывает origin значением 0x000400, length = 0x000400; данные origin. */ + RAML5 : origin = 0x00D000, length = 0x003000 /* on-chip RAM block L1 */ /* Записывает origin значением 0x00D000, length = 0x003000; данные origin. */ /* RAML6 : origin = 0x00E000, length = 0x001000 /* on-chip RAM block L1 */ /* RAML7 : origin = 0x00F000, length = 0x001000 /* on-chip RAM block L1 */ - ZONE7A : origin = 0x0200000, length = 0x00FC00 /* XINTF zone 7 - program space */ - ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */ - FLASHB : origin = 0x330000, length = 0x008000 /* on-chip FLASH */ + ZONE7A : origin = 0x0200000, length = 0x00FC00 /* XINTF zone 7 - program space */ /* Записывает origin значением 0x0200000, length = 0x00FC00; данные origin. */ + ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */ /* Записывает origin значением 0x20FC00, length = 0x000400; данные origin. */ + FLASHB : origin = 0x330000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x330000, length = 0x008000; данные origin. */ +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } /* Allocate sections to memory blocks. Note: - codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code + codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code execution when booting to flash ramfuncs user defined section to store functions that will be copied from Flash into RAM -*/ - +*/ + +/* Начинает описание размещения секций объектных файлов для линкера. */ SECTIONS +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - + /* Allocate program areas: */ /* Keep initialization tables out of the code RAM block. */ + /* Записывает PAGE значением 0; данные PAGE. */ .cinit : > RAML4 PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ .pinit : > RAML0 PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ .text : > RAML0 PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ codestart : > BEGIN PAGE = 0 - ramfuncs : LOAD = RAML4, - RUN = RAML4, + /* Записывает LOAD значением RAML4,; данные LOAD. */ + ramfuncs : LOAD = RAML4, + /* Записывает RUN значением RAML4,; данные RUN. */ + RUN = RAML4, + /* Вызывает LOAD_START с аргументами (_RamfuncsLoadStart), в текущей последовательности операций. */ LOAD_START(_RamfuncsLoadStart), + /* Вызывает LOAD_END с аргументами (_RamfuncsLoadEnd), в текущей последовательности операций. */ LOAD_END(_RamfuncsLoadEnd), + /* Вызывает RUN_START с аргументами (_RamfuncsRunStart), в текущей последовательности операций. */ RUN_START(_RamfuncsRunStart), + /* Записывает PAGE значением 0; данные PAGE. */ PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ csmpasswds : > CSM_PWL PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ csm_rsvd : > CSM_RSVD PAGE = 0 - + /* Allocate uninitalized data sections: */ + /* Записывает PAGE значением 1; данные PAGE. */ .stack : > RAMM1 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ .ebss : > RAML5 PAGE = 1 + /* Записывает PAGE значением 0; данные PAGE. */ .esysmem : > RAML0 PAGE = 0 + /* Записывает PAGE значением 1; данные PAGE. */ .logg : > ZONE7A PAGE = 1 /* Initalized sections go in Flash */ /* For SDFlash to program these, they must be allocated to page 0 */ + /* Записывает PAGE значением 0; данные PAGE. */ .econst : > RAML4 PAGE = 0 - .switch : > RAML4 PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ + .switch : > RAML4 PAGE = 0 /* Allocate IQ math areas: */ - IQmath : > FLASHC PAGE = 0 /* Math Code */ - IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD - + IQmath : > FLASHC PAGE = 0 /* Math Code */ /* Записывает PAGE значением 0; данные PAGE. */ + /* Записывает PAGE значением 0, TYPE = NOLOAD; данные PAGE. */ + IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD + /* Uncomment the section below if calling the IQNexp() or IQexp() - functions from the IQMath.lib library in order to utilize the - relevant IQ Math table in Boot ROM (This saves space and Boot ROM + functions from the IQMath.lib library in order to utilize the + relevant IQ Math table in Boot ROM (This saves space and Boot ROM is 1 wait-state). If this section is not uncommented, IQmathTables2 will be loaded into other memory (SARAM, Flash, etc.) and will take up space, but 0 wait-state is possible. */ /* - IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD + IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD { - + IQmath.lib (IQmathTablesRam) - + } */ - - FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD - + + /* Записывает PAGE значением 0, TYPE = NOLOAD; данные PAGE. */ + FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD + /* Allocate DMA-accessible RAM sections: * / DMARAML4 : > RAML4, PAGE = 1 DMARAML5 : > RAML5, PAGE = 1 /* DMARAML6 : > RAML6, PAGE = 1 DMARAML7 : > RAML7, PAGE = 1 -*/ +*/ /* Allocate 0x400 of XINTF Zone 7 to storing data */ + /* Записывает PAGE значением 1; данные PAGE. */ ZONE7DATA : > ZONE7B, PAGE = 1 - /* .reset is a standard section used by the compiler. It contains the */ + /* .reset is a standard section used by the compiler. It contains the */ /* the address of the start of _c_int00 for C Code. /* /* When using the boot ROM this section and the CPU vector */ /* table is not needed. Thus the default type is set here to */ - /* DSECT */ + /* DSECT */ + /* Записывает PAGE значением 0, TYPE = DSECT; данные PAGE. */ .reset : > RESET, PAGE = 0, TYPE = DSECT + /* Записывает PAGE значением 0, TYPE = DSECT; данные PAGE. */ vectors : > VECTORS PAGE = 0, TYPE = DSECT - + /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */ + /* Записывает load значением ADC_CAL, PAGE = 0, TYPE = NOLOAD; данные load. */ .adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } /* diff --git a/Source/External/v120/DSP2833x_common/include/DSP2833x_DefaultIsr.h b/Source/External/v120/DSP2833x_common/include/DSP2833x_DefaultIsr.h index 8919b97..4a38b52 100644 --- a/Source/External/v120/DSP2833x_common/include/DSP2833x_DefaultIsr.h +++ b/Source/External/v120/DSP2833x_common/include/DSP2833x_DefaultIsr.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание DefaultIsr для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:45:37 $ //########################################################################### @@ -11,135 +12,223 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_DEFAULT_ISR_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_DEFAULT_ISR_H +/* Определяет защитный символ или переключатель DSP2833x_DEFAULT_ISR_H для последующей компиляции. */ #define DSP2833x_DEFAULT_ISR_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //--------------------------------------------------------------------------- // Default Interrupt Service Routine Declarations: -// -// The following function prototypes are for the +// +// The following function prototypes are for the // default ISR routines used with the default PIE vector table. -// This default vector table is found in the DSP2833x_PieVect.h -// file. +// This default vector table is found in the DSP2833x_PieVect.h +// file. // // Non-Peripheral Interrupts: +/* Объявляет обработчик INT13_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void INT13_ISR(void); // XINT13 or CPU-Timer 1 +/* Объявляет обработчик INT14_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void INT14_ISR(void); // CPU-Timer2 +/* Объявляет обработчик DATALOG_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DATALOG_ISR(void); // Datalogging interrupt +/* Объявляет обработчик RTOSINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void RTOSINT_ISR(void); // RTOS interrupt +/* Объявляет обработчик EMUINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EMUINT_ISR(void); // Emulation interrupt +/* Объявляет обработчик NMI_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void NMI_ISR(void); // Non-maskable interrupt +/* Объявляет обработчик ILLEGAL_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ILLEGAL_ISR(void); // Illegal operation TRAP +/* Объявляет обработчик USER1_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER1_ISR(void); // User Defined trap 1 +/* Объявляет обработчик USER2_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER2_ISR(void); // User Defined trap 2 +/* Объявляет обработчик USER3_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER3_ISR(void); // User Defined trap 3 +/* Объявляет обработчик USER4_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER4_ISR(void); // User Defined trap 4 +/* Объявляет обработчик USER5_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER5_ISR(void); // User Defined trap 5 +/* Объявляет обработчик USER6_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER6_ISR(void); // User Defined trap 6 +/* Объявляет обработчик USER7_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER7_ISR(void); // User Defined trap 7 +/* Объявляет обработчик USER8_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER8_ISR(void); // User Defined trap 8 +/* Объявляет обработчик USER9_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER9_ISR(void); // User Defined trap 9 +/* Объявляет обработчик USER10_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER10_ISR(void); // User Defined trap 10 +/* Объявляет обработчик USER11_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER11_ISR(void); // User Defined trap 11 +/* Объявляет обработчик USER12_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER12_ISR(void); // User Defined trap 12 // Group 1 PIE Interrupt Service Routines: +/* Объявляет обработчик SEQ1INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SEQ1INT_ISR(void); // ADC Sequencer 1 ISR +/* Объявляет обработчик SEQ2INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SEQ2INT_ISR(void); // ADC Sequencer 2 ISR +/* Объявляет обработчик XINT1_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT1_ISR(void); // External interrupt 1 +/* Объявляет обработчик XINT2_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT2_ISR(void); // External interrupt 2 +/* Объявляет обработчик ADCINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ADCINT_ISR(void); // ADC +/* Объявляет обработчик TINT0_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void TINT0_ISR(void); // Timer 0 +/* Объявляет обработчик WAKEINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void WAKEINT_ISR(void); // WD // Group 2 PIE Interrupt Service Routines: +/* Объявляет обработчик EPWM1_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM1_TZINT_ISR(void); // EPWM-1 +/* Объявляет обработчик EPWM2_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM2_TZINT_ISR(void); // EPWM-2 +/* Объявляет обработчик EPWM3_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM3_TZINT_ISR(void); // EPWM-3 +/* Объявляет обработчик EPWM4_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM4_TZINT_ISR(void); // EPWM-4 +/* Объявляет обработчик EPWM5_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM5_TZINT_ISR(void); // EPWM-5 +/* Объявляет обработчик EPWM6_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM6_TZINT_ISR(void); // EPWM-6 - + // Group 3 PIE Interrupt Service Routines: +/* Объявляет обработчик EPWM1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM1_INT_ISR(void); // EPWM-1 +/* Объявляет обработчик EPWM2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM2_INT_ISR(void); // EPWM-2 +/* Объявляет обработчик EPWM3_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM3_INT_ISR(void); // EPWM-3 +/* Объявляет обработчик EPWM4_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM4_INT_ISR(void); // EPWM-4 +/* Объявляет обработчик EPWM5_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM5_INT_ISR(void); // EPWM-5 +/* Объявляет обработчик EPWM6_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM6_INT_ISR(void); // EPWM-6 - + // Group 4 PIE Interrupt Service Routines: +/* Объявляет обработчик ECAP1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP1_INT_ISR(void); // ECAP-1 +/* Объявляет обработчик ECAP2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP2_INT_ISR(void); // ECAP-2 +/* Объявляет обработчик ECAP3_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP3_INT_ISR(void); // ECAP-3 +/* Объявляет обработчик ECAP4_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP4_INT_ISR(void); // ECAP-4 +/* Объявляет обработчик ECAP5_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP5_INT_ISR(void); // ECAP-5 +/* Объявляет обработчик ECAP6_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP6_INT_ISR(void); // ECAP-6 - + // Group 5 PIE Interrupt Service Routines: +/* Объявляет обработчик EQEP1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EQEP1_INT_ISR(void); // EQEP-1 +/* Объявляет обработчик EQEP2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EQEP2_INT_ISR(void); // EQEP-2 // Group 6 PIE Interrupt Service Routines: +/* Объявляет обработчик SPIRXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SPIRXINTA_ISR(void); // SPI-A +/* Объявляет обработчик SPITXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SPITXINTA_ISR(void); // SPI-A +/* Объявляет обработчик MRINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void MRINTA_ISR(void); // McBSP-A +/* Объявляет обработчик MXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void MXINTA_ISR(void); // McBSP-A +/* Объявляет обработчик MRINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void MRINTB_ISR(void); // McBSP-B +/* Объявляет обработчик MXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void MXINTB_ISR(void); // McBSP-B // Group 7 PIE Interrupt Service Routines: +/* Объявляет обработчик DINTCH1_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH1_ISR(void); // DMA-Channel 1 +/* Объявляет обработчик DINTCH2_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH2_ISR(void); // DMA-Channel 2 +/* Объявляет обработчик DINTCH3_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH3_ISR(void); // DMA-Channel 3 +/* Объявляет обработчик DINTCH4_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH4_ISR(void); // DMA-Channel 4 +/* Объявляет обработчик DINTCH5_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH5_ISR(void); // DMA-Channel 5 +/* Объявляет обработчик DINTCH6_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH6_ISR(void); // DMA-Channel 6 -// Group 8 PIE Interrupt Service Routines: +// Group 8 PIE Interrupt Service Routines: +/* Объявляет обработчик I2CINT1A_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void I2CINT1A_ISR(void); // I2C-A +/* Объявляет обработчик I2CINT2A_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void I2CINT2A_ISR(void); // I2C-A +/* Объявляет обработчик SCIRXINTC_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCIRXINTC_ISR(void); // SCI-C +/* Объявляет обработчик SCITXINTC_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCITXINTC_ISR(void); // SCI-C - + // Group 9 PIE Interrupt Service Routines: +/* Объявляет обработчик SCIRXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCIRXINTA_ISR(void); // SCI-A +/* Объявляет обработчик SCITXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCITXINTA_ISR(void); // SCI-A +/* Объявляет обработчик SCIRXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCIRXINTB_ISR(void); // SCI-B +/* Объявляет обработчик SCITXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCITXINTB_ISR(void); // SCI-B +/* Объявляет обработчик ECAN0INTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAN0INTA_ISR(void); // eCAN-A +/* Объявляет обработчик ECAN1INTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAN1INTA_ISR(void); // eCAN-A +/* Объявляет обработчик ECAN0INTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAN0INTB_ISR(void); // eCAN-B +/* Объявляет обработчик ECAN1INTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAN1INTB_ISR(void); // eCAN-B // Group 10 PIE Interrupt Service Routines: - -// Group 11 PIE Interrupt Service Routines: -// Group 12 PIE Interrupt Service Routines: +// Group 11 PIE Interrupt Service Routines: + +// Group 12 PIE Interrupt Service Routines: +/* Объявляет обработчик XINT3_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT3_ISR(void); // External interrupt 3 +/* Объявляет обработчик XINT4_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT4_ISR(void); // External interrupt 4 +/* Объявляет обработчик XINT5_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT5_ISR(void); // External interrupt 5 +/* Объявляет обработчик XINT6_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT6_ISR(void); // External interrupt 6 +/* Объявляет обработчик XINT7_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT7_ISR(void); // External interrupt 7 +/* Объявляет обработчик LVF_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void LVF_ISR(void); // Latched overflow flag +/* Объявляет обработчик LUF_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void LUF_ISR(void); // Latched underflow flag // Catch-all for Reserved Locations For testing purposes: +/* Объявляет интерфейс функции PIE_RESERVED; реализация вызывается через этот прототип. */ interrupt void PIE_RESERVED(void); // Reserved for test +/* Объявляет обработчик rsvd_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void rsvd_ISR(void); // for test +/* Объявляет обработчик INT_NOTUSED_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void INT_NOTUSED_ISR(void); // for unused interrupts +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_DEFAULT_ISR_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/include/DSP2833x_Dma_defines.h b/Source/External/v120/DSP2833x_common/include/DSP2833x_Dma_defines.h index 7b8dfaf..00274a3 100644 --- a/Source/External/v120/DSP2833x_common/include/DSP2833x_Dma_defines.h +++ b/Source/External/v120/DSP2833x_common/include/DSP2833x_Dma_defines.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Dma_defines для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/2 $ // Checkin $Date: August 14, 2007 16:32:29 $ //########################################################################### @@ -11,69 +12,112 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_DMA_DEFINES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_DMA_DEFINES_H +/* Определяет защитный символ или переключатель DSP2833x_DMA_DEFINES_H для последующей компиляции. */ #define DSP2833x_DMA_DEFINES_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // MODE //========================== // PERINTSEL bits +/* Задаёт DMA_SEQ1INT = 1; DMA 1 INT. */ #define DMA_SEQ1INT 1 +/* Задаёт DMA_SEQ2INT = 2; DMA 2 INT. */ #define DMA_SEQ2INT 2 +/* Задаёт DMA_XINT1 = 3; DMA 1. */ #define DMA_XINT1 3 +/* Задаёт DMA_XINT2 = 4; DMA 2. */ #define DMA_XINT2 4 +/* Задаёт DMA_XINT3 = 5; DMA 3. */ #define DMA_XINT3 5 +/* Задаёт DMA_XINT4 = 6; DMA 4. */ #define DMA_XINT4 6 +/* Задаёт DMA_XINT5 = 7; DMA 5. */ #define DMA_XINT5 7 +/* Задаёт DMA_XINT6 = 8; DMA 6. */ #define DMA_XINT6 8 +/* Задаёт DMA_XINT7 = 9; DMA 7. */ #define DMA_XINT7 9 +/* Задаёт DMA_XINT13 = 10; DMA 13. */ #define DMA_XINT13 10 +/* Задаёт DMA_TINT0 = 11; DMA 0. */ #define DMA_TINT0 11 +/* Задаёт DMA_TINT1 = 12; DMA 1. */ #define DMA_TINT1 12 +/* Задаёт DMA_TINT2 = 13; DMA 2. */ #define DMA_TINT2 13 +/* Задаёт DMA_MXEVTA = 14; DMA MXEVTA. */ #define DMA_MXEVTA 14 +/* Задаёт DMA_MREVTA = 15; DMA MREVTA. */ #define DMA_MREVTA 15 +/* Задаёт DMA_MXREVTB = 16; DMA MXREVTB. */ #define DMA_MXREVTB 16 +/* Задаёт DMA_MREVTB = 17; DMA MREVTB. */ #define DMA_MREVTB 17 // OVERINTE bit +/* Задаёт OVRFLOW_DISABLE = 0x0; OVRFLOW запрет. */ #define OVRFLOW_DISABLE 0x0 +/* Задаёт OVEFLOW_ENABLE = 0x1; OVEFLOW разрешение. */ #define OVEFLOW_ENABLE 0x1 // PERINTE bit +/* Задаёт PERINT_DISABLE = 0x0; PERINT запрет. */ #define PERINT_DISABLE 0x0 +/* Задаёт PERINT_ENABLE = 0x1; PERINT разрешение. */ #define PERINT_ENABLE 0x1 // CHINTMODE bits +/* Задаёт CHINT_BEGIN = 0x0; данные CHINT_BEGIN. */ #define CHINT_BEGIN 0x0 +/* Задаёт CHINT_END = 0x1; данные CHINT_END. */ #define CHINT_END 0x1 // ONESHOT bits +/* Задаёт ONESHOT_DISABLE = 0x0; ONESHOT запрет. */ #define ONESHOT_DISABLE 0x0 +/* Задаёт ONESHOT_ENABLE = 0x1; ONESHOT разрешение. */ #define ONESHOT_ENABLE 0x1 // CONTINOUS bit +/* Задаёт CONT_DISABLE = 0x0; CONT запрет. */ #define CONT_DISABLE 0x0 +/* Задаёт CONT_ENABLE = 0x1; CONT разрешение. */ #define CONT_ENABLE 0x1 // SYNCE bit +/* Задаёт SYNC_DISABLE = 0x0; синхронизация запрет. */ #define SYNC_DISABLE 0x0 +/* Задаёт SYNC_ENABLE = 0x1; синхронизация разрешение. */ #define SYNC_ENABLE 0x1 // SYNCSEL bit +/* Задаёт SYNC_SRC = 0x0; синхронизация SRC. */ #define SYNC_SRC 0x0 +/* Задаёт SYNC_DST = 0x1; синхронизация DST. */ #define SYNC_DST 0x1 // DATASIZE bit +/* Задаёт SIXTEEN_BIT = 0x0; SIXTEEN бит. */ #define SIXTEEN_BIT 0x0 +/* Задаёт THIRTYTWO_BIT = 0x1; THIRTYTWO бит. */ #define THIRTYTWO_BIT 0x1 // CHINTE bit +/* Задаёт CHINT_DISABLE = 0x0; CHINT запрет. */ #define CHINT_DISABLE 0x0 +/* Задаёт CHINT_ENABLE = 0x1; CHINT разрешение. */ #define CHINT_ENABLE 0x1 +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // - end of DSP2833x_EPWM_DEFINES_H //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h b/Source/External/v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h index 061842f..08b8487 100644 --- a/Source/External/v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h +++ b/Source/External/v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание EPwm_defines для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:45:39 $ //########################################################################### @@ -5,135 +6,212 @@ // FILE: DSP2833x_EPwm_defines.h // // TITLE: #defines used in ePWM examples examples -// +// //########################################################################### // $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_EPWM_DEFINES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_EPWM_DEFINES_H +/* Определяет защитный символ или переключатель DSP2833x_EPWM_DEFINES_H для последующей компиляции. */ #define DSP2833x_EPWM_DEFINES_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // TBCTL (Time-Base Control) //========================== // CTRMODE bits +/* Задаёт TB_COUNT_UP = 0x0; TB число UP. */ #define TB_COUNT_UP 0x0 +/* Задаёт TB_COUNT_DOWN = 0x1; TB число DOWN. */ #define TB_COUNT_DOWN 0x1 +/* Задаёт TB_COUNT_UPDOWN = 0x2; TB число UPDOWN. */ #define TB_COUNT_UPDOWN 0x2 +/* Задаёт TB_FREEZE = 0x3; данные TB_FREEZE. */ #define TB_FREEZE 0x3 // PHSEN bit +/* Задаёт TB_DISABLE = 0x0; TB запрет. */ #define TB_DISABLE 0x0 +/* Задаёт TB_ENABLE = 0x1; TB разрешение. */ #define TB_ENABLE 0x1 // PRDLD bit +/* Задаёт TB_SHADOW = 0x0; данные TB_SHADOW. */ #define TB_SHADOW 0x0 +/* Задаёт TB_IMMEDIATE = 0x1; данные TB_IMMEDIATE. */ #define TB_IMMEDIATE 0x1 // SYNCOSEL bits +/* Задаёт TB_SYNC_IN = 0x0; TB синхронизация IN. */ #define TB_SYNC_IN 0x0 +/* Задаёт TB_CTR_ZERO = 0x1; данные TB_CTR_ZERO. */ #define TB_CTR_ZERO 0x1 +/* Задаёт TB_CTR_CMPB = 0x2; данные TB_CTR_CMPB. */ #define TB_CTR_CMPB 0x2 +/* Задаёт TB_SYNC_DISABLE = 0x3; TB синхронизация запрет. */ #define TB_SYNC_DISABLE 0x3 // HSPCLKDIV and CLKDIV bits +/* Задаёт TB_DIV1 = 0x0; данные TB_DIV1. */ #define TB_DIV1 0x0 +/* Задаёт TB_DIV2 = 0x1; данные TB_DIV2. */ #define TB_DIV2 0x1 +/* Задаёт TB_DIV4 = 0x2; данные TB_DIV4. */ #define TB_DIV4 0x2 // PHSDIR bit +/* Задаёт TB_DOWN = 0x0; данные TB_DOWN. */ #define TB_DOWN 0x0 +/* Задаёт TB_UP = 0x1; данные TB_UP. */ #define TB_UP 0x1 // CMPCTL (Compare Control) //========================== // LOADAMODE and LOADBMODE bits +/* Задаёт CC_CTR_ZERO = 0x0; данные CC_CTR_ZERO. */ #define CC_CTR_ZERO 0x0 +/* Задаёт CC_CTR_PRD = 0x1; данные CC_CTR_PRD. */ #define CC_CTR_PRD 0x1 +/* Задаёт CC_CTR_ZERO_PRD = 0x2; данные CC_CTR_ZERO_PRD. */ #define CC_CTR_ZERO_PRD 0x2 +/* Задаёт CC_LD_DISABLE = 0x3; CC LD запрет. */ #define CC_LD_DISABLE 0x3 // SHDWAMODE and SHDWBMODE bits +/* Задаёт CC_SHADOW = 0x0; данные CC_SHADOW. */ #define CC_SHADOW 0x0 +/* Задаёт CC_IMMEDIATE = 0x1; данные CC_IMMEDIATE. */ #define CC_IMMEDIATE 0x1 // AQCTLA and AQCTLB (Action Qualifier Control) //============================================= // ZRO, PRD, CAU, CAD, CBU, CBD bits +/* Задаёт AQ_NO_ACTION = 0x0; данные AQ_NO_ACTION. */ #define AQ_NO_ACTION 0x0 +/* Задаёт AQ_CLEAR = 0x1; AQ очистка. */ #define AQ_CLEAR 0x1 +/* Задаёт AQ_SET = 0x2; AQ установка. */ #define AQ_SET 0x2 +/* Задаёт AQ_TOGGLE = 0x3; данные AQ_TOGGLE. */ #define AQ_TOGGLE 0x3 // DBCTL (Dead-Band Control) //========================== // OUT MODE bits +/* Задаёт DB_DISABLE = 0x0; DB запрет. */ #define DB_DISABLE 0x0 +/* Задаёт DBA_ENABLE = 0x1; DBA разрешение. */ #define DBA_ENABLE 0x1 +/* Задаёт DBB_ENABLE = 0x2; DBB разрешение. */ #define DBB_ENABLE 0x2 +/* Задаёт DB_FULL_ENABLE = 0x3; DB FULL разрешение. */ #define DB_FULL_ENABLE 0x3 // POLSEL bits +/* Задаёт DB_ACTV_HI = 0x0; данные DB_ACTV_HI. */ #define DB_ACTV_HI 0x0 +/* Задаёт DB_ACTV_LOC = 0x1; данные DB_ACTV_LOC. */ #define DB_ACTV_LOC 0x1 +/* Задаёт DB_ACTV_HIC = 0x2; данные DB_ACTV_HIC. */ #define DB_ACTV_HIC 0x2 +/* Задаёт DB_ACTV_LO = 0x3; данные DB_ACTV_LO. */ #define DB_ACTV_LO 0x3 // IN MODE +/* Задаёт DBA_ALL = 0x0; данные DBA_ALL. */ #define DBA_ALL 0x0 +/* Задаёт DBB_RED_DBA_FED = 0x1; данные DBB_RED_DBA_FED. */ #define DBB_RED_DBA_FED 0x1 +/* Задаёт DBA_RED_DBB_FED = 0x2; данные DBA_RED_DBB_FED. */ #define DBA_RED_DBB_FED 0x2 +/* Задаёт DBB_ALL = 0x3; данные DBB_ALL. */ #define DBB_ALL 0x3 // CHPCTL (chopper control) //========================== // CHPEN bit +/* Задаёт CHP_DISABLE = 0x0; CHP запрет. */ #define CHP_DISABLE 0x0 +/* Задаёт CHP_ENABLE = 0x1; CHP разрешение. */ #define CHP_ENABLE 0x1 // CHPFREQ bits +/* Задаёт CHP_DIV1 = 0x0; данные CHP_DIV1. */ #define CHP_DIV1 0x0 +/* Задаёт CHP_DIV2 = 0x1; данные CHP_DIV2. */ #define CHP_DIV2 0x1 +/* Задаёт CHP_DIV3 = 0x2; данные CHP_DIV3. */ #define CHP_DIV3 0x2 +/* Задаёт CHP_DIV4 = 0x3; данные CHP_DIV4. */ #define CHP_DIV4 0x3 +/* Задаёт CHP_DIV5 = 0x4; данные CHP_DIV5. */ #define CHP_DIV5 0x4 +/* Задаёт CHP_DIV6 = 0x5; данные CHP_DIV6. */ #define CHP_DIV6 0x5 +/* Задаёт CHP_DIV7 = 0x6; данные CHP_DIV7. */ #define CHP_DIV7 0x6 +/* Задаёт CHP_DIV8 = 0x7; данные CHP_DIV8. */ #define CHP_DIV8 0x7 // CHPDUTY bits +/* Задаёт CHP1_8TH = 0x0; данные CHP1_8TH. */ #define CHP1_8TH 0x0 +/* Задаёт CHP2_8TH = 0x1; данные CHP2_8TH. */ #define CHP2_8TH 0x1 +/* Задаёт CHP3_8TH = 0x2; данные CHP3_8TH. */ #define CHP3_8TH 0x2 +/* Задаёт CHP4_8TH = 0x3; данные CHP4_8TH. */ #define CHP4_8TH 0x3 +/* Задаёт CHP5_8TH = 0x4; данные CHP5_8TH. */ #define CHP5_8TH 0x4 +/* Задаёт CHP6_8TH = 0x5; данные CHP6_8TH. */ #define CHP6_8TH 0x5 +/* Задаёт CHP7_8TH = 0x6; данные CHP7_8TH. */ #define CHP7_8TH 0x6 // TZSEL (Trip Zone Select) //========================== // CBCn and OSHTn bits +/* Задаёт TZ_DISABLE = 0x0; TZ запрет. */ #define TZ_DISABLE 0x0 +/* Задаёт TZ_ENABLE = 0x1; TZ разрешение. */ #define TZ_ENABLE 0x1 // TZCTL (Trip Zone Control) //========================== // TZA and TZB bits +/* Задаёт TZ_HIZ = 0x0; данные TZ_HIZ. */ #define TZ_HIZ 0x0 +/* Задаёт TZ_FORCE_HI = 0x1; TZ принудительная установка HI. */ #define TZ_FORCE_HI 0x1 +/* Задаёт TZ_FORCE_LO = 0x2; TZ принудительная установка LO. */ #define TZ_FORCE_LO 0x2 +/* Задаёт TZ_NO_CHANGE = 0x3; данные TZ_NO_CHANGE. */ #define TZ_NO_CHANGE 0x3 // ETSEL (Event Trigger Select) //============================= +/* Задаёт ET_CTR_ZERO = 0x1; данные ET_CTR_ZERO. */ #define ET_CTR_ZERO 0x1 +/* Задаёт ET_CTR_PRD = 0x2; данные ET_CTR_PRD. */ #define ET_CTR_PRD 0x2 +/* Задаёт ET_CTRU_CMPA = 0x4; данные ET_CTRU_CMPA. */ #define ET_CTRU_CMPA 0x4 +/* Задаёт ET_CTRD_CMPA = 0x5; данные ET_CTRD_CMPA. */ #define ET_CTRD_CMPA 0x5 +/* Задаёт ET_CTRU_CMPB = 0x6; данные ET_CTRU_CMPB. */ #define ET_CTRU_CMPB 0x6 +/* Задаёт ET_CTRD_CMPB = 0x7; данные ET_CTRD_CMPB. */ #define ET_CTRD_CMPB 0x7 // ETPS (Event Trigger Pre-scale) //=============================== // INTPRD, SOCAPRD, SOCBPRD bits +/* Задаёт ET_DISABLE = 0x0; ET запрет. */ #define ET_DISABLE 0x0 +/* Задаёт ET_1ST = 0x1; данные ET_1ST. */ #define ET_1ST 0x1 +/* Задаёт ET_2ND = 0x2; данные ET_2ND. */ #define ET_2ND 0x2 +/* Задаёт ET_3RD = 0x3; данные ET_3RD. */ #define ET_3RD 0x3 @@ -141,22 +219,33 @@ extern "C" { // HRPWM (High Resolution PWM) //================================ // HRCNFG +/* Задаёт HR_Disable = 0x0; HR запрет. */ #define HR_Disable 0x0 +/* Задаёт HR_REP = 0x1; данные HR_REP. */ #define HR_REP 0x1 +/* Задаёт HR_FEP = 0x2; данные HR_FEP. */ #define HR_FEP 0x2 +/* Задаёт HR_BEP = 0x3; данные HR_BEP. */ #define HR_BEP 0x3 +/* Задаёт HR_CMP = 0x0; данные HR_CMP. */ #define HR_CMP 0x0 +/* Задаёт HR_PHS = 0x1; данные HR_PHS. */ #define HR_PHS 0x1 +/* Задаёт HR_CTR_ZERO = 0x0; данные HR_CTR_ZERO. */ #define HR_CTR_ZERO 0x0 +/* Задаёт HR_CTR_PRD = 0x1; данные HR_CTR_PRD. */ #define HR_CTR_PRD 0x1 +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // - end of DSP2833x_EPWM_DEFINES_H //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/include/DSP2833x_Examples.h b/Source/External/v120/DSP2833x_common/include/DSP2833x_Examples.h index 7ababcb..44be283 100644 --- a/Source/External/v120/DSP2833x_common/include/DSP2833x_Examples.h +++ b/Source/External/v120/DSP2833x_common/include/DSP2833x_Examples.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Examples для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/9 $ // Checkin $Date: July 2, 2008 14:31:12 $ //########################################################################### @@ -11,12 +12,17 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_EXAMPLES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_EXAMPLES_H +/* Определяет защитный символ или переключатель DSP2833x_EXAMPLES_H для последующей компиляции. */ #define DSP2833x_EXAMPLES_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -25,9 +31,11 @@ extern "C" { -----------------------------------------------------------------------------*/ //#define DSP28_DIVSEL 0 // Enable /4 for SYSCLKOUT //#define DSP28_DIVSEL 1 // Enable /4 for SYSCKOUT +/* Задаёт DSP28_DIVSEL = 2; данные DSP28_DIVSEL. */ #define DSP28_DIVSEL 2 // Enable /2 for SYSCLKOUT //#define DSP28_DIVSEL 3 // Enable /1 for SYSCLKOUT +/* Задаёт DSP28_PLLCR = CLKMULT*2; данные DSP28_PLLCR. */ #define DSP28_PLLCR CLKMULT*2 //#define DSP28_PLLCR 10 @@ -74,6 +82,7 @@ extern "C" { In this case, the CPU_RATE will be 10.000L Uncomment the line: #define CPU_RATE 10.000L -----------------------------------------------------------------------------*/ +/* Задаёт CPU_RATE = 6.667L; данные CPU_RATE. */ #define CPU_RATE 6.667L // for a 150MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 7.143L // for a 140MHz CPU clock speed (SYSCLKOUT) //#define CPU_RATE 8.333L // for a 120MHz CPU clock speed (SYSCLKOUT) @@ -93,12 +102,19 @@ extern "C" { (for examples) - either 150 MHz (for 28335 and 28334) or 100 MHz (for 28332). User does not have to change anything here. -----------------------------------------------------------------------------*/ +/* Условие компиляции DSP28_28332: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_28332 // DSP28_28332 device only + /* Задаёт CPU_FRQ_100MHZ = 1; данные CPU_FRQ_100MHZ. */ #define CPU_FRQ_100MHZ 1 // 100 Mhz CPU Freq (20 MHz input freq) + /* Задаёт CPU_FRQ_150MHZ = 0; данные CPU_FRQ_150MHZ. */ #define CPU_FRQ_150MHZ 0 +/* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Задаёт CPU_FRQ_100MHZ = 0; данные CPU_FRQ_100MHZ. */ #define CPU_FRQ_100MHZ 0 // DSP28_28335||DSP28_28334 + /* Задаёт CPU_FRQ_150MHZ = 1; данные CPU_FRQ_150MHZ. */ #define CPU_FRQ_150MHZ 1 // 150 MHz CPU Freq (30 MHz input freq) by DEFAULT +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -106,35 +122,52 @@ extern "C" { // Include Example Header Files: // +/* Подключает "DSP2833x_GlobalPrototypes.h": поставляемое TI описание GlobalPrototypes для семейства C2833x. */ #include "DSP2833x_GlobalPrototypes.h" // Prototypes for global functions within the // .c files. +/* Подключает "DSP2833x_ePwm_defines.h": поставляемое TI описание ePwm_defines для семейства C2833x. */ #include "DSP2833x_ePwm_defines.h" // Macros used for PWM examples. +/* Подключает "DSP2833x_Dma_defines.h": поставляемое TI описание Dma_defines для семейства C2833x. */ #include "DSP2833x_Dma_defines.h" // Macros used for DMA examples. +/* Подключает "DSP2833x_I2C_defines.h": поставляемое TI описание I2C_defines для семейства C2833x. */ #include "DSP2833x_I2C_defines.h" // Macros used for I2C examples. +/* Задаёт PARTNO_28335 = 0xEF; данные PARTNO_28335. */ #define PARTNO_28335 0xEF +/* Задаёт PARTNO_28334 = 0xEE; данные PARTNO_28334. */ #define PARTNO_28334 0xEE +/* Задаёт PARTNO_28332 = 0xED; данные PARTNO_28332. */ #define PARTNO_28332 0xED +/* Задаёт PARTNO_28235 = 0xE8; данные PARTNO_28235. */ #define PARTNO_28235 0xE8 +/* Задаёт PARTNO_28234 = 0xE7; данные PARTNO_28234. */ #define PARTNO_28234 0xE7 +/* Задаёт PARTNO_28232 = 0xE6; данные PARTNO_28232. */ #define PARTNO_28232 0xE6 // Include files not used with DSP/BIOS +/* Начинает условие: DSP28_BIOS ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP28_BIOS +/* Подключает "DSP2833x_DefaultISR.h": поставляемое TI описание DefaultISR для семейства C2833x. */ #include "DSP2833x_DefaultISR.h" +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // DO NOT MODIFY THIS LINE. +/* Задаёт DELAY_US = DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); данные DELAY_US. */ #define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L) +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_EXAMPLES_H definition diff --git a/Source/External/v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h b/Source/External/v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h index 9c90607..4978a6f 100644 --- a/Source/External/v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h +++ b/Source/External/v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание GlobalPrototypes для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/11 $ // Checkin $Date: May 12, 2008 14:30:08 $ //########################################################################### @@ -11,174 +12,320 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_GLOBALPROTOTYPES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_GLOBALPROTOTYPES_H +/* Определяет защитный символ или переключатель DSP2833x_GLOBALPROTOTYPES_H для последующей компиляции. */ #define DSP2833x_GLOBALPROTOTYPES_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif /*---- shared global function prototypes -----------------------------------*/ +/* Объявляет интерфейс функции InitAdc; реализация вызывается через этот прототип. */ extern void InitAdc(void); +/* Объявляет интерфейс функции DMAInitialize; реализация вызывается через этот прототип. */ extern void DMAInitialize(void); // DMA Channel 1 +/* Объявляет интерфейс функции DMACH1AddrConfig; реализация вызывается через этот прототип. */ extern void DMACH1AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +/* Объявляет интерфейс функции DMACH1BurstConfig; реализация вызывается через этот прототип. */ extern void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +/* Объявляет интерфейс функции DMACH1TransferConfig; реализация вызывается через этот прототип. */ extern void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +/* Объявляет интерфейс функции DMACH1WrapConfig; реализация вызывается через этот прототип. */ extern void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +/* Объявляет интерфейс функции DMACH1ModeConfig; реализация вызывается через этот прототип. */ extern void DMACH1ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +/* Объявляет интерфейс функции StartDMACH1; реализация вызывается через этот прототип. */ extern void StartDMACH1(void); // DMA Channel 2 +/* Объявляет интерфейс функции DMACH2AddrConfig; реализация вызывается через этот прототип. */ extern void DMACH2AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +/* Объявляет интерфейс функции DMACH2BurstConfig; реализация вызывается через этот прототип. */ extern void DMACH2BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +/* Объявляет интерфейс функции DMACH2TransferConfig; реализация вызывается через этот прототип. */ extern void DMACH2TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +/* Объявляет интерфейс функции DMACH2WrapConfig; реализация вызывается через этот прототип. */ extern void DMACH2WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +/* Объявляет интерфейс функции DMACH2ModeConfig; реализация вызывается через этот прототип. */ extern void DMACH2ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +/* Объявляет интерфейс функции StartDMACH2; реализация вызывается через этот прототип. */ extern void StartDMACH2(void); // DMA Channel 3 +/* Объявляет интерфейс функции DMACH3AddrConfig; реализация вызывается через этот прототип. */ extern void DMACH3AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +/* Объявляет интерфейс функции DMACH3BurstConfig; реализация вызывается через этот прототип. */ extern void DMACH3BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +/* Объявляет интерфейс функции DMACH3TransferConfig; реализация вызывается через этот прототип. */ extern void DMACH3TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +/* Объявляет интерфейс функции DMACH3WrapConfig; реализация вызывается через этот прототип. */ extern void DMACH3WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +/* Объявляет интерфейс функции DMACH3ModeConfig; реализация вызывается через этот прототип. */ extern void DMACH3ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +/* Объявляет интерфейс функции StartDMACH3; реализация вызывается через этот прототип. */ extern void StartDMACH3(void); // DMA Channel 4 +/* Объявляет интерфейс функции DMACH4AddrConfig; реализация вызывается через этот прототип. */ extern void DMACH4AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +/* Объявляет интерфейс функции DMACH4BurstConfig; реализация вызывается через этот прототип. */ extern void DMACH4BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +/* Объявляет интерфейс функции DMACH4TransferConfig; реализация вызывается через этот прототип. */ extern void DMACH4TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +/* Объявляет интерфейс функции DMACH4WrapConfig; реализация вызывается через этот прототип. */ extern void DMACH4WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +/* Объявляет интерфейс функции DMACH4ModeConfig; реализация вызывается через этот прототип. */ extern void DMACH4ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +/* Объявляет интерфейс функции StartDMACH4; реализация вызывается через этот прототип. */ extern void StartDMACH4(void); // DMA Channel 5 +/* Объявляет интерфейс функции DMACH5AddrConfig; реализация вызывается через этот прототип. */ extern void DMACH5AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +/* Объявляет интерфейс функции DMACH5BurstConfig; реализация вызывается через этот прототип. */ extern void DMACH5BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep); +/* Объявляет интерфейс функции DMACH5TransferConfig; реализация вызывается через этот прототип. */ extern void DMACH5TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +/* Объявляет интерфейс функции DMACH5WrapConfig; реализация вызывается через этот прототип. */ extern void DMACH5WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +/* Объявляет интерфейс функции DMACH5ModeConfig; реализация вызывается через этот прототип. */ extern void DMACH5ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +/* Объявляет интерфейс функции StartDMACH5; реализация вызывается через этот прототип. */ extern void StartDMACH5(void); // DMA Channel 6 +/* Объявляет интерфейс функции DMACH6AddrConfig; реализация вызывается через этот прототип. */ extern void DMACH6AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source); +/* Объявляет интерфейс функции DMACH6BurstConfig; реализация вызывается через этот прототип. */ extern void DMACH6BurstConfig(Uint16 bsize,Uint16 srcbstep, int16 desbstep); +/* Объявляет интерфейс функции DMACH6TransferConfig; реализация вызывается через этот прототип. */ extern void DMACH6TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep); +/* Объявляет интерфейс функции DMACH6WrapConfig; реализация вызывается через этот прототип. */ extern void DMACH6WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep); +/* Объявляет интерфейс функции DMACH6ModeConfig; реализация вызывается через этот прототип. */ extern void DMACH6ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte); +/* Объявляет интерфейс функции StartDMACH6; реализация вызывается через этот прототип. */ extern void StartDMACH6(void); +/* Объявляет интерфейс функции InitPeripherals; реализация вызывается через этот прототип. */ extern void InitPeripherals(void); +/* Условие компиляции DSP28_ECANA: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_ECANA +/* Объявляет интерфейс функции InitECan; реализация вызывается через этот прототип. */ extern void InitECan(void); +/* Объявляет интерфейс функции InitECana; реализация вызывается через этот прототип. */ extern void InitECana(void); +/* Объявляет интерфейс функции InitECanGpio; реализация вызывается через этот прототип. */ extern void InitECanGpio(void); +/* Объявляет интерфейс функции InitECanaGpio; реализация вызывается через этот прототип. */ extern void InitECanaGpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_ECANA +/* Условие компиляции DSP28_ECANB: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_ECANB +/* Объявляет интерфейс функции InitECanb; реализация вызывается через этот прототип. */ extern void InitECanb(void); +/* Объявляет интерфейс функции InitECanbGpio; реализация вызывается через этот прототип. */ extern void InitECanbGpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_ECANB +/* Объявляет интерфейс функции InitECap; реализация вызывается через этот прототип. */ extern void InitECap(void); +/* Объявляет интерфейс функции InitECapGpio; реализация вызывается через этот прототип. */ extern void InitECapGpio(void); +/* Объявляет интерфейс функции InitECap1Gpio; реализация вызывается через этот прототип. */ extern void InitECap1Gpio(void); +/* Объявляет интерфейс функции InitECap2Gpio; реализация вызывается через этот прототип. */ extern void InitECap2Gpio(void); +/* Условие компиляции DSP28_ECAP3: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_ECAP3 +/* Объявляет интерфейс функции InitECap3Gpio; реализация вызывается через этот прототип. */ extern void InitECap3Gpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_ECAP3 +/* Условие компиляции DSP28_ECAP4: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_ECAP4 +/* Объявляет интерфейс функции InitECap4Gpio; реализация вызывается через этот прототип. */ extern void InitECap4Gpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_ECAP4 +/* Условие компиляции DSP28_ECAP5: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_ECAP5 +/* Объявляет интерфейс функции InitECap5Gpio; реализация вызывается через этот прототип. */ extern void InitECap5Gpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_ECAP5 +/* Условие компиляции DSP28_ECAP6: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_ECAP6 +/* Объявляет интерфейс функции InitECap6Gpio; реализация вызывается через этот прототип. */ extern void InitECap6Gpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_ECAP6 +/* Объявляет интерфейс функции InitEPwm; реализация вызывается через этот прототип. */ extern void InitEPwm(void); +/* Объявляет интерфейс функции InitEPwmGpio; реализация вызывается через этот прототип. */ extern void InitEPwmGpio(void); +/* Объявляет интерфейс функции InitEPwm1Gpio; реализация вызывается через этот прототип. */ extern void InitEPwm1Gpio(void); +/* Объявляет интерфейс функции InitEPwm2Gpio; реализация вызывается через этот прототип. */ extern void InitEPwm2Gpio(void); +/* Объявляет интерфейс функции InitEPwm3Gpio; реализация вызывается через этот прототип. */ extern void InitEPwm3Gpio(void); +/* Условие компиляции DSP28_EPWM4: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_EPWM4 +/* Объявляет интерфейс функции InitEPwm4Gpio; реализация вызывается через этот прототип. */ extern void InitEPwm4Gpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_EPWM4 +/* Условие компиляции DSP28_EPWM5: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_EPWM5 +/* Объявляет интерфейс функции InitEPwm5Gpio; реализация вызывается через этот прототип. */ extern void InitEPwm5Gpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_EPWM5 +/* Условие компиляции DSP28_EPWM6: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_EPWM6 +/* Объявляет интерфейс функции InitEPwm6Gpio; реализация вызывается через этот прототип. */ extern void InitEPwm6Gpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_EPWM6 +/* Условие компиляции DSP28_EQEP1: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_EQEP1 +/* Объявляет интерфейс функции InitEQep; реализация вызывается через этот прототип. */ extern void InitEQep(void); +/* Объявляет интерфейс функции InitEQepGpio; реализация вызывается через этот прототип. */ extern void InitEQepGpio(void); +/* Объявляет интерфейс функции InitEQep1Gpio; реализация вызывается через этот прототип. */ extern void InitEQep1Gpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // if DSP28_EQEP1 +/* Условие компиляции DSP28_EQEP2: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_EQEP2 +/* Объявляет интерфейс функции InitEQep2Gpio; реализация вызывается через этот прототип. */ extern void InitEQep2Gpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_EQEP2 +/* Объявляет интерфейс функции InitGpio; реализация вызывается через этот прототип. */ extern void InitGpio(void); +/* Объявляет интерфейс функции InitI2CGpio; реализация вызывается через этот прототип. */ extern void InitI2CGpio(void); +/* Объявляет интерфейс функции InitMcbsp; реализация вызывается через этот прототип. */ extern void InitMcbsp(void); +/* Объявляет интерфейс функции InitMcbspa; реализация вызывается через этот прототип. */ extern void InitMcbspa(void); +/* Объявляет интерфейс функции delay_loop; реализация вызывается через этот прототип. */ extern void delay_loop(void); +/* Объявляет интерфейс функции InitMcbspaGpio; реализация вызывается через этот прототип. */ extern void InitMcbspaGpio(void); +/* Объявляет интерфейс функции InitMcbspa8bit; реализация вызывается через этот прототип. */ extern void InitMcbspa8bit(void); +/* Объявляет интерфейс функции InitMcbspa12bit; реализация вызывается через этот прототип. */ extern void InitMcbspa12bit(void); +/* Объявляет интерфейс функции InitMcbspa16bit; реализация вызывается через этот прототип. */ extern void InitMcbspa16bit(void); +/* Объявляет интерфейс функции InitMcbspa20bit; реализация вызывается через этот прототип. */ extern void InitMcbspa20bit(void); +/* Объявляет интерфейс функции InitMcbspa24bit; реализация вызывается через этот прототип. */ extern void InitMcbspa24bit(void); +/* Объявляет интерфейс функции InitMcbspa32bit; реализация вызывается через этот прототип. */ extern void InitMcbspa32bit(void); +/* Условие компиляции DSP28_MCBSPB: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_MCBSPB +/* Объявляет интерфейс функции InitMcbspb; реализация вызывается через этот прототип. */ extern void InitMcbspb(void); +/* Объявляет интерфейс функции InitMcbspbGpio; реализация вызывается через этот прототип. */ extern void InitMcbspbGpio(void); +/* Объявляет интерфейс функции InitMcbspb8bit; реализация вызывается через этот прототип. */ extern void InitMcbspb8bit(void); +/* Объявляет интерфейс функции InitMcbspb12bit; реализация вызывается через этот прототип. */ extern void InitMcbspb12bit(void); +/* Объявляет интерфейс функции InitMcbspb16bit; реализация вызывается через этот прототип. */ extern void InitMcbspb16bit(void); +/* Объявляет интерфейс функции InitMcbspb20bit; реализация вызывается через этот прототип. */ extern void InitMcbspb20bit(void); +/* Объявляет интерфейс функции InitMcbspb24bit; реализация вызывается через этот прототип. */ extern void InitMcbspb24bit(void); +/* Объявляет интерфейс функции InitMcbspb32bit; реализация вызывается через этот прототип. */ extern void InitMcbspb32bit(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_MCBSPB +/* Объявляет интерфейс функции InitPieCtrl; реализация вызывается через этот прототип. */ extern void InitPieCtrl(void); +/* Объявляет интерфейс функции InitPieVectTable; реализация вызывается через этот прототип. */ extern void InitPieVectTable(void); +/* Объявляет интерфейс функции InitSci; реализация вызывается через этот прототип. */ extern void InitSci(void); +/* Объявляет интерфейс функции InitSciGpio; реализация вызывается через этот прототип. */ extern void InitSciGpio(void); +/* Объявляет интерфейс функции InitSciaGpio; реализация вызывается через этот прототип. */ extern void InitSciaGpio(void); +/* Условие компиляции DSP28_SCIB: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_SCIB +/* Объявляет интерфейс функции InitScibGpio; реализация вызывается через этот прототип. */ extern void InitScibGpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // endif DSP28_SCIB +/* Условие компиляции DSP28_SCIC: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_SCIC +/* Объявляет интерфейс функции InitScicGpio; реализация вызывается через этот прототип. */ extern void InitScicGpio(void); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Объявляет интерфейс функции InitSpi; реализация вызывается через этот прототип. */ extern void InitSpi(void); +/* Объявляет интерфейс функции InitSpiGpio; реализация вызывается через этот прототип. */ extern void InitSpiGpio(void); +/* Объявляет интерфейс функции InitSpiaGpio; реализация вызывается через этот прототип. */ extern void InitSpiaGpio(void); +/* Объявляет интерфейс функции InitSysCtrl; реализация вызывается через этот прототип. */ extern void InitSysCtrl(void); +/* Объявляет интерфейс функции InitTzGpio; реализация вызывается через этот прототип. */ extern void InitTzGpio(void); +/* Объявляет интерфейс функции InitXIntrupt; реализация вызывается через этот прототип. */ extern void InitXIntrupt(void); +/* Объявляет интерфейс функции XintfInit; реализация вызывается через этот прототип. */ extern void XintfInit(void); +/* Объявляет интерфейс функции InitXintf16Gpio; реализация вызывается через этот прототип. */ extern void InitXintf16Gpio(); +/* Объявляет интерфейс функции InitXintf32Gpio; реализация вызывается через этот прототип. */ extern void InitXintf32Gpio(); +/* Объявляет интерфейс функции InitPll; реализация вызывается через этот прототип. */ extern void InitPll(Uint16 pllcr, Uint16 clkindiv); +/* Объявляет интерфейс функции InitPeripheralClocks; реализация вызывается через этот прототип. */ extern void InitPeripheralClocks(void); +/* Объявляет интерфейс функции EnableInterrupts; реализация вызывается через этот прототип. */ extern void EnableInterrupts(void); +/* Объявляет интерфейс функции DSP28x_usDelay; реализация вызывается через этот прототип. */ extern void DSP28x_usDelay(Uint32 Count); +/* Объявляет интерфейс функции ADC_cal; реализация вызывается через этот прототип. */ extern void ADC_cal (void); +/* Задаёт KickDog = ServiceDog; данные KickDog. */ #define KickDog ServiceDog // For compatiblity with previous versions +/* Объявляет интерфейс функции ServiceDog; реализация вызывается через этот прототип. */ extern void ServiceDog(void); +/* Объявляет интерфейс функции DisableDog; реализация вызывается через этот прототип. */ extern void DisableDog(void); +/* Объявляет интерфейс функции CsmUnlock; реализация вызывается через этот прототип. */ extern Uint16 CsmUnlock(void); // DSP28_DBGIER.asm +/* Объявляет интерфейс функции SetDBGIER; реализация вызывается через этот прототип. */ extern void SetDBGIER(Uint16 dbgier); // CAUTION // This function MUST be executed out of RAM. Executing it // out of OTP/Flash will yield unpredictable results +/* Объявляет интерфейс функции InitFlash; реализация вызывается через этот прототип. */ extern void InitFlash(void); +/* Объявляет интерфейс функции MemCopy; реализация вызывается через этот прототип. */ void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr); @@ -187,19 +334,28 @@ void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr); // DSP28 examples will use these to relocate code from one LOAD location // in either Flash or XINTF to a different RUN location in internal // RAM +/* Объявляет RamfuncsLoadStart — данные RamfuncsLoadStart. Память определена в другом модуле. */ extern Uint16 RamfuncsLoadStart; +/* Объявляет RamfuncsLoadEnd — данные RamfuncsLoadEnd. Память определена в другом модуле. */ extern Uint16 RamfuncsLoadEnd; +/* Объявляет RamfuncsRunStart — данные RamfuncsRunStart. Память определена в другом модуле. */ extern Uint16 RamfuncsRunStart; +/* Объявляет XintffuncsLoadStart — данные XintffuncsLoadStart. Память определена в другом модуле. */ extern Uint16 XintffuncsLoadStart; +/* Объявляет XintffuncsLoadEnd — данные XintffuncsLoadEnd. Память определена в другом модуле. */ extern Uint16 XintffuncsLoadEnd; +/* Объявляет XintffuncsRunStart — данные XintffuncsRunStart. Память определена в другом модуле. */ extern Uint16 XintffuncsRunStart; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // - end of DSP2833x_GLOBALPROTOTYPES_H //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/include/DSP2833x_I2c_defines.h b/Source/External/v120/DSP2833x_common/include/DSP2833x_I2c_defines.h index ce3f1f7..9d8aa8a 100644 --- a/Source/External/v120/DSP2833x_common/include/DSP2833x_I2c_defines.h +++ b/Source/External/v120/DSP2833x_common/include/DSP2833x_I2c_defines.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание I2c_defines для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/2 $ // Checkin $Date: April 16, 2008 17:16:47 $ //########################################################################### @@ -11,7 +12,9 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_I2C_DEFINES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_I2C_DEFINES_H +/* Определяет защитный символ или переключатель DSP2833x_I2C_DEFINES_H для последующей компиляции. */ #define DSP2833x_I2C_DEFINES_H //-------------------------------------------- @@ -19,68 +22,115 @@ //-------------------------------------------- // Error Messages +/* Задаёт I2C_ERROR = 0xFFFF; 2 C ошибка. */ #define I2C_ERROR 0xFFFF +/* Задаёт I2C_ARB_LOST_ERROR = 0x0001; 2 C ARB LOST ошибка. */ #define I2C_ARB_LOST_ERROR 0x0001 +/* Задаёт I2C_NACK_ERROR = 0x0002; 2 C NACK ошибка. */ #define I2C_NACK_ERROR 0x0002 +/* Задаёт I2C_BUS_BUSY_ERROR = 0x1000; 2 C BUS BUSY ошибка. */ #define I2C_BUS_BUSY_ERROR 0x1000 +/* Задаёт I2C_STP_NOT_READY_ERROR = 0x5555; 2 C STP NOT READY ошибка. */ #define I2C_STP_NOT_READY_ERROR 0x5555 +/* Задаёт I2C_NO_FLAGS = 0xAAAA; 2 C NO флаги. */ #define I2C_NO_FLAGS 0xAAAA +/* Задаёт I2C_SUCCESS = 0x0000; данные I2C_SUCCESS. */ #define I2C_SUCCESS 0x0000 // Clear Status Flags +/* Задаёт I2C_CLR_AL_BIT = 0x0001; 2 C CLR AL бит. */ #define I2C_CLR_AL_BIT 0x0001 +/* Задаёт I2C_CLR_NACK_BIT = 0x0002; 2 C CLR NACK бит. */ #define I2C_CLR_NACK_BIT 0x0002 +/* Задаёт I2C_CLR_ARDY_BIT = 0x0004; 2 C CLR ARDY бит. */ #define I2C_CLR_ARDY_BIT 0x0004 +/* Задаёт I2C_CLR_RRDY_BIT = 0x0008; 2 C CLR RRDY бит. */ #define I2C_CLR_RRDY_BIT 0x0008 +/* Задаёт I2C_CLR_SCD_BIT = 0x0020; 2 C CLR SCD бит. */ #define I2C_CLR_SCD_BIT 0x0020 // Interrupt Source Messages +/* Задаёт I2C_NO_ISRC = 0x0000; данные I2C_NO_ISRC. */ #define I2C_NO_ISRC 0x0000 +/* Задаёт I2C_ARB_ISRC = 0x0001; данные I2C_ARB_ISRC. */ #define I2C_ARB_ISRC 0x0001 +/* Задаёт I2C_NACK_ISRC = 0x0002; данные I2C_NACK_ISRC. */ #define I2C_NACK_ISRC 0x0002 +/* Задаёт I2C_ARDY_ISRC = 0x0003; данные I2C_ARDY_ISRC. */ #define I2C_ARDY_ISRC 0x0003 +/* Задаёт I2C_RX_ISRC = 0x0004; данные I2C_RX_ISRC. */ #define I2C_RX_ISRC 0x0004 +/* Задаёт I2C_TX_ISRC = 0x0005; данные I2C_TX_ISRC. */ #define I2C_TX_ISRC 0x0005 +/* Задаёт I2C_SCD_ISRC = 0x0006; данные I2C_SCD_ISRC. */ #define I2C_SCD_ISRC 0x0006 +/* Задаёт I2C_AAS_ISRC = 0x0007; данные I2C_AAS_ISRC. */ #define I2C_AAS_ISRC 0x0007 // I2CMSG structure defines +/* Задаёт I2C_NO_STOP = 0; данные I2C_NO_STOP. */ #define I2C_NO_STOP 0 +/* Задаёт I2C_YES_STOP = 1; данные I2C_YES_STOP. */ #define I2C_YES_STOP 1 +/* Задаёт I2C_RECEIVE = 0; 2 C приём. */ #define I2C_RECEIVE 0 +/* Задаёт I2C_TRANSMIT = 1; 2 C передача. */ #define I2C_TRANSMIT 1 +/* Задаёт I2C_MAX_BUFFER_SIZE = 16; 2 C MAX буфер размер. */ #define I2C_MAX_BUFFER_SIZE 16 // I2C Slave State defines +/* Задаёт I2C_NOTSLAVE = 0; данные I2C_NOTSLAVE. */ #define I2C_NOTSLAVE 0 +/* Задаёт I2C_ADDR_AS_SLAVE = 1; данные I2C_ADDR_AS_SLAVE. */ #define I2C_ADDR_AS_SLAVE 1 +/* Задаёт I2C_ST_MSG_READY = 2; данные I2C_ST_MSG_READY. */ #define I2C_ST_MSG_READY 2 // I2C Slave Receiver messages defines +/* Задаёт I2C_SND_MSG1 = 1; данные I2C_SND_MSG1. */ #define I2C_SND_MSG1 1 +/* Задаёт I2C_SND_MSG2 = 2; данные I2C_SND_MSG2. */ #define I2C_SND_MSG2 2 // I2C State defines +/* Задаёт I2C_IDLE = 0; данные I2C_IDLE. */ #define I2C_IDLE 0 +/* Задаёт I2C_SLAVE_RECEIVER = 1; данные I2C_SLAVE_RECEIVER. */ #define I2C_SLAVE_RECEIVER 1 +/* Задаёт I2C_SLAVE_TRANSMITTER = 2; данные I2C_SLAVE_TRANSMITTER. */ #define I2C_SLAVE_TRANSMITTER 2 +/* Задаёт I2C_MASTER_RECEIVER = 3; данные I2C_MASTER_RECEIVER. */ #define I2C_MASTER_RECEIVER 3 +/* Задаёт I2C_MASTER_TRANSMITTER = 4; данные I2C_MASTER_TRANSMITTER. */ #define I2C_MASTER_TRANSMITTER 4 // I2C Message Commands for I2CMSG struct +/* Задаёт I2C_MSGSTAT_INACTIVE = 0x0000; данные I2C_MSGSTAT_INACTIVE. */ #define I2C_MSGSTAT_INACTIVE 0x0000 +/* Задаёт I2C_MSGSTAT_SEND_WITHSTOP = 0x0010; данные I2C_MSGSTAT_SEND_WITHSTOP. */ #define I2C_MSGSTAT_SEND_WITHSTOP 0x0010 +/* Задаёт I2C_MSGSTAT_WRITE_BUSY = 0x0011; 2 C MSGSTAT запись BUSY. */ #define I2C_MSGSTAT_WRITE_BUSY 0x0011 +/* Задаёт I2C_MSGSTAT_SEND_NOSTOP = 0x0020; данные I2C_MSGSTAT_SEND_NOSTOP. */ #define I2C_MSGSTAT_SEND_NOSTOP 0x0020 +/* Задаёт I2C_MSGSTAT_SEND_NOSTOP_BUSY = 0x0021; данные I2C_MSGSTAT_SEND_NOSTOP_BUSY. */ #define I2C_MSGSTAT_SEND_NOSTOP_BUSY 0x0021 +/* Задаёт I2C_MSGSTAT_RESTART = 0x0022; данные I2C_MSGSTAT_RESTART. */ #define I2C_MSGSTAT_RESTART 0x0022 +/* Задаёт I2C_MSGSTAT_READ_BUSY = 0x0023; 2 C MSGSTAT чтение BUSY. */ #define I2C_MSGSTAT_READ_BUSY 0x0023 // Generic defines +/* Задаёт I2C_TRUE = 1; данные I2C_TRUE. */ #define I2C_TRUE 1 +/* Задаёт I2C_FALSE = 0; данные I2C_FALSE. */ #define I2C_FALSE 0 +/* Задаёт I2C_YES = 1; данные I2C_YES. */ #define I2C_YES 1 +/* Задаёт I2C_NO = 0; данные I2C_NO. */ #define I2C_NO 0 +/* Задаёт I2C_DUMMY_BYTE = 0; данные I2C_DUMMY_BYTE. */ #define I2C_DUMMY_BYTE 0 @@ -89,7 +139,9 @@ //-------------------------------------------- // I2C Message Structure +/* Описывает структуру I2CMSG; порядок полей определяет расположение данных. */ struct I2CMSG { + /* Объявляет MsgStatus — Msg состояние. */ Uint16 MsgStatus; // Word stating what state msg is in: // I2C_MSGCMD_INACTIVE = do not send msg // I2C_MSGCMD_BUSY = msg start has been sent, @@ -100,16 +152,23 @@ struct I2CMSG { // master trans msg without the stop bit // I2C_MSGCMD_RESTART = command to send a restart // as a master receiver with a stop bit + /* Объявляет SlaveAddress — Slave адрес. */ Uint16 SlaveAddress; // I2C address of slave msg is intended for + /* Объявляет NumOfBytes — данные NumOfBytes. */ Uint16 NumOfBytes; // Num of valid bytes in (or to be put in MsgBuffer) + /* Объявляет MemoryHighAddr — данные MemoryHighAddr. */ Uint16 MemoryHighAddr; // EEPROM address of data associated with msg (high byte) + /* Объявляет MemoryLowAddr — данные MemoryLowAddr. */ Uint16 MemoryLowAddr; // EEPROM address of data associated with msg (low byte) + /* Объявляет MsgBuffer — Msg буфер. */ Uint16 MsgBuffer[I2C_MAX_BUFFER_SIZE]; // Array holding msg data - max that // MAX_BUFFER_SIZE can be is 16 due to // the FIFO's +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_I2C_DEFINES_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h b/Source/External/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h index c3f3ea1..14878d9 100644 --- a/Source/External/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h +++ b/Source/External/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h @@ -1,10 +1,11 @@ +/* Поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/2 $ // Checkin $Date: April 4, 2007 14:25:21 $ //########################################################################### // // FILE: DSP2833x_SWPrioritizedIsrLevels.h // -// TITLE: DSP28 Devices Software Prioritized Interrupt Service Routine +// TITLE: DSP28 Devices Software Prioritized Interrupt Service Routine // Level definitions. // //########################################################################### @@ -12,12 +13,17 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_SW_PRIORITZIED_ISR_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_SW_PRIORITZIED_ISR_H +/* Определяет защитный символ или переключатель DSP2833x_SW_PRIORITZIED_ISR_H для последующей компиляции. */ #define DSP2833x_SW_PRIORITZIED_ISR_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -25,7 +31,7 @@ extern "C" { // Interrupt Enable Register Allocation For 2833x Devices: //------------------------------------------------------------------------------- // Interrupts can be enabled/disabled using the CPU interrupt enable register -// (IER) and the PIE interrupt enable registers (PIEIER1 to PIEIER12). +// (IER) and the PIE interrupt enable registers (PIEIER1 to PIEIER12). //------------------------------------------------------------------------------- //------------------------------------------------------------------------------- // Set "Global" Interrupt Priority Level (IER register): @@ -40,31 +46,47 @@ extern "C" { // interrupt masks MINT1 to MINT16. // // -// Note: The priority levels shown here may not make sense in a +// Note: The priority levels shown here may not make sense in a // real application. This is for demonstration purposes only!!! -// -// The user should change these to values that make sense for +// +// The user should change these to values that make sense for // their application. // // 0 = not used // 1 = highest priority // ... // 16 = lowest priority +/* Задаёт INT1PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT1PL 2 // Group1 Interrupts (PIEIER1) +/* Задаёт INT2PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT2PL 0 // Group2 Interrupts (PIEIER2) +/* Задаёт INT3PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT3PL 4 // Group3 Interrupts (PIEIER3) +/* Задаёт INT4PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT4PL 2 // Group4 Interrupts (PIEIER4) +/* Задаёт INT5PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT5PL 2 // Group5 Interrupts (PIEIER5) +/* Задаёт INT6PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT6PL 3 // Group6 Interrupts (PIEIER6) +/* Задаёт INT7PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT7PL 0 // reserved +/* Задаёт INT8PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT8PL 0 // reserved +/* Задаёт INT9PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT9PL 1 // Group9 Interrupts (PIEIER9) +/* Задаёт INT10PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT10PL 0 // reserved +/* Задаёт INT11PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT11PL 0 // reserved +/* Задаёт INT12PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT12PL 0 // reserved +/* Задаёт INT13PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT13PL 4 // XINT13 +/* Задаёт INT14PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT14PL 4 // INT14 (TINT2) +/* Задаёт INT15PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT15PL 4 // DATALOG +/* Задаёт INT16PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define INT16PL 4 // RTOSINT //------------------------------------------------------------------------------- @@ -91,10 +113,10 @@ extern "C" { // MG111 to MG118 // MG121 to MG128 // -// Note: The priority levels shown here may not make sense in a +// Note: The priority levels shown here may not make sense in a // real application. This is for demonstration purposes only!!! -// -// The user should change these to values that make sense for +// +// The user should change these to values that make sense for // their application. // // 0 = not used @@ -102,2088 +124,3760 @@ extern "C" { // ... // 8 = lowest priority // +/* Задаёт G11PL = 7; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G11PL 7 // SEQ1INT (ADC) +/* Задаёт G12PL = 6; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G12PL 6 // SEQ2INT (ADC) +/* Задаёт G13PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G13PL 0 // reserved +/* Задаёт G14PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G14PL 1 // XINT1 (External) +/* Задаёт G15PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G15PL 3 // XINT2 (External) +/* Задаёт G16PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G16PL 2 // ADCINT (ADC) +/* Задаёт G17PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G17PL 1 // TINT0 (CPU Timer 0) +/* Задаёт G18PL = 5; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G18PL 5 // WAKEINT (WD/LPM) +/* Задаёт G21PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G21PL 4 // EPWM1_TZINT (ePWM1 Trip) +/* Задаёт G22PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G22PL 3 // EPWM2_TZINT (ePWM2 Trip) +/* Задаёт G23PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G23PL 2 // EPWM3_TZINT (ePWM3 Trip) +/* Задаёт G24PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G24PL 1 // EPWM4_TZINT (ePWM4 Trip) +/* Задаёт G25PL = 5; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G25PL 5 // EPWM5_TZINT (ePWM5 Trip) +/* Задаёт G26PL = 6; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G26PL 6 // EPWM6_TZINT (ePWM6 Trip) +/* Задаёт G27PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G27PL 0 // reserved +/* Задаёт G28PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G28PL 0 // reserved +/* Задаёт G31PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G31PL 4 // EPWM1_INT (ePWM1 Int) +/* Задаёт G32PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G32PL 1 // EPWM2_INT (ePWM2 Int) +/* Задаёт G33PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G33PL 1 // EPWM3_INT (ePWM3 Int) +/* Задаёт G34PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G34PL 2 // EPWM4_INT (ePWM4 Int) +/* Задаёт G35PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G35PL 2 // EPWM5_INT (ePWM5 Int) +/* Задаёт G36PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G36PL 1 // EPWM6_INT (ePWM6 Int) +/* Задаёт G37PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G37PL 0 // reserved +/* Задаёт G38PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G38PL 0 // reserved +/* Задаёт G41PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G41PL 2 // ECAP1_INT (eCAP1 Int) +/* Задаёт G42PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G42PL 1 // ECAP2_INT (eCAP2 Int) +/* Задаёт G43PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G43PL 3 // ECAP3_INT (eCAP3 Int) +/* Задаёт G44PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G44PL 3 // ECAP4_INT (eCAP4 Int) +/* Задаёт G45PL = 5; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G45PL 5 // ECAP5_INT (eCAP5 Int) +/* Задаёт G46PL = 5; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G46PL 5 // ECAP6_INT (eCAP6 Int) +/* Задаёт G47PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G47PL 0 // reserved +/* Задаёт G48PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G48PL 0 // reserved +/* Задаёт G51PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G51PL 2 // EQEP1_INT (eQEP1 Int) +/* Задаёт G52PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G52PL 1 // EQEP2_INT (eQEP2 Int) +/* Задаёт G53PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G53PL 0 // reserved +/* Задаёт G54PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G54PL 0 // reserved +/* Задаёт G55PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G55PL 0 // reserved +/* Задаёт G56PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G56PL 0 // reserved +/* Задаёт G57PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G57PL 0 // reserved +/* Задаёт G58PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G58PL 0 // reserved +/* Задаёт G61PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G61PL 3 // SPIRXINTA (SPI-A) +/* Задаёт G62PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G62PL 1 // SPITXINTA (SPI-A) +/* Задаёт G63PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G63PL 4 // MRINTB (McBSP-B) -#define G64PL 6 // MXINTB (McBSP-B) +/* Задаёт G64PL = 6; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ +#define G64PL 6 // MXINTB (McBSP-B) +/* Задаёт G65PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G65PL 2 // MRINTA (McBSP-A) -#define G66PL 1 // MXINTA (McBSP-A) +/* Задаёт G66PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ +#define G66PL 1 // MXINTA (McBSP-A) +/* Задаёт G67PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G67PL 0 // reserved -#define G68PL 0 // reserved +/* Задаёт G68PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ +#define G68PL 0 // reserved +/* Задаёт G71PL = 5; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G71PL 5 // DINTCH1 (DMA) +/* Задаёт G72PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G72PL 4 // DINTCH2 (DMA) +/* Задаёт G73PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G73PL 4 // DINTCH3 (DMA) +/* Задаёт G74PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G74PL 2 // DINTCH4 (DMA) +/* Задаёт G75PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G75PL 3 // DINTCH5 (DMA) +/* Задаёт G76PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G76PL 1 // DINTCH6 (DMA) +/* Задаёт G77PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G77PL 0 // reserved +/* Задаёт G78PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G78PL 0 // reserved +/* Задаёт G81PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G81PL 1 // I2CINT1A (I2C-A) +/* Задаёт G82PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G82PL 2 // I2CINT2A (I2C-A) +/* Задаёт G83PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G83PL 0 // reserved +/* Задаёт G84PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G84PL 0 // reserved +/* Задаёт G85PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G85PL 4 // SCIRXINTC (SCI-C) +/* Задаёт G86PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G86PL 3 // SCITXINTC (SCI-C) +/* Задаёт G87PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G87PL 0 // reserved +/* Задаёт G88PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G88PL 0 // reserved +/* Задаёт G91PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G91PL 1 // SCIRXINTA (SCI-A) +/* Задаёт G92PL = 5; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G92PL 5 // SCITXINTA (SCI-A) +/* Задаёт G93PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G93PL 3 // SCIRXINTB (SCI-B) +/* Задаёт G94PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G94PL 4 // SCITXINTB (SCI-B) +/* Задаёт G95PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G95PL 1 // ECAN0INTA (ECAN-A) +/* Задаёт G96PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G96PL 1 // ECAN1INTA (ECAN-A) +/* Задаёт G97PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G97PL 2 // ECAN0INTB (ECAN-B) -#define G98PL 4 // ECAN1INTB (ECAN-B) +/* Задаёт G98PL = 4; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ +#define G98PL 4 // ECAN1INTB (ECAN-B) +/* Задаёт G101PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G101PL 0 // reserved +/* Задаёт G102PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G102PL 0 // reserved +/* Задаёт G103PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G103PL 0 // reserved +/* Задаёт G104PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G104PL 0 // reserved +/* Задаёт G105PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G105PL 0 // reserved +/* Задаёт G106PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G106PL 0 // reserved +/* Задаёт G107PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G107PL 0 // reserved +/* Задаёт G108PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G108PL 0 // reserved +/* Задаёт G111PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G111PL 0 // reserved +/* Задаёт G112PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G112PL 0 // reserved +/* Задаёт G113PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G113PL 0 // reserved +/* Задаёт G114PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G114PL 0 // reserved +/* Задаёт G115PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G115PL 0 // reserved +/* Задаёт G116PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G116PL 0 // reserved +/* Задаёт G117PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G117PL 0 // reserved +/* Задаёт G118PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G118PL 0 // reserved +/* Задаёт G121PL = 5; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G121PL 5 // XINT3 (External) +/* Задаёт G122PL = 3; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G122PL 3 // XINT4 (External) +/* Задаёт G123PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G123PL 2 // XINT5 (External) +/* Задаёт G124PL = 2; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G124PL 2 // XINT6 (External) +/* Задаёт G125PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G125PL 1 // XINT7 (External) +/* Задаёт G126PL = 0; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G126PL 0 // reserved +/* Задаёт G127PL = 6; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G127PL 6 // LVF (FPA32) +/* Задаёт G128PL = 1; уровень приоритета; 0 отключает источник, меньшее ненулевое число означает более высокий приоритет. */ #define G128PL 1 // LUF (FPA32) -// There should be no need to modify code below this line +// There should be no need to modify code below this line //------------------------------------------------------------------------------- // Automatically generate IER interrupt masks MINT1 to MINT16: // // Beginning of MINT1: +/* Условие компиляции (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL == 0) +/* Задаёт MINT1_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 1_1PL. */ #define MINT1_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_1PL. */ #define MINT1_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT1PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT1PL) || (INT2PL == 0) +/* Задаёт MINT1_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 1_2PL. */ #define MINT1_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_2PL. */ #define MINT1_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT1PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT1PL) || (INT3PL == 0) +/* Задаёт MINT1_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 1_3PL. */ #define MINT1_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_3PL. */ #define MINT1_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT1PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT1PL) || (INT4PL == 0) +/* Задаёт MINT1_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 1_4PL. */ #define MINT1_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_4PL. */ #define MINT1_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT1PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT1PL) || (INT5PL == 0) +/* Задаёт MINT1_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 1_5PL. */ #define MINT1_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_5PL. */ #define MINT1_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT1PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT1PL) || (INT6PL == 0) +/* Задаёт MINT1_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 1_6PL. */ #define MINT1_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_6PL. */ #define MINT1_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT1PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT1PL) || (INT7PL == 0) +/* Задаёт MINT1_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 1_7PL. */ #define MINT1_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_7PL. */ #define MINT1_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT1PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT1PL) || (INT8PL == 0) +/* Задаёт MINT1_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 1_8PL. */ #define MINT1_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_8PL. */ #define MINT1_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT1PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT1PL) || (INT9PL == 0) +/* Задаёт MINT1_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 1_9PL. */ #define MINT1_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_9PL. */ #define MINT1_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT1PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT1PL) || (INT10PL == 0) +/* Задаёт MINT1_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 1_10PL. */ #define MINT1_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_10PL. */ #define MINT1_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT1PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT1PL) || (INT11PL == 0) +/* Задаёт MINT1_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 1_11PL. */ #define MINT1_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_11PL. */ #define MINT1_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT1PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT1PL) || (INT12PL == 0) +/* Задаёт MINT1_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 1_12PL. */ #define MINT1_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_12PL. */ #define MINT1_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT1PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT1PL) || (INT13PL == 0) +/* Задаёт MINT1_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 1_13PL. */ #define MINT1_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_13PL. */ #define MINT1_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT1PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT1PL) || (INT14PL == 0) +/* Задаёт MINT1_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 1_14PL. */ #define MINT1_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_14PL. */ #define MINT1_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT1PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT1PL) || (INT15PL == 0) +/* Задаёт MINT1_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 1_15PL. */ #define MINT1_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_15PL. */ #define MINT1_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT1PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT1PL) || (INT16PL == 0) +/* Задаёт MINT1_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 1_16PL. */ #define MINT1_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT1_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 1_16PL. */ #define MINT1_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT1 = (MINT1_1PL & MINT1_2PL & MINT1_3PL & MINT1_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 1. */ #define MINT1 (MINT1_1PL & MINT1_2PL & MINT1_3PL & MINT1_4PL & \ - MINT1_5PL & MINT1_6PL & MINT1_7PL & MINT1_8PL & \ - MINT1_9PL & MINT1_10PL & MINT1_11PL & MINT1_12PL & \ - MINT1_13PL & MINT1_14PL & MINT1_15PL & MINT1_16PL) + MINT1_5PL & MINT1_6PL & MINT1_7PL & MINT1_8PL & /* Продолжает список аргументов, полей или выражение MINT1_5PL & MINT1_6PL & MINT1_7PL & MINT1_8PL &; порядок элементов сохраняется. */ \ + MINT1_9PL & MINT1_10PL & MINT1_11PL & MINT1_12PL & /* Продолжает список аргументов, полей или выражение MINT1_9PL & MINT1_10PL & MINT1_11PL & MINT1_12PL &; порядок элементов сохраняется. */ \ + MINT1_13PL & MINT1_14PL & MINT1_15PL & MINT1_16PL) /* Продолжает список аргументов, полей или выражение MINT1_13PL & MINT1_14PL & MINT1_15PL & MINT1_16PL); порядок элементов сохраняется. */ // End Of MINT1. // Beginning of MINT2: +/* Условие компиляции (INT1PL >= INT2PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT2PL) || (INT1PL == 0) +/* Задаёт MINT2_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 2_1PL. */ #define MINT2_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_1PL. */ #define MINT2_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL == 0) +/* Задаёт MINT2_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 2_2PL. */ #define MINT2_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_2PL. */ #define MINT2_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT2PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT2PL) || (INT3PL == 0) +/* Задаёт MINT2_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 2_3PL. */ #define MINT2_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_3PL. */ #define MINT2_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT2PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT2PL) || (INT4PL == 0) +/* Задаёт MINT2_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 2_4PL. */ #define MINT2_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_4PL. */ #define MINT2_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT2PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT2PL) || (INT5PL == 0) +/* Задаёт MINT2_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 2_5PL. */ #define MINT2_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_5PL. */ #define MINT2_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT2PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT2PL) || (INT6PL == 0) +/* Задаёт MINT2_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 2_6PL. */ #define MINT2_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_6PL. */ #define MINT2_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT2PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT2PL) || (INT7PL == 0) +/* Задаёт MINT2_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 2_7PL. */ #define MINT2_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_7PL. */ #define MINT2_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT2PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT2PL) || (INT8PL == 0) +/* Задаёт MINT2_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 2_8PL. */ #define MINT2_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_8PL. */ #define MINT2_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT2PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT2PL) || (INT9PL == 0) +/* Задаёт MINT2_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 2_9PL. */ #define MINT2_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_9PL. */ #define MINT2_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT2PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT2PL) || (INT10PL == 0) +/* Задаёт MINT2_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 2_10PL. */ #define MINT2_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_10PL. */ #define MINT2_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT2PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT2PL) || (INT11PL == 0) +/* Задаёт MINT2_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 2_11PL. */ #define MINT2_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_11PL. */ #define MINT2_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT2PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT2PL) || (INT12PL == 0) +/* Задаёт MINT2_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 2_12PL. */ #define MINT2_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_12PL. */ #define MINT2_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT2PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT2PL) || (INT13PL == 0) +/* Задаёт MINT2_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 2_13PL. */ #define MINT2_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_13PL. */ #define MINT2_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT2PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT2PL) || (INT14PL == 0) +/* Задаёт MINT2_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 2_14PL. */ #define MINT2_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_14PL. */ #define MINT2_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT2PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT2PL) || (INT15PL == 0) +/* Задаёт MINT2_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 2_15PL. */ #define MINT2_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_15PL. */ #define MINT2_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT2PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT2PL) || (INT16PL == 0) +/* Задаёт MINT2_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 2_16PL. */ #define MINT2_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT2_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 2_16PL. */ #define MINT2_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT2 = (MINT2_1PL & MINT2_2PL & MINT2_3PL & MINT2_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 2. */ #define MINT2 (MINT2_1PL & MINT2_2PL & MINT2_3PL & MINT2_4PL & \ - MINT2_5PL & MINT2_6PL & MINT2_7PL & MINT2_8PL & \ - MINT2_9PL & MINT2_10PL & MINT2_11PL & MINT2_12PL & \ - MINT2_13PL & MINT2_14PL & MINT2_15PL & MINT2_16PL) + MINT2_5PL & MINT2_6PL & MINT2_7PL & MINT2_8PL & /* Продолжает список аргументов, полей или выражение MINT2_5PL & MINT2_6PL & MINT2_7PL & MINT2_8PL &; порядок элементов сохраняется. */ \ + MINT2_9PL & MINT2_10PL & MINT2_11PL & MINT2_12PL & /* Продолжает список аргументов, полей или выражение MINT2_9PL & MINT2_10PL & MINT2_11PL & MINT2_12PL &; порядок элементов сохраняется. */ \ + MINT2_13PL & MINT2_14PL & MINT2_15PL & MINT2_16PL) /* Продолжает список аргументов, полей или выражение MINT2_13PL & MINT2_14PL & MINT2_15PL & MINT2_16PL); порядок элементов сохраняется. */ // End Of MINT2. // Beginning of MINT3: +/* Условие компиляции (INT1PL >= INT3PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT3PL) || (INT1PL == 0) +/* Задаёт MINT3_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 3_1PL. */ #define MINT3_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_1PL. */ #define MINT3_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT3PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT3PL) || (INT2PL == 0) +/* Задаёт MINT3_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 3_2PL. */ #define MINT3_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_2PL. */ #define MINT3_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL == 0) +/* Задаёт MINT3_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 3_3PL. */ #define MINT3_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_3PL. */ #define MINT3_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT3PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT3PL) || (INT4PL == 0) +/* Задаёт MINT3_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 3_4PL. */ #define MINT3_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_4PL. */ #define MINT3_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT3PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT3PL) || (INT5PL == 0) +/* Задаёт MINT3_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 3_5PL. */ #define MINT3_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_5PL. */ #define MINT3_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT3PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT3PL) || (INT6PL == 0) +/* Задаёт MINT3_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 3_6PL. */ #define MINT3_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_6PL. */ #define MINT3_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT3PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT3PL) || (INT7PL == 0) +/* Задаёт MINT3_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 3_7PL. */ #define MINT3_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_7PL. */ #define MINT3_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT3PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT3PL) || (INT8PL == 0) +/* Задаёт MINT3_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 3_8PL. */ #define MINT3_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_8PL. */ #define MINT3_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT3PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT3PL) || (INT9PL == 0) +/* Задаёт MINT3_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 3_9PL. */ #define MINT3_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_9PL. */ #define MINT3_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT3PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT3PL) || (INT10PL == 0) +/* Задаёт MINT3_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 3_10PL. */ #define MINT3_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_10PL. */ #define MINT3_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT3PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT3PL) || (INT11PL == 0) +/* Задаёт MINT3_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 3_11PL. */ #define MINT3_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_11PL. */ #define MINT3_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT3PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT3PL) || (INT12PL == 0) +/* Задаёт MINT3_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 3_12PL. */ #define MINT3_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_12PL. */ #define MINT3_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT3PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT3PL) || (INT13PL == 0) +/* Задаёт MINT3_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 3_13PL. */ #define MINT3_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_13PL. */ #define MINT3_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT3PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT3PL) || (INT14PL == 0) +/* Задаёт MINT3_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 3_14PL. */ #define MINT3_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_14PL. */ #define MINT3_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT3PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT3PL) || (INT15PL == 0) +/* Задаёт MINT3_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 3_15PL. */ #define MINT3_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_15PL. */ #define MINT3_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT3PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT3PL) || (INT16PL == 0) +/* Задаёт MINT3_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 3_16PL. */ #define MINT3_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT3_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 3_16PL. */ #define MINT3_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT3 = (MINT3_1PL & MINT3_2PL & MINT3_3PL & MINT3_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 3. */ #define MINT3 (MINT3_1PL & MINT3_2PL & MINT3_3PL & MINT3_4PL & \ - MINT3_5PL & MINT3_6PL & MINT3_7PL & MINT3_8PL & \ - MINT3_9PL & MINT3_10PL & MINT3_11PL & MINT3_12PL & \ - MINT3_13PL & MINT3_14PL & MINT3_15PL & MINT3_16PL) + MINT3_5PL & MINT3_6PL & MINT3_7PL & MINT3_8PL & /* Продолжает список аргументов, полей или выражение MINT3_5PL & MINT3_6PL & MINT3_7PL & MINT3_8PL &; порядок элементов сохраняется. */ \ + MINT3_9PL & MINT3_10PL & MINT3_11PL & MINT3_12PL & /* Продолжает список аргументов, полей или выражение MINT3_9PL & MINT3_10PL & MINT3_11PL & MINT3_12PL &; порядок элементов сохраняется. */ \ + MINT3_13PL & MINT3_14PL & MINT3_15PL & MINT3_16PL) /* Продолжает список аргументов, полей или выражение MINT3_13PL & MINT3_14PL & MINT3_15PL & MINT3_16PL); порядок элементов сохраняется. */ // End Of MINT3. // Beginning of MINT4: +/* Условие компиляции (INT1PL >= INT4PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT4PL) || (INT1PL == 0) +/* Задаёт MINT4_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 4_1PL. */ #define MINT4_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_1PL. */ #define MINT4_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT4PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT4PL) || (INT2PL == 0) +/* Задаёт MINT4_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 4_2PL. */ #define MINT4_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_2PL. */ #define MINT4_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT4PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT4PL) || (INT3PL == 0) +/* Задаёт MINT4_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 4_3PL. */ #define MINT4_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_3PL. */ #define MINT4_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL == 0) +/* Задаёт MINT4_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 4_4PL. */ #define MINT4_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_4PL. */ #define MINT4_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT4PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT4PL) || (INT5PL == 0) +/* Задаёт MINT4_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 4_5PL. */ #define MINT4_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_5PL. */ #define MINT4_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT4PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT4PL) || (INT6PL == 0) +/* Задаёт MINT4_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 4_6PL. */ #define MINT4_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_6PL. */ #define MINT4_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT4PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT4PL) || (INT7PL == 0) +/* Задаёт MINT4_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 4_7PL. */ #define MINT4_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_7PL. */ #define MINT4_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT4PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT4PL) || (INT8PL == 0) +/* Задаёт MINT4_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 4_8PL. */ #define MINT4_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_8PL. */ #define MINT4_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT4PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT4PL) || (INT9PL == 0) +/* Задаёт MINT4_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 4_9PL. */ #define MINT4_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_9PL. */ #define MINT4_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT4PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT4PL) || (INT10PL == 0) +/* Задаёт MINT4_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 4_10PL. */ #define MINT4_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_10PL. */ #define MINT4_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT4PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT4PL) || (INT11PL == 0) +/* Задаёт MINT4_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 4_11PL. */ #define MINT4_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_11PL. */ #define MINT4_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT4PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT4PL) || (INT12PL == 0) +/* Задаёт MINT4_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 4_12PL. */ #define MINT4_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_12PL. */ #define MINT4_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT4PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT4PL) || (INT13PL == 0) +/* Задаёт MINT4_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 4_13PL. */ #define MINT4_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_13PL. */ #define MINT4_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT4PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT4PL) || (INT14PL == 0) +/* Задаёт MINT4_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 4_14PL. */ #define MINT4_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_14PL. */ #define MINT4_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT4PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT4PL) || (INT15PL == 0) +/* Задаёт MINT4_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 4_15PL. */ #define MINT4_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_15PL. */ #define MINT4_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT4PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT4PL) || (INT16PL == 0) +/* Задаёт MINT4_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 4_16PL. */ #define MINT4_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT4_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 4_16PL. */ #define MINT4_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT4 = (MINT4_1PL & MINT4_2PL & MINT4_3PL & MINT4_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 4. */ #define MINT4 (MINT4_1PL & MINT4_2PL & MINT4_3PL & MINT4_4PL & \ - MINT4_5PL & MINT4_6PL & MINT4_7PL & MINT4_8PL & \ - MINT4_9PL & MINT4_10PL & MINT4_11PL & MINT4_12PL & \ - MINT4_13PL & MINT4_14PL & MINT4_15PL & MINT4_16PL) + MINT4_5PL & MINT4_6PL & MINT4_7PL & MINT4_8PL & /* Продолжает список аргументов, полей или выражение MINT4_5PL & MINT4_6PL & MINT4_7PL & MINT4_8PL &; порядок элементов сохраняется. */ \ + MINT4_9PL & MINT4_10PL & MINT4_11PL & MINT4_12PL & /* Продолжает список аргументов, полей или выражение MINT4_9PL & MINT4_10PL & MINT4_11PL & MINT4_12PL &; порядок элементов сохраняется. */ \ + MINT4_13PL & MINT4_14PL & MINT4_15PL & MINT4_16PL) /* Продолжает список аргументов, полей или выражение MINT4_13PL & MINT4_14PL & MINT4_15PL & MINT4_16PL); порядок элементов сохраняется. */ // End Of MINT4. // Beginning of MINT5: +/* Условие компиляции (INT1PL >= INT5PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT5PL) || (INT1PL == 0) +/* Задаёт MINT5_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 5_1PL. */ #define MINT5_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_1PL. */ #define MINT5_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT5PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT5PL) || (INT2PL == 0) +/* Задаёт MINT5_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 5_2PL. */ #define MINT5_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_2PL. */ #define MINT5_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT5PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT5PL) || (INT3PL == 0) +/* Задаёт MINT5_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 5_3PL. */ #define MINT5_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_3PL. */ #define MINT5_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT5PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT5PL) || (INT4PL == 0) +/* Задаёт MINT5_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 5_4PL. */ #define MINT5_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_4PL. */ #define MINT5_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL == 0) +/* Задаёт MINT5_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 5_5PL. */ #define MINT5_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_5PL. */ #define MINT5_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT5PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT5PL) || (INT6PL == 0) +/* Задаёт MINT5_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 5_6PL. */ #define MINT5_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_6PL. */ #define MINT5_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT5PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT5PL) || (INT7PL == 0) +/* Задаёт MINT5_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 5_7PL. */ #define MINT5_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_7PL. */ #define MINT5_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT5PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT5PL) || (INT8PL == 0) +/* Задаёт MINT5_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 5_8PL. */ #define MINT5_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_8PL. */ #define MINT5_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT5PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT5PL) || (INT9PL == 0) +/* Задаёт MINT5_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 5_9PL. */ #define MINT5_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_9PL. */ #define MINT5_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT5PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT5PL) || (INT10PL == 0) +/* Задаёт MINT5_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 5_10PL. */ #define MINT5_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_10PL. */ #define MINT5_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT5PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT5PL) || (INT11PL == 0) +/* Задаёт MINT5_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 5_11PL. */ #define MINT5_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_11PL. */ #define MINT5_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT5PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT5PL) || (INT12PL == 0) +/* Задаёт MINT5_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 5_12PL. */ #define MINT5_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_12PL. */ #define MINT5_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT5PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT5PL) || (INT13PL == 0) +/* Задаёт MINT5_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 5_13PL. */ #define MINT5_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_13PL. */ #define MINT5_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT5PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT5PL) || (INT14PL == 0) +/* Задаёт MINT5_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 5_14PL. */ #define MINT5_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_14PL. */ #define MINT5_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT5PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT5PL) || (INT15PL == 0) +/* Задаёт MINT5_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 5_15PL. */ #define MINT5_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_15PL. */ #define MINT5_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT5PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT5PL) || (INT16PL == 0) +/* Задаёт MINT5_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 5_16PL. */ #define MINT5_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT5_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 5_16PL. */ #define MINT5_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT5 = (MINT5_1PL & MINT5_2PL & MINT5_3PL & MINT5_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 5. */ #define MINT5 (MINT5_1PL & MINT5_2PL & MINT5_3PL & MINT5_4PL & \ - MINT5_5PL & MINT5_6PL & MINT5_7PL & MINT5_8PL & \ - MINT5_9PL & MINT5_10PL & MINT5_11PL & MINT5_12PL & \ - MINT5_13PL & MINT5_14PL & MINT5_15PL & MINT5_16PL) + MINT5_5PL & MINT5_6PL & MINT5_7PL & MINT5_8PL & /* Продолжает список аргументов, полей или выражение MINT5_5PL & MINT5_6PL & MINT5_7PL & MINT5_8PL &; порядок элементов сохраняется. */ \ + MINT5_9PL & MINT5_10PL & MINT5_11PL & MINT5_12PL & /* Продолжает список аргументов, полей или выражение MINT5_9PL & MINT5_10PL & MINT5_11PL & MINT5_12PL &; порядок элементов сохраняется. */ \ + MINT5_13PL & MINT5_14PL & MINT5_15PL & MINT5_16PL) /* Продолжает список аргументов, полей или выражение MINT5_13PL & MINT5_14PL & MINT5_15PL & MINT5_16PL); порядок элементов сохраняется. */ // End Of MINT5. // Beginning of MINT6: +/* Условие компиляции (INT1PL >= INT6PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT6PL) || (INT1PL == 0) +/* Задаёт MINT6_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 6_1PL. */ #define MINT6_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_1PL. */ #define MINT6_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT6PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT6PL) || (INT2PL == 0) +/* Задаёт MINT6_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 6_2PL. */ #define MINT6_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_2PL. */ #define MINT6_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT6PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT6PL) || (INT3PL == 0) +/* Задаёт MINT6_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 6_3PL. */ #define MINT6_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_3PL. */ #define MINT6_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT6PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT6PL) || (INT4PL == 0) +/* Задаёт MINT6_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 6_4PL. */ #define MINT6_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_4PL. */ #define MINT6_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT6PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT6PL) || (INT5PL == 0) +/* Задаёт MINT6_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 6_5PL. */ #define MINT6_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_5PL. */ #define MINT6_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL == 0) +/* Задаёт MINT6_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 6_6PL. */ #define MINT6_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_6PL. */ #define MINT6_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT6PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT6PL) || (INT7PL == 0) +/* Задаёт MINT6_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 6_7PL. */ #define MINT6_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_7PL. */ #define MINT6_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT6PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT6PL) || (INT8PL == 0) +/* Задаёт MINT6_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 6_8PL. */ #define MINT6_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_8PL. */ #define MINT6_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT6PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT6PL) || (INT9PL == 0) +/* Задаёт MINT6_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 6_9PL. */ #define MINT6_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_9PL. */ #define MINT6_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT6PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT6PL) || (INT10PL == 0) +/* Задаёт MINT6_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 6_10PL. */ #define MINT6_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_10PL. */ #define MINT6_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT6PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT6PL) || (INT11PL == 0) +/* Задаёт MINT6_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 6_11PL. */ #define MINT6_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_11PL. */ #define MINT6_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT6PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT6PL) || (INT12PL == 0) +/* Задаёт MINT6_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 6_12PL. */ #define MINT6_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_12PL. */ #define MINT6_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT6PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT6PL) || (INT13PL == 0) +/* Задаёт MINT6_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 6_13PL. */ #define MINT6_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_13PL. */ #define MINT6_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT6PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT6PL) || (INT14PL == 0) +/* Задаёт MINT6_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 6_14PL. */ #define MINT6_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_14PL. */ #define MINT6_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT6PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT6PL) || (INT15PL == 0) +/* Задаёт MINT6_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 6_15PL. */ #define MINT6_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_15PL. */ #define MINT6_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT6PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT6PL) || (INT16PL == 0) +/* Задаёт MINT6_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 6_16PL. */ #define MINT6_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT6_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 6_16PL. */ #define MINT6_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT6 = (MINT6_1PL & MINT6_2PL & MINT6_3PL & MINT6_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 6. */ #define MINT6 (MINT6_1PL & MINT6_2PL & MINT6_3PL & MINT6_4PL & \ - MINT6_5PL & MINT6_6PL & MINT6_7PL & MINT6_8PL & \ - MINT6_9PL & MINT6_10PL & MINT6_11PL & MINT6_12PL & \ - MINT6_13PL & MINT6_14PL & MINT6_15PL & MINT6_16PL) + MINT6_5PL & MINT6_6PL & MINT6_7PL & MINT6_8PL & /* Продолжает список аргументов, полей или выражение MINT6_5PL & MINT6_6PL & MINT6_7PL & MINT6_8PL &; порядок элементов сохраняется. */ \ + MINT6_9PL & MINT6_10PL & MINT6_11PL & MINT6_12PL & /* Продолжает список аргументов, полей или выражение MINT6_9PL & MINT6_10PL & MINT6_11PL & MINT6_12PL &; порядок элементов сохраняется. */ \ + MINT6_13PL & MINT6_14PL & MINT6_15PL & MINT6_16PL) /* Продолжает список аргументов, полей или выражение MINT6_13PL & MINT6_14PL & MINT6_15PL & MINT6_16PL); порядок элементов сохраняется. */ // End Of MINT6. // Beginning of MINT7: +/* Условие компиляции (INT1PL >= INT7PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT7PL) || (INT1PL == 0) +/* Задаёт MINT7_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 7_1PL. */ #define MINT7_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_1PL. */ #define MINT7_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT7PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT7PL) || (INT2PL == 0) +/* Задаёт MINT7_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 7_2PL. */ #define MINT7_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_2PL. */ #define MINT7_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT7PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT7PL) || (INT3PL == 0) +/* Задаёт MINT7_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 7_3PL. */ #define MINT7_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_3PL. */ #define MINT7_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT7PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT7PL) || (INT4PL == 0) +/* Задаёт MINT7_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 7_4PL. */ #define MINT7_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_4PL. */ #define MINT7_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT7PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT7PL) || (INT5PL == 0) +/* Задаёт MINT7_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 7_5PL. */ #define MINT7_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_5PL. */ #define MINT7_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT7PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT7PL) || (INT6PL == 0) +/* Задаёт MINT7_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 7_6PL. */ #define MINT7_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_6PL. */ #define MINT7_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL == 0) +/* Задаёт MINT7_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 7_7PL. */ #define MINT7_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_7PL. */ #define MINT7_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT7PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT7PL) || (INT8PL == 0) +/* Задаёт MINT7_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 7_8PL. */ #define MINT7_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_8PL. */ #define MINT7_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT7PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT7PL) || (INT9PL == 0) +/* Задаёт MINT7_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 7_9PL. */ #define MINT7_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_9PL. */ #define MINT7_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT7PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT7PL) || (INT10PL == 0) +/* Задаёт MINT7_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 7_10PL. */ #define MINT7_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_10PL. */ #define MINT7_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT7PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT7PL) || (INT11PL == 0) +/* Задаёт MINT7_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 7_11PL. */ #define MINT7_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_11PL. */ #define MINT7_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT7PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT7PL) || (INT12PL == 0) +/* Задаёт MINT7_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 7_12PL. */ #define MINT7_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_12PL. */ #define MINT7_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT7PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT7PL) || (INT13PL == 0) +/* Задаёт MINT7_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 7_13PL. */ #define MINT7_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_13PL. */ #define MINT7_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT7PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT7PL) || (INT14PL == 0) +/* Задаёт MINT7_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 7_14PL. */ #define MINT7_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_14PL. */ #define MINT7_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT7PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT7PL) || (INT15PL == 0) +/* Задаёт MINT7_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 7_15PL. */ #define MINT7_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_15PL. */ #define MINT7_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT7PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT7PL) || (INT16PL == 0) +/* Задаёт MINT7_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 7_16PL. */ #define MINT7_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT7_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 7_16PL. */ #define MINT7_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT7 = (MINT7_1PL & MINT7_2PL & MINT7_3PL & MINT7_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 7. */ #define MINT7 (MINT7_1PL & MINT7_2PL & MINT7_3PL & MINT7_4PL & \ - MINT7_5PL & MINT7_6PL & MINT7_7PL & MINT7_8PL & \ - MINT7_9PL & MINT7_10PL & MINT7_11PL & MINT7_12PL & \ - MINT7_13PL & MINT7_14PL & MINT7_15PL & MINT7_16PL) + MINT7_5PL & MINT7_6PL & MINT7_7PL & MINT7_8PL & /* Продолжает список аргументов, полей или выражение MINT7_5PL & MINT7_6PL & MINT7_7PL & MINT7_8PL &; порядок элементов сохраняется. */ \ + MINT7_9PL & MINT7_10PL & MINT7_11PL & MINT7_12PL & /* Продолжает список аргументов, полей или выражение MINT7_9PL & MINT7_10PL & MINT7_11PL & MINT7_12PL &; порядок элементов сохраняется. */ \ + MINT7_13PL & MINT7_14PL & MINT7_15PL & MINT7_16PL) /* Продолжает список аргументов, полей или выражение MINT7_13PL & MINT7_14PL & MINT7_15PL & MINT7_16PL); порядок элементов сохраняется. */ // End Of MINT7. // Beginning of MINT8: +/* Условие компиляции (INT1PL >= INT8PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT8PL) || (INT1PL == 0) +/* Задаёт MINT8_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 8_1PL. */ #define MINT8_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_1PL. */ #define MINT8_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT8PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT8PL) || (INT2PL == 0) +/* Задаёт MINT8_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 8_2PL. */ #define MINT8_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_2PL. */ #define MINT8_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT8PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT8PL) || (INT3PL == 0) +/* Задаёт MINT8_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 8_3PL. */ #define MINT8_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_3PL. */ #define MINT8_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT8PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT8PL) || (INT4PL == 0) +/* Задаёт MINT8_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 8_4PL. */ #define MINT8_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_4PL. */ #define MINT8_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT8PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT8PL) || (INT5PL == 0) +/* Задаёт MINT8_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 8_5PL. */ #define MINT8_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_5PL. */ #define MINT8_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT8PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT8PL) || (INT6PL == 0) +/* Задаёт MINT8_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 8_6PL. */ #define MINT8_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_6PL. */ #define MINT8_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT8PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT8PL) || (INT7PL == 0) +/* Задаёт MINT8_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 8_7PL. */ #define MINT8_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_7PL. */ #define MINT8_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL == 0) +/* Задаёт MINT8_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 8_8PL. */ #define MINT8_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_8PL. */ #define MINT8_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT8PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT8PL) || (INT9PL == 0) +/* Задаёт MINT8_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 8_9PL. */ #define MINT8_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_9PL. */ #define MINT8_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT8PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT8PL) || (INT10PL == 0) +/* Задаёт MINT8_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 8_10PL. */ #define MINT8_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_10PL. */ #define MINT8_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT8PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT8PL) || (INT11PL == 0) +/* Задаёт MINT8_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 8_11PL. */ #define MINT8_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_11PL. */ #define MINT8_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT8PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT8PL) || (INT12PL == 0) +/* Задаёт MINT8_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 8_12PL. */ #define MINT8_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_12PL. */ #define MINT8_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT8PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT8PL) || (INT13PL == 0) +/* Задаёт MINT8_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 8_13PL. */ #define MINT8_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_13PL. */ #define MINT8_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT8PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT8PL) || (INT14PL == 0) +/* Задаёт MINT8_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 8_14PL. */ #define MINT8_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_14PL. */ #define MINT8_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT8PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT8PL) || (INT15PL == 0) +/* Задаёт MINT8_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 8_15PL. */ #define MINT8_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_15PL. */ #define MINT8_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT8PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT8PL) || (INT16PL == 0) +/* Задаёт MINT8_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 8_16PL. */ #define MINT8_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT8_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 8_16PL. */ #define MINT8_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT8 = (MINT8_1PL & MINT8_2PL & MINT8_3PL & MINT8_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 8. */ #define MINT8 (MINT8_1PL & MINT8_2PL & MINT8_3PL & MINT8_4PL & \ - MINT8_5PL & MINT8_6PL & MINT8_7PL & MINT8_8PL & \ - MINT8_9PL & MINT8_10PL & MINT8_11PL & MINT8_12PL & \ - MINT8_13PL & MINT8_14PL & MINT8_15PL & MINT8_16PL) + MINT8_5PL & MINT8_6PL & MINT8_7PL & MINT8_8PL & /* Продолжает список аргументов, полей или выражение MINT8_5PL & MINT8_6PL & MINT8_7PL & MINT8_8PL &; порядок элементов сохраняется. */ \ + MINT8_9PL & MINT8_10PL & MINT8_11PL & MINT8_12PL & /* Продолжает список аргументов, полей или выражение MINT8_9PL & MINT8_10PL & MINT8_11PL & MINT8_12PL &; порядок элементов сохраняется. */ \ + MINT8_13PL & MINT8_14PL & MINT8_15PL & MINT8_16PL) /* Продолжает список аргументов, полей или выражение MINT8_13PL & MINT8_14PL & MINT8_15PL & MINT8_16PL); порядок элементов сохраняется. */ // End Of MINT8. // Beginning of MINT9: +/* Условие компиляции (INT1PL >= INT9PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT9PL) || (INT1PL == 0) +/* Задаёт MINT9_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 9_1PL. */ #define MINT9_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_1PL. */ #define MINT9_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT9PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT9PL) || (INT2PL == 0) +/* Задаёт MINT9_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 9_2PL. */ #define MINT9_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_2PL. */ #define MINT9_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT9PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT9PL) || (INT3PL == 0) +/* Задаёт MINT9_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 9_3PL. */ #define MINT9_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_3PL. */ #define MINT9_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT9PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT9PL) || (INT4PL == 0) +/* Задаёт MINT9_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 9_4PL. */ #define MINT9_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_4PL. */ #define MINT9_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT9PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT9PL) || (INT5PL == 0) +/* Задаёт MINT9_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 9_5PL. */ #define MINT9_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_5PL. */ #define MINT9_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT9PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT9PL) || (INT6PL == 0) +/* Задаёт MINT9_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 9_6PL. */ #define MINT9_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_6PL. */ #define MINT9_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT9PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT9PL) || (INT7PL == 0) +/* Задаёт MINT9_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 9_7PL. */ #define MINT9_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_7PL. */ #define MINT9_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT9PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT9PL) || (INT8PL == 0) +/* Задаёт MINT9_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 9_8PL. */ #define MINT9_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_8PL. */ #define MINT9_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL == 0) +/* Задаёт MINT9_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 9_9PL. */ #define MINT9_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_9PL. */ #define MINT9_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT9PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT9PL) || (INT10PL == 0) +/* Задаёт MINT9_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 9_10PL. */ #define MINT9_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_10PL. */ #define MINT9_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT9PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT9PL) || (INT11PL == 0) +/* Задаёт MINT9_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 9_11PL. */ #define MINT9_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_11PL. */ #define MINT9_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT9PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT9PL) || (INT12PL == 0) +/* Задаёт MINT9_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 9_12PL. */ #define MINT9_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_12PL. */ #define MINT9_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT9PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT9PL) || (INT13PL == 0) +/* Задаёт MINT9_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 9_13PL. */ #define MINT9_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_13PL. */ #define MINT9_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT9PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT9PL) || (INT14PL == 0) +/* Задаёт MINT9_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 9_14PL. */ #define MINT9_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_14PL. */ #define MINT9_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT9PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT9PL) || (INT15PL == 0) +/* Задаёт MINT9_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 9_15PL. */ #define MINT9_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_15PL. */ #define MINT9_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT9PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT9PL) || (INT16PL == 0) +/* Задаёт MINT9_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 9_16PL. */ #define MINT9_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT9_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 9_16PL. */ #define MINT9_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT9 = (MINT9_1PL & MINT9_2PL & MINT9_3PL & MINT9_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 9. */ #define MINT9 (MINT9_1PL & MINT9_2PL & MINT9_3PL & MINT9_4PL & \ - MINT9_5PL & MINT9_6PL & MINT9_7PL & MINT9_8PL & \ - MINT9_9PL & MINT9_10PL & MINT9_11PL & MINT9_12PL & \ - MINT9_13PL & MINT9_14PL & MINT9_15PL & MINT9_16PL) + MINT9_5PL & MINT9_6PL & MINT9_7PL & MINT9_8PL & /* Продолжает список аргументов, полей или выражение MINT9_5PL & MINT9_6PL & MINT9_7PL & MINT9_8PL &; порядок элементов сохраняется. */ \ + MINT9_9PL & MINT9_10PL & MINT9_11PL & MINT9_12PL & /* Продолжает список аргументов, полей или выражение MINT9_9PL & MINT9_10PL & MINT9_11PL & MINT9_12PL &; порядок элементов сохраняется. */ \ + MINT9_13PL & MINT9_14PL & MINT9_15PL & MINT9_16PL) /* Продолжает список аргументов, полей или выражение MINT9_13PL & MINT9_14PL & MINT9_15PL & MINT9_16PL); порядок элементов сохраняется. */ // End Of MINT9. // Beginning of MINT10: +/* Условие компиляции (INT1PL >= INT10PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT10PL) || (INT1PL == 0) +/* Задаёт MINT10_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 10_1PL. */ #define MINT10_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_1PL. */ #define MINT10_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT10PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT10PL) || (INT2PL == 0) +/* Задаёт MINT10_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 10_2PL. */ #define MINT10_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_2PL. */ #define MINT10_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT10PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT10PL) || (INT3PL == 0) +/* Задаёт MINT10_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 10_3PL. */ #define MINT10_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_3PL. */ #define MINT10_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT10PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT10PL) || (INT4PL == 0) +/* Задаёт MINT10_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 10_4PL. */ #define MINT10_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_4PL. */ #define MINT10_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT10PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT10PL) || (INT5PL == 0) +/* Задаёт MINT10_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 10_5PL. */ #define MINT10_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_5PL. */ #define MINT10_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT10PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT10PL) || (INT6PL == 0) +/* Задаёт MINT10_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 10_6PL. */ #define MINT10_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_6PL. */ #define MINT10_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT10PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT10PL) || (INT7PL == 0) +/* Задаёт MINT10_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 10_7PL. */ #define MINT10_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_7PL. */ #define MINT10_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT10PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT10PL) || (INT8PL == 0) +/* Задаёт MINT10_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 10_8PL. */ #define MINT10_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_8PL. */ #define MINT10_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT10PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT10PL) || (INT9PL == 0) +/* Задаёт MINT10_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 10_9PL. */ #define MINT10_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_9PL. */ #define MINT10_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL == 0) +/* Задаёт MINT10_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 10_10PL. */ #define MINT10_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_10PL. */ #define MINT10_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT10PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT10PL) || (INT11PL == 0) +/* Задаёт MINT10_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 10_11PL. */ #define MINT10_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_11PL. */ #define MINT10_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT10PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT10PL) || (INT12PL == 0) +/* Задаёт MINT10_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 10_12PL. */ #define MINT10_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_12PL. */ #define MINT10_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT10PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT10PL) || (INT13PL == 0) +/* Задаёт MINT10_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 10_13PL. */ #define MINT10_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_13PL. */ #define MINT10_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT10PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT10PL) || (INT14PL == 0) +/* Задаёт MINT10_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 10_14PL. */ #define MINT10_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_14PL. */ #define MINT10_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT10PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT10PL) || (INT15PL == 0) +/* Задаёт MINT10_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 10_15PL. */ #define MINT10_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_15PL. */ #define MINT10_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT10PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT10PL) || (INT16PL == 0) +/* Задаёт MINT10_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 10_16PL. */ #define MINT10_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT10_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 10_16PL. */ #define MINT10_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT10 = (MINT10_1PL & MINT10_2PL & MINT10_3PL & MINT10_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 10. */ #define MINT10 (MINT10_1PL & MINT10_2PL & MINT10_3PL & MINT10_4PL & \ - MINT10_5PL & MINT10_6PL & MINT10_7PL & MINT10_8PL & \ - MINT10_9PL & MINT10_10PL & MINT10_11PL & MINT10_12PL & \ - MINT10_13PL & MINT10_14PL & MINT10_15PL & MINT10_16PL) + MINT10_5PL & MINT10_6PL & MINT10_7PL & MINT10_8PL & /* Продолжает список аргументов, полей или выражение MINT10_5PL & MINT10_6PL & MINT10_7PL & MINT10_8PL &; порядок элементов сохраняется. */ \ + MINT10_9PL & MINT10_10PL & MINT10_11PL & MINT10_12PL & /* Продолжает список аргументов, полей или выражение MINT10_9PL & MINT10_10PL & MINT10_11PL & MINT10_12PL &; порядок элементов сохраняется. */ \ + MINT10_13PL & MINT10_14PL & MINT10_15PL & MINT10_16PL) /* Продолжает список аргументов, полей или выражение MINT10_13PL & MINT10_14PL & MINT10_15PL & MINT10_16PL); порядок элементов сохраняется. */ // End Of MINT10. // Beginning of MINT11: +/* Условие компиляции (INT1PL >= INT11PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT11PL) || (INT1PL == 0) +/* Задаёт MINT11_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 11_1PL. */ #define MINT11_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_1PL. */ #define MINT11_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT11PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT11PL) || (INT2PL == 0) +/* Задаёт MINT11_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 11_2PL. */ #define MINT11_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_2PL. */ #define MINT11_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT11PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT11PL) || (INT3PL == 0) +/* Задаёт MINT11_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 11_3PL. */ #define MINT11_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_3PL. */ #define MINT11_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT11PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT11PL) || (INT4PL == 0) +/* Задаёт MINT11_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 11_4PL. */ #define MINT11_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_4PL. */ #define MINT11_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT11PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT11PL) || (INT5PL == 0) +/* Задаёт MINT11_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 11_5PL. */ #define MINT11_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_5PL. */ #define MINT11_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT11PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT11PL) || (INT6PL == 0) +/* Задаёт MINT11_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 11_6PL. */ #define MINT11_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_6PL. */ #define MINT11_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT11PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT11PL) || (INT7PL == 0) +/* Задаёт MINT11_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 11_7PL. */ #define MINT11_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_7PL. */ #define MINT11_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT11PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT11PL) || (INT8PL == 0) +/* Задаёт MINT11_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 11_8PL. */ #define MINT11_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_8PL. */ #define MINT11_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT11PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT11PL) || (INT9PL == 0) +/* Задаёт MINT11_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 11_9PL. */ #define MINT11_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_9PL. */ #define MINT11_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT11PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT11PL) || (INT10PL == 0) +/* Задаёт MINT11_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 11_10PL. */ #define MINT11_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_10PL. */ #define MINT11_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL == 0) +/* Задаёт MINT11_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 11_11PL. */ #define MINT11_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_11PL. */ #define MINT11_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT11PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT11PL) || (INT12PL == 0) +/* Задаёт MINT11_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 11_12PL. */ #define MINT11_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_12PL. */ #define MINT11_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT11PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT11PL) || (INT13PL == 0) +/* Задаёт MINT11_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 11_13PL. */ #define MINT11_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_13PL. */ #define MINT11_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT11PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT11PL) || (INT14PL == 0) +/* Задаёт MINT11_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 11_14PL. */ #define MINT11_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_14PL. */ #define MINT11_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT11PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT11PL) || (INT15PL == 0) +/* Задаёт MINT11_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 11_15PL. */ #define MINT11_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_15PL. */ #define MINT11_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT11PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT11PL) || (INT16PL == 0) +/* Задаёт MINT11_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 11_16PL. */ #define MINT11_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT11_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 11_16PL. */ #define MINT11_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT11 = (MINT11_1PL & MINT11_2PL & MINT11_3PL & MINT11_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 11. */ #define MINT11 (MINT11_1PL & MINT11_2PL & MINT11_3PL & MINT11_4PL & \ - MINT11_5PL & MINT11_6PL & MINT11_7PL & MINT11_8PL & \ - MINT11_9PL & MINT11_10PL & MINT11_11PL & MINT11_12PL & \ - MINT11_13PL & MINT11_14PL & MINT11_15PL & MINT11_16PL) + MINT11_5PL & MINT11_6PL & MINT11_7PL & MINT11_8PL & /* Продолжает список аргументов, полей или выражение MINT11_5PL & MINT11_6PL & MINT11_7PL & MINT11_8PL &; порядок элементов сохраняется. */ \ + MINT11_9PL & MINT11_10PL & MINT11_11PL & MINT11_12PL & /* Продолжает список аргументов, полей или выражение MINT11_9PL & MINT11_10PL & MINT11_11PL & MINT11_12PL &; порядок элементов сохраняется. */ \ + MINT11_13PL & MINT11_14PL & MINT11_15PL & MINT11_16PL) /* Продолжает список аргументов, полей или выражение MINT11_13PL & MINT11_14PL & MINT11_15PL & MINT11_16PL); порядок элементов сохраняется. */ // End Of MINT11. // Beginning of MINT12: +/* Условие компиляции (INT1PL >= INT12PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT12PL) || (INT1PL == 0) +/* Задаёт MINT12_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 12_1PL. */ #define MINT12_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_1PL. */ #define MINT12_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT12PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT12PL) || (INT2PL == 0) +/* Задаёт MINT12_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 12_2PL. */ #define MINT12_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_2PL. */ #define MINT12_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT12PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT12PL) || (INT3PL == 0) +/* Задаёт MINT12_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 12_3PL. */ #define MINT12_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_3PL. */ #define MINT12_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT12PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT12PL) || (INT4PL == 0) +/* Задаёт MINT12_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 12_4PL. */ #define MINT12_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_4PL. */ #define MINT12_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT12PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT12PL) || (INT5PL == 0) +/* Задаёт MINT12_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 12_5PL. */ #define MINT12_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_5PL. */ #define MINT12_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT12PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT12PL) || (INT6PL == 0) +/* Задаёт MINT12_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 12_6PL. */ #define MINT12_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_6PL. */ #define MINT12_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT12PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT12PL) || (INT7PL == 0) +/* Задаёт MINT12_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 12_7PL. */ #define MINT12_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_7PL. */ #define MINT12_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT12PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT12PL) || (INT8PL == 0) +/* Задаёт MINT12_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 12_8PL. */ #define MINT12_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_8PL. */ #define MINT12_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT12PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT12PL) || (INT9PL == 0) +/* Задаёт MINT12_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 12_9PL. */ #define MINT12_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_9PL. */ #define MINT12_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT12PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT12PL) || (INT10PL == 0) +/* Задаёт MINT12_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 12_10PL. */ #define MINT12_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_10PL. */ #define MINT12_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT12PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT12PL) || (INT11PL == 0) +/* Задаёт MINT12_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 12_11PL. */ #define MINT12_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_11PL. */ #define MINT12_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL == 0) +/* Задаёт MINT12_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 12_12PL. */ #define MINT12_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_12PL. */ #define MINT12_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT12PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT12PL) || (INT13PL == 0) +/* Задаёт MINT12_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 12_13PL. */ #define MINT12_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_13PL. */ #define MINT12_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT12PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT12PL) || (INT14PL == 0) +/* Задаёт MINT12_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 12_14PL. */ #define MINT12_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_14PL. */ #define MINT12_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT12PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT12PL) || (INT15PL == 0) +/* Задаёт MINT12_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 12_15PL. */ #define MINT12_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_15PL. */ #define MINT12_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT12PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT12PL) || (INT16PL == 0) +/* Задаёт MINT12_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 12_16PL. */ #define MINT12_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT12_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 12_16PL. */ #define MINT12_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT12 = (MINT12_1PL & MINT12_2PL & MINT12_3PL & MINT12_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 12. */ #define MINT12 (MINT12_1PL & MINT12_2PL & MINT12_3PL & MINT12_4PL & \ - MINT12_5PL & MINT12_6PL & MINT12_7PL & MINT12_8PL & \ - MINT12_9PL & MINT12_10PL & MINT12_11PL & MINT12_12PL & \ - MINT12_13PL & MINT12_14PL & MINT12_15PL & MINT12_16PL) + MINT12_5PL & MINT12_6PL & MINT12_7PL & MINT12_8PL & /* Продолжает список аргументов, полей или выражение MINT12_5PL & MINT12_6PL & MINT12_7PL & MINT12_8PL &; порядок элементов сохраняется. */ \ + MINT12_9PL & MINT12_10PL & MINT12_11PL & MINT12_12PL & /* Продолжает список аргументов, полей или выражение MINT12_9PL & MINT12_10PL & MINT12_11PL & MINT12_12PL &; порядок элементов сохраняется. */ \ + MINT12_13PL & MINT12_14PL & MINT12_15PL & MINT12_16PL) /* Продолжает список аргументов, полей или выражение MINT12_13PL & MINT12_14PL & MINT12_15PL & MINT12_16PL); порядок элементов сохраняется. */ // End Of MINT12. // Beginning of MINT13: +/* Условие компиляции (INT1PL >= INT13PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT13PL) || (INT1PL == 0) +/* Задаёт MINT13_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 13_1PL. */ #define MINT13_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_1PL. */ #define MINT13_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT13PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT13PL) || (INT2PL == 0) +/* Задаёт MINT13_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 13_2PL. */ #define MINT13_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_2PL. */ #define MINT13_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT13PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT13PL) || (INT3PL == 0) +/* Задаёт MINT13_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 13_3PL. */ #define MINT13_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_3PL. */ #define MINT13_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT13PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT13PL) || (INT4PL == 0) +/* Задаёт MINT13_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 13_4PL. */ #define MINT13_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_4PL. */ #define MINT13_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT13PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT13PL) || (INT5PL == 0) +/* Задаёт MINT13_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 13_5PL. */ #define MINT13_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_5PL. */ #define MINT13_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT13PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT13PL) || (INT6PL == 0) +/* Задаёт MINT13_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 13_6PL. */ #define MINT13_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_6PL. */ #define MINT13_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT13PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT13PL) || (INT7PL == 0) +/* Задаёт MINT13_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 13_7PL. */ #define MINT13_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_7PL. */ #define MINT13_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT13PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT13PL) || (INT8PL == 0) +/* Задаёт MINT13_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 13_8PL. */ #define MINT13_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_8PL. */ #define MINT13_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT13PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT13PL) || (INT9PL == 0) +/* Задаёт MINT13_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 13_9PL. */ #define MINT13_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_9PL. */ #define MINT13_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT13PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT13PL) || (INT10PL == 0) +/* Задаёт MINT13_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 13_10PL. */ #define MINT13_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_10PL. */ #define MINT13_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT13PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT13PL) || (INT11PL == 0) +/* Задаёт MINT13_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 13_11PL. */ #define MINT13_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_11PL. */ #define MINT13_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT13_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 13_12PL. */ #define MINT13_12PL ~(1 << 11) +/* Условие компиляции (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL == 0) +/* Задаёт MINT13_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 13_13PL. */ #define MINT13_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_13PL. */ #define MINT13_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT13PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT13PL) || (INT14PL == 0) +/* Задаёт MINT13_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 13_14PL. */ #define MINT13_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_14PL. */ #define MINT13_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT13PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT13PL) || (INT15PL == 0) +/* Задаёт MINT13_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 13_15PL. */ #define MINT13_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_15PL. */ #define MINT13_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT13PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT13PL) || (INT16PL == 0) +/* Задаёт MINT13_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 13_16PL. */ #define MINT13_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT13_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 13_16PL. */ #define MINT13_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT13 = (MINT13_1PL & MINT13_2PL & MINT13_3PL & MINT13_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 13. */ #define MINT13 (MINT13_1PL & MINT13_2PL & MINT13_3PL & MINT13_4PL & \ - MINT13_5PL & MINT13_6PL & MINT13_7PL & MINT13_8PL & \ - MINT13_9PL & MINT13_10PL & MINT13_11PL & MINT13_12PL & \ - MINT13_13PL & MINT13_14PL & MINT13_15PL & MINT13_16PL) + MINT13_5PL & MINT13_6PL & MINT13_7PL & MINT13_8PL & /* Продолжает список аргументов, полей или выражение MINT13_5PL & MINT13_6PL & MINT13_7PL & MINT13_8PL &; порядок элементов сохраняется. */ \ + MINT13_9PL & MINT13_10PL & MINT13_11PL & MINT13_12PL & /* Продолжает список аргументов, полей или выражение MINT13_9PL & MINT13_10PL & MINT13_11PL & MINT13_12PL &; порядок элементов сохраняется. */ \ + MINT13_13PL & MINT13_14PL & MINT13_15PL & MINT13_16PL) /* Продолжает список аргументов, полей или выражение MINT13_13PL & MINT13_14PL & MINT13_15PL & MINT13_16PL); порядок элементов сохраняется. */ // End Of MINT13. // Beginning of MINT14: +/* Условие компиляции (INT1PL >= INT14PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT14PL) || (INT1PL == 0) +/* Задаёт MINT14_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 14_1PL. */ #define MINT14_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_1PL. */ #define MINT14_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT14PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT14PL) || (INT2PL == 0) +/* Задаёт MINT14_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 14_2PL. */ #define MINT14_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_2PL. */ #define MINT14_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT14PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT14PL) || (INT3PL == 0) +/* Задаёт MINT14_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 14_3PL. */ #define MINT14_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_3PL. */ #define MINT14_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT14PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT14PL) || (INT4PL == 0) +/* Задаёт MINT14_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 14_4PL. */ #define MINT14_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_4PL. */ #define MINT14_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT14PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT14PL) || (INT5PL == 0) +/* Задаёт MINT14_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 14_5PL. */ #define MINT14_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_5PL. */ #define MINT14_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT14PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT14PL) || (INT6PL == 0) +/* Задаёт MINT14_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 14_6PL. */ #define MINT14_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_6PL. */ #define MINT14_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT14PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT14PL) || (INT7PL == 0) +/* Задаёт MINT14_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 14_7PL. */ #define MINT14_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_7PL. */ #define MINT14_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT14PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT14PL) || (INT8PL == 0) +/* Задаёт MINT14_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 14_8PL. */ #define MINT14_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_8PL. */ #define MINT14_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT14PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT14PL) || (INT9PL == 0) +/* Задаёт MINT14_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 14_9PL. */ #define MINT14_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_9PL. */ #define MINT14_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT14PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT14PL) || (INT10PL == 0) +/* Задаёт MINT14_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 14_10PL. */ #define MINT14_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_10PL. */ #define MINT14_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT14PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT14PL) || (INT11PL == 0) +/* Задаёт MINT14_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 14_11PL. */ #define MINT14_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_11PL. */ #define MINT14_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT14PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT14PL) || (INT12PL == 0) +/* Задаёт MINT14_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 14_12PL. */ #define MINT14_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_12PL. */ #define MINT14_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT14PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT14PL) || (INT13PL == 0) +/* Задаёт MINT14_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 14_13PL. */ #define MINT14_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_13PL. */ #define MINT14_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT14_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 14_14PL. */ #define MINT14_14PL ~(1 << 13) +/* Условие компиляции (INT15PL >= INT14PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT14PL) || (INT15PL == 0) +/* Задаёт MINT14_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 14_15PL. */ #define MINT14_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_15PL. */ #define MINT14_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT16PL >= INT14PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT14PL) || (INT16PL == 0) +/* Задаёт MINT14_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 14_16PL. */ #define MINT14_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT14_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 14_16PL. */ #define MINT14_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT14 = (MINT14_1PL & MINT14_2PL & MINT14_3PL & MINT14_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 14. */ #define MINT14 (MINT14_1PL & MINT14_2PL & MINT14_3PL & MINT14_4PL & \ - MINT14_5PL & MINT14_6PL & MINT14_7PL & MINT14_8PL & \ - MINT14_9PL & MINT14_10PL & MINT14_11PL & MINT14_12PL & \ - MINT14_13PL & MINT14_14PL & MINT14_15PL & MINT14_16PL) + MINT14_5PL & MINT14_6PL & MINT14_7PL & MINT14_8PL & /* Продолжает список аргументов, полей или выражение MINT14_5PL & MINT14_6PL & MINT14_7PL & MINT14_8PL &; порядок элементов сохраняется. */ \ + MINT14_9PL & MINT14_10PL & MINT14_11PL & MINT14_12PL & /* Продолжает список аргументов, полей или выражение MINT14_9PL & MINT14_10PL & MINT14_11PL & MINT14_12PL &; порядок элементов сохраняется. */ \ + MINT14_13PL & MINT14_14PL & MINT14_15PL & MINT14_16PL) /* Продолжает список аргументов, полей или выражение MINT14_13PL & MINT14_14PL & MINT14_15PL & MINT14_16PL); порядок элементов сохраняется. */ // End Of MINT14. // Beginning of MINT15: +/* Условие компиляции (INT1PL >= INT15PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT15PL) || (INT1PL == 0) +/* Задаёт MINT15_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 15_1PL. */ #define MINT15_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_1PL. */ #define MINT15_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT15PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT15PL) || (INT2PL == 0) +/* Задаёт MINT15_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 15_2PL. */ #define MINT15_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_2PL. */ #define MINT15_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT15PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT15PL) || (INT3PL == 0) +/* Задаёт MINT15_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 15_3PL. */ #define MINT15_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_3PL. */ #define MINT15_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT15PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT15PL) || (INT4PL == 0) +/* Задаёт MINT15_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 15_4PL. */ #define MINT15_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_4PL. */ #define MINT15_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT15PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT15PL) || (INT5PL == 0) +/* Задаёт MINT15_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 15_5PL. */ #define MINT15_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_5PL. */ #define MINT15_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT15PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT15PL) || (INT6PL == 0) +/* Задаёт MINT15_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 15_6PL. */ #define MINT15_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_6PL. */ #define MINT15_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT15PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT15PL) || (INT7PL == 0) +/* Задаёт MINT15_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 15_7PL. */ #define MINT15_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_7PL. */ #define MINT15_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT15PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT15PL) || (INT8PL == 0) +/* Задаёт MINT15_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 15_8PL. */ #define MINT15_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_8PL. */ #define MINT15_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT15PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT15PL) || (INT9PL == 0) +/* Задаёт MINT15_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 15_9PL. */ #define MINT15_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_9PL. */ #define MINT15_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT15PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT15PL) || (INT10PL == 0) +/* Задаёт MINT15_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 15_10PL. */ #define MINT15_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_10PL. */ #define MINT15_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT15PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT15PL) || (INT11PL == 0) +/* Задаёт MINT15_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 15_11PL. */ #define MINT15_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_11PL. */ #define MINT15_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT15PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT15PL) || (INT12PL == 0) +/* Задаёт MINT15_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 15_12PL. */ #define MINT15_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_12PL. */ #define MINT15_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT15PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT15PL) || (INT13PL == 0) +/* Задаёт MINT15_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 15_13PL. */ #define MINT15_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_13PL. */ #define MINT15_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT15PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT15PL) || (INT14PL == 0) +/* Задаёт MINT15_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 15_14PL. */ #define MINT15_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_14PL. */ #define MINT15_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT15_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 15_15PL. */ #define MINT15_15PL ~(1 << 14) +/* Условие компиляции (INT16PL >= INT15PL) или (INT16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL >= INT15PL) || (INT16PL == 0) +/* Задаёт MINT15_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 15_16PL. */ #define MINT15_16PL ~(1 << 15) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT15_16PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 15_16PL. */ #define MINT15_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT15 = (MINT15_1PL & MINT15_2PL & MINT15_3PL & MINT15_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 15. */ #define MINT15 (MINT15_1PL & MINT15_2PL & MINT15_3PL & MINT15_4PL & \ - MINT15_5PL & MINT15_6PL & MINT15_7PL & MINT15_8PL & \ - MINT15_9PL & MINT15_10PL & MINT15_11PL & MINT15_12PL & \ - MINT15_13PL & MINT15_14PL & MINT15_15PL & MINT15_16PL) + MINT15_5PL & MINT15_6PL & MINT15_7PL & MINT15_8PL & /* Продолжает список аргументов, полей или выражение MINT15_5PL & MINT15_6PL & MINT15_7PL & MINT15_8PL &; порядок элементов сохраняется. */ \ + MINT15_9PL & MINT15_10PL & MINT15_11PL & MINT15_12PL & /* Продолжает список аргументов, полей или выражение MINT15_9PL & MINT15_10PL & MINT15_11PL & MINT15_12PL &; порядок элементов сохраняется. */ \ + MINT15_13PL & MINT15_14PL & MINT15_15PL & MINT15_16PL) /* Продолжает список аргументов, полей или выражение MINT15_13PL & MINT15_14PL & MINT15_15PL & MINT15_16PL); порядок элементов сохраняется. */ // End Of MINT15. // Beginning of MINT16: +/* Условие компиляции (INT1PL >= INT16PL) или (INT1PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT1PL >= INT16PL) || (INT1PL == 0) +/* Задаёт MINT16_1PL = ~(1 << 0); маска разрешённых прерываний ядра для приоритетного обработчика 16_1PL. */ #define MINT16_1PL ~(1 << 0) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_1PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_1PL. */ #define MINT16_1PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT2PL >= INT16PL) или (INT2PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT2PL >= INT16PL) || (INT2PL == 0) +/* Задаёт MINT16_2PL = ~(1 << 1); маска разрешённых прерываний ядра для приоритетного обработчика 16_2PL. */ #define MINT16_2PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_2PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_2PL. */ #define MINT16_2PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT3PL >= INT16PL) или (INT3PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT3PL >= INT16PL) || (INT3PL == 0) +/* Задаёт MINT16_3PL = ~(1 << 2); маска разрешённых прерываний ядра для приоритетного обработчика 16_3PL. */ #define MINT16_3PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_3PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_3PL. */ #define MINT16_3PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT4PL >= INT16PL) или (INT4PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT4PL >= INT16PL) || (INT4PL == 0) +/* Задаёт MINT16_4PL = ~(1 << 3); маска разрешённых прерываний ядра для приоритетного обработчика 16_4PL. */ #define MINT16_4PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_4PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_4PL. */ #define MINT16_4PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT5PL >= INT16PL) или (INT5PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT5PL >= INT16PL) || (INT5PL == 0) +/* Задаёт MINT16_5PL = ~(1 << 4); маска разрешённых прерываний ядра для приоритетного обработчика 16_5PL. */ #define MINT16_5PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_5PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_5PL. */ #define MINT16_5PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT6PL >= INT16PL) или (INT6PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT6PL >= INT16PL) || (INT6PL == 0) +/* Задаёт MINT16_6PL = ~(1 << 5); маска разрешённых прерываний ядра для приоритетного обработчика 16_6PL. */ #define MINT16_6PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_6PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_6PL. */ #define MINT16_6PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT7PL >= INT16PL) или (INT7PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT7PL >= INT16PL) || (INT7PL == 0) +/* Задаёт MINT16_7PL = ~(1 << 6); маска разрешённых прерываний ядра для приоритетного обработчика 16_7PL. */ #define MINT16_7PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_7PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_7PL. */ #define MINT16_7PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT8PL >= INT16PL) или (INT8PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT8PL >= INT16PL) || (INT8PL == 0) +/* Задаёт MINT16_8PL = ~(1 << 7); маска разрешённых прерываний ядра для приоритетного обработчика 16_8PL. */ #define MINT16_8PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_8PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_8PL. */ #define MINT16_8PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT9PL >= INT16PL) или (INT9PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT9PL >= INT16PL) || (INT9PL == 0) +/* Задаёт MINT16_9PL = ~(1 << 8); маска разрешённых прерываний ядра для приоритетного обработчика 16_9PL. */ #define MINT16_9PL ~(1 << 8) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_9PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_9PL. */ #define MINT16_9PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT10PL >= INT16PL) или (INT10PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT10PL >= INT16PL) || (INT10PL == 0) +/* Задаёт MINT16_10PL = ~(1 << 9); маска разрешённых прерываний ядра для приоритетного обработчика 16_10PL. */ #define MINT16_10PL ~(1 << 9) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_10PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_10PL. */ #define MINT16_10PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT11PL >= INT16PL) или (INT11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT11PL >= INT16PL) || (INT11PL == 0) +/* Задаёт MINT16_11PL = ~(1 << 10); маска разрешённых прерываний ядра для приоритетного обработчика 16_11PL. */ #define MINT16_11PL ~(1 << 10) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_11PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_11PL. */ #define MINT16_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT12PL >= INT16PL) или (INT12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT12PL >= INT16PL) || (INT12PL == 0) +/* Задаёт MINT16_12PL = ~(1 << 11); маска разрешённых прерываний ядра для приоритетного обработчика 16_12PL. */ #define MINT16_12PL ~(1 << 11) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_12PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_12PL. */ #define MINT16_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT13PL >= INT16PL) или (INT13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL >= INT16PL) || (INT13PL == 0) +/* Задаёт MINT16_13PL = ~(1 << 12); маска разрешённых прерываний ядра для приоритетного обработчика 16_13PL. */ #define MINT16_13PL ~(1 << 12) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_13PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_13PL. */ #define MINT16_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT14PL >= INT16PL) или (INT14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL >= INT16PL) || (INT14PL == 0) +/* Задаёт MINT16_14PL = ~(1 << 13); маска разрешённых прерываний ядра для приоритетного обработчика 16_14PL. */ #define MINT16_14PL ~(1 << 13) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_14PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_14PL. */ #define MINT16_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (INT15PL >= INT16PL) или (INT15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL >= INT16PL) || (INT15PL == 0) +/* Задаёт MINT16_15PL = ~(1 << 14); маска разрешённых прерываний ядра для приоритетного обработчика 16_15PL. */ #define MINT16_15PL ~(1 << 14) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MINT16_15PL = 0xFFFF; маска разрешённых прерываний ядра для приоритетного обработчика 16_15PL. */ #define MINT16_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MINT16_16PL = ~(1 << 15); маска разрешённых прерываний ядра для приоритетного обработчика 16_16PL. */ #define MINT16_16PL ~(1 << 15) +/* Задаёт MINT16 = (MINT16_1PL & MINT16_2PL & MINT16_3PL & MINT16_4PL &; маска разрешённых прерываний ядра для приоритетного обработчика 16. */ #define MINT16 (MINT16_1PL & MINT16_2PL & MINT16_3PL & MINT16_4PL & \ - MINT16_5PL & MINT16_6PL & MINT16_7PL & MINT16_8PL & \ - MINT16_9PL & MINT16_10PL & MINT16_11PL & MINT16_12PL & \ - MINT16_13PL & MINT16_14PL & MINT16_15PL & MINT16_16PL) + MINT16_5PL & MINT16_6PL & MINT16_7PL & MINT16_8PL & /* Продолжает список аргументов, полей или выражение MINT16_5PL & MINT16_6PL & MINT16_7PL & MINT16_8PL &; порядок элементов сохраняется. */ \ + MINT16_9PL & MINT16_10PL & MINT16_11PL & MINT16_12PL & /* Продолжает список аргументов, полей или выражение MINT16_9PL & MINT16_10PL & MINT16_11PL & MINT16_12PL &; порядок элементов сохраняется. */ \ + MINT16_13PL & MINT16_14PL & MINT16_15PL & MINT16_16PL) /* Продолжает список аргументов, полей или выражение MINT16_13PL & MINT16_14PL & MINT16_15PL & MINT16_16PL); порядок элементов сохраняется. */ // End Of MINT16. //------------------------------------------------------------------------------- // Automatically generate PIEIER1 interrupt masks MG11 to MG18: // Beginning of MG11: +/* Условие компиляции (G12PL >= G11PL) или (G12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G12PL >= G11PL) || (G12PL == 0) +/* Задаёт MG11_12PL = ~(1 << 1); данные MG11_12PL. */ #define MG11_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG11_12PL = 0xFFFF; данные MG11_12PL. */ #define MG11_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G13PL >= G11PL) или (G13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G13PL >= G11PL) || (G13PL == 0) +/* Задаёт MG11_13PL = ~(1 << 2); данные MG11_13PL. */ #define MG11_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG11_13PL = 0xFFFF; данные MG11_13PL. */ #define MG11_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G14PL >= G11PL) или (G14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G14PL >= G11PL) || (G14PL == 0) +/* Задаёт MG11_14PL = ~(1 << 3); данные MG11_14PL. */ #define MG11_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG11_14PL = 0xFFFF; данные MG11_14PL. */ #define MG11_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G15PL >= G11PL) или (G15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G15PL >= G11PL) || (G15PL == 0) +/* Задаёт MG11_15PL = ~(1 << 4); данные MG11_15PL. */ #define MG11_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG11_15PL = 0xFFFF; данные MG11_15PL. */ #define MG11_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G16PL >= G11PL) или (G16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G16PL >= G11PL) || (G16PL == 0) +/* Задаёт MG11_16PL = ~(1 << 5); данные MG11_16PL. */ #define MG11_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG11_16PL = 0xFFFF; данные MG11_16PL. */ #define MG11_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G17PL >= G11PL) или (G17PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G17PL >= G11PL) || (G17PL == 0) +/* Задаёт MG11_17PL = ~(1 << 6); данные MG11_17PL. */ #define MG11_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG11_17PL = 0xFFFF; данные MG11_17PL. */ #define MG11_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G18PL >= G11PL) или (G18PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G18PL >= G11PL) || (G18PL == 0) +/* Задаёт MG11_18PL = ~(1 << 7); данные MG11_18PL. */ #define MG11_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG11_18PL = 0xFFFF; данные MG11_18PL. */ #define MG11_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG11_11PL = 0x00FE; данные MG11_11PL. */ #define MG11_11PL 0x00FE +/* Задаёт MG11 = (MG11_11PL & MG11_12PL & MG11_13PL & MG11_14PL &; маска разрешённых прерываний внутри группы PIE 11. */ #define MG11 (MG11_11PL & MG11_12PL & MG11_13PL & MG11_14PL & \ - MG11_15PL & MG11_16PL & MG11_17PL & MG11_18PL) + MG11_15PL & MG11_16PL & MG11_17PL & MG11_18PL) /* Продолжает список аргументов, полей или выражение MG11_15PL & MG11_16PL & MG11_17PL & MG11_18PL); порядок элементов сохраняется. */ // End of MG11: // Beginning of MG12: +/* Условие компиляции (G11PL >= G12PL) или (G11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G11PL >= G12PL) || (G11PL == 0) +/* Задаёт MG12_11PL = ~(1); данные MG12_11PL. */ #define MG12_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG12_11PL = 0xFFFF; данные MG12_11PL. */ #define MG12_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G13PL >= G12PL) или (G13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G13PL >= G12PL) || (G13PL == 0) +/* Задаёт MG12_13PL = ~(1 << 2); данные MG12_13PL. */ #define MG12_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG12_13PL = 0xFFFF; данные MG12_13PL. */ #define MG12_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G14PL >= G12PL) или (G14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G14PL >= G12PL) || (G14PL == 0) +/* Задаёт MG12_14PL = ~(1 << 3); данные MG12_14PL. */ #define MG12_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG12_14PL = 0xFFFF; данные MG12_14PL. */ #define MG12_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G15PL >= G12PL) или (G15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G15PL >= G12PL) || (G15PL == 0) +/* Задаёт MG12_15PL = ~(1 << 4); данные MG12_15PL. */ #define MG12_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG12_15PL = 0xFFFF; данные MG12_15PL. */ #define MG12_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G16PL >= G12PL) или (G16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G16PL >= G12PL) || (G16PL == 0) +/* Задаёт MG12_16PL = ~(1 << 5); данные MG12_16PL. */ #define MG12_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG12_16PL = 0xFFFF; данные MG12_16PL. */ #define MG12_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G17PL >= G12PL) или (G17PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G17PL >= G12PL) || (G17PL == 0) +/* Задаёт MG12_17PL = ~(1 << 6); данные MG12_17PL. */ #define MG12_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG12_17PL = 0xFFFF; данные MG12_17PL. */ #define MG12_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G18PL >= G12PL) или (G18PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G18PL >= G12PL) || (G18PL == 0) +/* Задаёт MG12_18PL = ~(1 << 7); данные MG12_18PL. */ #define MG12_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG12_18PL = 0xFFFF; данные MG12_18PL. */ #define MG12_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG12_12PL = 0x00FD; данные MG12_12PL. */ #define MG12_12PL 0x00FD +/* Задаёт MG12 = (MG12_11PL & MG12_12PL & MG12_13PL & MG12_14PL &; маска разрешённых прерываний внутри группы PIE 12. */ #define MG12 (MG12_11PL & MG12_12PL & MG12_13PL & MG12_14PL & \ - MG12_15PL & MG12_16PL & MG12_17PL & MG12_18PL) + MG12_15PL & MG12_16PL & MG12_17PL & MG12_18PL) /* Продолжает список аргументов, полей или выражение MG12_15PL & MG12_16PL & MG12_17PL & MG12_18PL); порядок элементов сохраняется. */ // End of MG12: // Beginning of MG13: +/* Условие компиляции (G11PL >= G13PL) или (G11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G11PL >= G13PL) || (G11PL == 0) +/* Задаёт MG13_11PL = ~(1); данные MG13_11PL. */ #define MG13_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG13_11PL = 0xFFFF; данные MG13_11PL. */ #define MG13_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G12PL >= G13PL) или (G12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G12PL >= G13PL) || (G12PL == 0) +/* Задаёт MG13_12PL = ~(1 << 1); данные MG13_12PL. */ #define MG13_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG13_12PL = 0xFFFF; данные MG13_12PL. */ #define MG13_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G14PL >= G13PL) или (G14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G14PL >= G13PL) || (G14PL == 0) +/* Задаёт MG13_14PL = ~(1 << 3); данные MG13_14PL. */ #define MG13_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG13_14PL = 0xFFFF; данные MG13_14PL. */ #define MG13_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G15PL >= G13PL) или (G15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G15PL >= G13PL) || (G15PL == 0) +/* Задаёт MG13_15PL = ~(1 << 4); данные MG13_15PL. */ #define MG13_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG13_15PL = 0xFFFF; данные MG13_15PL. */ #define MG13_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G16PL >= G13PL) или (G16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G16PL >= G13PL) || (G16PL == 0) +/* Задаёт MG13_16PL = ~(1 << 5); данные MG13_16PL. */ #define MG13_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG13_16PL = 0xFFFF; данные MG13_16PL. */ #define MG13_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G17PL >= G13PL) или (G17PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G17PL >= G13PL) || (G17PL == 0) +/* Задаёт MG13_17PL = ~(1 << 6); данные MG13_17PL. */ #define MG13_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG13_17PL = 0xFFFF; данные MG13_17PL. */ #define MG13_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G18PL >= G13PL) или (G18PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G18PL >= G13PL) || (G18PL == 0) +/* Задаёт MG13_18PL = ~(1 << 7); данные MG13_18PL. */ #define MG13_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG13_18PL = 0xFFFF; данные MG13_18PL. */ #define MG13_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG13_13PL = 0x00FB; данные MG13_13PL. */ #define MG13_13PL 0x00FB +/* Задаёт MG13 = (MG13_11PL & MG13_12PL & MG13_13PL & MG13_14PL &; маска разрешённых прерываний внутри группы PIE 13. */ #define MG13 (MG13_11PL & MG13_12PL & MG13_13PL & MG13_14PL & \ - MG13_15PL & MG13_16PL & MG13_17PL & MG13_18PL) + MG13_15PL & MG13_16PL & MG13_17PL & MG13_18PL) /* Продолжает список аргументов, полей или выражение MG13_15PL & MG13_16PL & MG13_17PL & MG13_18PL); порядок элементов сохраняется. */ // End of MG13: // Beginning of MG14: +/* Условие компиляции (G11PL >= G14PL) или (G11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G11PL >= G14PL) || (G11PL == 0) +/* Задаёт MG14_11PL = ~(1); данные MG14_11PL. */ #define MG14_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG14_11PL = 0xFFFF; данные MG14_11PL. */ #define MG14_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G12PL >= G14PL) или (G12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G12PL >= G14PL) || (G12PL == 0) +/* Задаёт MG14_12PL = ~(1 << 1); данные MG14_12PL. */ #define MG14_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG14_12PL = 0xFFFF; данные MG14_12PL. */ #define MG14_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G13PL >= G14PL) или (G13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G13PL >= G14PL) || (G13PL == 0) +/* Задаёт MG14_13PL = ~(1 << 2); данные MG14_13PL. */ #define MG14_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG14_13PL = 0xFFFF; данные MG14_13PL. */ #define MG14_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G15PL >= G14PL) или (G15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G15PL >= G14PL) || (G15PL == 0) +/* Задаёт MG14_15PL = ~(1 << 4); данные MG14_15PL. */ #define MG14_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG14_15PL = 0xFFFF; данные MG14_15PL. */ #define MG14_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G16PL >= G14PL) или (G16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G16PL >= G14PL) || (G16PL == 0) +/* Задаёт MG14_16PL = ~(1 << 5); данные MG14_16PL. */ #define MG14_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG14_16PL = 0xFFFF; данные MG14_16PL. */ #define MG14_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G17PL >= G14PL) или (G17PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G17PL >= G14PL) || (G17PL == 0) +/* Задаёт MG14_17PL = ~(1 << 6); данные MG14_17PL. */ #define MG14_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG14_17PL = 0xFFFF; данные MG14_17PL. */ #define MG14_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G18PL >= G14PL) или (G18PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G18PL >= G14PL) || (G18PL == 0) +/* Задаёт MG14_18PL = ~(1 << 7); данные MG14_18PL. */ #define MG14_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG14_18PL = 0xFFFF; данные MG14_18PL. */ #define MG14_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG14_14PL = 0x00F7; данные MG14_14PL. */ #define MG14_14PL 0x00F7 +/* Задаёт MG14 = (MG14_11PL & MG14_12PL & MG14_13PL & MG14_14PL &; маска разрешённых прерываний внутри группы PIE 14. */ #define MG14 (MG14_11PL & MG14_12PL & MG14_13PL & MG14_14PL & \ - MG14_15PL & MG14_16PL & MG14_17PL & MG14_18PL) + MG14_15PL & MG14_16PL & MG14_17PL & MG14_18PL) /* Продолжает список аргументов, полей или выражение MG14_15PL & MG14_16PL & MG14_17PL & MG14_18PL); порядок элементов сохраняется. */ // End of MG14: // Beginning of MG15: +/* Условие компиляции (G11PL >= G15PL) или (G11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G11PL >= G15PL) || (G11PL == 0) +/* Задаёт MG15_11PL = ~(1); данные MG15_11PL. */ #define MG15_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG15_11PL = 0xFFFF; данные MG15_11PL. */ #define MG15_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G12PL >= G15PL) или (G12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G12PL >= G15PL) || (G12PL == 0) +/* Задаёт MG15_12PL = ~(1 << 1); данные MG15_12PL. */ #define MG15_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG15_12PL = 0xFFFF; данные MG15_12PL. */ #define MG15_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G13PL >= G15PL) или (G13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G13PL >= G15PL) || (G13PL == 0) +/* Задаёт MG15_13PL = ~(1 << 2); данные MG15_13PL. */ #define MG15_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG15_13PL = 0xFFFF; данные MG15_13PL. */ #define MG15_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G14PL >= G15PL) или (G14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G14PL >= G15PL) || (G14PL == 0) +/* Задаёт MG15_14PL = ~(1 << 3); данные MG15_14PL. */ #define MG15_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG15_14PL = 0xFFFF; данные MG15_14PL. */ #define MG15_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G16PL >= G15PL) или (G16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G16PL >= G15PL) || (G16PL == 0) +/* Задаёт MG15_16PL = ~(1 << 5); данные MG15_16PL. */ #define MG15_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG15_16PL = 0xFFFF; данные MG15_16PL. */ #define MG15_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G17PL >= G15PL) или (G17PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G17PL >= G15PL) || (G17PL == 0) +/* Задаёт MG15_17PL = ~(1 << 6); данные MG15_17PL. */ #define MG15_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG15_17PL = 0xFFFF; данные MG15_17PL. */ #define MG15_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G18PL >= G15PL) или (G18PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G18PL >= G15PL) || (G18PL == 0) +/* Задаёт MG15_18PL = ~(1 << 7); данные MG15_18PL. */ #define MG15_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG15_18PL = 0xFFFF; данные MG15_18PL. */ #define MG15_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG15_15PL = 0x00EF; данные MG15_15PL. */ #define MG15_15PL 0x00EF +/* Задаёт MG15 = (MG15_11PL & MG15_12PL & MG15_13PL & MG15_14PL &; маска разрешённых прерываний внутри группы PIE 15. */ #define MG15 (MG15_11PL & MG15_12PL & MG15_13PL & MG15_14PL & \ - MG15_15PL & MG15_16PL & MG15_17PL & MG15_18PL) + MG15_15PL & MG15_16PL & MG15_17PL & MG15_18PL) /* Продолжает список аргументов, полей или выражение MG15_15PL & MG15_16PL & MG15_17PL & MG15_18PL); порядок элементов сохраняется. */ // End of MG15: // Beginning of MG16: +/* Условие компиляции (G11PL >= G16PL) или (G11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G11PL >= G16PL) || (G11PL == 0) +/* Задаёт MG16_11PL = ~(1); данные MG16_11PL. */ #define MG16_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG16_11PL = 0xFFFF; данные MG16_11PL. */ #define MG16_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G12PL >= G16PL) или (G12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G12PL >= G16PL) || (G12PL == 0) +/* Задаёт MG16_12PL = ~(1 << 1); данные MG16_12PL. */ #define MG16_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG16_12PL = 0xFFFF; данные MG16_12PL. */ #define MG16_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G13PL >= G16PL) или (G13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G13PL >= G16PL) || (G13PL == 0) +/* Задаёт MG16_13PL = ~(1 << 2); данные MG16_13PL. */ #define MG16_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG16_13PL = 0xFFFF; данные MG16_13PL. */ #define MG16_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G14PL >= G16PL) или (G14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G14PL >= G16PL) || (G14PL == 0) +/* Задаёт MG16_14PL = ~(1 << 3); данные MG16_14PL. */ #define MG16_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG16_14PL = 0xFFFF; данные MG16_14PL. */ #define MG16_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G15PL >= G16PL) или (G15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G15PL >= G16PL) || (G15PL == 0) +/* Задаёт MG16_15PL = ~(1 << 4); данные MG16_15PL. */ #define MG16_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG16_15PL = 0xFFFF; данные MG16_15PL. */ #define MG16_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G17PL >= G16PL) или (G17PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G17PL >= G16PL) || (G17PL == 0) +/* Задаёт MG16_17PL = ~(1 << 6); данные MG16_17PL. */ #define MG16_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG16_17PL = 0xFFFF; данные MG16_17PL. */ #define MG16_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G18PL >= G16PL) или (G18PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G18PL >= G16PL) || (G18PL == 0) +/* Задаёт MG16_18PL = ~(1 << 7); данные MG16_18PL. */ #define MG16_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG16_18PL = 0xFFFF; данные MG16_18PL. */ #define MG16_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG16_16PL = 0x00DF; данные MG16_16PL. */ #define MG16_16PL 0x00DF +/* Задаёт MG16 = (MG16_11PL & MG16_12PL & MG16_13PL & MG16_14PL &; маска разрешённых прерываний внутри группы PIE 16. */ #define MG16 (MG16_11PL & MG16_12PL & MG16_13PL & MG16_14PL & \ - MG16_15PL & MG16_16PL & MG16_17PL & MG16_18PL) + MG16_15PL & MG16_16PL & MG16_17PL & MG16_18PL) /* Продолжает список аргументов, полей или выражение MG16_15PL & MG16_16PL & MG16_17PL & MG16_18PL); порядок элементов сохраняется. */ // End of MG16: // Beginning of MG17: +/* Условие компиляции (G11PL >= G17PL) или (G11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G11PL >= G17PL) || (G11PL == 0) +/* Задаёт MG17_11PL = ~(1); данные MG17_11PL. */ #define MG17_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG17_11PL = 0xFFFF; данные MG17_11PL. */ #define MG17_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G12PL >= G17PL) или (G12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G12PL >= G17PL) || (G12PL == 0) +/* Задаёт MG17_12PL = ~(1 << 1); данные MG17_12PL. */ #define MG17_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG17_12PL = 0xFFFF; данные MG17_12PL. */ #define MG17_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G13PL >= G17PL) или (G13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G13PL >= G17PL) || (G13PL == 0) +/* Задаёт MG17_13PL = ~(1 << 2); данные MG17_13PL. */ #define MG17_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG17_13PL = 0xFFFF; данные MG17_13PL. */ #define MG17_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G14PL >= G17PL) или (G14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G14PL >= G17PL) || (G14PL == 0) +/* Задаёт MG17_14PL = ~(1 << 3); данные MG17_14PL. */ #define MG17_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG17_14PL = 0xFFFF; данные MG17_14PL. */ #define MG17_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G15PL >= G17PL) или (G15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G15PL >= G17PL) || (G15PL == 0) +/* Задаёт MG17_15PL = ~(1 << 4); данные MG17_15PL. */ #define MG17_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG17_15PL = 0xFFFF; данные MG17_15PL. */ #define MG17_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G16PL >= G17PL) или (G16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G16PL >= G17PL) || (G16PL == 0) +/* Задаёт MG17_16PL = ~(1 << 5); данные MG17_16PL. */ #define MG17_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG17_16PL = 0xFFFF; данные MG17_16PL. */ #define MG17_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G18PL >= G17PL) или (G18PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G18PL >= G17PL) || (G18PL == 0) +/* Задаёт MG17_18PL = ~(1 << 7); данные MG17_18PL. */ #define MG17_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG17_18PL = 0xFFFF; данные MG17_18PL. */ #define MG17_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG17_17PL = 0x00BF; данные MG17_17PL. */ #define MG17_17PL 0x00BF +/* Задаёт MG17 = (MG17_11PL & MG17_12PL & MG17_13PL & MG17_14PL &; маска разрешённых прерываний внутри группы PIE 17. */ #define MG17 (MG17_11PL & MG17_12PL & MG17_13PL & MG17_14PL & \ - MG17_15PL & MG17_16PL & MG17_17PL & MG17_18PL) + MG17_15PL & MG17_16PL & MG17_17PL & MG17_18PL) /* Продолжает список аргументов, полей или выражение MG17_15PL & MG17_16PL & MG17_17PL & MG17_18PL); порядок элементов сохраняется. */ // End of MG17: // Beginning of MG18: +/* Условие компиляции (G11PL >= G18PL) или (G11PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G11PL >= G18PL) || (G11PL == 0) +/* Задаёт MG18_11PL = ~(1); данные MG18_11PL. */ #define MG18_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG18_11PL = 0xFFFF; данные MG18_11PL. */ #define MG18_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G12PL >= G18PL) или (G12PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G12PL >= G18PL) || (G12PL == 0) +/* Задаёт MG18_12PL = ~(1 << 1); данные MG18_12PL. */ #define MG18_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG18_12PL = 0xFFFF; данные MG18_12PL. */ #define MG18_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G13PL >= G18PL) или (G13PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G13PL >= G18PL) || (G13PL == 0) +/* Задаёт MG18_13PL = ~(1 << 2); данные MG18_13PL. */ #define MG18_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG18_13PL = 0xFFFF; данные MG18_13PL. */ #define MG18_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G14PL >= G18PL) или (G14PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G14PL >= G18PL) || (G14PL == 0) +/* Задаёт MG18_14PL = ~(1 << 3); данные MG18_14PL. */ #define MG18_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG18_14PL = 0xFFFF; данные MG18_14PL. */ #define MG18_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G15PL >= G18PL) или (G15PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G15PL >= G18PL) || (G15PL == 0) +/* Задаёт MG18_15PL = ~(1 << 4); данные MG18_15PL. */ #define MG18_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG18_15PL = 0xFFFF; данные MG18_15PL. */ #define MG18_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G16PL >= G18PL) или (G16PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G16PL >= G18PL) || (G16PL == 0) +/* Задаёт MG18_16PL = ~(1 << 5); данные MG18_16PL. */ #define MG18_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG18_16PL = 0xFFFF; данные MG18_16PL. */ #define MG18_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G17PL >= G18PL) или (G17PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G17PL >= G18PL) || (G17PL == 0) +/* Задаёт MG18_17PL = ~(1 << 6); данные MG18_17PL. */ #define MG18_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG18_17PL = 0xFFFF; данные MG18_17PL. */ #define MG18_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG18_18PL = 0x007F; данные MG18_18PL. */ #define MG18_18PL 0x007F +/* Задаёт MG18 = (MG18_11PL & MG18_12PL & MG18_13PL & MG18_14PL &; маска разрешённых прерываний внутри группы PIE 18. */ #define MG18 (MG18_11PL & MG18_12PL & MG18_13PL & MG18_14PL & \ - MG18_15PL & MG18_16PL & MG18_17PL & MG18_18PL) + MG18_15PL & MG18_16PL & MG18_17PL & MG18_18PL) /* Продолжает список аргументов, полей или выражение MG18_15PL & MG18_16PL & MG18_17PL & MG18_18PL); порядок элементов сохраняется. */ // End of MG18: //------------------------------------------------------------------------------- @@ -2191,331 +3885,627 @@ extern "C" { // // Beginning of MG21: +/* Условие компиляции (G22PL >= G21PL) или (G22PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G22PL >= G21PL) || (G22PL == 0) +/* Задаёт MG21_12PL = ~(1 << 1); данные MG21_12PL. */ #define MG21_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG21_12PL = 0xFFFF; данные MG21_12PL. */ #define MG21_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G23PL >= G21PL) или (G23PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G23PL >= G21PL) || (G23PL == 0) +/* Задаёт MG21_13PL = ~(1 << 2); данные MG21_13PL. */ #define MG21_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG21_13PL = 0xFFFF; данные MG21_13PL. */ #define MG21_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G24PL >= G21PL) или (G24PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G24PL >= G21PL) || (G24PL == 0) +/* Задаёт MG21_14PL = ~(1 << 3); данные MG21_14PL. */ #define MG21_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG21_14PL = 0xFFFF; данные MG21_14PL. */ #define MG21_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G25PL >= G21PL) или (G25PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G25PL >= G21PL) || (G25PL == 0) +/* Задаёт MG21_15PL = ~(1 << 4); данные MG21_15PL. */ #define MG21_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG21_15PL = 0xFFFF; данные MG21_15PL. */ #define MG21_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G26PL >= G21PL) или (G26PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G26PL >= G21PL) || (G26PL == 0) +/* Задаёт MG21_16PL = ~(1 << 5); данные MG21_16PL. */ #define MG21_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG21_16PL = 0xFFFF; данные MG21_16PL. */ #define MG21_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G27PL >= G21PL) или (G27PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G27PL >= G21PL) || (G27PL == 0) +/* Задаёт MG21_17PL = ~(1 << 6); данные MG21_17PL. */ #define MG21_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG21_17PL = 0xFFFF; данные MG21_17PL. */ #define MG21_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G28PL >= G21PL) или (G28PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G28PL >= G21PL) || (G28PL == 0) +/* Задаёт MG21_18PL = ~(1 << 7); данные MG21_18PL. */ #define MG21_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG21_18PL = 0xFFFF; данные MG21_18PL. */ #define MG21_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG21_11PL = 0x00FE; данные MG21_11PL. */ #define MG21_11PL 0x00FE +/* Задаёт MG21 = (MG21_11PL & MG21_12PL & MG21_13PL & MG21_14PL &; маска разрешённых прерываний внутри группы PIE 21. */ #define MG21 (MG21_11PL & MG21_12PL & MG21_13PL & MG21_14PL & \ - MG21_15PL & MG21_16PL & MG21_17PL & MG21_18PL) + MG21_15PL & MG21_16PL & MG21_17PL & MG21_18PL) /* Продолжает список аргументов, полей или выражение MG21_15PL & MG21_16PL & MG21_17PL & MG21_18PL); порядок элементов сохраняется. */ // End of MG21: // Beginning of MG22: +/* Условие компиляции (G21PL >= G22PL) или (G21PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G21PL >= G22PL) || (G21PL == 0) +/* Задаёт MG22_11PL = ~(1); данные MG22_11PL. */ #define MG22_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG22_11PL = 0xFFFF; данные MG22_11PL. */ #define MG22_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G23PL >= G22PL) или (G23PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G23PL >= G22PL) || (G23PL == 0) +/* Задаёт MG22_13PL = ~(1 << 2); данные MG22_13PL. */ #define MG22_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG22_13PL = 0xFFFF; данные MG22_13PL. */ #define MG22_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G24PL >= G22PL) или (G24PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G24PL >= G22PL) || (G24PL == 0) +/* Задаёт MG22_14PL = ~(1 << 3); данные MG22_14PL. */ #define MG22_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG22_14PL = 0xFFFF; данные MG22_14PL. */ #define MG22_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G25PL >= G22PL) или (G25PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G25PL >= G22PL) || (G25PL == 0) +/* Задаёт MG22_15PL = ~(1 << 4); данные MG22_15PL. */ #define MG22_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG22_15PL = 0xFFFF; данные MG22_15PL. */ #define MG22_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G26PL >= G22PL) или (G26PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G26PL >= G22PL) || (G26PL == 0) +/* Задаёт MG22_16PL = ~(1 << 5); данные MG22_16PL. */ #define MG22_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG22_16PL = 0xFFFF; данные MG22_16PL. */ #define MG22_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G27PL >= G22PL) или (G27PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G27PL >= G22PL) || (G27PL == 0) +/* Задаёт MG22_17PL = ~(1 << 6); данные MG22_17PL. */ #define MG22_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG22_17PL = 0xFFFF; данные MG22_17PL. */ #define MG22_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G28PL >= G22PL) или (G28PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G28PL >= G22PL) || (G28PL == 0) +/* Задаёт MG22_18PL = ~(1 << 7); данные MG22_18PL. */ #define MG22_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG22_18PL = 0xFFFF; данные MG22_18PL. */ #define MG22_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG22_12PL = 0x00FD; данные MG22_12PL. */ #define MG22_12PL 0x00FD +/* Задаёт MG22 = (MG22_11PL & MG22_12PL & MG22_13PL & MG22_14PL &; маска разрешённых прерываний внутри группы PIE 22. */ #define MG22 (MG22_11PL & MG22_12PL & MG22_13PL & MG22_14PL & \ - MG22_15PL & MG22_16PL & MG22_17PL & MG22_18PL) + MG22_15PL & MG22_16PL & MG22_17PL & MG22_18PL) /* Продолжает список аргументов, полей или выражение MG22_15PL & MG22_16PL & MG22_17PL & MG22_18PL); порядок элементов сохраняется. */ // End of MG22: // Beginning of MG23: +/* Условие компиляции (G21PL >= G23PL) или (G21PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G21PL >= G23PL) || (G21PL == 0) +/* Задаёт MG23_11PL = ~(1); данные MG23_11PL. */ #define MG23_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG23_11PL = 0xFFFF; данные MG23_11PL. */ #define MG23_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G22PL >= G23PL) или (G22PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G22PL >= G23PL) || (G22PL == 0) +/* Задаёт MG23_12PL = ~(1 << 1); данные MG23_12PL. */ #define MG23_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG23_12PL = 0xFFFF; данные MG23_12PL. */ #define MG23_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G24PL >= G23PL) или (G24PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G24PL >= G23PL) || (G24PL == 0) +/* Задаёт MG23_14PL = ~(1 << 3); данные MG23_14PL. */ #define MG23_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG23_14PL = 0xFFFF; данные MG23_14PL. */ #define MG23_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G25PL >= G23PL) или (G25PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G25PL >= G23PL) || (G25PL == 0) +/* Задаёт MG23_15PL = ~(1 << 4); данные MG23_15PL. */ #define MG23_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG23_15PL = 0xFFFF; данные MG23_15PL. */ #define MG23_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G26PL >= G23PL) или (G26PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G26PL >= G23PL) || (G26PL == 0) +/* Задаёт MG23_16PL = ~(1 << 5); данные MG23_16PL. */ #define MG23_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG23_16PL = 0xFFFF; данные MG23_16PL. */ #define MG23_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G27PL >= G23PL) или (G27PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G27PL >= G23PL) || (G27PL == 0) +/* Задаёт MG23_17PL = ~(1 << 6); данные MG23_17PL. */ #define MG23_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG23_17PL = 0xFFFF; данные MG23_17PL. */ #define MG23_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G28PL >= G23PL) или (G28PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G28PL >= G23PL) || (G28PL == 0) +/* Задаёт MG23_18PL = ~(1 << 7); данные MG23_18PL. */ #define MG23_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG23_18PL = 0xFFFF; данные MG23_18PL. */ #define MG23_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG23_13PL = 0x00FB; данные MG23_13PL. */ #define MG23_13PL 0x00FB +/* Задаёт MG23 = (MG23_11PL & MG23_12PL & MG23_13PL & MG23_14PL &; маска разрешённых прерываний внутри группы PIE 23. */ #define MG23 (MG23_11PL & MG23_12PL & MG23_13PL & MG23_14PL & \ - MG23_15PL & MG23_16PL & MG23_17PL & MG23_18PL) + MG23_15PL & MG23_16PL & MG23_17PL & MG23_18PL) /* Продолжает список аргументов, полей или выражение MG23_15PL & MG23_16PL & MG23_17PL & MG23_18PL); порядок элементов сохраняется. */ // End of MG23: // Beginning of MG24: +/* Условие компиляции (G21PL >= G24PL) или (G21PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G21PL >= G24PL) || (G21PL == 0) +/* Задаёт MG24_11PL = ~(1); данные MG24_11PL. */ #define MG24_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG24_11PL = 0xFFFF; данные MG24_11PL. */ #define MG24_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G22PL >= G24PL) или (G22PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G22PL >= G24PL) || (G22PL == 0) +/* Задаёт MG24_12PL = ~(1 << 1); данные MG24_12PL. */ #define MG24_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG24_12PL = 0xFFFF; данные MG24_12PL. */ #define MG24_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G23PL >= G24PL) или (G23PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G23PL >= G24PL) || (G23PL == 0) +/* Задаёт MG24_13PL = ~(1 << 2); данные MG24_13PL. */ #define MG24_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG24_13PL = 0xFFFF; данные MG24_13PL. */ #define MG24_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G25PL >= G24PL) или (G25PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G25PL >= G24PL) || (G25PL == 0) +/* Задаёт MG24_15PL = ~(1 << 4); данные MG24_15PL. */ #define MG24_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG24_15PL = 0xFFFF; данные MG24_15PL. */ #define MG24_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G26PL >= G24PL) или (G26PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G26PL >= G24PL) || (G26PL == 0) +/* Задаёт MG24_16PL = ~(1 << 5); данные MG24_16PL. */ #define MG24_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG24_16PL = 0xFFFF; данные MG24_16PL. */ #define MG24_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G27PL >= G24PL) или (G27PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G27PL >= G24PL) || (G27PL == 0) +/* Задаёт MG24_17PL = ~(1 << 6); данные MG24_17PL. */ #define MG24_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG24_17PL = 0xFFFF; данные MG24_17PL. */ #define MG24_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G28PL >= G24PL) или (G28PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G28PL >= G24PL) || (G28PL == 0) +/* Задаёт MG24_18PL = ~(1 << 7); данные MG24_18PL. */ #define MG24_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG24_18PL = 0xFFFF; данные MG24_18PL. */ #define MG24_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG24_14PL = 0x00F7; данные MG24_14PL. */ #define MG24_14PL 0x00F7 +/* Задаёт MG24 = (MG24_11PL & MG24_12PL & MG24_13PL & MG24_14PL &; маска разрешённых прерываний внутри группы PIE 24. */ #define MG24 (MG24_11PL & MG24_12PL & MG24_13PL & MG24_14PL & \ - MG24_15PL & MG24_16PL & MG24_17PL & MG24_18PL) + MG24_15PL & MG24_16PL & MG24_17PL & MG24_18PL) /* Продолжает список аргументов, полей или выражение MG24_15PL & MG24_16PL & MG24_17PL & MG24_18PL); порядок элементов сохраняется. */ // End of MG24: // Beginning of MG25: +/* Условие компиляции (G21PL >= G25PL) или (G21PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G21PL >= G25PL) || (G21PL == 0) +/* Задаёт MG25_11PL = ~(1); данные MG25_11PL. */ #define MG25_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG25_11PL = 0xFFFF; данные MG25_11PL. */ #define MG25_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G22PL >= G25PL) или (G22PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G22PL >= G25PL) || (G22PL == 0) +/* Задаёт MG25_12PL = ~(1 << 1); данные MG25_12PL. */ #define MG25_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG25_12PL = 0xFFFF; данные MG25_12PL. */ #define MG25_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G23PL >= G25PL) или (G23PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G23PL >= G25PL) || (G23PL == 0) +/* Задаёт MG25_13PL = ~(1 << 2); данные MG25_13PL. */ #define MG25_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG25_13PL = 0xFFFF; данные MG25_13PL. */ #define MG25_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G24PL >= G25PL) или (G24PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G24PL >= G25PL) || (G24PL == 0) +/* Задаёт MG25_14PL = ~(1 << 3); данные MG25_14PL. */ #define MG25_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG25_14PL = 0xFFFF; данные MG25_14PL. */ #define MG25_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G26PL >= G25PL) или (G26PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G26PL >= G25PL) || (G26PL == 0) +/* Задаёт MG25_16PL = ~(1 << 5); данные MG25_16PL. */ #define MG25_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG25_16PL = 0xFFFF; данные MG25_16PL. */ #define MG25_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G27PL >= G25PL) или (G27PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G27PL >= G25PL) || (G27PL == 0) +/* Задаёт MG25_17PL = ~(1 << 6); данные MG25_17PL. */ #define MG25_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG25_17PL = 0xFFFF; данные MG25_17PL. */ #define MG25_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G28PL >= G25PL) или (G28PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G28PL >= G25PL) || (G28PL == 0) +/* Задаёт MG25_18PL = ~(1 << 7); данные MG25_18PL. */ #define MG25_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG25_18PL = 0xFFFF; данные MG25_18PL. */ #define MG25_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG25_15PL = 0x00EF; данные MG25_15PL. */ #define MG25_15PL 0x00EF +/* Задаёт MG25 = (MG25_11PL & MG25_12PL & MG25_13PL & MG25_14PL &; маска разрешённых прерываний внутри группы PIE 25. */ #define MG25 (MG25_11PL & MG25_12PL & MG25_13PL & MG25_14PL & \ - MG25_15PL & MG25_16PL & MG25_17PL & MG25_18PL) + MG25_15PL & MG25_16PL & MG25_17PL & MG25_18PL) /* Продолжает список аргументов, полей или выражение MG25_15PL & MG25_16PL & MG25_17PL & MG25_18PL); порядок элементов сохраняется. */ // End of MG25: // Beginning of MG26: +/* Условие компиляции (G21PL >= G26PL) или (G21PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G21PL >= G26PL) || (G21PL == 0) +/* Задаёт MG26_11PL = ~(1); данные MG26_11PL. */ #define MG26_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG26_11PL = 0xFFFF; данные MG26_11PL. */ #define MG26_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G22PL >= G26PL) или (G22PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G22PL >= G26PL) || (G22PL == 0) +/* Задаёт MG26_12PL = ~(1 << 1); данные MG26_12PL. */ #define MG26_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG26_12PL = 0xFFFF; данные MG26_12PL. */ #define MG26_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G23PL >= G26PL) или (G23PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G23PL >= G26PL) || (G23PL == 0) +/* Задаёт MG26_13PL = ~(1 << 2); данные MG26_13PL. */ #define MG26_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG26_13PL = 0xFFFF; данные MG26_13PL. */ #define MG26_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G24PL >= G26PL) или (G24PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G24PL >= G26PL) || (G24PL == 0) +/* Задаёт MG26_14PL = ~(1 << 3); данные MG26_14PL. */ #define MG26_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG26_14PL = 0xFFFF; данные MG26_14PL. */ #define MG26_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G25PL >= G26PL) или (G25PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G25PL >= G26PL) || (G25PL == 0) +/* Задаёт MG26_15PL = ~(1 << 4); данные MG26_15PL. */ #define MG26_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG26_15PL = 0xFFFF; данные MG26_15PL. */ #define MG26_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G27PL >= G26PL) или (G27PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G27PL >= G26PL) || (G27PL == 0) +/* Задаёт MG26_17PL = ~(1 << 6); данные MG26_17PL. */ #define MG26_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG26_17PL = 0xFFFF; данные MG26_17PL. */ #define MG26_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G28PL >= G26PL) или (G28PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G28PL >= G26PL) || (G28PL == 0) +/* Задаёт MG26_18PL = ~(1 << 7); данные MG26_18PL. */ #define MG26_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG26_18PL = 0xFFFF; данные MG26_18PL. */ #define MG26_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG26_16PL = 0x00DF; данные MG26_16PL. */ #define MG26_16PL 0x00DF +/* Задаёт MG26 = (MG26_11PL & MG26_12PL & MG26_13PL & MG26_14PL &; маска разрешённых прерываний внутри группы PIE 26. */ #define MG26 (MG26_11PL & MG26_12PL & MG26_13PL & MG26_14PL & \ - MG26_15PL & MG26_16PL & MG26_17PL & MG26_18PL) + MG26_15PL & MG26_16PL & MG26_17PL & MG26_18PL) /* Продолжает список аргументов, полей или выражение MG26_15PL & MG26_16PL & MG26_17PL & MG26_18PL); порядок элементов сохраняется. */ // End of MG26: // Beginning of MG27: +/* Условие компиляции (G21PL >= G27PL) или (G21PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G21PL >= G27PL) || (G21PL == 0) +/* Задаёт MG27_11PL = ~(1); данные MG27_11PL. */ #define MG27_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG27_11PL = 0xFFFF; данные MG27_11PL. */ #define MG27_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G22PL >= G27PL) или (G22PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G22PL >= G27PL) || (G22PL == 0) +/* Задаёт MG27_12PL = ~(1 << 1); данные MG27_12PL. */ #define MG27_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG27_12PL = 0xFFFF; данные MG27_12PL. */ #define MG27_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G23PL >= G27PL) или (G23PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G23PL >= G27PL) || (G23PL == 0) +/* Задаёт MG27_13PL = ~(1 << 2); данные MG27_13PL. */ #define MG27_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG27_13PL = 0xFFFF; данные MG27_13PL. */ #define MG27_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G24PL >= G27PL) или (G24PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G24PL >= G27PL) || (G24PL == 0) +/* Задаёт MG27_14PL = ~(1 << 3); данные MG27_14PL. */ #define MG27_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG27_14PL = 0xFFFF; данные MG27_14PL. */ #define MG27_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G25PL >= G27PL) или (G25PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G25PL >= G27PL) || (G25PL == 0) +/* Задаёт MG27_15PL = ~(1 << 4); данные MG27_15PL. */ #define MG27_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG27_15PL = 0xFFFF; данные MG27_15PL. */ #define MG27_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G26PL >= G27PL) или (G26PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G26PL >= G27PL) || (G26PL == 0) +/* Задаёт MG27_16PL = ~(1 << 5); данные MG27_16PL. */ #define MG27_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG27_16PL = 0xFFFF; данные MG27_16PL. */ #define MG27_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G28PL >= G27PL) или (G28PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G28PL >= G27PL) || (G28PL == 0) +/* Задаёт MG27_18PL = ~(1 << 7); данные MG27_18PL. */ #define MG27_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG27_18PL = 0xFFFF; данные MG27_18PL. */ #define MG27_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG27_17PL = 0x00BF; данные MG27_17PL. */ #define MG27_17PL 0x00BF +/* Задаёт MG27 = (MG27_11PL & MG27_12PL & MG27_13PL & MG27_14PL &; маска разрешённых прерываний внутри группы PIE 27. */ #define MG27 (MG27_11PL & MG27_12PL & MG27_13PL & MG27_14PL & \ - MG27_15PL & MG27_16PL & MG27_17PL & MG27_18PL) + MG27_15PL & MG27_16PL & MG27_17PL & MG27_18PL) /* Продолжает список аргументов, полей или выражение MG27_15PL & MG27_16PL & MG27_17PL & MG27_18PL); порядок элементов сохраняется. */ // End of MG27: // Beginning of MG28: +/* Условие компиляции (G21PL >= G28PL) или (G21PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G21PL >= G28PL) || (G21PL == 0) +/* Задаёт MG28_11PL = ~(1); данные MG28_11PL. */ #define MG28_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG28_11PL = 0xFFFF; данные MG28_11PL. */ #define MG28_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G22PL >= G28PL) или (G22PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G22PL >= G28PL) || (G22PL == 0) +/* Задаёт MG28_12PL = ~(1 << 1); данные MG28_12PL. */ #define MG28_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG28_12PL = 0xFFFF; данные MG28_12PL. */ #define MG28_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G23PL >= G28PL) или (G23PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G23PL >= G28PL) || (G23PL == 0) +/* Задаёт MG28_13PL = ~(1 << 2); данные MG28_13PL. */ #define MG28_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG28_13PL = 0xFFFF; данные MG28_13PL. */ #define MG28_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G24PL >= G28PL) или (G24PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G24PL >= G28PL) || (G24PL == 0) +/* Задаёт MG28_14PL = ~(1 << 3); данные MG28_14PL. */ #define MG28_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG28_14PL = 0xFFFF; данные MG28_14PL. */ #define MG28_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G25PL >= G28PL) или (G25PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G25PL >= G28PL) || (G25PL == 0) +/* Задаёт MG28_15PL = ~(1 << 4); данные MG28_15PL. */ #define MG28_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG28_15PL = 0xFFFF; данные MG28_15PL. */ #define MG28_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G26PL >= G28PL) или (G26PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G26PL >= G28PL) || (G26PL == 0) +/* Задаёт MG28_16PL = ~(1 << 5); данные MG28_16PL. */ #define MG28_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG28_16PL = 0xFFFF; данные MG28_16PL. */ #define MG28_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G27PL >= G28PL) или (G27PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G27PL >= G28PL) || (G27PL == 0) +/* Задаёт MG28_17PL = ~(1 << 6); данные MG28_17PL. */ #define MG28_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG28_17PL = 0xFFFF; данные MG28_17PL. */ #define MG28_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG28_18PL = 0x007F; данные MG28_18PL. */ #define MG28_18PL 0x007F +/* Задаёт MG28 = (MG28_11PL & MG28_12PL & MG28_13PL & MG28_14PL &; маска разрешённых прерываний внутри группы PIE 28. */ #define MG28 (MG28_11PL & MG28_12PL & MG28_13PL & MG28_14PL & \ - MG28_15PL & MG28_16PL & MG28_17PL & MG28_18PL) + MG28_15PL & MG28_16PL & MG28_17PL & MG28_18PL) /* Продолжает список аргументов, полей или выражение MG28_15PL & MG28_16PL & MG28_17PL & MG28_18PL); порядок элементов сохраняется. */ // End of MG28: //------------------------------------------------------------------------------- @@ -2523,331 +4513,627 @@ extern "C" { // // Beginning of MG31: +/* Условие компиляции (G32PL >= G31PL) или (G32PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G32PL >= G31PL) || (G32PL == 0) +/* Задаёт MG31_12PL = ~(1 << 1); данные MG31_12PL. */ #define MG31_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG31_12PL = 0xFFFF; данные MG31_12PL. */ #define MG31_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G33PL >= G31PL) или (G33PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G33PL >= G31PL) || (G33PL == 0) +/* Задаёт MG31_13PL = ~(1 << 2); данные MG31_13PL. */ #define MG31_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG31_13PL = 0xFFFF; данные MG31_13PL. */ #define MG31_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G34PL >= G31PL) или (G34PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G34PL >= G31PL) || (G34PL == 0) +/* Задаёт MG31_14PL = ~(1 << 3); данные MG31_14PL. */ #define MG31_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG31_14PL = 0xFFFF; данные MG31_14PL. */ #define MG31_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G35PL >= G31PL) или (G35PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G35PL >= G31PL) || (G35PL == 0) +/* Задаёт MG31_15PL = ~(1 << 4); данные MG31_15PL. */ #define MG31_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG31_15PL = 0xFFFF; данные MG31_15PL. */ #define MG31_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G36PL >= G31PL) или (G36PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G36PL >= G31PL) || (G36PL == 0) +/* Задаёт MG31_16PL = ~(1 << 5); данные MG31_16PL. */ #define MG31_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG31_16PL = 0xFFFF; данные MG31_16PL. */ #define MG31_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G37PL >= G31PL) или (G37PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G37PL >= G31PL) || (G37PL == 0) +/* Задаёт MG31_17PL = ~(1 << 6); данные MG31_17PL. */ #define MG31_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG31_17PL = 0xFFFF; данные MG31_17PL. */ #define MG31_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G38PL >= G31PL) или (G38PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G38PL >= G31PL) || (G38PL == 0) +/* Задаёт MG31_18PL = ~(1 << 7); данные MG31_18PL. */ #define MG31_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG31_18PL = 0xFFFF; данные MG31_18PL. */ #define MG31_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG31_11PL = 0x00FE; данные MG31_11PL. */ #define MG31_11PL 0x00FE +/* Задаёт MG31 = (MG31_11PL & MG31_12PL & MG31_13PL & MG31_14PL &; маска разрешённых прерываний внутри группы PIE 31. */ #define MG31 (MG31_11PL & MG31_12PL & MG31_13PL & MG31_14PL & \ - MG31_15PL & MG31_16PL & MG31_17PL & MG31_18PL) + MG31_15PL & MG31_16PL & MG31_17PL & MG31_18PL) /* Продолжает список аргументов, полей или выражение MG31_15PL & MG31_16PL & MG31_17PL & MG31_18PL); порядок элементов сохраняется. */ // End of MG31: // Beginning of MG32: +/* Условие компиляции (G31PL >= G32PL) или (G31PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G31PL >= G32PL) || (G31PL == 0) +/* Задаёт MG32_11PL = ~(1); данные MG32_11PL. */ #define MG32_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG32_11PL = 0xFFFF; данные MG32_11PL. */ #define MG32_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G33PL >= G32PL) или (G33PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G33PL >= G32PL) || (G33PL == 0) +/* Задаёт MG32_13PL = ~(1 << 2); данные MG32_13PL. */ #define MG32_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG32_13PL = 0xFFFF; данные MG32_13PL. */ #define MG32_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G34PL >= G32PL) или (G34PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G34PL >= G32PL) || (G34PL == 0) +/* Задаёт MG32_14PL = ~(1 << 3); данные MG32_14PL. */ #define MG32_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG32_14PL = 0xFFFF; данные MG32_14PL. */ #define MG32_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G35PL >= G32PL) или (G35PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G35PL >= G32PL) || (G35PL == 0) +/* Задаёт MG32_15PL = ~(1 << 4); данные MG32_15PL. */ #define MG32_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG32_15PL = 0xFFFF; данные MG32_15PL. */ #define MG32_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G36PL >= G32PL) или (G36PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G36PL >= G32PL) || (G36PL == 0) +/* Задаёт MG32_16PL = ~(1 << 5); данные MG32_16PL. */ #define MG32_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG32_16PL = 0xFFFF; данные MG32_16PL. */ #define MG32_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G37PL >= G32PL) или (G37PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G37PL >= G32PL) || (G37PL == 0) +/* Задаёт MG32_17PL = ~(1 << 6); данные MG32_17PL. */ #define MG32_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG32_17PL = 0xFFFF; данные MG32_17PL. */ #define MG32_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G38PL >= G32PL) или (G38PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G38PL >= G32PL) || (G38PL == 0) +/* Задаёт MG32_18PL = ~(1 << 7); данные MG32_18PL. */ #define MG32_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG32_18PL = 0xFFFF; данные MG32_18PL. */ #define MG32_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG32_12PL = 0x00FD; данные MG32_12PL. */ #define MG32_12PL 0x00FD +/* Задаёт MG32 = (MG32_11PL & MG32_12PL & MG32_13PL & MG32_14PL &; маска разрешённых прерываний внутри группы PIE 32. */ #define MG32 (MG32_11PL & MG32_12PL & MG32_13PL & MG32_14PL & \ - MG32_15PL & MG32_16PL & MG32_17PL & MG32_18PL) + MG32_15PL & MG32_16PL & MG32_17PL & MG32_18PL) /* Продолжает список аргументов, полей или выражение MG32_15PL & MG32_16PL & MG32_17PL & MG32_18PL); порядок элементов сохраняется. */ // End of MG32: // Beginning of MG33: +/* Условие компиляции (G31PL >= G33PL) или (G31PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G31PL >= G33PL) || (G31PL == 0) +/* Задаёт MG33_11PL = ~(1); данные MG33_11PL. */ #define MG33_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG33_11PL = 0xFFFF; данные MG33_11PL. */ #define MG33_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G32PL >= G33PL) или (G32PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G32PL >= G33PL) || (G32PL == 0) +/* Задаёт MG33_12PL = ~(1 << 1); данные MG33_12PL. */ #define MG33_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG33_12PL = 0xFFFF; данные MG33_12PL. */ #define MG33_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G34PL >= G33PL) или (G34PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G34PL >= G33PL) || (G34PL == 0) +/* Задаёт MG33_14PL = ~(1 << 3); данные MG33_14PL. */ #define MG33_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG33_14PL = 0xFFFF; данные MG33_14PL. */ #define MG33_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G35PL >= G33PL) или (G35PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G35PL >= G33PL) || (G35PL == 0) +/* Задаёт MG33_15PL = ~(1 << 4); данные MG33_15PL. */ #define MG33_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG33_15PL = 0xFFFF; данные MG33_15PL. */ #define MG33_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G36PL >= G33PL) или (G36PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G36PL >= G33PL) || (G36PL == 0) +/* Задаёт MG33_16PL = ~(1 << 5); данные MG33_16PL. */ #define MG33_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG33_16PL = 0xFFFF; данные MG33_16PL. */ #define MG33_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G37PL >= G33PL) или (G37PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G37PL >= G33PL) || (G37PL == 0) +/* Задаёт MG33_17PL = ~(1 << 6); данные MG33_17PL. */ #define MG33_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG33_17PL = 0xFFFF; данные MG33_17PL. */ #define MG33_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G38PL >= G33PL) или (G38PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G38PL >= G33PL) || (G38PL == 0) +/* Задаёт MG33_18PL = ~(1 << 7); данные MG33_18PL. */ #define MG33_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG33_18PL = 0xFFFF; данные MG33_18PL. */ #define MG33_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG33_13PL = 0x00FB; данные MG33_13PL. */ #define MG33_13PL 0x00FB +/* Задаёт MG33 = (MG33_11PL & MG33_12PL & MG33_13PL & MG33_14PL &; маска разрешённых прерываний внутри группы PIE 33. */ #define MG33 (MG33_11PL & MG33_12PL & MG33_13PL & MG33_14PL & \ - MG33_15PL & MG33_16PL & MG33_17PL & MG33_18PL) + MG33_15PL & MG33_16PL & MG33_17PL & MG33_18PL) /* Продолжает список аргументов, полей или выражение MG33_15PL & MG33_16PL & MG33_17PL & MG33_18PL); порядок элементов сохраняется. */ // End of MG33: // Beginning of MG34: +/* Условие компиляции (G31PL >= G34PL) или (G31PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G31PL >= G34PL) || (G31PL == 0) +/* Задаёт MG34_11PL = ~(1); данные MG34_11PL. */ #define MG34_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG34_11PL = 0xFFFF; данные MG34_11PL. */ #define MG34_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G32PL >= G34PL) или (G32PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G32PL >= G34PL) || (G32PL == 0) +/* Задаёт MG34_12PL = ~(1 << 1); данные MG34_12PL. */ #define MG34_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG34_12PL = 0xFFFF; данные MG34_12PL. */ #define MG34_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G33PL >= G34PL) или (G33PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G33PL >= G34PL) || (G33PL == 0) +/* Задаёт MG34_13PL = ~(1 << 2); данные MG34_13PL. */ #define MG34_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG34_13PL = 0xFFFF; данные MG34_13PL. */ #define MG34_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G35PL >= G34PL) или (G35PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G35PL >= G34PL) || (G35PL == 0) +/* Задаёт MG34_15PL = ~(1 << 4); данные MG34_15PL. */ #define MG34_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG34_15PL = 0xFFFF; данные MG34_15PL. */ #define MG34_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G36PL >= G34PL) или (G36PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G36PL >= G34PL) || (G36PL == 0) +/* Задаёт MG34_16PL = ~(1 << 5); данные MG34_16PL. */ #define MG34_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG34_16PL = 0xFFFF; данные MG34_16PL. */ #define MG34_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G37PL >= G34PL) или (G37PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G37PL >= G34PL) || (G37PL == 0) +/* Задаёт MG34_17PL = ~(1 << 6); данные MG34_17PL. */ #define MG34_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG34_17PL = 0xFFFF; данные MG34_17PL. */ #define MG34_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G38PL >= G34PL) или (G38PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G38PL >= G34PL) || (G38PL == 0) +/* Задаёт MG34_18PL = ~(1 << 7); данные MG34_18PL. */ #define MG34_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG34_18PL = 0xFFFF; данные MG34_18PL. */ #define MG34_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG34_14PL = 0x00F7; данные MG34_14PL. */ #define MG34_14PL 0x00F7 +/* Задаёт MG34 = (MG34_11PL & MG34_12PL & MG34_13PL & MG34_14PL &; маска разрешённых прерываний внутри группы PIE 34. */ #define MG34 (MG34_11PL & MG34_12PL & MG34_13PL & MG34_14PL & \ - MG34_15PL & MG34_16PL & MG34_17PL & MG34_18PL) + MG34_15PL & MG34_16PL & MG34_17PL & MG34_18PL) /* Продолжает список аргументов, полей или выражение MG34_15PL & MG34_16PL & MG34_17PL & MG34_18PL); порядок элементов сохраняется. */ // End of MG34: // Beginning of MG35: +/* Условие компиляции (G31PL >= G35PL) или (G31PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G31PL >= G35PL) || (G31PL == 0) +/* Задаёт MG35_11PL = ~(1); данные MG35_11PL. */ #define MG35_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG35_11PL = 0xFFFF; данные MG35_11PL. */ #define MG35_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G32PL >= G35PL) или (G32PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G32PL >= G35PL) || (G32PL == 0) +/* Задаёт MG35_12PL = ~(1 << 1); данные MG35_12PL. */ #define MG35_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG35_12PL = 0xFFFF; данные MG35_12PL. */ #define MG35_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G33PL >= G35PL) или (G33PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G33PL >= G35PL) || (G33PL == 0) +/* Задаёт MG35_13PL = ~(1 << 2); данные MG35_13PL. */ #define MG35_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG35_13PL = 0xFFFF; данные MG35_13PL. */ #define MG35_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G34PL >= G35PL) или (G34PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G34PL >= G35PL) || (G34PL == 0) +/* Задаёт MG35_14PL = ~(1 << 3); данные MG35_14PL. */ #define MG35_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG35_14PL = 0xFFFF; данные MG35_14PL. */ #define MG35_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G36PL >= G35PL) или (G36PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G36PL >= G35PL) || (G36PL == 0) +/* Задаёт MG35_16PL = ~(1 << 5); данные MG35_16PL. */ #define MG35_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG35_16PL = 0xFFFF; данные MG35_16PL. */ #define MG35_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G37PL >= G35PL) или (G37PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G37PL >= G35PL) || (G37PL == 0) +/* Задаёт MG35_17PL = ~(1 << 6); данные MG35_17PL. */ #define MG35_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG35_17PL = 0xFFFF; данные MG35_17PL. */ #define MG35_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G38PL >= G35PL) или (G38PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G38PL >= G35PL) || (G38PL == 0) +/* Задаёт MG35_18PL = ~(1 << 7); данные MG35_18PL. */ #define MG35_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG35_18PL = 0xFFFF; данные MG35_18PL. */ #define MG35_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG35_15PL = 0x00EF; данные MG35_15PL. */ #define MG35_15PL 0x00EF +/* Задаёт MG35 = (MG35_11PL & MG35_12PL & MG35_13PL & MG35_14PL &; маска разрешённых прерываний внутри группы PIE 35. */ #define MG35 (MG35_11PL & MG35_12PL & MG35_13PL & MG35_14PL & \ - MG35_15PL & MG35_16PL & MG35_17PL & MG35_18PL) + MG35_15PL & MG35_16PL & MG35_17PL & MG35_18PL) /* Продолжает список аргументов, полей или выражение MG35_15PL & MG35_16PL & MG35_17PL & MG35_18PL); порядок элементов сохраняется. */ // End of MG35: // Beginning of MG36: +/* Условие компиляции (G31PL >= G36PL) или (G31PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G31PL >= G36PL) || (G31PL == 0) +/* Задаёт MG36_11PL = ~(1); данные MG36_11PL. */ #define MG36_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG36_11PL = 0xFFFF; данные MG36_11PL. */ #define MG36_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G32PL >= G36PL) или (G32PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G32PL >= G36PL) || (G32PL == 0) +/* Задаёт MG36_12PL = ~(1 << 1); данные MG36_12PL. */ #define MG36_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG36_12PL = 0xFFFF; данные MG36_12PL. */ #define MG36_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G33PL >= G36PL) или (G33PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G33PL >= G36PL) || (G33PL == 0) +/* Задаёт MG36_13PL = ~(1 << 2); данные MG36_13PL. */ #define MG36_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG36_13PL = 0xFFFF; данные MG36_13PL. */ #define MG36_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G34PL >= G36PL) или (G34PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G34PL >= G36PL) || (G34PL == 0) +/* Задаёт MG36_14PL = ~(1 << 3); данные MG36_14PL. */ #define MG36_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG36_14PL = 0xFFFF; данные MG36_14PL. */ #define MG36_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G35PL >= G36PL) или (G35PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G35PL >= G36PL) || (G35PL == 0) +/* Задаёт MG36_15PL = ~(1 << 4); данные MG36_15PL. */ #define MG36_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG36_15PL = 0xFFFF; данные MG36_15PL. */ #define MG36_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G37PL >= G36PL) или (G37PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G37PL >= G36PL) || (G37PL == 0) +/* Задаёт MG36_17PL = ~(1 << 6); данные MG36_17PL. */ #define MG36_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG36_17PL = 0xFFFF; данные MG36_17PL. */ #define MG36_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G38PL >= G36PL) или (G38PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G38PL >= G36PL) || (G38PL == 0) +/* Задаёт MG36_18PL = ~(1 << 7); данные MG36_18PL. */ #define MG36_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG36_18PL = 0xFFFF; данные MG36_18PL. */ #define MG36_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG36_16PL = 0x00DF; данные MG36_16PL. */ #define MG36_16PL 0x00DF +/* Задаёт MG36 = (MG36_11PL & MG36_12PL & MG36_13PL & MG36_14PL &; маска разрешённых прерываний внутри группы PIE 36. */ #define MG36 (MG36_11PL & MG36_12PL & MG36_13PL & MG36_14PL & \ - MG36_15PL & MG36_16PL & MG36_17PL & MG36_18PL) + MG36_15PL & MG36_16PL & MG36_17PL & MG36_18PL) /* Продолжает список аргументов, полей или выражение MG36_15PL & MG36_16PL & MG36_17PL & MG36_18PL); порядок элементов сохраняется. */ // End of MG36: // Beginning of MG37: +/* Условие компиляции (G31PL >= G37PL) или (G31PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G31PL >= G37PL) || (G31PL == 0) +/* Задаёт MG37_11PL = ~(1); данные MG37_11PL. */ #define MG37_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG37_11PL = 0xFFFF; данные MG37_11PL. */ #define MG37_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G32PL >= G37PL) или (G32PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G32PL >= G37PL) || (G32PL == 0) +/* Задаёт MG37_12PL = ~(1 << 1); данные MG37_12PL. */ #define MG37_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG37_12PL = 0xFFFF; данные MG37_12PL. */ #define MG37_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G33PL >= G37PL) или (G33PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G33PL >= G37PL) || (G33PL == 0) +/* Задаёт MG37_13PL = ~(1 << 2); данные MG37_13PL. */ #define MG37_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG37_13PL = 0xFFFF; данные MG37_13PL. */ #define MG37_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G34PL >= G37PL) или (G34PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G34PL >= G37PL) || (G34PL == 0) +/* Задаёт MG37_14PL = ~(1 << 3); данные MG37_14PL. */ #define MG37_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG37_14PL = 0xFFFF; данные MG37_14PL. */ #define MG37_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G35PL >= G37PL) или (G35PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G35PL >= G37PL) || (G35PL == 0) +/* Задаёт MG37_15PL = ~(1 << 4); данные MG37_15PL. */ #define MG37_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG37_15PL = 0xFFFF; данные MG37_15PL. */ #define MG37_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G36PL >= G37PL) или (G36PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G36PL >= G37PL) || (G36PL == 0) +/* Задаёт MG37_16PL = ~(1 << 5); данные MG37_16PL. */ #define MG37_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG37_16PL = 0xFFFF; данные MG37_16PL. */ #define MG37_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G38PL >= G37PL) или (G38PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G38PL >= G37PL) || (G38PL == 0) +/* Задаёт MG37_18PL = ~(1 << 7); данные MG37_18PL. */ #define MG37_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG37_18PL = 0xFFFF; данные MG37_18PL. */ #define MG37_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG37_17PL = 0x00BF; данные MG37_17PL. */ #define MG37_17PL 0x00BF +/* Задаёт MG37 = (MG37_11PL & MG37_12PL & MG37_13PL & MG37_14PL &; маска разрешённых прерываний внутри группы PIE 37. */ #define MG37 (MG37_11PL & MG37_12PL & MG37_13PL & MG37_14PL & \ - MG37_15PL & MG37_16PL & MG37_17PL & MG37_18PL) + MG37_15PL & MG37_16PL & MG37_17PL & MG37_18PL) /* Продолжает список аргументов, полей или выражение MG37_15PL & MG37_16PL & MG37_17PL & MG37_18PL); порядок элементов сохраняется. */ // End of MG37: // Beginning of MG38: +/* Условие компиляции (G31PL >= G38PL) или (G31PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G31PL >= G38PL) || (G31PL == 0) +/* Задаёт MG38_11PL = ~(1); данные MG38_11PL. */ #define MG38_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG38_11PL = 0xFFFF; данные MG38_11PL. */ #define MG38_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G32PL >= G38PL) или (G32PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G32PL >= G38PL) || (G32PL == 0) +/* Задаёт MG38_12PL = ~(1 << 1); данные MG38_12PL. */ #define MG38_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG38_12PL = 0xFFFF; данные MG38_12PL. */ #define MG38_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G33PL >= G38PL) или (G33PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G33PL >= G38PL) || (G33PL == 0) +/* Задаёт MG38_13PL = ~(1 << 2); данные MG38_13PL. */ #define MG38_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG38_13PL = 0xFFFF; данные MG38_13PL. */ #define MG38_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G34PL >= G38PL) или (G34PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G34PL >= G38PL) || (G34PL == 0) +/* Задаёт MG38_14PL = ~(1 << 3); данные MG38_14PL. */ #define MG38_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG38_14PL = 0xFFFF; данные MG38_14PL. */ #define MG38_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G35PL >= G38PL) или (G35PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G35PL >= G38PL) || (G35PL == 0) +/* Задаёт MG38_15PL = ~(1 << 4); данные MG38_15PL. */ #define MG38_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG38_15PL = 0xFFFF; данные MG38_15PL. */ #define MG38_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G36PL >= G38PL) или (G36PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G36PL >= G38PL) || (G36PL == 0) +/* Задаёт MG38_16PL = ~(1 << 5); данные MG38_16PL. */ #define MG38_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG38_16PL = 0xFFFF; данные MG38_16PL. */ #define MG38_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G37PL >= G38PL) или (G37PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G37PL >= G38PL) || (G37PL == 0) +/* Задаёт MG38_17PL = ~(1 << 6); данные MG38_17PL. */ #define MG38_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG38_17PL = 0xFFFF; данные MG38_17PL. */ #define MG38_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG38_18PL = 0x007F; данные MG38_18PL. */ #define MG38_18PL 0x007F +/* Задаёт MG38 = (MG38_11PL & MG38_12PL & MG38_13PL & MG38_14PL &; маска разрешённых прерываний внутри группы PIE 38. */ #define MG38 (MG38_11PL & MG38_12PL & MG38_13PL & MG38_14PL & \ - MG38_15PL & MG38_16PL & MG38_17PL & MG38_18PL) + MG38_15PL & MG38_16PL & MG38_17PL & MG38_18PL) /* Продолжает список аргументов, полей или выражение MG38_15PL & MG38_16PL & MG38_17PL & MG38_18PL); порядок элементов сохраняется. */ // End of MG38: //------------------------------------------------------------------------------- @@ -2855,331 +5141,627 @@ extern "C" { // // Beginning of MG41: +/* Условие компиляции (G42PL >= G41PL) или (G42PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G42PL >= G41PL) || (G42PL == 0) +/* Задаёт MG41_12PL = ~(1 << 1); данные MG41_12PL. */ #define MG41_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG41_12PL = 0xFFFF; данные MG41_12PL. */ #define MG41_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G43PL >= G41PL) или (G43PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G43PL >= G41PL) || (G43PL == 0) +/* Задаёт MG41_13PL = ~(1 << 2); данные MG41_13PL. */ #define MG41_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG41_13PL = 0xFFFF; данные MG41_13PL. */ #define MG41_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G44PL >= G41PL) или (G44PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G44PL >= G41PL) || (G44PL == 0) +/* Задаёт MG41_14PL = ~(1 << 3); данные MG41_14PL. */ #define MG41_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG41_14PL = 0xFFFF; данные MG41_14PL. */ #define MG41_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G45PL >= G41PL) или (G45PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G45PL >= G41PL) || (G45PL == 0) +/* Задаёт MG41_15PL = ~(1 << 4); данные MG41_15PL. */ #define MG41_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG41_15PL = 0xFFFF; данные MG41_15PL. */ #define MG41_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G46PL >= G41PL) или (G46PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G46PL >= G41PL) || (G46PL == 0) +/* Задаёт MG41_16PL = ~(1 << 5); данные MG41_16PL. */ #define MG41_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG41_16PL = 0xFFFF; данные MG41_16PL. */ #define MG41_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G47PL >= G41PL) или (G47PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G47PL >= G41PL) || (G47PL == 0) +/* Задаёт MG41_17PL = ~(1 << 6); данные MG41_17PL. */ #define MG41_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG41_17PL = 0xFFFF; данные MG41_17PL. */ #define MG41_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G48PL >= G41PL) или (G48PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G48PL >= G41PL) || (G48PL == 0) +/* Задаёт MG41_18PL = ~(1 << 7); данные MG41_18PL. */ #define MG41_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG41_18PL = 0xFFFF; данные MG41_18PL. */ #define MG41_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG41_11PL = 0x00FE; данные MG41_11PL. */ #define MG41_11PL 0x00FE +/* Задаёт MG41 = (MG41_11PL & MG41_12PL & MG41_13PL & MG41_14PL &; маска разрешённых прерываний внутри группы PIE 41. */ #define MG41 (MG41_11PL & MG41_12PL & MG41_13PL & MG41_14PL & \ - MG41_15PL & MG41_16PL & MG41_17PL & MG41_18PL) + MG41_15PL & MG41_16PL & MG41_17PL & MG41_18PL) /* Продолжает список аргументов, полей или выражение MG41_15PL & MG41_16PL & MG41_17PL & MG41_18PL); порядок элементов сохраняется. */ // End of MG41: // Beginning of MG42: +/* Условие компиляции (G41PL >= G42PL) или (G41PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G41PL >= G42PL) || (G41PL == 0) +/* Задаёт MG42_11PL = ~(1); данные MG42_11PL. */ #define MG42_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG42_11PL = 0xFFFF; данные MG42_11PL. */ #define MG42_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G43PL >= G42PL) или (G43PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G43PL >= G42PL) || (G43PL == 0) +/* Задаёт MG42_13PL = ~(1 << 2); данные MG42_13PL. */ #define MG42_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG42_13PL = 0xFFFF; данные MG42_13PL. */ #define MG42_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G44PL >= G42PL) или (G44PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G44PL >= G42PL) || (G44PL == 0) +/* Задаёт MG42_14PL = ~(1 << 3); данные MG42_14PL. */ #define MG42_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG42_14PL = 0xFFFF; данные MG42_14PL. */ #define MG42_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G45PL >= G42PL) или (G45PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G45PL >= G42PL) || (G45PL == 0) +/* Задаёт MG42_15PL = ~(1 << 4); данные MG42_15PL. */ #define MG42_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG42_15PL = 0xFFFF; данные MG42_15PL. */ #define MG42_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G46PL >= G42PL) или (G46PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G46PL >= G42PL) || (G46PL == 0) +/* Задаёт MG42_16PL = ~(1 << 5); данные MG42_16PL. */ #define MG42_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG42_16PL = 0xFFFF; данные MG42_16PL. */ #define MG42_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G47PL >= G42PL) или (G47PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G47PL >= G42PL) || (G47PL == 0) +/* Задаёт MG42_17PL = ~(1 << 6); данные MG42_17PL. */ #define MG42_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG42_17PL = 0xFFFF; данные MG42_17PL. */ #define MG42_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G48PL >= G42PL) или (G48PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G48PL >= G42PL) || (G48PL == 0) +/* Задаёт MG42_18PL = ~(1 << 7); данные MG42_18PL. */ #define MG42_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG42_18PL = 0xFFFF; данные MG42_18PL. */ #define MG42_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG42_12PL = 0x00FD; данные MG42_12PL. */ #define MG42_12PL 0x00FD +/* Задаёт MG42 = (MG42_11PL & MG42_12PL & MG42_13PL & MG42_14PL &; маска разрешённых прерываний внутри группы PIE 42. */ #define MG42 (MG42_11PL & MG42_12PL & MG42_13PL & MG42_14PL & \ - MG42_15PL & MG42_16PL & MG42_17PL & MG42_18PL) + MG42_15PL & MG42_16PL & MG42_17PL & MG42_18PL) /* Продолжает список аргументов, полей или выражение MG42_15PL & MG42_16PL & MG42_17PL & MG42_18PL); порядок элементов сохраняется. */ // End of MG42: // Beginning of MG43: +/* Условие компиляции (G41PL >= G43PL) или (G41PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G41PL >= G43PL) || (G41PL == 0) +/* Задаёт MG43_11PL = ~(1); данные MG43_11PL. */ #define MG43_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG43_11PL = 0xFFFF; данные MG43_11PL. */ #define MG43_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G42PL >= G43PL) или (G42PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G42PL >= G43PL) || (G42PL == 0) +/* Задаёт MG43_12PL = ~(1 << 1); данные MG43_12PL. */ #define MG43_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG43_12PL = 0xFFFF; данные MG43_12PL. */ #define MG43_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G44PL >= G43PL) или (G44PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G44PL >= G43PL) || (G44PL == 0) +/* Задаёт MG43_14PL = ~(1 << 3); данные MG43_14PL. */ #define MG43_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG43_14PL = 0xFFFF; данные MG43_14PL. */ #define MG43_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G45PL >= G43PL) или (G45PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G45PL >= G43PL) || (G45PL == 0) +/* Задаёт MG43_15PL = ~(1 << 4); данные MG43_15PL. */ #define MG43_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG43_15PL = 0xFFFF; данные MG43_15PL. */ #define MG43_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G46PL >= G43PL) или (G46PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G46PL >= G43PL) || (G46PL == 0) +/* Задаёт MG43_16PL = ~(1 << 5); данные MG43_16PL. */ #define MG43_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG43_16PL = 0xFFFF; данные MG43_16PL. */ #define MG43_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G47PL >= G43PL) или (G47PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G47PL >= G43PL) || (G47PL == 0) +/* Задаёт MG43_17PL = ~(1 << 6); данные MG43_17PL. */ #define MG43_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG43_17PL = 0xFFFF; данные MG43_17PL. */ #define MG43_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G48PL >= G43PL) или (G48PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G48PL >= G43PL) || (G48PL == 0) +/* Задаёт MG43_18PL = ~(1 << 7); данные MG43_18PL. */ #define MG43_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG43_18PL = 0xFFFF; данные MG43_18PL. */ #define MG43_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG43_13PL = 0x00FB; данные MG43_13PL. */ #define MG43_13PL 0x00FB +/* Задаёт MG43 = (MG43_11PL & MG43_12PL & MG43_13PL & MG43_14PL &; маска разрешённых прерываний внутри группы PIE 43. */ #define MG43 (MG43_11PL & MG43_12PL & MG43_13PL & MG43_14PL & \ - MG43_15PL & MG43_16PL & MG43_17PL & MG43_18PL) + MG43_15PL & MG43_16PL & MG43_17PL & MG43_18PL) /* Продолжает список аргументов, полей или выражение MG43_15PL & MG43_16PL & MG43_17PL & MG43_18PL); порядок элементов сохраняется. */ // End of MG43: // Beginning of MG44: +/* Условие компиляции (G41PL >= G44PL) или (G41PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G41PL >= G44PL) || (G41PL == 0) +/* Задаёт MG44_11PL = ~(1); данные MG44_11PL. */ #define MG44_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG44_11PL = 0xFFFF; данные MG44_11PL. */ #define MG44_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G42PL >= G44PL) или (G42PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G42PL >= G44PL) || (G42PL == 0) +/* Задаёт MG44_12PL = ~(1 << 1); данные MG44_12PL. */ #define MG44_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG44_12PL = 0xFFFF; данные MG44_12PL. */ #define MG44_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G43PL >= G44PL) или (G43PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G43PL >= G44PL) || (G43PL == 0) +/* Задаёт MG44_13PL = ~(1 << 2); данные MG44_13PL. */ #define MG44_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG44_13PL = 0xFFFF; данные MG44_13PL. */ #define MG44_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G45PL >= G44PL) или (G45PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G45PL >= G44PL) || (G45PL == 0) +/* Задаёт MG44_15PL = ~(1 << 4); данные MG44_15PL. */ #define MG44_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG44_15PL = 0xFFFF; данные MG44_15PL. */ #define MG44_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G46PL >= G44PL) или (G46PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G46PL >= G44PL) || (G46PL == 0) +/* Задаёт MG44_16PL = ~(1 << 5); данные MG44_16PL. */ #define MG44_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG44_16PL = 0xFFFF; данные MG44_16PL. */ #define MG44_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G47PL >= G44PL) или (G47PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G47PL >= G44PL) || (G47PL == 0) +/* Задаёт MG44_17PL = ~(1 << 6); данные MG44_17PL. */ #define MG44_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG44_17PL = 0xFFFF; данные MG44_17PL. */ #define MG44_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G48PL >= G44PL) или (G48PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G48PL >= G44PL) || (G48PL == 0) +/* Задаёт MG44_18PL = ~(1 << 7); данные MG44_18PL. */ #define MG44_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG44_18PL = 0xFFFF; данные MG44_18PL. */ #define MG44_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG44_14PL = 0x00F7; данные MG44_14PL. */ #define MG44_14PL 0x00F7 +/* Задаёт MG44 = (MG44_11PL & MG44_12PL & MG44_13PL & MG44_14PL &; маска разрешённых прерываний внутри группы PIE 44. */ #define MG44 (MG44_11PL & MG44_12PL & MG44_13PL & MG44_14PL & \ - MG44_15PL & MG44_16PL & MG44_17PL & MG44_18PL) + MG44_15PL & MG44_16PL & MG44_17PL & MG44_18PL) /* Продолжает список аргументов, полей или выражение MG44_15PL & MG44_16PL & MG44_17PL & MG44_18PL); порядок элементов сохраняется. */ // End of MG44: // Beginning of MG45: +/* Условие компиляции (G41PL >= G45PL) или (G41PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G41PL >= G45PL) || (G41PL == 0) +/* Задаёт MG45_11PL = ~(1); данные MG45_11PL. */ #define MG45_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG45_11PL = 0xFFFF; данные MG45_11PL. */ #define MG45_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G42PL >= G45PL) или (G42PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G42PL >= G45PL) || (G42PL == 0) +/* Задаёт MG45_12PL = ~(1 << 1); данные MG45_12PL. */ #define MG45_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG45_12PL = 0xFFFF; данные MG45_12PL. */ #define MG45_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G43PL >= G45PL) или (G43PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G43PL >= G45PL) || (G43PL == 0) +/* Задаёт MG45_13PL = ~(1 << 2); данные MG45_13PL. */ #define MG45_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG45_13PL = 0xFFFF; данные MG45_13PL. */ #define MG45_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G44PL >= G45PL) или (G44PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G44PL >= G45PL) || (G44PL == 0) +/* Задаёт MG45_14PL = ~(1 << 3); данные MG45_14PL. */ #define MG45_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG45_14PL = 0xFFFF; данные MG45_14PL. */ #define MG45_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G46PL >= G45PL) или (G46PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G46PL >= G45PL) || (G46PL == 0) +/* Задаёт MG45_16PL = ~(1 << 5); данные MG45_16PL. */ #define MG45_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG45_16PL = 0xFFFF; данные MG45_16PL. */ #define MG45_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G47PL >= G45PL) или (G47PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G47PL >= G45PL) || (G47PL == 0) +/* Задаёт MG45_17PL = ~(1 << 6); данные MG45_17PL. */ #define MG45_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG45_17PL = 0xFFFF; данные MG45_17PL. */ #define MG45_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G48PL >= G45PL) или (G48PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G48PL >= G45PL) || (G48PL == 0) +/* Задаёт MG45_18PL = ~(1 << 7); данные MG45_18PL. */ #define MG45_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG45_18PL = 0xFFFF; данные MG45_18PL. */ #define MG45_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG45_15PL = 0x00EF; данные MG45_15PL. */ #define MG45_15PL 0x00EF +/* Задаёт MG45 = (MG45_11PL & MG45_12PL & MG45_13PL & MG45_14PL &; маска разрешённых прерываний внутри группы PIE 45. */ #define MG45 (MG45_11PL & MG45_12PL & MG45_13PL & MG45_14PL & \ - MG45_15PL & MG45_16PL & MG45_17PL & MG45_18PL) + MG45_15PL & MG45_16PL & MG45_17PL & MG45_18PL) /* Продолжает список аргументов, полей или выражение MG45_15PL & MG45_16PL & MG45_17PL & MG45_18PL); порядок элементов сохраняется. */ // End of MG45: // Beginning of MG46: +/* Условие компиляции (G41PL >= G46PL) или (G41PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G41PL >= G46PL) || (G41PL == 0) +/* Задаёт MG46_11PL = ~(1); данные MG46_11PL. */ #define MG46_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG46_11PL = 0xFFFF; данные MG46_11PL. */ #define MG46_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G42PL >= G46PL) или (G42PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G42PL >= G46PL) || (G42PL == 0) +/* Задаёт MG46_12PL = ~(1 << 1); данные MG46_12PL. */ #define MG46_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG46_12PL = 0xFFFF; данные MG46_12PL. */ #define MG46_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G43PL >= G46PL) или (G43PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G43PL >= G46PL) || (G43PL == 0) +/* Задаёт MG46_13PL = ~(1 << 2); данные MG46_13PL. */ #define MG46_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG46_13PL = 0xFFFF; данные MG46_13PL. */ #define MG46_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G44PL >= G46PL) или (G44PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G44PL >= G46PL) || (G44PL == 0) +/* Задаёт MG46_14PL = ~(1 << 3); данные MG46_14PL. */ #define MG46_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG46_14PL = 0xFFFF; данные MG46_14PL. */ #define MG46_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G45PL >= G46PL) или (G45PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G45PL >= G46PL) || (G45PL == 0) +/* Задаёт MG46_15PL = ~(1 << 4); данные MG46_15PL. */ #define MG46_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG46_15PL = 0xFFFF; данные MG46_15PL. */ #define MG46_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G47PL >= G46PL) или (G47PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G47PL >= G46PL) || (G47PL == 0) +/* Задаёт MG46_17PL = ~(1 << 6); данные MG46_17PL. */ #define MG46_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG46_17PL = 0xFFFF; данные MG46_17PL. */ #define MG46_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G48PL >= G46PL) или (G48PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G48PL >= G46PL) || (G48PL == 0) +/* Задаёт MG46_18PL = ~(1 << 7); данные MG46_18PL. */ #define MG46_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG46_18PL = 0xFFFF; данные MG46_18PL. */ #define MG46_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG46_16PL = 0x00DF; данные MG46_16PL. */ #define MG46_16PL 0x00DF +/* Задаёт MG46 = (MG46_11PL & MG46_12PL & MG46_13PL & MG46_14PL &; маска разрешённых прерываний внутри группы PIE 46. */ #define MG46 (MG46_11PL & MG46_12PL & MG46_13PL & MG46_14PL & \ - MG46_15PL & MG46_16PL & MG46_17PL & MG46_18PL) + MG46_15PL & MG46_16PL & MG46_17PL & MG46_18PL) /* Продолжает список аргументов, полей или выражение MG46_15PL & MG46_16PL & MG46_17PL & MG46_18PL); порядок элементов сохраняется. */ // End of MG46: // Beginning of MG47: +/* Условие компиляции (G41PL >= G47PL) или (G41PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G41PL >= G47PL) || (G41PL == 0) +/* Задаёт MG47_11PL = ~(1); данные MG47_11PL. */ #define MG47_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG47_11PL = 0xFFFF; данные MG47_11PL. */ #define MG47_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G42PL >= G47PL) или (G42PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G42PL >= G47PL) || (G42PL == 0) +/* Задаёт MG47_12PL = ~(1 << 1); данные MG47_12PL. */ #define MG47_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG47_12PL = 0xFFFF; данные MG47_12PL. */ #define MG47_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G43PL >= G47PL) или (G43PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G43PL >= G47PL) || (G43PL == 0) +/* Задаёт MG47_13PL = ~(1 << 2); данные MG47_13PL. */ #define MG47_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG47_13PL = 0xFFFF; данные MG47_13PL. */ #define MG47_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G44PL >= G47PL) или (G44PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G44PL >= G47PL) || (G44PL == 0) +/* Задаёт MG47_14PL = ~(1 << 3); данные MG47_14PL. */ #define MG47_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG47_14PL = 0xFFFF; данные MG47_14PL. */ #define MG47_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G45PL >= G47PL) или (G45PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G45PL >= G47PL) || (G45PL == 0) +/* Задаёт MG47_15PL = ~(1 << 4); данные MG47_15PL. */ #define MG47_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG47_15PL = 0xFFFF; данные MG47_15PL. */ #define MG47_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G46PL >= G47PL) или (G46PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G46PL >= G47PL) || (G46PL == 0) +/* Задаёт MG47_16PL = ~(1 << 5); данные MG47_16PL. */ #define MG47_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG47_16PL = 0xFFFF; данные MG47_16PL. */ #define MG47_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G48PL >= G47PL) или (G48PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G48PL >= G47PL) || (G48PL == 0) +/* Задаёт MG47_18PL = ~(1 << 7); данные MG47_18PL. */ #define MG47_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG47_18PL = 0xFFFF; данные MG47_18PL. */ #define MG47_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG47_17PL = 0x00BF; данные MG47_17PL. */ #define MG47_17PL 0x00BF +/* Задаёт MG47 = (MG47_11PL & MG47_12PL & MG47_13PL & MG47_14PL &; маска разрешённых прерываний внутри группы PIE 47. */ #define MG47 (MG47_11PL & MG47_12PL & MG47_13PL & MG47_14PL & \ - MG47_15PL & MG47_16PL & MG47_17PL & MG47_18PL) + MG47_15PL & MG47_16PL & MG47_17PL & MG47_18PL) /* Продолжает список аргументов, полей или выражение MG47_15PL & MG47_16PL & MG47_17PL & MG47_18PL); порядок элементов сохраняется. */ // End of MG47: // Beginning of MG48: +/* Условие компиляции (G41PL >= G48PL) или (G41PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G41PL >= G48PL) || (G41PL == 0) +/* Задаёт MG48_11PL = ~(1); данные MG48_11PL. */ #define MG48_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG48_11PL = 0xFFFF; данные MG48_11PL. */ #define MG48_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G42PL >= G48PL) или (G42PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G42PL >= G48PL) || (G42PL == 0) +/* Задаёт MG48_12PL = ~(1 << 1); данные MG48_12PL. */ #define MG48_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG48_12PL = 0xFFFF; данные MG48_12PL. */ #define MG48_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G43PL >= G48PL) или (G43PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G43PL >= G48PL) || (G43PL == 0) +/* Задаёт MG48_13PL = ~(1 << 2); данные MG48_13PL. */ #define MG48_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG48_13PL = 0xFFFF; данные MG48_13PL. */ #define MG48_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G44PL >= G48PL) или (G44PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G44PL >= G48PL) || (G44PL == 0) +/* Задаёт MG48_14PL = ~(1 << 3); данные MG48_14PL. */ #define MG48_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG48_14PL = 0xFFFF; данные MG48_14PL. */ #define MG48_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G45PL >= G48PL) или (G45PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G45PL >= G48PL) || (G45PL == 0) +/* Задаёт MG48_15PL = ~(1 << 4); данные MG48_15PL. */ #define MG48_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG48_15PL = 0xFFFF; данные MG48_15PL. */ #define MG48_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G46PL >= G48PL) или (G46PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G46PL >= G48PL) || (G46PL == 0) +/* Задаёт MG48_16PL = ~(1 << 5); данные MG48_16PL. */ #define MG48_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG48_16PL = 0xFFFF; данные MG48_16PL. */ #define MG48_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G47PL >= G48PL) или (G47PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G47PL >= G48PL) || (G47PL == 0) +/* Задаёт MG48_17PL = ~(1 << 6); данные MG48_17PL. */ #define MG48_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG48_17PL = 0xFFFF; данные MG48_17PL. */ #define MG48_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG48_18PL = 0x007F; данные MG48_18PL. */ #define MG48_18PL 0x007F +/* Задаёт MG48 = (MG48_11PL & MG48_12PL & MG48_13PL & MG48_14PL &; маска разрешённых прерываний внутри группы PIE 48. */ #define MG48 (MG48_11PL & MG48_12PL & MG48_13PL & MG48_14PL & \ - MG48_15PL & MG48_16PL & MG48_17PL & MG48_18PL) + MG48_15PL & MG48_16PL & MG48_17PL & MG48_18PL) /* Продолжает список аргументов, полей или выражение MG48_15PL & MG48_16PL & MG48_17PL & MG48_18PL); порядок элементов сохраняется. */ // End of MG48: //------------------------------------------------------------------------------- @@ -3187,331 +5769,627 @@ extern "C" { // // Beginning of MG51: +/* Условие компиляции (G52PL >= G51PL) или (G52PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G52PL >= G51PL) || (G52PL == 0) +/* Задаёт MG51_12PL = ~(1 << 1); данные MG51_12PL. */ #define MG51_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG51_12PL = 0xFFFF; данные MG51_12PL. */ #define MG51_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G53PL >= G51PL) или (G53PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G53PL >= G51PL) || (G53PL == 0) +/* Задаёт MG51_13PL = ~(1 << 2); данные MG51_13PL. */ #define MG51_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG51_13PL = 0xFFFF; данные MG51_13PL. */ #define MG51_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G54PL >= G51PL) или (G54PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G54PL >= G51PL) || (G54PL == 0) +/* Задаёт MG51_14PL = ~(1 << 3); данные MG51_14PL. */ #define MG51_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG51_14PL = 0xFFFF; данные MG51_14PL. */ #define MG51_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G55PL >= G51PL) или (G55PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G55PL >= G51PL) || (G55PL == 0) +/* Задаёт MG51_15PL = ~(1 << 4); данные MG51_15PL. */ #define MG51_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG51_15PL = 0xFFFF; данные MG51_15PL. */ #define MG51_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G56PL >= G51PL) или (G56PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G56PL >= G51PL) || (G56PL == 0) +/* Задаёт MG51_16PL = ~(1 << 5); данные MG51_16PL. */ #define MG51_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG51_16PL = 0xFFFF; данные MG51_16PL. */ #define MG51_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G57PL >= G51PL) или (G57PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G57PL >= G51PL) || (G57PL == 0) +/* Задаёт MG51_17PL = ~(1 << 6); данные MG51_17PL. */ #define MG51_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG51_17PL = 0xFFFF; данные MG51_17PL. */ #define MG51_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G58PL >= G51PL) или (G58PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G58PL >= G51PL) || (G58PL == 0) +/* Задаёт MG51_18PL = ~(1 << 7); данные MG51_18PL. */ #define MG51_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG51_18PL = 0xFFFF; данные MG51_18PL. */ #define MG51_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG51_11PL = 0x00FE; данные MG51_11PL. */ #define MG51_11PL 0x00FE +/* Задаёт MG51 = (MG51_11PL & MG51_12PL & MG51_13PL & MG51_14PL &; маска разрешённых прерываний внутри группы PIE 51. */ #define MG51 (MG51_11PL & MG51_12PL & MG51_13PL & MG51_14PL & \ - MG51_15PL & MG51_16PL & MG51_17PL & MG51_18PL) + MG51_15PL & MG51_16PL & MG51_17PL & MG51_18PL) /* Продолжает список аргументов, полей или выражение MG51_15PL & MG51_16PL & MG51_17PL & MG51_18PL); порядок элементов сохраняется. */ // End of MG51: // Beginning of MG52: +/* Условие компиляции (G51PL >= G52PL) или (G51PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G51PL >= G52PL) || (G51PL == 0) +/* Задаёт MG52_11PL = ~(1); данные MG52_11PL. */ #define MG52_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG52_11PL = 0xFFFF; данные MG52_11PL. */ #define MG52_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G53PL >= G52PL) или (G53PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G53PL >= G52PL) || (G53PL == 0) +/* Задаёт MG52_13PL = ~(1 << 2); данные MG52_13PL. */ #define MG52_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG52_13PL = 0xFFFF; данные MG52_13PL. */ #define MG52_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G54PL >= G52PL) или (G54PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G54PL >= G52PL) || (G54PL == 0) +/* Задаёт MG52_14PL = ~(1 << 3); данные MG52_14PL. */ #define MG52_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG52_14PL = 0xFFFF; данные MG52_14PL. */ #define MG52_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G55PL >= G52PL) или (G55PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G55PL >= G52PL) || (G55PL == 0) +/* Задаёт MG52_15PL = ~(1 << 4); данные MG52_15PL. */ #define MG52_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG52_15PL = 0xFFFF; данные MG52_15PL. */ #define MG52_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G56PL >= G52PL) или (G56PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G56PL >= G52PL) || (G56PL == 0) +/* Задаёт MG52_16PL = ~(1 << 5); данные MG52_16PL. */ #define MG52_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG52_16PL = 0xFFFF; данные MG52_16PL. */ #define MG52_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G57PL >= G52PL) или (G57PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G57PL >= G52PL) || (G57PL == 0) +/* Задаёт MG52_17PL = ~(1 << 6); данные MG52_17PL. */ #define MG52_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG52_17PL = 0xFFFF; данные MG52_17PL. */ #define MG52_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G58PL >= G52PL) или (G58PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G58PL >= G52PL) || (G58PL == 0) +/* Задаёт MG52_18PL = ~(1 << 7); данные MG52_18PL. */ #define MG52_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG52_18PL = 0xFFFF; данные MG52_18PL. */ #define MG52_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG52_12PL = 0x00FD; данные MG52_12PL. */ #define MG52_12PL 0x00FD +/* Задаёт MG52 = (MG52_11PL & MG52_12PL & MG52_13PL & MG52_14PL &; маска разрешённых прерываний внутри группы PIE 52. */ #define MG52 (MG52_11PL & MG52_12PL & MG52_13PL & MG52_14PL & \ - MG52_15PL & MG52_16PL & MG52_17PL & MG52_18PL) + MG52_15PL & MG52_16PL & MG52_17PL & MG52_18PL) /* Продолжает список аргументов, полей или выражение MG52_15PL & MG52_16PL & MG52_17PL & MG52_18PL); порядок элементов сохраняется. */ // End of MG52: // Beginning of MG53: +/* Условие компиляции (G51PL >= G53PL) или (G51PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G51PL >= G53PL) || (G51PL == 0) +/* Задаёт MG53_11PL = ~(1); данные MG53_11PL. */ #define MG53_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG53_11PL = 0xFFFF; данные MG53_11PL. */ #define MG53_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G52PL >= G53PL) или (G52PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G52PL >= G53PL) || (G52PL == 0) +/* Задаёт MG53_12PL = ~(1 << 1); данные MG53_12PL. */ #define MG53_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG53_12PL = 0xFFFF; данные MG53_12PL. */ #define MG53_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G54PL >= G53PL) или (G54PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G54PL >= G53PL) || (G54PL == 0) +/* Задаёт MG53_14PL = ~(1 << 3); данные MG53_14PL. */ #define MG53_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG53_14PL = 0xFFFF; данные MG53_14PL. */ #define MG53_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G55PL >= G53PL) или (G55PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G55PL >= G53PL) || (G55PL == 0) +/* Задаёт MG53_15PL = ~(1 << 4); данные MG53_15PL. */ #define MG53_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG53_15PL = 0xFFFF; данные MG53_15PL. */ #define MG53_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G56PL >= G53PL) или (G56PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G56PL >= G53PL) || (G56PL == 0) +/* Задаёт MG53_16PL = ~(1 << 5); данные MG53_16PL. */ #define MG53_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG53_16PL = 0xFFFF; данные MG53_16PL. */ #define MG53_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G57PL >= G53PL) или (G57PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G57PL >= G53PL) || (G57PL == 0) +/* Задаёт MG53_17PL = ~(1 << 6); данные MG53_17PL. */ #define MG53_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG53_17PL = 0xFFFF; данные MG53_17PL. */ #define MG53_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G58PL >= G53PL) или (G58PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G58PL >= G53PL) || (G58PL == 0) +/* Задаёт MG53_18PL = ~(1 << 7); данные MG53_18PL. */ #define MG53_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG53_18PL = 0xFFFF; данные MG53_18PL. */ #define MG53_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG53_13PL = 0x00FB; данные MG53_13PL. */ #define MG53_13PL 0x00FB +/* Задаёт MG53 = (MG53_11PL & MG53_12PL & MG53_13PL & MG53_14PL &; маска разрешённых прерываний внутри группы PIE 53. */ #define MG53 (MG53_11PL & MG53_12PL & MG53_13PL & MG53_14PL & \ - MG53_15PL & MG53_16PL & MG53_17PL & MG53_18PL) + MG53_15PL & MG53_16PL & MG53_17PL & MG53_18PL) /* Продолжает список аргументов, полей или выражение MG53_15PL & MG53_16PL & MG53_17PL & MG53_18PL); порядок элементов сохраняется. */ // End of MG53: // Beginning of MG54: +/* Условие компиляции (G51PL >= G54PL) или (G51PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G51PL >= G54PL) || (G51PL == 0) +/* Задаёт MG54_11PL = ~(1); данные MG54_11PL. */ #define MG54_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG54_11PL = 0xFFFF; данные MG54_11PL. */ #define MG54_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G52PL >= G54PL) или (G52PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G52PL >= G54PL) || (G52PL == 0) +/* Задаёт MG54_12PL = ~(1 << 1); данные MG54_12PL. */ #define MG54_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG54_12PL = 0xFFFF; данные MG54_12PL. */ #define MG54_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G53PL >= G54PL) или (G53PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G53PL >= G54PL) || (G53PL == 0) +/* Задаёт MG54_13PL = ~(1 << 2); данные MG54_13PL. */ #define MG54_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG54_13PL = 0xFFFF; данные MG54_13PL. */ #define MG54_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G55PL >= G54PL) или (G55PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G55PL >= G54PL) || (G55PL == 0) +/* Задаёт MG54_15PL = ~(1 << 4); данные MG54_15PL. */ #define MG54_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG54_15PL = 0xFFFF; данные MG54_15PL. */ #define MG54_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G56PL >= G54PL) или (G56PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G56PL >= G54PL) || (G56PL == 0) +/* Задаёт MG54_16PL = ~(1 << 5); данные MG54_16PL. */ #define MG54_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG54_16PL = 0xFFFF; данные MG54_16PL. */ #define MG54_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G57PL >= G54PL) или (G57PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G57PL >= G54PL) || (G57PL == 0) +/* Задаёт MG54_17PL = ~(1 << 6); данные MG54_17PL. */ #define MG54_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG54_17PL = 0xFFFF; данные MG54_17PL. */ #define MG54_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G58PL >= G54PL) или (G58PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G58PL >= G54PL) || (G58PL == 0) +/* Задаёт MG54_18PL = ~(1 << 7); данные MG54_18PL. */ #define MG54_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG54_18PL = 0xFFFF; данные MG54_18PL. */ #define MG54_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG54_14PL = 0x00F7; данные MG54_14PL. */ #define MG54_14PL 0x00F7 +/* Задаёт MG54 = (MG54_11PL & MG54_12PL & MG54_13PL & MG54_14PL &; маска разрешённых прерываний внутри группы PIE 54. */ #define MG54 (MG54_11PL & MG54_12PL & MG54_13PL & MG54_14PL & \ - MG54_15PL & MG54_16PL & MG54_17PL & MG54_18PL) + MG54_15PL & MG54_16PL & MG54_17PL & MG54_18PL) /* Продолжает список аргументов, полей или выражение MG54_15PL & MG54_16PL & MG54_17PL & MG54_18PL); порядок элементов сохраняется. */ // End of MG54: // Beginning of MG55: +/* Условие компиляции (G51PL >= G55PL) или (G51PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G51PL >= G55PL) || (G51PL == 0) +/* Задаёт MG55_11PL = ~(1); данные MG55_11PL. */ #define MG55_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG55_11PL = 0xFFFF; данные MG55_11PL. */ #define MG55_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G52PL >= G55PL) или (G52PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G52PL >= G55PL) || (G52PL == 0) +/* Задаёт MG55_12PL = ~(1 << 1); данные MG55_12PL. */ #define MG55_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG55_12PL = 0xFFFF; данные MG55_12PL. */ #define MG55_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G53PL >= G55PL) или (G53PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G53PL >= G55PL) || (G53PL == 0) +/* Задаёт MG55_13PL = ~(1 << 2); данные MG55_13PL. */ #define MG55_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG55_13PL = 0xFFFF; данные MG55_13PL. */ #define MG55_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G54PL >= G55PL) или (G54PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G54PL >= G55PL) || (G54PL == 0) +/* Задаёт MG55_14PL = ~(1 << 3); данные MG55_14PL. */ #define MG55_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG55_14PL = 0xFFFF; данные MG55_14PL. */ #define MG55_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G56PL >= G55PL) или (G56PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G56PL >= G55PL) || (G56PL == 0) +/* Задаёт MG55_16PL = ~(1 << 5); данные MG55_16PL. */ #define MG55_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG55_16PL = 0xFFFF; данные MG55_16PL. */ #define MG55_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G57PL >= G55PL) или (G57PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G57PL >= G55PL) || (G57PL == 0) +/* Задаёт MG55_17PL = ~(1 << 6); данные MG55_17PL. */ #define MG55_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG55_17PL = 0xFFFF; данные MG55_17PL. */ #define MG55_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G58PL >= G55PL) или (G58PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G58PL >= G55PL) || (G58PL == 0) +/* Задаёт MG55_18PL = ~(1 << 7); данные MG55_18PL. */ #define MG55_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG55_18PL = 0xFFFF; данные MG55_18PL. */ #define MG55_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG55_15PL = 0x00EF; данные MG55_15PL. */ #define MG55_15PL 0x00EF +/* Задаёт MG55 = (MG55_11PL & MG55_12PL & MG55_13PL & MG55_14PL &; маска разрешённых прерываний внутри группы PIE 55. */ #define MG55 (MG55_11PL & MG55_12PL & MG55_13PL & MG55_14PL & \ - MG55_15PL & MG55_16PL & MG55_17PL & MG55_18PL) + MG55_15PL & MG55_16PL & MG55_17PL & MG55_18PL) /* Продолжает список аргументов, полей или выражение MG55_15PL & MG55_16PL & MG55_17PL & MG55_18PL); порядок элементов сохраняется. */ // End of MG55: // Beginning of MG56: +/* Условие компиляции (G51PL >= G56PL) или (G51PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G51PL >= G56PL) || (G51PL == 0) +/* Задаёт MG56_11PL = ~(1); данные MG56_11PL. */ #define MG56_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG56_11PL = 0xFFFF; данные MG56_11PL. */ #define MG56_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G52PL >= G56PL) или (G52PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G52PL >= G56PL) || (G52PL == 0) +/* Задаёт MG56_12PL = ~(1 << 1); данные MG56_12PL. */ #define MG56_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG56_12PL = 0xFFFF; данные MG56_12PL. */ #define MG56_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G53PL >= G56PL) или (G53PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G53PL >= G56PL) || (G53PL == 0) +/* Задаёт MG56_13PL = ~(1 << 2); данные MG56_13PL. */ #define MG56_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG56_13PL = 0xFFFF; данные MG56_13PL. */ #define MG56_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G54PL >= G56PL) или (G54PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G54PL >= G56PL) || (G54PL == 0) +/* Задаёт MG56_14PL = ~(1 << 3); данные MG56_14PL. */ #define MG56_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG56_14PL = 0xFFFF; данные MG56_14PL. */ #define MG56_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G55PL >= G56PL) или (G55PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G55PL >= G56PL) || (G55PL == 0) +/* Задаёт MG56_15PL = ~(1 << 4); данные MG56_15PL. */ #define MG56_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG56_15PL = 0xFFFF; данные MG56_15PL. */ #define MG56_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G57PL >= G56PL) или (G57PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G57PL >= G56PL) || (G57PL == 0) +/* Задаёт MG56_17PL = ~(1 << 6); данные MG56_17PL. */ #define MG56_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG56_17PL = 0xFFFF; данные MG56_17PL. */ #define MG56_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G58PL >= G56PL) или (G58PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G58PL >= G56PL) || (G58PL == 0) +/* Задаёт MG56_18PL = ~(1 << 7); данные MG56_18PL. */ #define MG56_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG56_18PL = 0xFFFF; данные MG56_18PL. */ #define MG56_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG56_16PL = 0x00DF; данные MG56_16PL. */ #define MG56_16PL 0x00DF +/* Задаёт MG56 = (MG56_11PL & MG56_12PL & MG56_13PL & MG56_14PL &; маска разрешённых прерываний внутри группы PIE 56. */ #define MG56 (MG56_11PL & MG56_12PL & MG56_13PL & MG56_14PL & \ - MG56_15PL & MG56_16PL & MG56_17PL & MG56_18PL) + MG56_15PL & MG56_16PL & MG56_17PL & MG56_18PL) /* Продолжает список аргументов, полей или выражение MG56_15PL & MG56_16PL & MG56_17PL & MG56_18PL); порядок элементов сохраняется. */ // End of MG56: // Beginning of MG57: +/* Условие компиляции (G51PL >= G57PL) или (G51PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G51PL >= G57PL) || (G51PL == 0) +/* Задаёт MG57_11PL = ~(1); данные MG57_11PL. */ #define MG57_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG57_11PL = 0xFFFF; данные MG57_11PL. */ #define MG57_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G52PL >= G57PL) или (G52PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G52PL >= G57PL) || (G52PL == 0) +/* Задаёт MG57_12PL = ~(1 << 1); данные MG57_12PL. */ #define MG57_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG57_12PL = 0xFFFF; данные MG57_12PL. */ #define MG57_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G53PL >= G57PL) или (G53PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G53PL >= G57PL) || (G53PL == 0) +/* Задаёт MG57_13PL = ~(1 << 2); данные MG57_13PL. */ #define MG57_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG57_13PL = 0xFFFF; данные MG57_13PL. */ #define MG57_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G54PL >= G57PL) или (G54PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G54PL >= G57PL) || (G54PL == 0) +/* Задаёт MG57_14PL = ~(1 << 3); данные MG57_14PL. */ #define MG57_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG57_14PL = 0xFFFF; данные MG57_14PL. */ #define MG57_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G55PL >= G57PL) или (G55PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G55PL >= G57PL) || (G55PL == 0) +/* Задаёт MG57_15PL = ~(1 << 4); данные MG57_15PL. */ #define MG57_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG57_15PL = 0xFFFF; данные MG57_15PL. */ #define MG57_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G56PL >= G57PL) или (G56PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G56PL >= G57PL) || (G56PL == 0) +/* Задаёт MG57_16PL = ~(1 << 5); данные MG57_16PL. */ #define MG57_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG57_16PL = 0xFFFF; данные MG57_16PL. */ #define MG57_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G58PL >= G57PL) или (G58PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G58PL >= G57PL) || (G58PL == 0) +/* Задаёт MG57_18PL = ~(1 << 7); данные MG57_18PL. */ #define MG57_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG57_18PL = 0xFFFF; данные MG57_18PL. */ #define MG57_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG57_17PL = 0x00BF; данные MG57_17PL. */ #define MG57_17PL 0x00BF +/* Задаёт MG57 = (MG57_11PL & MG57_12PL & MG57_13PL & MG57_14PL &; маска разрешённых прерываний внутри группы PIE 57. */ #define MG57 (MG57_11PL & MG57_12PL & MG57_13PL & MG57_14PL & \ - MG57_15PL & MG57_16PL & MG57_17PL & MG57_18PL) + MG57_15PL & MG57_16PL & MG57_17PL & MG57_18PL) /* Продолжает список аргументов, полей или выражение MG57_15PL & MG57_16PL & MG57_17PL & MG57_18PL); порядок элементов сохраняется. */ // End of MG57: // Beginning of MG58: +/* Условие компиляции (G51PL >= G58PL) или (G51PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G51PL >= G58PL) || (G51PL == 0) +/* Задаёт MG58_11PL = ~(1); данные MG58_11PL. */ #define MG58_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG58_11PL = 0xFFFF; данные MG58_11PL. */ #define MG58_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G52PL >= G58PL) или (G52PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G52PL >= G58PL) || (G52PL == 0) +/* Задаёт MG58_12PL = ~(1 << 1); данные MG58_12PL. */ #define MG58_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG58_12PL = 0xFFFF; данные MG58_12PL. */ #define MG58_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G53PL >= G58PL) или (G53PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G53PL >= G58PL) || (G53PL == 0) +/* Задаёт MG58_13PL = ~(1 << 2); данные MG58_13PL. */ #define MG58_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG58_13PL = 0xFFFF; данные MG58_13PL. */ #define MG58_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G54PL >= G58PL) или (G54PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G54PL >= G58PL) || (G54PL == 0) +/* Задаёт MG58_14PL = ~(1 << 3); данные MG58_14PL. */ #define MG58_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG58_14PL = 0xFFFF; данные MG58_14PL. */ #define MG58_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G55PL >= G58PL) или (G55PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G55PL >= G58PL) || (G55PL == 0) +/* Задаёт MG58_15PL = ~(1 << 4); данные MG58_15PL. */ #define MG58_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG58_15PL = 0xFFFF; данные MG58_15PL. */ #define MG58_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G56PL >= G58PL) или (G56PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G56PL >= G58PL) || (G56PL == 0) +/* Задаёт MG58_16PL = ~(1 << 5); данные MG58_16PL. */ #define MG58_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG58_16PL = 0xFFFF; данные MG58_16PL. */ #define MG58_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G57PL >= G58PL) или (G57PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G57PL >= G58PL) || (G57PL == 0) +/* Задаёт MG58_17PL = ~(1 << 6); данные MG58_17PL. */ #define MG58_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG58_17PL = 0xFFFF; данные MG58_17PL. */ #define MG58_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG58_18PL = 0x007F; данные MG58_18PL. */ #define MG58_18PL 0x007F +/* Задаёт MG58 = (MG58_11PL & MG58_12PL & MG58_13PL & MG58_14PL &; маска разрешённых прерываний внутри группы PIE 58. */ #define MG58 (MG58_11PL & MG58_12PL & MG58_13PL & MG58_14PL & \ - MG58_15PL & MG58_16PL & MG58_17PL & MG58_18PL) + MG58_15PL & MG58_16PL & MG58_17PL & MG58_18PL) /* Продолжает список аргументов, полей или выражение MG58_15PL & MG58_16PL & MG58_17PL & MG58_18PL); порядок элементов сохраняется. */ // End of MG58: //------------------------------------------------------------------------------- @@ -3519,331 +6397,627 @@ extern "C" { // // Beginning of MG61: +/* Условие компиляции (G62PL >= G61PL) или (G62PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G62PL >= G61PL) || (G62PL == 0) +/* Задаёт MG61_12PL = ~(1 << 1); данные MG61_12PL. */ #define MG61_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG61_12PL = 0xFFFF; данные MG61_12PL. */ #define MG61_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G63PL >= G61PL) или (G63PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G63PL >= G61PL) || (G63PL == 0) +/* Задаёт MG61_13PL = ~(1 << 2); данные MG61_13PL. */ #define MG61_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG61_13PL = 0xFFFF; данные MG61_13PL. */ #define MG61_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G64PL >= G61PL) или (G64PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G64PL >= G61PL) || (G64PL == 0) +/* Задаёт MG61_14PL = ~(1 << 3); данные MG61_14PL. */ #define MG61_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG61_14PL = 0xFFFF; данные MG61_14PL. */ #define MG61_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G65PL >= G61PL) или (G65PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G65PL >= G61PL) || (G65PL == 0) +/* Задаёт MG61_15PL = ~(1 << 4); данные MG61_15PL. */ #define MG61_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG61_15PL = 0xFFFF; данные MG61_15PL. */ #define MG61_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G66PL >= G61PL) или (G66PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G66PL >= G61PL) || (G66PL == 0) +/* Задаёт MG61_16PL = ~(1 << 5); данные MG61_16PL. */ #define MG61_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG61_16PL = 0xFFFF; данные MG61_16PL. */ #define MG61_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G67PL >= G61PL) или (G67PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G67PL >= G61PL) || (G67PL == 0) +/* Задаёт MG61_17PL = ~(1 << 6); данные MG61_17PL. */ #define MG61_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG61_17PL = 0xFFFF; данные MG61_17PL. */ #define MG61_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G68PL >= G61PL) или (G68PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G68PL >= G61PL) || (G68PL == 0) +/* Задаёт MG61_18PL = ~(1 << 7); данные MG61_18PL. */ #define MG61_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG61_18PL = 0xFFFF; данные MG61_18PL. */ #define MG61_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG61_11PL = 0x00FE; данные MG61_11PL. */ #define MG61_11PL 0x00FE +/* Задаёт MG61 = (MG61_11PL & MG61_12PL & MG61_13PL & MG61_14PL &; маска разрешённых прерываний внутри группы PIE 61. */ #define MG61 (MG61_11PL & MG61_12PL & MG61_13PL & MG61_14PL & \ - MG61_15PL & MG61_16PL & MG61_17PL & MG61_18PL) + MG61_15PL & MG61_16PL & MG61_17PL & MG61_18PL) /* Продолжает список аргументов, полей или выражение MG61_15PL & MG61_16PL & MG61_17PL & MG61_18PL); порядок элементов сохраняется. */ // End of MG61: // Beginning of MG62: +/* Условие компиляции (G61PL >= G62PL) или (G61PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G61PL >= G62PL) || (G61PL == 0) +/* Задаёт MG62_11PL = ~(1); данные MG62_11PL. */ #define MG62_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG62_11PL = 0xFFFF; данные MG62_11PL. */ #define MG62_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G63PL >= G62PL) или (G63PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G63PL >= G62PL) || (G63PL == 0) +/* Задаёт MG62_13PL = ~(1 << 2); данные MG62_13PL. */ #define MG62_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG62_13PL = 0xFFFF; данные MG62_13PL. */ #define MG62_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G64PL >= G62PL) или (G64PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G64PL >= G62PL) || (G64PL == 0) +/* Задаёт MG62_14PL = ~(1 << 3); данные MG62_14PL. */ #define MG62_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG62_14PL = 0xFFFF; данные MG62_14PL. */ #define MG62_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G65PL >= G62PL) или (G65PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G65PL >= G62PL) || (G65PL == 0) +/* Задаёт MG62_15PL = ~(1 << 4); данные MG62_15PL. */ #define MG62_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG62_15PL = 0xFFFF; данные MG62_15PL. */ #define MG62_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G66PL >= G62PL) или (G66PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G66PL >= G62PL) || (G66PL == 0) +/* Задаёт MG62_16PL = ~(1 << 5); данные MG62_16PL. */ #define MG62_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG62_16PL = 0xFFFF; данные MG62_16PL. */ #define MG62_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G67PL >= G62PL) или (G67PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G67PL >= G62PL) || (G67PL == 0) +/* Задаёт MG62_17PL = ~(1 << 6); данные MG62_17PL. */ #define MG62_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG62_17PL = 0xFFFF; данные MG62_17PL. */ #define MG62_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G68PL >= G62PL) или (G68PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G68PL >= G62PL) || (G68PL == 0) +/* Задаёт MG62_18PL = ~(1 << 7); данные MG62_18PL. */ #define MG62_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG62_18PL = 0xFFFF; данные MG62_18PL. */ #define MG62_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG62_12PL = 0x00FD; данные MG62_12PL. */ #define MG62_12PL 0x00FD +/* Задаёт MG62 = (MG62_11PL & MG62_12PL & MG62_13PL & MG62_14PL &; маска разрешённых прерываний внутри группы PIE 62. */ #define MG62 (MG62_11PL & MG62_12PL & MG62_13PL & MG62_14PL & \ - MG62_15PL & MG62_16PL & MG62_17PL & MG62_18PL) + MG62_15PL & MG62_16PL & MG62_17PL & MG62_18PL) /* Продолжает список аргументов, полей или выражение MG62_15PL & MG62_16PL & MG62_17PL & MG62_18PL); порядок элементов сохраняется. */ // End of MG62: // Beginning of MG63: +/* Условие компиляции (G61PL >= G63PL) или (G61PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G61PL >= G63PL) || (G61PL == 0) +/* Задаёт MG63_11PL = ~(1); данные MG63_11PL. */ #define MG63_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG63_11PL = 0xFFFF; данные MG63_11PL. */ #define MG63_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G62PL >= G63PL) или (G62PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G62PL >= G63PL) || (G62PL == 0) +/* Задаёт MG63_12PL = ~(1 << 1); данные MG63_12PL. */ #define MG63_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG63_12PL = 0xFFFF; данные MG63_12PL. */ #define MG63_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G64PL >= G63PL) или (G64PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G64PL >= G63PL) || (G64PL == 0) +/* Задаёт MG63_14PL = ~(1 << 3); данные MG63_14PL. */ #define MG63_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG63_14PL = 0xFFFF; данные MG63_14PL. */ #define MG63_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G65PL >= G63PL) или (G65PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G65PL >= G63PL) || (G65PL == 0) +/* Задаёт MG63_15PL = ~(1 << 4); данные MG63_15PL. */ #define MG63_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG63_15PL = 0xFFFF; данные MG63_15PL. */ #define MG63_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G66PL >= G63PL) или (G66PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G66PL >= G63PL) || (G66PL == 0) +/* Задаёт MG63_16PL = ~(1 << 5); данные MG63_16PL. */ #define MG63_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG63_16PL = 0xFFFF; данные MG63_16PL. */ #define MG63_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G67PL >= G63PL) или (G67PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G67PL >= G63PL) || (G67PL == 0) +/* Задаёт MG63_17PL = ~(1 << 6); данные MG63_17PL. */ #define MG63_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG63_17PL = 0xFFFF; данные MG63_17PL. */ #define MG63_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G68PL >= G63PL) или (G68PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G68PL >= G63PL) || (G68PL == 0) +/* Задаёт MG63_18PL = ~(1 << 7); данные MG63_18PL. */ #define MG63_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG63_18PL = 0xFFFF; данные MG63_18PL. */ #define MG63_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG63_13PL = 0x00FB; данные MG63_13PL. */ #define MG63_13PL 0x00FB +/* Задаёт MG63 = (MG63_11PL & MG63_12PL & MG63_13PL & MG63_14PL &; маска разрешённых прерываний внутри группы PIE 63. */ #define MG63 (MG63_11PL & MG63_12PL & MG63_13PL & MG63_14PL & \ - MG63_15PL & MG63_16PL & MG63_17PL & MG63_18PL) + MG63_15PL & MG63_16PL & MG63_17PL & MG63_18PL) /* Продолжает список аргументов, полей или выражение MG63_15PL & MG63_16PL & MG63_17PL & MG63_18PL); порядок элементов сохраняется. */ // End of MG63: // Beginning of MG64: +/* Условие компиляции (G61PL >= G64PL) или (G61PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G61PL >= G64PL) || (G61PL == 0) +/* Задаёт MG64_11PL = ~(1); данные MG64_11PL. */ #define MG64_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG64_11PL = 0xFFFF; данные MG64_11PL. */ #define MG64_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G62PL >= G64PL) или (G62PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G62PL >= G64PL) || (G62PL == 0) +/* Задаёт MG64_12PL = ~(1 << 1); данные MG64_12PL. */ #define MG64_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG64_12PL = 0xFFFF; данные MG64_12PL. */ #define MG64_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G63PL >= G64PL) или (G63PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G63PL >= G64PL) || (G63PL == 0) +/* Задаёт MG64_13PL = ~(1 << 2); данные MG64_13PL. */ #define MG64_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG64_13PL = 0xFFFF; данные MG64_13PL. */ #define MG64_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G65PL >= G64PL) или (G65PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G65PL >= G64PL) || (G65PL == 0) +/* Задаёт MG64_15PL = ~(1 << 4); данные MG64_15PL. */ #define MG64_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG64_15PL = 0xFFFF; данные MG64_15PL. */ #define MG64_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G66PL >= G64PL) или (G66PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G66PL >= G64PL) || (G66PL == 0) +/* Задаёт MG64_16PL = ~(1 << 5); данные MG64_16PL. */ #define MG64_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG64_16PL = 0xFFFF; данные MG64_16PL. */ #define MG64_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G67PL >= G64PL) или (G67PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G67PL >= G64PL) || (G67PL == 0) +/* Задаёт MG64_17PL = ~(1 << 6); данные MG64_17PL. */ #define MG64_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG64_17PL = 0xFFFF; данные MG64_17PL. */ #define MG64_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G68PL >= G64PL) или (G68PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G68PL >= G64PL) || (G68PL == 0) +/* Задаёт MG64_18PL = ~(1 << 7); данные MG64_18PL. */ #define MG64_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG64_18PL = 0xFFFF; данные MG64_18PL. */ #define MG64_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG64_14PL = 0x00F7; данные MG64_14PL. */ #define MG64_14PL 0x00F7 +/* Задаёт MG64 = (MG64_11PL & MG64_12PL & MG64_13PL & MG64_14PL &; маска разрешённых прерываний внутри группы PIE 64. */ #define MG64 (MG64_11PL & MG64_12PL & MG64_13PL & MG64_14PL & \ - MG64_15PL & MG64_16PL & MG64_17PL & MG64_18PL) + MG64_15PL & MG64_16PL & MG64_17PL & MG64_18PL) /* Продолжает список аргументов, полей или выражение MG64_15PL & MG64_16PL & MG64_17PL & MG64_18PL); порядок элементов сохраняется. */ // End of MG64: // Beginning of MG65: +/* Условие компиляции (G61PL >= G65PL) или (G61PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G61PL >= G65PL) || (G61PL == 0) +/* Задаёт MG65_11PL = ~(1); данные MG65_11PL. */ #define MG65_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG65_11PL = 0xFFFF; данные MG65_11PL. */ #define MG65_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G62PL >= G65PL) или (G62PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G62PL >= G65PL) || (G62PL == 0) +/* Задаёт MG65_12PL = ~(1 << 1); данные MG65_12PL. */ #define MG65_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG65_12PL = 0xFFFF; данные MG65_12PL. */ #define MG65_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G63PL >= G65PL) или (G63PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G63PL >= G65PL) || (G63PL == 0) +/* Задаёт MG65_13PL = ~(1 << 2); данные MG65_13PL. */ #define MG65_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG65_13PL = 0xFFFF; данные MG65_13PL. */ #define MG65_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G64PL >= G65PL) или (G64PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G64PL >= G65PL) || (G64PL == 0) +/* Задаёт MG65_14PL = ~(1 << 3); данные MG65_14PL. */ #define MG65_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG65_14PL = 0xFFFF; данные MG65_14PL. */ #define MG65_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G66PL >= G65PL) или (G66PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G66PL >= G65PL) || (G66PL == 0) +/* Задаёт MG65_16PL = ~(1 << 5); данные MG65_16PL. */ #define MG65_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG65_16PL = 0xFFFF; данные MG65_16PL. */ #define MG65_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G67PL >= G65PL) или (G67PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G67PL >= G65PL) || (G67PL == 0) +/* Задаёт MG65_17PL = ~(1 << 6); данные MG65_17PL. */ #define MG65_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG65_17PL = 0xFFFF; данные MG65_17PL. */ #define MG65_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G68PL >= G65PL) или (G68PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G68PL >= G65PL) || (G68PL == 0) +/* Задаёт MG65_18PL = ~(1 << 7); данные MG65_18PL. */ #define MG65_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG65_18PL = 0xFFFF; данные MG65_18PL. */ #define MG65_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG65_15PL = 0x00EF; данные MG65_15PL. */ #define MG65_15PL 0x00EF +/* Задаёт MG65 = (MG65_11PL & MG65_12PL & MG65_13PL & MG65_14PL &; маска разрешённых прерываний внутри группы PIE 65. */ #define MG65 (MG65_11PL & MG65_12PL & MG65_13PL & MG65_14PL & \ - MG65_15PL & MG65_16PL & MG65_17PL & MG65_18PL) + MG65_15PL & MG65_16PL & MG65_17PL & MG65_18PL) /* Продолжает список аргументов, полей или выражение MG65_15PL & MG65_16PL & MG65_17PL & MG65_18PL); порядок элементов сохраняется. */ // End of MG65: // Beginning of MG66: +/* Условие компиляции (G61PL >= G66PL) или (G61PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G61PL >= G66PL) || (G61PL == 0) +/* Задаёт MG66_11PL = ~(1); данные MG66_11PL. */ #define MG66_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG66_11PL = 0xFFFF; данные MG66_11PL. */ #define MG66_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G62PL >= G66PL) или (G62PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G62PL >= G66PL) || (G62PL == 0) +/* Задаёт MG66_12PL = ~(1 << 1); данные MG66_12PL. */ #define MG66_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG66_12PL = 0xFFFF; данные MG66_12PL. */ #define MG66_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G63PL >= G66PL) или (G63PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G63PL >= G66PL) || (G63PL == 0) +/* Задаёт MG66_13PL = ~(1 << 2); данные MG66_13PL. */ #define MG66_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG66_13PL = 0xFFFF; данные MG66_13PL. */ #define MG66_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G64PL >= G66PL) или (G64PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G64PL >= G66PL) || (G64PL == 0) +/* Задаёт MG66_14PL = ~(1 << 3); данные MG66_14PL. */ #define MG66_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG66_14PL = 0xFFFF; данные MG66_14PL. */ #define MG66_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G65PL >= G66PL) или (G65PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G65PL >= G66PL) || (G65PL == 0) +/* Задаёт MG66_15PL = ~(1 << 4); данные MG66_15PL. */ #define MG66_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG66_15PL = 0xFFFF; данные MG66_15PL. */ #define MG66_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G67PL >= G66PL) или (G67PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G67PL >= G66PL) || (G67PL == 0) +/* Задаёт MG66_17PL = ~(1 << 6); данные MG66_17PL. */ #define MG66_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG66_17PL = 0xFFFF; данные MG66_17PL. */ #define MG66_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G68PL >= G66PL) или (G68PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G68PL >= G66PL) || (G68PL == 0) +/* Задаёт MG66_18PL = ~(1 << 7); данные MG66_18PL. */ #define MG66_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG66_18PL = 0xFFFF; данные MG66_18PL. */ #define MG66_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG66_16PL = 0x00DF; данные MG66_16PL. */ #define MG66_16PL 0x00DF +/* Задаёт MG66 = (MG66_11PL & MG66_12PL & MG66_13PL & MG66_14PL &; маска разрешённых прерываний внутри группы PIE 66. */ #define MG66 (MG66_11PL & MG66_12PL & MG66_13PL & MG66_14PL & \ - MG66_15PL & MG66_16PL & MG66_17PL & MG66_18PL) + MG66_15PL & MG66_16PL & MG66_17PL & MG66_18PL) /* Продолжает список аргументов, полей или выражение MG66_15PL & MG66_16PL & MG66_17PL & MG66_18PL); порядок элементов сохраняется. */ // End of MG66: // Beginning of MG67: +/* Условие компиляции (G61PL >= G67PL) или (G61PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G61PL >= G67PL) || (G61PL == 0) +/* Задаёт MG67_11PL = ~(1); данные MG67_11PL. */ #define MG67_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG67_11PL = 0xFFFF; данные MG67_11PL. */ #define MG67_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G62PL >= G67PL) или (G62PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G62PL >= G67PL) || (G62PL == 0) +/* Задаёт MG67_12PL = ~(1 << 1); данные MG67_12PL. */ #define MG67_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG67_12PL = 0xFFFF; данные MG67_12PL. */ #define MG67_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G63PL >= G67PL) или (G63PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G63PL >= G67PL) || (G63PL == 0) +/* Задаёт MG67_13PL = ~(1 << 2); данные MG67_13PL. */ #define MG67_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG67_13PL = 0xFFFF; данные MG67_13PL. */ #define MG67_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G64PL >= G67PL) или (G64PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G64PL >= G67PL) || (G64PL == 0) +/* Задаёт MG67_14PL = ~(1 << 3); данные MG67_14PL. */ #define MG67_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG67_14PL = 0xFFFF; данные MG67_14PL. */ #define MG67_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G65PL >= G67PL) или (G65PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G65PL >= G67PL) || (G65PL == 0) +/* Задаёт MG67_15PL = ~(1 << 4); данные MG67_15PL. */ #define MG67_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG67_15PL = 0xFFFF; данные MG67_15PL. */ #define MG67_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G66PL >= G67PL) или (G66PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G66PL >= G67PL) || (G66PL == 0) +/* Задаёт MG67_16PL = ~(1 << 5); данные MG67_16PL. */ #define MG67_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG67_16PL = 0xFFFF; данные MG67_16PL. */ #define MG67_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G68PL >= G67PL) или (G68PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G68PL >= G67PL) || (G68PL == 0) +/* Задаёт MG67_18PL = ~(1 << 7); данные MG67_18PL. */ #define MG67_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG67_18PL = 0xFFFF; данные MG67_18PL. */ #define MG67_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG67_17PL = 0x00BF; данные MG67_17PL. */ #define MG67_17PL 0x00BF +/* Задаёт MG67 = (MG67_11PL & MG67_12PL & MG67_13PL & MG67_14PL &; маска разрешённых прерываний внутри группы PIE 67. */ #define MG67 (MG67_11PL & MG67_12PL & MG67_13PL & MG67_14PL & \ - MG67_15PL & MG67_16PL & MG67_17PL & MG67_18PL) + MG67_15PL & MG67_16PL & MG67_17PL & MG67_18PL) /* Продолжает список аргументов, полей или выражение MG67_15PL & MG67_16PL & MG67_17PL & MG67_18PL); порядок элементов сохраняется. */ // End of MG67: // Beginning of MG68: +/* Условие компиляции (G61PL >= G68PL) или (G61PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G61PL >= G68PL) || (G61PL == 0) +/* Задаёт MG68_11PL = ~(1); данные MG68_11PL. */ #define MG68_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG68_11PL = 0xFFFF; данные MG68_11PL. */ #define MG68_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G62PL >= G68PL) или (G62PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G62PL >= G68PL) || (G62PL == 0) +/* Задаёт MG68_12PL = ~(1 << 1); данные MG68_12PL. */ #define MG68_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG68_12PL = 0xFFFF; данные MG68_12PL. */ #define MG68_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G63PL >= G68PL) или (G63PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G63PL >= G68PL) || (G63PL == 0) +/* Задаёт MG68_13PL = ~(1 << 2); данные MG68_13PL. */ #define MG68_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG68_13PL = 0xFFFF; данные MG68_13PL. */ #define MG68_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G64PL >= G68PL) или (G64PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G64PL >= G68PL) || (G64PL == 0) +/* Задаёт MG68_14PL = ~(1 << 3); данные MG68_14PL. */ #define MG68_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG68_14PL = 0xFFFF; данные MG68_14PL. */ #define MG68_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G65PL >= G68PL) или (G65PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G65PL >= G68PL) || (G65PL == 0) +/* Задаёт MG68_15PL = ~(1 << 4); данные MG68_15PL. */ #define MG68_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG68_15PL = 0xFFFF; данные MG68_15PL. */ #define MG68_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G66PL >= G68PL) или (G66PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G66PL >= G68PL) || (G66PL == 0) +/* Задаёт MG68_16PL = ~(1 << 5); данные MG68_16PL. */ #define MG68_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG68_16PL = 0xFFFF; данные MG68_16PL. */ #define MG68_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G67PL >= G68PL) или (G67PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G67PL >= G68PL) || (G67PL == 0) +/* Задаёт MG68_17PL = ~(1 << 6); данные MG68_17PL. */ #define MG68_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG68_17PL = 0xFFFF; данные MG68_17PL. */ #define MG68_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG68_18PL = 0x007F; данные MG68_18PL. */ #define MG68_18PL 0x007F +/* Задаёт MG68 = (MG68_11PL & MG68_12PL & MG68_13PL & MG68_14PL &; маска разрешённых прерываний внутри группы PIE 68. */ #define MG68 (MG68_11PL & MG68_12PL & MG68_13PL & MG68_14PL & \ - MG68_15PL & MG68_16PL & MG68_17PL & MG68_18PL) + MG68_15PL & MG68_16PL & MG68_17PL & MG68_18PL) /* Продолжает список аргументов, полей или выражение MG68_15PL & MG68_16PL & MG68_17PL & MG68_18PL); порядок элементов сохраняется. */ // End of MG68: //------------------------------------------------------------------------------- @@ -3851,331 +7025,627 @@ extern "C" { // // Beginning of MG71: +/* Условие компиляции (G72PL >= G71PL) или (G72PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G72PL >= G71PL) || (G72PL == 0) +/* Задаёт MG71_12PL = ~(1 << 1); данные MG71_12PL. */ #define MG71_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG71_12PL = 0xFFFF; данные MG71_12PL. */ #define MG71_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G73PL >= G71PL) или (G73PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G73PL >= G71PL) || (G73PL == 0) +/* Задаёт MG71_13PL = ~(1 << 2); данные MG71_13PL. */ #define MG71_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG71_13PL = 0xFFFF; данные MG71_13PL. */ #define MG71_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G74PL >= G71PL) или (G74PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G74PL >= G71PL) || (G74PL == 0) +/* Задаёт MG71_14PL = ~(1 << 3); данные MG71_14PL. */ #define MG71_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG71_14PL = 0xFFFF; данные MG71_14PL. */ #define MG71_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G75PL >= G71PL) или (G75PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G75PL >= G71PL) || (G75PL == 0) +/* Задаёт MG71_15PL = ~(1 << 4); данные MG71_15PL. */ #define MG71_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG71_15PL = 0xFFFF; данные MG71_15PL. */ #define MG71_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G76PL >= G71PL) или (G76PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G76PL >= G71PL) || (G76PL == 0) +/* Задаёт MG71_16PL = ~(1 << 5); данные MG71_16PL. */ #define MG71_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG71_16PL = 0xFFFF; данные MG71_16PL. */ #define MG71_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G77PL >= G71PL) или (G77PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G77PL >= G71PL) || (G77PL == 0) +/* Задаёт MG71_17PL = ~(1 << 6); данные MG71_17PL. */ #define MG71_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG71_17PL = 0xFFFF; данные MG71_17PL. */ #define MG71_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G78PL >= G71PL) или (G78PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G78PL >= G71PL) || (G78PL == 0) +/* Задаёт MG71_18PL = ~(1 << 7); данные MG71_18PL. */ #define MG71_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG71_18PL = 0xFFFF; данные MG71_18PL. */ #define MG71_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG71_11PL = 0x00FE; данные MG71_11PL. */ #define MG71_11PL 0x00FE +/* Задаёт MG71 = (MG71_11PL & MG71_12PL & MG71_13PL & MG71_14PL &; маска разрешённых прерываний внутри группы PIE 71. */ #define MG71 (MG71_11PL & MG71_12PL & MG71_13PL & MG71_14PL & \ - MG71_15PL & MG71_16PL & MG71_17PL & MG71_18PL) + MG71_15PL & MG71_16PL & MG71_17PL & MG71_18PL) /* Продолжает список аргументов, полей или выражение MG71_15PL & MG71_16PL & MG71_17PL & MG71_18PL); порядок элементов сохраняется. */ // End of MG71: // Beginning of MG72: +/* Условие компиляции (G71PL >= G72PL) или (G71PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G71PL >= G72PL) || (G71PL == 0) +/* Задаёт MG72_11PL = ~(1); данные MG72_11PL. */ #define MG72_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG72_11PL = 0xFFFF; данные MG72_11PL. */ #define MG72_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G73PL >= G72PL) или (G73PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G73PL >= G72PL) || (G73PL == 0) +/* Задаёт MG72_13PL = ~(1 << 2); данные MG72_13PL. */ #define MG72_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG72_13PL = 0xFFFF; данные MG72_13PL. */ #define MG72_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G74PL >= G72PL) или (G74PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G74PL >= G72PL) || (G74PL == 0) +/* Задаёт MG72_14PL = ~(1 << 3); данные MG72_14PL. */ #define MG72_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG72_14PL = 0xFFFF; данные MG72_14PL. */ #define MG72_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G75PL >= G72PL) или (G75PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G75PL >= G72PL) || (G75PL == 0) +/* Задаёт MG72_15PL = ~(1 << 4); данные MG72_15PL. */ #define MG72_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG72_15PL = 0xFFFF; данные MG72_15PL. */ #define MG72_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G76PL >= G72PL) или (G76PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G76PL >= G72PL) || (G76PL == 0) +/* Задаёт MG72_16PL = ~(1 << 5); данные MG72_16PL. */ #define MG72_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG72_16PL = 0xFFFF; данные MG72_16PL. */ #define MG72_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G77PL >= G72PL) или (G77PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G77PL >= G72PL) || (G77PL == 0) +/* Задаёт MG72_17PL = ~(1 << 6); данные MG72_17PL. */ #define MG72_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG72_17PL = 0xFFFF; данные MG72_17PL. */ #define MG72_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G78PL >= G72PL) или (G78PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G78PL >= G72PL) || (G78PL == 0) +/* Задаёт MG72_18PL = ~(1 << 7); данные MG72_18PL. */ #define MG72_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG72_18PL = 0xFFFF; данные MG72_18PL. */ #define MG72_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG72_12PL = 0x00FD; данные MG72_12PL. */ #define MG72_12PL 0x00FD +/* Задаёт MG72 = (MG72_11PL & MG72_12PL & MG72_13PL & MG72_14PL &; маска разрешённых прерываний внутри группы PIE 72. */ #define MG72 (MG72_11PL & MG72_12PL & MG72_13PL & MG72_14PL & \ - MG72_15PL & MG72_16PL & MG72_17PL & MG72_18PL) + MG72_15PL & MG72_16PL & MG72_17PL & MG72_18PL) /* Продолжает список аргументов, полей или выражение MG72_15PL & MG72_16PL & MG72_17PL & MG72_18PL); порядок элементов сохраняется. */ // End of MG72: // Beginning of MG73: +/* Условие компиляции (G71PL >= G73PL) или (G71PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G71PL >= G73PL) || (G71PL == 0) +/* Задаёт MG73_11PL = ~(1); данные MG73_11PL. */ #define MG73_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG73_11PL = 0xFFFF; данные MG73_11PL. */ #define MG73_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G72PL >= G73PL) или (G72PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G72PL >= G73PL) || (G72PL == 0) +/* Задаёт MG73_12PL = ~(1 << 1); данные MG73_12PL. */ #define MG73_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG73_12PL = 0xFFFF; данные MG73_12PL. */ #define MG73_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G74PL >= G73PL) или (G74PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G74PL >= G73PL) || (G74PL == 0) +/* Задаёт MG73_14PL = ~(1 << 3); данные MG73_14PL. */ #define MG73_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG73_14PL = 0xFFFF; данные MG73_14PL. */ #define MG73_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G75PL >= G73PL) или (G75PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G75PL >= G73PL) || (G75PL == 0) +/* Задаёт MG73_15PL = ~(1 << 4); данные MG73_15PL. */ #define MG73_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG73_15PL = 0xFFFF; данные MG73_15PL. */ #define MG73_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G76PL >= G73PL) или (G76PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G76PL >= G73PL) || (G76PL == 0) +/* Задаёт MG73_16PL = ~(1 << 5); данные MG73_16PL. */ #define MG73_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG73_16PL = 0xFFFF; данные MG73_16PL. */ #define MG73_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G77PL >= G73PL) или (G77PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G77PL >= G73PL) || (G77PL == 0) +/* Задаёт MG73_17PL = ~(1 << 6); данные MG73_17PL. */ #define MG73_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG73_17PL = 0xFFFF; данные MG73_17PL. */ #define MG73_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G78PL >= G73PL) или (G78PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G78PL >= G73PL) || (G78PL == 0) +/* Задаёт MG73_18PL = ~(1 << 7); данные MG73_18PL. */ #define MG73_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG73_18PL = 0xFFFF; данные MG73_18PL. */ #define MG73_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG73_13PL = 0x00FB; данные MG73_13PL. */ #define MG73_13PL 0x00FB +/* Задаёт MG73 = (MG73_11PL & MG73_12PL & MG73_13PL & MG73_14PL &; маска разрешённых прерываний внутри группы PIE 73. */ #define MG73 (MG73_11PL & MG73_12PL & MG73_13PL & MG73_14PL & \ - MG73_15PL & MG73_16PL & MG73_17PL & MG73_18PL) + MG73_15PL & MG73_16PL & MG73_17PL & MG73_18PL) /* Продолжает список аргументов, полей или выражение MG73_15PL & MG73_16PL & MG73_17PL & MG73_18PL); порядок элементов сохраняется. */ // End of MG73: // Beginning of MG74: +/* Условие компиляции (G71PL >= G74PL) или (G71PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G71PL >= G74PL) || (G71PL == 0) +/* Задаёт MG74_11PL = ~(1); данные MG74_11PL. */ #define MG74_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG74_11PL = 0xFFFF; данные MG74_11PL. */ #define MG74_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G72PL >= G74PL) или (G72PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G72PL >= G74PL) || (G72PL == 0) +/* Задаёт MG74_12PL = ~(1 << 1); данные MG74_12PL. */ #define MG74_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG74_12PL = 0xFFFF; данные MG74_12PL. */ #define MG74_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G73PL >= G74PL) или (G73PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G73PL >= G74PL) || (G73PL == 0) +/* Задаёт MG74_13PL = ~(1 << 2); данные MG74_13PL. */ #define MG74_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG74_13PL = 0xFFFF; данные MG74_13PL. */ #define MG74_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G75PL >= G74PL) или (G75PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G75PL >= G74PL) || (G75PL == 0) +/* Задаёт MG74_15PL = ~(1 << 4); данные MG74_15PL. */ #define MG74_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG74_15PL = 0xFFFF; данные MG74_15PL. */ #define MG74_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G76PL >= G74PL) или (G76PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G76PL >= G74PL) || (G76PL == 0) +/* Задаёт MG74_16PL = ~(1 << 5); данные MG74_16PL. */ #define MG74_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG74_16PL = 0xFFFF; данные MG74_16PL. */ #define MG74_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G77PL >= G74PL) или (G77PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G77PL >= G74PL) || (G77PL == 0) +/* Задаёт MG74_17PL = ~(1 << 6); данные MG74_17PL. */ #define MG74_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG74_17PL = 0xFFFF; данные MG74_17PL. */ #define MG74_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G78PL >= G74PL) или (G78PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G78PL >= G74PL) || (G78PL == 0) +/* Задаёт MG74_18PL = ~(1 << 7); данные MG74_18PL. */ #define MG74_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG74_18PL = 0xFFFF; данные MG74_18PL. */ #define MG74_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG74_14PL = 0x00F7; данные MG74_14PL. */ #define MG74_14PL 0x00F7 +/* Задаёт MG74 = (MG74_11PL & MG74_12PL & MG74_13PL & MG74_14PL &; маска разрешённых прерываний внутри группы PIE 74. */ #define MG74 (MG74_11PL & MG74_12PL & MG74_13PL & MG74_14PL & \ - MG74_15PL & MG74_16PL & MG74_17PL & MG74_18PL) + MG74_15PL & MG74_16PL & MG74_17PL & MG74_18PL) /* Продолжает список аргументов, полей или выражение MG74_15PL & MG74_16PL & MG74_17PL & MG74_18PL); порядок элементов сохраняется. */ // End of MG74: // Beginning of MG75: +/* Условие компиляции (G71PL >= G75PL) или (G71PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G71PL >= G75PL) || (G71PL == 0) +/* Задаёт MG75_11PL = ~(1); данные MG75_11PL. */ #define MG75_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG75_11PL = 0xFFFF; данные MG75_11PL. */ #define MG75_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G72PL >= G75PL) или (G72PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G72PL >= G75PL) || (G72PL == 0) +/* Задаёт MG75_12PL = ~(1 << 1); данные MG75_12PL. */ #define MG75_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG75_12PL = 0xFFFF; данные MG75_12PL. */ #define MG75_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G73PL >= G75PL) или (G73PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G73PL >= G75PL) || (G73PL == 0) +/* Задаёт MG75_13PL = ~(1 << 2); данные MG75_13PL. */ #define MG75_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG75_13PL = 0xFFFF; данные MG75_13PL. */ #define MG75_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G74PL >= G75PL) или (G74PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G74PL >= G75PL) || (G74PL == 0) +/* Задаёт MG75_14PL = ~(1 << 3); данные MG75_14PL. */ #define MG75_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG75_14PL = 0xFFFF; данные MG75_14PL. */ #define MG75_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G76PL >= G75PL) или (G76PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G76PL >= G75PL) || (G76PL == 0) +/* Задаёт MG75_16PL = ~(1 << 5); данные MG75_16PL. */ #define MG75_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG75_16PL = 0xFFFF; данные MG75_16PL. */ #define MG75_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G77PL >= G75PL) или (G77PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G77PL >= G75PL) || (G77PL == 0) +/* Задаёт MG75_17PL = ~(1 << 6); данные MG75_17PL. */ #define MG75_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG75_17PL = 0xFFFF; данные MG75_17PL. */ #define MG75_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G78PL >= G75PL) или (G78PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G78PL >= G75PL) || (G78PL == 0) +/* Задаёт MG75_18PL = ~(1 << 7); данные MG75_18PL. */ #define MG75_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG75_18PL = 0xFFFF; данные MG75_18PL. */ #define MG75_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG75_15PL = 0x00EF; данные MG75_15PL. */ #define MG75_15PL 0x00EF +/* Задаёт MG75 = (MG75_11PL & MG75_12PL & MG75_13PL & MG75_14PL &; маска разрешённых прерываний внутри группы PIE 75. */ #define MG75 (MG75_11PL & MG75_12PL & MG75_13PL & MG75_14PL & \ - MG75_15PL & MG75_16PL & MG75_17PL & MG75_18PL) + MG75_15PL & MG75_16PL & MG75_17PL & MG75_18PL) /* Продолжает список аргументов, полей или выражение MG75_15PL & MG75_16PL & MG75_17PL & MG75_18PL); порядок элементов сохраняется. */ // End of MG75: // Beginning of MG76: +/* Условие компиляции (G71PL >= G76PL) или (G71PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G71PL >= G76PL) || (G71PL == 0) +/* Задаёт MG76_11PL = ~(1); данные MG76_11PL. */ #define MG76_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG76_11PL = 0xFFFF; данные MG76_11PL. */ #define MG76_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G72PL >= G76PL) или (G72PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G72PL >= G76PL) || (G72PL == 0) +/* Задаёт MG76_12PL = ~(1 << 1); данные MG76_12PL. */ #define MG76_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG76_12PL = 0xFFFF; данные MG76_12PL. */ #define MG76_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G73PL >= G76PL) или (G73PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G73PL >= G76PL) || (G73PL == 0) +/* Задаёт MG76_13PL = ~(1 << 2); данные MG76_13PL. */ #define MG76_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG76_13PL = 0xFFFF; данные MG76_13PL. */ #define MG76_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G74PL >= G76PL) или (G74PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G74PL >= G76PL) || (G74PL == 0) +/* Задаёт MG76_14PL = ~(1 << 3); данные MG76_14PL. */ #define MG76_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG76_14PL = 0xFFFF; данные MG76_14PL. */ #define MG76_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G75PL >= G76PL) или (G75PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G75PL >= G76PL) || (G75PL == 0) +/* Задаёт MG76_15PL = ~(1 << 4); данные MG76_15PL. */ #define MG76_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG76_15PL = 0xFFFF; данные MG76_15PL. */ #define MG76_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G77PL >= G76PL) или (G77PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G77PL >= G76PL) || (G77PL == 0) +/* Задаёт MG76_17PL = ~(1 << 6); данные MG76_17PL. */ #define MG76_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG76_17PL = 0xFFFF; данные MG76_17PL. */ #define MG76_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G78PL >= G76PL) или (G78PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G78PL >= G76PL) || (G78PL == 0) +/* Задаёт MG76_18PL = ~(1 << 7); данные MG76_18PL. */ #define MG76_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG76_18PL = 0xFFFF; данные MG76_18PL. */ #define MG76_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG76_16PL = 0x00DF; данные MG76_16PL. */ #define MG76_16PL 0x00DF +/* Задаёт MG76 = (MG76_11PL & MG76_12PL & MG76_13PL & MG76_14PL &; маска разрешённых прерываний внутри группы PIE 76. */ #define MG76 (MG76_11PL & MG76_12PL & MG76_13PL & MG76_14PL & \ - MG76_15PL & MG76_16PL & MG76_17PL & MG76_18PL) + MG76_15PL & MG76_16PL & MG76_17PL & MG76_18PL) /* Продолжает список аргументов, полей или выражение MG76_15PL & MG76_16PL & MG76_17PL & MG76_18PL); порядок элементов сохраняется. */ // End of MG76: // Beginning of MG77: +/* Условие компиляции (G71PL >= G77PL) или (G71PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G71PL >= G77PL) || (G71PL == 0) +/* Задаёт MG77_11PL = ~(1); данные MG77_11PL. */ #define MG77_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG77_11PL = 0xFFFF; данные MG77_11PL. */ #define MG77_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G72PL >= G77PL) или (G72PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G72PL >= G77PL) || (G72PL == 0) +/* Задаёт MG77_12PL = ~(1 << 1); данные MG77_12PL. */ #define MG77_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG77_12PL = 0xFFFF; данные MG77_12PL. */ #define MG77_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G73PL >= G77PL) или (G73PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G73PL >= G77PL) || (G73PL == 0) +/* Задаёт MG77_13PL = ~(1 << 2); данные MG77_13PL. */ #define MG77_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG77_13PL = 0xFFFF; данные MG77_13PL. */ #define MG77_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G74PL >= G77PL) или (G74PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G74PL >= G77PL) || (G74PL == 0) +/* Задаёт MG77_14PL = ~(1 << 3); данные MG77_14PL. */ #define MG77_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG77_14PL = 0xFFFF; данные MG77_14PL. */ #define MG77_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G75PL >= G77PL) или (G75PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G75PL >= G77PL) || (G75PL == 0) +/* Задаёт MG77_15PL = ~(1 << 4); данные MG77_15PL. */ #define MG77_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG77_15PL = 0xFFFF; данные MG77_15PL. */ #define MG77_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G76PL >= G77PL) или (G76PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G76PL >= G77PL) || (G76PL == 0) +/* Задаёт MG77_16PL = ~(1 << 5); данные MG77_16PL. */ #define MG77_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG77_16PL = 0xFFFF; данные MG77_16PL. */ #define MG77_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G78PL >= G77PL) или (G78PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G78PL >= G77PL) || (G78PL == 0) +/* Задаёт MG77_18PL = ~(1 << 7); данные MG77_18PL. */ #define MG77_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG77_18PL = 0xFFFF; данные MG77_18PL. */ #define MG77_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG77_17PL = 0x00BF; данные MG77_17PL. */ #define MG77_17PL 0x00BF +/* Задаёт MG77 = (MG77_11PL & MG77_12PL & MG77_13PL & MG77_14PL &; маска разрешённых прерываний внутри группы PIE 77. */ #define MG77 (MG77_11PL & MG77_12PL & MG77_13PL & MG77_14PL & \ - MG77_15PL & MG77_16PL & MG77_17PL & MG77_18PL) + MG77_15PL & MG77_16PL & MG77_17PL & MG77_18PL) /* Продолжает список аргументов, полей или выражение MG77_15PL & MG77_16PL & MG77_17PL & MG77_18PL); порядок элементов сохраняется. */ // End of MG77: // Beginning of MG78: +/* Условие компиляции (G71PL >= G78PL) или (G71PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G71PL >= G78PL) || (G71PL == 0) +/* Задаёт MG78_11PL = ~(1); данные MG78_11PL. */ #define MG78_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG78_11PL = 0xFFFF; данные MG78_11PL. */ #define MG78_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G72PL >= G78PL) или (G72PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G72PL >= G78PL) || (G72PL == 0) +/* Задаёт MG78_12PL = ~(1 << 1); данные MG78_12PL. */ #define MG78_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG78_12PL = 0xFFFF; данные MG78_12PL. */ #define MG78_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G73PL >= G78PL) или (G73PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G73PL >= G78PL) || (G73PL == 0) +/* Задаёт MG78_13PL = ~(1 << 2); данные MG78_13PL. */ #define MG78_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG78_13PL = 0xFFFF; данные MG78_13PL. */ #define MG78_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G74PL >= G78PL) или (G74PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G74PL >= G78PL) || (G74PL == 0) +/* Задаёт MG78_14PL = ~(1 << 3); данные MG78_14PL. */ #define MG78_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG78_14PL = 0xFFFF; данные MG78_14PL. */ #define MG78_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G75PL >= G78PL) или (G75PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G75PL >= G78PL) || (G75PL == 0) +/* Задаёт MG78_15PL = ~(1 << 4); данные MG78_15PL. */ #define MG78_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG78_15PL = 0xFFFF; данные MG78_15PL. */ #define MG78_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G76PL >= G78PL) или (G76PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G76PL >= G78PL) || (G76PL == 0) +/* Задаёт MG78_16PL = ~(1 << 5); данные MG78_16PL. */ #define MG78_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG78_16PL = 0xFFFF; данные MG78_16PL. */ #define MG78_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G77PL >= G78PL) или (G77PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G77PL >= G78PL) || (G77PL == 0) +/* Задаёт MG78_17PL = ~(1 << 6); данные MG78_17PL. */ #define MG78_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG78_17PL = 0xFFFF; данные MG78_17PL. */ #define MG78_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG78_18PL = 0x007F; данные MG78_18PL. */ #define MG78_18PL 0x007F +/* Задаёт MG78 = (MG78_11PL & MG78_12PL & MG78_13PL & MG78_14PL &; маска разрешённых прерываний внутри группы PIE 78. */ #define MG78 (MG78_11PL & MG78_12PL & MG78_13PL & MG78_14PL & \ - MG78_15PL & MG78_16PL & MG78_17PL & MG78_18PL) + MG78_15PL & MG78_16PL & MG78_17PL & MG78_18PL) /* Продолжает список аргументов, полей или выражение MG78_15PL & MG78_16PL & MG78_17PL & MG78_18PL); порядок элементов сохраняется. */ // End of MG78: //------------------------------------------------------------------------------- @@ -4183,331 +7653,627 @@ extern "C" { // // Beginning of MG81: +/* Условие компиляции (G82PL >= G81PL) или (G82PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL >= G81PL) || (G82PL == 0) +/* Задаёт MG81_12PL = ~(1 << 1); данные MG81_12PL. */ #define MG81_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG81_12PL = 0xFFFF; данные MG81_12PL. */ #define MG81_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G83PL >= G81PL) или (G83PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G83PL >= G81PL) || (G83PL == 0) +/* Задаёт MG81_13PL = ~(1 << 2); данные MG81_13PL. */ #define MG81_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG81_13PL = 0xFFFF; данные MG81_13PL. */ #define MG81_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G84PL >= G81PL) или (G84PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G84PL >= G81PL) || (G84PL == 0) +/* Задаёт MG81_14PL = ~(1 << 3); данные MG81_14PL. */ #define MG81_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG81_14PL = 0xFFFF; данные MG81_14PL. */ #define MG81_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G85PL >= G81PL) или (G85PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G85PL >= G81PL) || (G85PL == 0) +/* Задаёт MG81_15PL = ~(1 << 4); данные MG81_15PL. */ #define MG81_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG81_15PL = 0xFFFF; данные MG81_15PL. */ #define MG81_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G86PL >= G81PL) или (G86PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G86PL >= G81PL) || (G86PL == 0) +/* Задаёт MG81_16PL = ~(1 << 5); данные MG81_16PL. */ #define MG81_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG81_16PL = 0xFFFF; данные MG81_16PL. */ #define MG81_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G87PL >= G81PL) или (G87PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G87PL >= G81PL) || (G87PL == 0) +/* Задаёт MG81_17PL = ~(1 << 6); данные MG81_17PL. */ #define MG81_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG81_17PL = 0xFFFF; данные MG81_17PL. */ #define MG81_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G88PL >= G81PL) или (G88PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G88PL >= G81PL) || (G88PL == 0) +/* Задаёт MG81_18PL = ~(1 << 7); данные MG81_18PL. */ #define MG81_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG81_18PL = 0xFFFF; данные MG81_18PL. */ #define MG81_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG81_11PL = 0x00FE; данные MG81_11PL. */ #define MG81_11PL 0x00FE +/* Задаёт MG81 = (MG81_11PL & MG81_12PL & MG81_13PL & MG81_14PL &; маска разрешённых прерываний внутри группы PIE 81. */ #define MG81 (MG81_11PL & MG81_12PL & MG81_13PL & MG81_14PL & \ - MG81_15PL & MG81_16PL & MG81_17PL & MG81_18PL) + MG81_15PL & MG81_16PL & MG81_17PL & MG81_18PL) /* Продолжает список аргументов, полей или выражение MG81_15PL & MG81_16PL & MG81_17PL & MG81_18PL); порядок элементов сохраняется. */ // End of MG81: // Beginning of MG82: +/* Условие компиляции (G81PL >= G82PL) или (G81PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G81PL >= G82PL) || (G81PL == 0) +/* Задаёт MG82_11PL = ~(1); данные MG82_11PL. */ #define MG82_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG82_11PL = 0xFFFF; данные MG82_11PL. */ #define MG82_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G83PL >= G82PL) или (G83PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G83PL >= G82PL) || (G83PL == 0) +/* Задаёт MG82_13PL = ~(1 << 2); данные MG82_13PL. */ #define MG82_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG82_13PL = 0xFFFF; данные MG82_13PL. */ #define MG82_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G84PL >= G82PL) или (G84PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G84PL >= G82PL) || (G84PL == 0) +/* Задаёт MG82_14PL = ~(1 << 3); данные MG82_14PL. */ #define MG82_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG82_14PL = 0xFFFF; данные MG82_14PL. */ #define MG82_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G85PL >= G82PL) или (G85PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G85PL >= G82PL) || (G85PL == 0) +/* Задаёт MG82_15PL = ~(1 << 4); данные MG82_15PL. */ #define MG82_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG82_15PL = 0xFFFF; данные MG82_15PL. */ #define MG82_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G86PL >= G82PL) или (G86PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G86PL >= G82PL) || (G86PL == 0) +/* Задаёт MG82_16PL = ~(1 << 5); данные MG82_16PL. */ #define MG82_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG82_16PL = 0xFFFF; данные MG82_16PL. */ #define MG82_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G87PL >= G82PL) или (G87PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G87PL >= G82PL) || (G87PL == 0) +/* Задаёт MG82_17PL = ~(1 << 6); данные MG82_17PL. */ #define MG82_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG82_17PL = 0xFFFF; данные MG82_17PL. */ #define MG82_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G88PL >= G82PL) или (G88PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G88PL >= G82PL) || (G88PL == 0) +/* Задаёт MG82_18PL = ~(1 << 7); данные MG82_18PL. */ #define MG82_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG82_18PL = 0xFFFF; данные MG82_18PL. */ #define MG82_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG82_12PL = 0x00FD; данные MG82_12PL. */ #define MG82_12PL 0x00FD +/* Задаёт MG82 = (MG82_11PL & MG82_12PL & MG82_13PL & MG82_14PL &; маска разрешённых прерываний внутри группы PIE 82. */ #define MG82 (MG82_11PL & MG82_12PL & MG82_13PL & MG82_14PL & \ - MG82_15PL & MG82_16PL & MG82_17PL & MG82_18PL) + MG82_15PL & MG82_16PL & MG82_17PL & MG82_18PL) /* Продолжает список аргументов, полей или выражение MG82_15PL & MG82_16PL & MG82_17PL & MG82_18PL); порядок элементов сохраняется. */ // End of MG82: // Beginning of MG83: +/* Условие компиляции (G81PL >= G83PL) или (G81PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G81PL >= G83PL) || (G81PL == 0) +/* Задаёт MG83_11PL = ~(1); данные MG83_11PL. */ #define MG83_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG83_11PL = 0xFFFF; данные MG83_11PL. */ #define MG83_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G82PL >= G83PL) или (G82PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL >= G83PL) || (G82PL == 0) +/* Задаёт MG83_12PL = ~(1 << 1); данные MG83_12PL. */ #define MG83_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG83_12PL = 0xFFFF; данные MG83_12PL. */ #define MG83_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G84PL >= G83PL) или (G84PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G84PL >= G83PL) || (G84PL == 0) +/* Задаёт MG83_14PL = ~(1 << 3); данные MG83_14PL. */ #define MG83_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG83_14PL = 0xFFFF; данные MG83_14PL. */ #define MG83_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G85PL >= G83PL) или (G85PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G85PL >= G83PL) || (G85PL == 0) +/* Задаёт MG83_15PL = ~(1 << 4); данные MG83_15PL. */ #define MG83_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG83_15PL = 0xFFFF; данные MG83_15PL. */ #define MG83_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G86PL >= G83PL) или (G86PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G86PL >= G83PL) || (G86PL == 0) +/* Задаёт MG83_16PL = ~(1 << 5); данные MG83_16PL. */ #define MG83_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG83_16PL = 0xFFFF; данные MG83_16PL. */ #define MG83_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G87PL >= G83PL) или (G87PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G87PL >= G83PL) || (G87PL == 0) +/* Задаёт MG83_17PL = ~(1 << 6); данные MG83_17PL. */ #define MG83_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG83_17PL = 0xFFFF; данные MG83_17PL. */ #define MG83_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G88PL >= G83PL) или (G88PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G88PL >= G83PL) || (G88PL == 0) +/* Задаёт MG83_18PL = ~(1 << 7); данные MG83_18PL. */ #define MG83_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG83_18PL = 0xFFFF; данные MG83_18PL. */ #define MG83_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG83_13PL = 0x00FB; данные MG83_13PL. */ #define MG83_13PL 0x00FB +/* Задаёт MG83 = (MG83_11PL & MG83_12PL & MG83_13PL & MG83_14PL &; маска разрешённых прерываний внутри группы PIE 83. */ #define MG83 (MG83_11PL & MG83_12PL & MG83_13PL & MG83_14PL & \ - MG83_15PL & MG83_16PL & MG83_17PL & MG83_18PL) + MG83_15PL & MG83_16PL & MG83_17PL & MG83_18PL) /* Продолжает список аргументов, полей или выражение MG83_15PL & MG83_16PL & MG83_17PL & MG83_18PL); порядок элементов сохраняется. */ // End of MG83: // Beginning of MG84: +/* Условие компиляции (G81PL >= G84PL) или (G81PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G81PL >= G84PL) || (G81PL == 0) +/* Задаёт MG84_11PL = ~(1); данные MG84_11PL. */ #define MG84_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG84_11PL = 0xFFFF; данные MG84_11PL. */ #define MG84_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G82PL >= G84PL) или (G82PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL >= G84PL) || (G82PL == 0) +/* Задаёт MG84_12PL = ~(1 << 1); данные MG84_12PL. */ #define MG84_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG84_12PL = 0xFFFF; данные MG84_12PL. */ #define MG84_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G83PL >= G84PL) или (G83PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G83PL >= G84PL) || (G83PL == 0) +/* Задаёт MG84_13PL = ~(1 << 2); данные MG84_13PL. */ #define MG84_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG84_13PL = 0xFFFF; данные MG84_13PL. */ #define MG84_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G85PL >= G84PL) или (G85PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G85PL >= G84PL) || (G85PL == 0) +/* Задаёт MG84_15PL = ~(1 << 4); данные MG84_15PL. */ #define MG84_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG84_15PL = 0xFFFF; данные MG84_15PL. */ #define MG84_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G86PL >= G84PL) или (G86PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G86PL >= G84PL) || (G86PL == 0) +/* Задаёт MG84_16PL = ~(1 << 5); данные MG84_16PL. */ #define MG84_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG84_16PL = 0xFFFF; данные MG84_16PL. */ #define MG84_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G87PL >= G84PL) или (G87PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G87PL >= G84PL) || (G87PL == 0) +/* Задаёт MG84_17PL = ~(1 << 6); данные MG84_17PL. */ #define MG84_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG84_17PL = 0xFFFF; данные MG84_17PL. */ #define MG84_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G88PL >= G84PL) или (G88PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G88PL >= G84PL) || (G88PL == 0) +/* Задаёт MG84_18PL = ~(1 << 7); данные MG84_18PL. */ #define MG84_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG84_18PL = 0xFFFF; данные MG84_18PL. */ #define MG84_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG84_14PL = 0x00F7; данные MG84_14PL. */ #define MG84_14PL 0x00F7 +/* Задаёт MG84 = (MG84_11PL & MG84_12PL & MG84_13PL & MG84_14PL &; маска разрешённых прерываний внутри группы PIE 84. */ #define MG84 (MG84_11PL & MG84_12PL & MG84_13PL & MG84_14PL & \ - MG84_15PL & MG84_16PL & MG84_17PL & MG84_18PL) + MG84_15PL & MG84_16PL & MG84_17PL & MG84_18PL) /* Продолжает список аргументов, полей или выражение MG84_15PL & MG84_16PL & MG84_17PL & MG84_18PL); порядок элементов сохраняется. */ // End of MG84: // Beginning of MG85: +/* Условие компиляции (G81PL >= G85PL) или (G81PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G81PL >= G85PL) || (G81PL == 0) +/* Задаёт MG85_11PL = ~(1); данные MG85_11PL. */ #define MG85_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG85_11PL = 0xFFFF; данные MG85_11PL. */ #define MG85_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G82PL >= G85PL) или (G82PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL >= G85PL) || (G82PL == 0) +/* Задаёт MG85_12PL = ~(1 << 1); данные MG85_12PL. */ #define MG85_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG85_12PL = 0xFFFF; данные MG85_12PL. */ #define MG85_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G83PL >= G85PL) или (G83PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G83PL >= G85PL) || (G83PL == 0) +/* Задаёт MG85_13PL = ~(1 << 2); данные MG85_13PL. */ #define MG85_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG85_13PL = 0xFFFF; данные MG85_13PL. */ #define MG85_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G84PL >= G85PL) или (G84PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G84PL >= G85PL) || (G84PL == 0) +/* Задаёт MG85_14PL = ~(1 << 3); данные MG85_14PL. */ #define MG85_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG85_14PL = 0xFFFF; данные MG85_14PL. */ #define MG85_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G86PL >= G85PL) или (G86PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G86PL >= G85PL) || (G86PL == 0) +/* Задаёт MG85_16PL = ~(1 << 5); данные MG85_16PL. */ #define MG85_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG85_16PL = 0xFFFF; данные MG85_16PL. */ #define MG85_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G87PL >= G85PL) или (G87PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G87PL >= G85PL) || (G87PL == 0) +/* Задаёт MG85_17PL = ~(1 << 6); данные MG85_17PL. */ #define MG85_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG85_17PL = 0xFFFF; данные MG85_17PL. */ #define MG85_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G88PL >= G85PL) или (G88PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G88PL >= G85PL) || (G88PL == 0) +/* Задаёт MG85_18PL = ~(1 << 7); данные MG85_18PL. */ #define MG85_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG85_18PL = 0xFFFF; данные MG85_18PL. */ #define MG85_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG85_15PL = 0x00EF; данные MG85_15PL. */ #define MG85_15PL 0x00EF +/* Задаёт MG85 = (MG85_11PL & MG85_12PL & MG85_13PL & MG85_14PL &; маска разрешённых прерываний внутри группы PIE 85. */ #define MG85 (MG85_11PL & MG85_12PL & MG85_13PL & MG85_14PL & \ - MG85_15PL & MG85_16PL & MG85_17PL & MG85_18PL) + MG85_15PL & MG85_16PL & MG85_17PL & MG85_18PL) /* Продолжает список аргументов, полей или выражение MG85_15PL & MG85_16PL & MG85_17PL & MG85_18PL); порядок элементов сохраняется. */ // End of MG85: // Beginning of MG86: +/* Условие компиляции (G81PL >= G86PL) или (G81PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G81PL >= G86PL) || (G81PL == 0) +/* Задаёт MG86_11PL = ~(1); данные MG86_11PL. */ #define MG86_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG86_11PL = 0xFFFF; данные MG86_11PL. */ #define MG86_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G82PL >= G86PL) или (G82PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL >= G86PL) || (G82PL == 0) +/* Задаёт MG86_12PL = ~(1 << 1); данные MG86_12PL. */ #define MG86_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG86_12PL = 0xFFFF; данные MG86_12PL. */ #define MG86_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G83PL >= G86PL) или (G83PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G83PL >= G86PL) || (G83PL == 0) +/* Задаёт MG86_13PL = ~(1 << 2); данные MG86_13PL. */ #define MG86_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG86_13PL = 0xFFFF; данные MG86_13PL. */ #define MG86_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G84PL >= G86PL) или (G84PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G84PL >= G86PL) || (G84PL == 0) +/* Задаёт MG86_14PL = ~(1 << 3); данные MG86_14PL. */ #define MG86_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG86_14PL = 0xFFFF; данные MG86_14PL. */ #define MG86_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G85PL >= G86PL) или (G85PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G85PL >= G86PL) || (G85PL == 0) +/* Задаёт MG86_15PL = ~(1 << 4); данные MG86_15PL. */ #define MG86_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG86_15PL = 0xFFFF; данные MG86_15PL. */ #define MG86_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G87PL >= G86PL) или (G87PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G87PL >= G86PL) || (G87PL == 0) +/* Задаёт MG86_17PL = ~(1 << 6); данные MG86_17PL. */ #define MG86_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG86_17PL = 0xFFFF; данные MG86_17PL. */ #define MG86_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G88PL >= G86PL) или (G88PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G88PL >= G86PL) || (G88PL == 0) +/* Задаёт MG86_18PL = ~(1 << 7); данные MG86_18PL. */ #define MG86_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG86_18PL = 0xFFFF; данные MG86_18PL. */ #define MG86_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG86_16PL = 0x00DF; данные MG86_16PL. */ #define MG86_16PL 0x00DF +/* Задаёт MG86 = (MG86_11PL & MG86_12PL & MG86_13PL & MG86_14PL &; маска разрешённых прерываний внутри группы PIE 86. */ #define MG86 (MG86_11PL & MG86_12PL & MG86_13PL & MG86_14PL & \ - MG86_15PL & MG86_16PL & MG86_17PL & MG86_18PL) + MG86_15PL & MG86_16PL & MG86_17PL & MG86_18PL) /* Продолжает список аргументов, полей или выражение MG86_15PL & MG86_16PL & MG86_17PL & MG86_18PL); порядок элементов сохраняется. */ // End of MG86: // Beginning of MG87: +/* Условие компиляции (G81PL >= G87PL) или (G81PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G81PL >= G87PL) || (G81PL == 0) +/* Задаёт MG87_11PL = ~(1); данные MG87_11PL. */ #define MG87_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG87_11PL = 0xFFFF; данные MG87_11PL. */ #define MG87_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G82PL >= G87PL) или (G82PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL >= G87PL) || (G82PL == 0) +/* Задаёт MG87_12PL = ~(1 << 1); данные MG87_12PL. */ #define MG87_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG87_12PL = 0xFFFF; данные MG87_12PL. */ #define MG87_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G83PL >= G87PL) или (G83PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G83PL >= G87PL) || (G83PL == 0) +/* Задаёт MG87_13PL = ~(1 << 2); данные MG87_13PL. */ #define MG87_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG87_13PL = 0xFFFF; данные MG87_13PL. */ #define MG87_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G84PL >= G87PL) или (G84PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G84PL >= G87PL) || (G84PL == 0) +/* Задаёт MG87_14PL = ~(1 << 3); данные MG87_14PL. */ #define MG87_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG87_14PL = 0xFFFF; данные MG87_14PL. */ #define MG87_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G85PL >= G87PL) или (G85PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G85PL >= G87PL) || (G85PL == 0) +/* Задаёт MG87_15PL = ~(1 << 4); данные MG87_15PL. */ #define MG87_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG87_15PL = 0xFFFF; данные MG87_15PL. */ #define MG87_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G86PL >= G87PL) или (G86PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G86PL >= G87PL) || (G86PL == 0) +/* Задаёт MG87_16PL = ~(1 << 5); данные MG87_16PL. */ #define MG87_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG87_16PL = 0xFFFF; данные MG87_16PL. */ #define MG87_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G88PL >= G87PL) или (G88PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G88PL >= G87PL) || (G88PL == 0) +/* Задаёт MG87_18PL = ~(1 << 7); данные MG87_18PL. */ #define MG87_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG87_18PL = 0xFFFF; данные MG87_18PL. */ #define MG87_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG87_17PL = 0x00BF; данные MG87_17PL. */ #define MG87_17PL 0x00BF +/* Задаёт MG87 = (MG87_11PL & MG87_12PL & MG87_13PL & MG87_14PL &; маска разрешённых прерываний внутри группы PIE 87. */ #define MG87 (MG87_11PL & MG87_12PL & MG87_13PL & MG87_14PL & \ - MG87_15PL & MG87_16PL & MG87_17PL & MG87_18PL) + MG87_15PL & MG87_16PL & MG87_17PL & MG87_18PL) /* Продолжает список аргументов, полей или выражение MG87_15PL & MG87_16PL & MG87_17PL & MG87_18PL); порядок элементов сохраняется. */ // End of MG87: // Beginning of MG88: +/* Условие компиляции (G81PL >= G88PL) или (G81PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G81PL >= G88PL) || (G81PL == 0) +/* Задаёт MG88_11PL = ~(1); данные MG88_11PL. */ #define MG88_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG88_11PL = 0xFFFF; данные MG88_11PL. */ #define MG88_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G82PL >= G88PL) или (G82PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL >= G88PL) || (G82PL == 0) +/* Задаёт MG88_12PL = ~(1 << 1); данные MG88_12PL. */ #define MG88_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG88_12PL = 0xFFFF; данные MG88_12PL. */ #define MG88_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G83PL >= G88PL) или (G83PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G83PL >= G88PL) || (G83PL == 0) +/* Задаёт MG88_13PL = ~(1 << 2); данные MG88_13PL. */ #define MG88_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG88_13PL = 0xFFFF; данные MG88_13PL. */ #define MG88_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G84PL >= G88PL) или (G84PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G84PL >= G88PL) || (G84PL == 0) +/* Задаёт MG88_14PL = ~(1 << 3); данные MG88_14PL. */ #define MG88_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG88_14PL = 0xFFFF; данные MG88_14PL. */ #define MG88_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G85PL >= G88PL) или (G85PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G85PL >= G88PL) || (G85PL == 0) +/* Задаёт MG88_15PL = ~(1 << 4); данные MG88_15PL. */ #define MG88_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG88_15PL = 0xFFFF; данные MG88_15PL. */ #define MG88_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G86PL >= G88PL) или (G86PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G86PL >= G88PL) || (G86PL == 0) +/* Задаёт MG88_16PL = ~(1 << 5); данные MG88_16PL. */ #define MG88_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG88_16PL = 0xFFFF; данные MG88_16PL. */ #define MG88_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G87PL >= G88PL) или (G87PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G87PL >= G88PL) || (G87PL == 0) +/* Задаёт MG88_17PL = ~(1 << 6); данные MG88_17PL. */ #define MG88_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG88_17PL = 0xFFFF; данные MG88_17PL. */ #define MG88_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG88_18PL = 0x007F; данные MG88_18PL. */ #define MG88_18PL 0x007F +/* Задаёт MG88 = (MG88_11PL & MG88_12PL & MG88_13PL & MG88_14PL &; маска разрешённых прерываний внутри группы PIE 88. */ #define MG88 (MG88_11PL & MG88_12PL & MG88_13PL & MG88_14PL & \ - MG88_15PL & MG88_16PL & MG88_17PL & MG88_18PL) + MG88_15PL & MG88_16PL & MG88_17PL & MG88_18PL) /* Продолжает список аргументов, полей или выражение MG88_15PL & MG88_16PL & MG88_17PL & MG88_18PL); порядок элементов сохраняется. */ // End of MG88: //------------------------------------------------------------------------------- @@ -4515,331 +8281,627 @@ extern "C" { // // Beginning of MG91: +/* Условие компиляции (G92PL >= G91PL) или (G92PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G92PL >= G91PL) || (G92PL == 0) +/* Задаёт MG91_12PL = ~(1 << 1); данные MG91_12PL. */ #define MG91_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG91_12PL = 0xFFFF; данные MG91_12PL. */ #define MG91_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G93PL >= G91PL) или (G93PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G93PL >= G91PL) || (G93PL == 0) +/* Задаёт MG91_13PL = ~(1 << 2); данные MG91_13PL. */ #define MG91_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG91_13PL = 0xFFFF; данные MG91_13PL. */ #define MG91_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G94PL >= G91PL) или (G94PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G94PL >= G91PL) || (G94PL == 0) +/* Задаёт MG91_14PL = ~(1 << 3); данные MG91_14PL. */ #define MG91_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG91_14PL = 0xFFFF; данные MG91_14PL. */ #define MG91_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G95PL >= G91PL) или (G95PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G95PL >= G91PL) || (G95PL == 0) +/* Задаёт MG91_15PL = ~(1 << 4); данные MG91_15PL. */ #define MG91_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG91_15PL = 0xFFFF; данные MG91_15PL. */ #define MG91_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G96PL >= G91PL) или (G96PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G96PL >= G91PL) || (G96PL == 0) +/* Задаёт MG91_16PL = ~(1 << 5); данные MG91_16PL. */ #define MG91_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG91_16PL = 0xFFFF; данные MG91_16PL. */ #define MG91_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G97PL >= G91PL) или (G97PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G97PL >= G91PL) || (G97PL == 0) +/* Задаёт MG91_17PL = ~(1 << 6); данные MG91_17PL. */ #define MG91_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG91_17PL = 0xFFFF; данные MG91_17PL. */ #define MG91_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G98PL >= G91PL) или (G98PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G98PL >= G91PL) || (G98PL == 0) +/* Задаёт MG91_18PL = ~(1 << 7); данные MG91_18PL. */ #define MG91_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG91_18PL = 0xFFFF; данные MG91_18PL. */ #define MG91_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG91_11PL = 0x00FE; данные MG91_11PL. */ #define MG91_11PL 0x00FE +/* Задаёт MG91 = (MG91_11PL & MG91_12PL & MG91_13PL & MG91_14PL &; маска разрешённых прерываний внутри группы PIE 91. */ #define MG91 (MG91_11PL & MG91_12PL & MG91_13PL & MG91_14PL & \ - MG91_15PL & MG91_16PL & MG91_17PL & MG91_18PL) + MG91_15PL & MG91_16PL & MG91_17PL & MG91_18PL) /* Продолжает список аргументов, полей или выражение MG91_15PL & MG91_16PL & MG91_17PL & MG91_18PL); порядок элементов сохраняется. */ // End of MG91: // Beginning of MG92: +/* Условие компиляции (G91PL >= G92PL) или (G91PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G91PL >= G92PL) || (G91PL == 0) +/* Задаёт MG92_11PL = ~(1); данные MG92_11PL. */ #define MG92_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG92_11PL = 0xFFFF; данные MG92_11PL. */ #define MG92_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G93PL >= G92PL) или (G93PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G93PL >= G92PL) || (G93PL == 0) +/* Задаёт MG92_13PL = ~(1 << 2); данные MG92_13PL. */ #define MG92_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG92_13PL = 0xFFFF; данные MG92_13PL. */ #define MG92_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G94PL >= G92PL) или (G94PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G94PL >= G92PL) || (G94PL == 0) +/* Задаёт MG92_14PL = ~(1 << 3); данные MG92_14PL. */ #define MG92_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG92_14PL = 0xFFFF; данные MG92_14PL. */ #define MG92_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G95PL >= G92PL) или (G95PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G95PL >= G92PL) || (G95PL == 0) +/* Задаёт MG92_15PL = ~(1 << 4); данные MG92_15PL. */ #define MG92_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG92_15PL = 0xFFFF; данные MG92_15PL. */ #define MG92_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G96PL >= G92PL) или (G96PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G96PL >= G92PL) || (G96PL == 0) +/* Задаёт MG92_16PL = ~(1 << 5); данные MG92_16PL. */ #define MG92_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG92_16PL = 0xFFFF; данные MG92_16PL. */ #define MG92_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G97PL >= G92PL) или (G97PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G97PL >= G92PL) || (G97PL == 0) +/* Задаёт MG92_17PL = ~(1 << 6); данные MG92_17PL. */ #define MG92_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG92_17PL = 0xFFFF; данные MG92_17PL. */ #define MG92_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G98PL >= G92PL) или (G98PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G98PL >= G92PL) || (G98PL == 0) +/* Задаёт MG92_18PL = ~(1 << 7); данные MG92_18PL. */ #define MG92_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG92_18PL = 0xFFFF; данные MG92_18PL. */ #define MG92_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG92_12PL = 0x00FD; данные MG92_12PL. */ #define MG92_12PL 0x00FD +/* Задаёт MG92 = (MG92_11PL & MG92_12PL & MG92_13PL & MG92_14PL &; маска разрешённых прерываний внутри группы PIE 92. */ #define MG92 (MG92_11PL & MG92_12PL & MG92_13PL & MG92_14PL & \ - MG92_15PL & MG92_16PL & MG92_17PL & MG92_18PL) + MG92_15PL & MG92_16PL & MG92_17PL & MG92_18PL) /* Продолжает список аргументов, полей или выражение MG92_15PL & MG92_16PL & MG92_17PL & MG92_18PL); порядок элементов сохраняется. */ // End of MG92: // Beginning of MG93: +/* Условие компиляции (G91PL >= G93PL) или (G91PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G91PL >= G93PL) || (G91PL == 0) +/* Задаёт MG93_11PL = ~(1); данные MG93_11PL. */ #define MG93_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG93_11PL = 0xFFFF; данные MG93_11PL. */ #define MG93_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G92PL >= G93PL) или (G92PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G92PL >= G93PL) || (G92PL == 0) +/* Задаёт MG93_12PL = ~(1 << 1); данные MG93_12PL. */ #define MG93_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG93_12PL = 0xFFFF; данные MG93_12PL. */ #define MG93_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G94PL >= G93PL) или (G94PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G94PL >= G93PL) || (G94PL == 0) +/* Задаёт MG93_14PL = ~(1 << 3); данные MG93_14PL. */ #define MG93_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG93_14PL = 0xFFFF; данные MG93_14PL. */ #define MG93_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G95PL >= G93PL) или (G95PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G95PL >= G93PL) || (G95PL == 0) +/* Задаёт MG93_15PL = ~(1 << 4); данные MG93_15PL. */ #define MG93_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG93_15PL = 0xFFFF; данные MG93_15PL. */ #define MG93_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G96PL >= G93PL) или (G96PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G96PL >= G93PL) || (G96PL == 0) +/* Задаёт MG93_16PL = ~(1 << 5); данные MG93_16PL. */ #define MG93_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG93_16PL = 0xFFFF; данные MG93_16PL. */ #define MG93_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G97PL >= G93PL) или (G97PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G97PL >= G93PL) || (G97PL == 0) +/* Задаёт MG93_17PL = ~(1 << 6); данные MG93_17PL. */ #define MG93_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG93_17PL = 0xFFFF; данные MG93_17PL. */ #define MG93_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G98PL >= G93PL) или (G98PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G98PL >= G93PL) || (G98PL == 0) +/* Задаёт MG93_18PL = ~(1 << 7); данные MG93_18PL. */ #define MG93_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG93_18PL = 0xFFFF; данные MG93_18PL. */ #define MG93_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG93_13PL = 0x00FB; данные MG93_13PL. */ #define MG93_13PL 0x00FB +/* Задаёт MG93 = (MG93_11PL & MG93_12PL & MG93_13PL & MG93_14PL &; маска разрешённых прерываний внутри группы PIE 93. */ #define MG93 (MG93_11PL & MG93_12PL & MG93_13PL & MG93_14PL & \ - MG93_15PL & MG93_16PL & MG93_17PL & MG93_18PL) + MG93_15PL & MG93_16PL & MG93_17PL & MG93_18PL) /* Продолжает список аргументов, полей или выражение MG93_15PL & MG93_16PL & MG93_17PL & MG93_18PL); порядок элементов сохраняется. */ // End of MG93: // Beginning of MG94: +/* Условие компиляции (G91PL >= G94PL) или (G91PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G91PL >= G94PL) || (G91PL == 0) +/* Задаёт MG94_11PL = ~(1); данные MG94_11PL. */ #define MG94_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG94_11PL = 0xFFFF; данные MG94_11PL. */ #define MG94_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G92PL >= G94PL) или (G92PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G92PL >= G94PL) || (G92PL == 0) +/* Задаёт MG94_12PL = ~(1 << 1); данные MG94_12PL. */ #define MG94_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG94_12PL = 0xFFFF; данные MG94_12PL. */ #define MG94_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G93PL >= G94PL) или (G93PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G93PL >= G94PL) || (G93PL == 0) +/* Задаёт MG94_13PL = ~(1 << 2); данные MG94_13PL. */ #define MG94_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG94_13PL = 0xFFFF; данные MG94_13PL. */ #define MG94_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G95PL >= G94PL) или (G95PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G95PL >= G94PL) || (G95PL == 0) +/* Задаёт MG94_15PL = ~(1 << 4); данные MG94_15PL. */ #define MG94_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG94_15PL = 0xFFFF; данные MG94_15PL. */ #define MG94_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G96PL >= G94PL) или (G96PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G96PL >= G94PL) || (G96PL == 0) +/* Задаёт MG94_16PL = ~(1 << 5); данные MG94_16PL. */ #define MG94_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG94_16PL = 0xFFFF; данные MG94_16PL. */ #define MG94_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G97PL >= G94PL) или (G97PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G97PL >= G94PL) || (G97PL == 0) +/* Задаёт MG94_17PL = ~(1 << 6); данные MG94_17PL. */ #define MG94_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG94_17PL = 0xFFFF; данные MG94_17PL. */ #define MG94_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G98PL >= G94PL) или (G98PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G98PL >= G94PL) || (G98PL == 0) +/* Задаёт MG94_18PL = ~(1 << 7); данные MG94_18PL. */ #define MG94_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG94_18PL = 0xFFFF; данные MG94_18PL. */ #define MG94_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG94_14PL = 0x00F7; данные MG94_14PL. */ #define MG94_14PL 0x00F7 +/* Задаёт MG94 = (MG94_11PL & MG94_12PL & MG94_13PL & MG94_14PL &; маска разрешённых прерываний внутри группы PIE 94. */ #define MG94 (MG94_11PL & MG94_12PL & MG94_13PL & MG94_14PL & \ - MG94_15PL & MG94_16PL & MG94_17PL & MG94_18PL) + MG94_15PL & MG94_16PL & MG94_17PL & MG94_18PL) /* Продолжает список аргументов, полей или выражение MG94_15PL & MG94_16PL & MG94_17PL & MG94_18PL); порядок элементов сохраняется. */ // End of MG94: // Beginning of MG95: +/* Условие компиляции (G91PL >= G95PL) или (G91PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G91PL >= G95PL) || (G91PL == 0) +/* Задаёт MG95_11PL = ~(1); данные MG95_11PL. */ #define MG95_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG95_11PL = 0xFFFF; данные MG95_11PL. */ #define MG95_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G92PL >= G95PL) или (G92PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G92PL >= G95PL) || (G92PL == 0) +/* Задаёт MG95_12PL = ~(1 << 1); данные MG95_12PL. */ #define MG95_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG95_12PL = 0xFFFF; данные MG95_12PL. */ #define MG95_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G93PL >= G95PL) или (G93PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G93PL >= G95PL) || (G93PL == 0) +/* Задаёт MG95_13PL = ~(1 << 2); данные MG95_13PL. */ #define MG95_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG95_13PL = 0xFFFF; данные MG95_13PL. */ #define MG95_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G94PL >= G95PL) или (G94PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G94PL >= G95PL) || (G94PL == 0) +/* Задаёт MG95_14PL = ~(1 << 3); данные MG95_14PL. */ #define MG95_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG95_14PL = 0xFFFF; данные MG95_14PL. */ #define MG95_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G96PL >= G95PL) или (G96PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G96PL >= G95PL) || (G96PL == 0) +/* Задаёт MG95_16PL = ~(1 << 5); данные MG95_16PL. */ #define MG95_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG95_16PL = 0xFFFF; данные MG95_16PL. */ #define MG95_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G97PL >= G95PL) или (G97PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G97PL >= G95PL) || (G97PL == 0) +/* Задаёт MG95_17PL = ~(1 << 6); данные MG95_17PL. */ #define MG95_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG95_17PL = 0xFFFF; данные MG95_17PL. */ #define MG95_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G98PL >= G95PL) или (G98PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G98PL >= G95PL) || (G98PL == 0) +/* Задаёт MG95_18PL = ~(1 << 7); данные MG95_18PL. */ #define MG95_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG95_18PL = 0xFFFF; данные MG95_18PL. */ #define MG95_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG95_15PL = 0x00EF; данные MG95_15PL. */ #define MG95_15PL 0x00EF +/* Задаёт MG95 = (MG95_11PL & MG95_12PL & MG95_13PL & MG95_14PL &; маска разрешённых прерываний внутри группы PIE 95. */ #define MG95 (MG95_11PL & MG95_12PL & MG95_13PL & MG95_14PL & \ - MG95_15PL & MG95_16PL & MG95_17PL & MG95_18PL) + MG95_15PL & MG95_16PL & MG95_17PL & MG95_18PL) /* Продолжает список аргументов, полей или выражение MG95_15PL & MG95_16PL & MG95_17PL & MG95_18PL); порядок элементов сохраняется. */ // End of MG95: // Beginning of MG96: +/* Условие компиляции (G91PL >= G96PL) или (G91PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G91PL >= G96PL) || (G91PL == 0) +/* Задаёт MG96_11PL = ~(1); данные MG96_11PL. */ #define MG96_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG96_11PL = 0xFFFF; данные MG96_11PL. */ #define MG96_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G92PL >= G96PL) или (G92PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G92PL >= G96PL) || (G92PL == 0) +/* Задаёт MG96_12PL = ~(1 << 1); данные MG96_12PL. */ #define MG96_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG96_12PL = 0xFFFF; данные MG96_12PL. */ #define MG96_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G93PL >= G96PL) или (G93PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G93PL >= G96PL) || (G93PL == 0) +/* Задаёт MG96_13PL = ~(1 << 2); данные MG96_13PL. */ #define MG96_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG96_13PL = 0xFFFF; данные MG96_13PL. */ #define MG96_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G94PL >= G96PL) или (G94PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G94PL >= G96PL) || (G94PL == 0) +/* Задаёт MG96_14PL = ~(1 << 3); данные MG96_14PL. */ #define MG96_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG96_14PL = 0xFFFF; данные MG96_14PL. */ #define MG96_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G95PL >= G96PL) или (G95PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G95PL >= G96PL) || (G95PL == 0) +/* Задаёт MG96_15PL = ~(1 << 4); данные MG96_15PL. */ #define MG96_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG96_15PL = 0xFFFF; данные MG96_15PL. */ #define MG96_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G97PL >= G96PL) или (G97PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G97PL >= G96PL) || (G97PL == 0) +/* Задаёт MG96_17PL = ~(1 << 6); данные MG96_17PL. */ #define MG96_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG96_17PL = 0xFFFF; данные MG96_17PL. */ #define MG96_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G98PL >= G96PL) или (G98PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G98PL >= G96PL) || (G98PL == 0) +/* Задаёт MG96_18PL = ~(1 << 7); данные MG96_18PL. */ #define MG96_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG96_18PL = 0xFFFF; данные MG96_18PL. */ #define MG96_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG96_16PL = 0x00DF; данные MG96_16PL. */ #define MG96_16PL 0x00DF +/* Задаёт MG96 = (MG96_11PL & MG96_12PL & MG96_13PL & MG96_14PL &; маска разрешённых прерываний внутри группы PIE 96. */ #define MG96 (MG96_11PL & MG96_12PL & MG96_13PL & MG96_14PL & \ - MG96_15PL & MG96_16PL & MG96_17PL & MG96_18PL) + MG96_15PL & MG96_16PL & MG96_17PL & MG96_18PL) /* Продолжает список аргументов, полей или выражение MG96_15PL & MG96_16PL & MG96_17PL & MG96_18PL); порядок элементов сохраняется. */ // End of MG96: // Beginning of MG97: +/* Условие компиляции (G91PL >= G97PL) или (G91PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G91PL >= G97PL) || (G91PL == 0) +/* Задаёт MG97_11PL = ~(1); данные MG97_11PL. */ #define MG97_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG97_11PL = 0xFFFF; данные MG97_11PL. */ #define MG97_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G92PL >= G97PL) или (G92PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G92PL >= G97PL) || (G92PL == 0) +/* Задаёт MG97_12PL = ~(1 << 1); данные MG97_12PL. */ #define MG97_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG97_12PL = 0xFFFF; данные MG97_12PL. */ #define MG97_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G93PL >= G97PL) или (G93PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G93PL >= G97PL) || (G93PL == 0) +/* Задаёт MG97_13PL = ~(1 << 2); данные MG97_13PL. */ #define MG97_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG97_13PL = 0xFFFF; данные MG97_13PL. */ #define MG97_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G94PL >= G97PL) или (G94PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G94PL >= G97PL) || (G94PL == 0) +/* Задаёт MG97_14PL = ~(1 << 3); данные MG97_14PL. */ #define MG97_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG97_14PL = 0xFFFF; данные MG97_14PL. */ #define MG97_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G95PL >= G97PL) или (G95PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G95PL >= G97PL) || (G95PL == 0) +/* Задаёт MG97_15PL = ~(1 << 4); данные MG97_15PL. */ #define MG97_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG97_15PL = 0xFFFF; данные MG97_15PL. */ #define MG97_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G96PL >= G97PL) или (G96PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G96PL >= G97PL) || (G96PL == 0) +/* Задаёт MG97_16PL = ~(1 << 5); данные MG97_16PL. */ #define MG97_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG97_16PL = 0xFFFF; данные MG97_16PL. */ #define MG97_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G98PL >= G97PL) или (G98PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G98PL >= G97PL) || (G98PL == 0) +/* Задаёт MG97_18PL = ~(1 << 7); данные MG97_18PL. */ #define MG97_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG97_18PL = 0xFFFF; данные MG97_18PL. */ #define MG97_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG97_17PL = 0x00BF; данные MG97_17PL. */ #define MG97_17PL 0x00BF +/* Задаёт MG97 = (MG97_11PL & MG97_12PL & MG97_13PL & MG97_14PL &; маска разрешённых прерываний внутри группы PIE 97. */ #define MG97 (MG97_11PL & MG97_12PL & MG97_13PL & MG97_14PL & \ - MG97_15PL & MG97_16PL & MG97_17PL & MG97_18PL) + MG97_15PL & MG97_16PL & MG97_17PL & MG97_18PL) /* Продолжает список аргументов, полей или выражение MG97_15PL & MG97_16PL & MG97_17PL & MG97_18PL); порядок элементов сохраняется. */ // End of MG97: // Beginning of MG98: +/* Условие компиляции (G91PL >= G98PL) или (G91PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G91PL >= G98PL) || (G91PL == 0) +/* Задаёт MG98_11PL = ~(1); данные MG98_11PL. */ #define MG98_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG98_11PL = 0xFFFF; данные MG98_11PL. */ #define MG98_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G92PL >= G98PL) или (G92PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G92PL >= G98PL) || (G92PL == 0) +/* Задаёт MG98_12PL = ~(1 << 1); данные MG98_12PL. */ #define MG98_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG98_12PL = 0xFFFF; данные MG98_12PL. */ #define MG98_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G93PL >= G98PL) или (G93PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G93PL >= G98PL) || (G93PL == 0) +/* Задаёт MG98_13PL = ~(1 << 2); данные MG98_13PL. */ #define MG98_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG98_13PL = 0xFFFF; данные MG98_13PL. */ #define MG98_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G94PL >= G98PL) или (G94PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G94PL >= G98PL) || (G94PL == 0) +/* Задаёт MG98_14PL = ~(1 << 3); данные MG98_14PL. */ #define MG98_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG98_14PL = 0xFFFF; данные MG98_14PL. */ #define MG98_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G95PL >= G98PL) или (G95PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G95PL >= G98PL) || (G95PL == 0) +/* Задаёт MG98_15PL = ~(1 << 4); данные MG98_15PL. */ #define MG98_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG98_15PL = 0xFFFF; данные MG98_15PL. */ #define MG98_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G96PL >= G98PL) или (G96PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G96PL >= G98PL) || (G96PL == 0) +/* Задаёт MG98_16PL = ~(1 << 5); данные MG98_16PL. */ #define MG98_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG98_16PL = 0xFFFF; данные MG98_16PL. */ #define MG98_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G97PL >= G98PL) или (G97PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G97PL >= G98PL) || (G97PL == 0) +/* Задаёт MG98_17PL = ~(1 << 6); данные MG98_17PL. */ #define MG98_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG98_17PL = 0xFFFF; данные MG98_17PL. */ #define MG98_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG98_18PL = 0x007F; данные MG98_18PL. */ #define MG98_18PL 0x007F +/* Задаёт MG98 = (MG98_11PL & MG98_12PL & MG98_13PL & MG98_14PL &; маска разрешённых прерываний внутри группы PIE 98. */ #define MG98 (MG98_11PL & MG98_12PL & MG98_13PL & MG98_14PL & \ - MG98_15PL & MG98_16PL & MG98_17PL & MG98_18PL) + MG98_15PL & MG98_16PL & MG98_17PL & MG98_18PL) /* Продолжает список аргументов, полей или выражение MG98_15PL & MG98_16PL & MG98_17PL & MG98_18PL); порядок элементов сохраняется. */ // End of MG98: //------------------------------------------------------------------------------- @@ -4847,331 +8909,627 @@ extern "C" { // // Beginning of MG101: +/* Условие компиляции (G102PL >= G101PL) или (G102PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G102PL >= G101PL) || (G102PL == 0) +/* Задаёт MG101_12PL = ~(1 << 1); данные MG101_12PL. */ #define MG101_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG101_12PL = 0xFFFF; данные MG101_12PL. */ #define MG101_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G103PL >= G101PL) или (G103PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G103PL >= G101PL) || (G103PL == 0) +/* Задаёт MG101_13PL = ~(1 << 2); данные MG101_13PL. */ #define MG101_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG101_13PL = 0xFFFF; данные MG101_13PL. */ #define MG101_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G104PL >= G101PL) или (G104PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G104PL >= G101PL) || (G104PL == 0) +/* Задаёт MG101_14PL = ~(1 << 3); данные MG101_14PL. */ #define MG101_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG101_14PL = 0xFFFF; данные MG101_14PL. */ #define MG101_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G105PL >= G101PL) или (G105PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G105PL >= G101PL) || (G105PL == 0) +/* Задаёт MG101_15PL = ~(1 << 4); данные MG101_15PL. */ #define MG101_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG101_15PL = 0xFFFF; данные MG101_15PL. */ #define MG101_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G106PL >= G101PL) или (G106PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G106PL >= G101PL) || (G106PL == 0) +/* Задаёт MG101_16PL = ~(1 << 5); данные MG101_16PL. */ #define MG101_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG101_16PL = 0xFFFF; данные MG101_16PL. */ #define MG101_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G107PL >= G101PL) или (G107PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G107PL >= G101PL) || (G107PL == 0) +/* Задаёт MG101_17PL = ~(1 << 6); данные MG101_17PL. */ #define MG101_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG101_17PL = 0xFFFF; данные MG101_17PL. */ #define MG101_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G108PL >= G101PL) или (G108PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G108PL >= G101PL) || (G108PL == 0) +/* Задаёт MG101_18PL = ~(1 << 7); данные MG101_18PL. */ #define MG101_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG101_18PL = 0xFFFF; данные MG101_18PL. */ #define MG101_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG101_11PL = 0x00FE; данные MG101_11PL. */ #define MG101_11PL 0x00FE +/* Задаёт MG101 = (MG101_11PL & MG101_12PL & MG101_13PL & MG101_14PL &; маска разрешённых прерываний внутри группы PIE 101. */ #define MG101 (MG101_11PL & MG101_12PL & MG101_13PL & MG101_14PL & \ - MG101_15PL & MG101_16PL & MG101_17PL & MG101_18PL) + MG101_15PL & MG101_16PL & MG101_17PL & MG101_18PL) /* Продолжает список аргументов, полей или выражение MG101_15PL & MG101_16PL & MG101_17PL & MG101_18PL); порядок элементов сохраняется. */ // End of MG101: // Beginning of MG102: +/* Условие компиляции (G101PL >= G102PL) или (G101PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G101PL >= G102PL) || (G101PL == 0) +/* Задаёт MG102_11PL = ~(1); данные MG102_11PL. */ #define MG102_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG102_11PL = 0xFFFF; данные MG102_11PL. */ #define MG102_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G103PL >= G102PL) или (G103PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G103PL >= G102PL) || (G103PL == 0) +/* Задаёт MG102_13PL = ~(1 << 2); данные MG102_13PL. */ #define MG102_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG102_13PL = 0xFFFF; данные MG102_13PL. */ #define MG102_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G104PL >= G102PL) или (G104PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G104PL >= G102PL) || (G104PL == 0) +/* Задаёт MG102_14PL = ~(1 << 3); данные MG102_14PL. */ #define MG102_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG102_14PL = 0xFFFF; данные MG102_14PL. */ #define MG102_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G105PL >= G102PL) или (G105PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G105PL >= G102PL) || (G105PL == 0) +/* Задаёт MG102_15PL = ~(1 << 4); данные MG102_15PL. */ #define MG102_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG102_15PL = 0xFFFF; данные MG102_15PL. */ #define MG102_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G106PL >= G102PL) или (G106PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G106PL >= G102PL) || (G106PL == 0) +/* Задаёт MG102_16PL = ~(1 << 5); данные MG102_16PL. */ #define MG102_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG102_16PL = 0xFFFF; данные MG102_16PL. */ #define MG102_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G107PL >= G102PL) или (G107PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G107PL >= G102PL) || (G107PL == 0) +/* Задаёт MG102_17PL = ~(1 << 6); данные MG102_17PL. */ #define MG102_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG102_17PL = 0xFFFF; данные MG102_17PL. */ #define MG102_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G108PL >= G102PL) или (G108PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G108PL >= G102PL) || (G108PL == 0) +/* Задаёт MG102_18PL = ~(1 << 7); данные MG102_18PL. */ #define MG102_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG102_18PL = 0xFFFF; данные MG102_18PL. */ #define MG102_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG102_12PL = 0x00FD; данные MG102_12PL. */ #define MG102_12PL 0x00FD +/* Задаёт MG102 = (MG102_11PL & MG102_12PL & MG102_13PL & MG102_14PL &; маска разрешённых прерываний внутри группы PIE 102. */ #define MG102 (MG102_11PL & MG102_12PL & MG102_13PL & MG102_14PL & \ - MG102_15PL & MG102_16PL & MG102_17PL & MG102_18PL) + MG102_15PL & MG102_16PL & MG102_17PL & MG102_18PL) /* Продолжает список аргументов, полей или выражение MG102_15PL & MG102_16PL & MG102_17PL & MG102_18PL); порядок элементов сохраняется. */ // End of MG102: // Beginning of MG103: +/* Условие компиляции (G101PL >= G103PL) или (G101PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G101PL >= G103PL) || (G101PL == 0) +/* Задаёт MG103_11PL = ~(1); данные MG103_11PL. */ #define MG103_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG103_11PL = 0xFFFF; данные MG103_11PL. */ #define MG103_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G102PL >= G103PL) или (G102PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G102PL >= G103PL) || (G102PL == 0) +/* Задаёт MG103_12PL = ~(1 << 1); данные MG103_12PL. */ #define MG103_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG103_12PL = 0xFFFF; данные MG103_12PL. */ #define MG103_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G104PL >= G103PL) или (G104PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G104PL >= G103PL) || (G104PL == 0) +/* Задаёт MG103_14PL = ~(1 << 3); данные MG103_14PL. */ #define MG103_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG103_14PL = 0xFFFF; данные MG103_14PL. */ #define MG103_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G105PL >= G103PL) или (G105PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G105PL >= G103PL) || (G105PL == 0) +/* Задаёт MG103_15PL = ~(1 << 4); данные MG103_15PL. */ #define MG103_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG103_15PL = 0xFFFF; данные MG103_15PL. */ #define MG103_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G106PL >= G103PL) или (G106PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G106PL >= G103PL) || (G106PL == 0) +/* Задаёт MG103_16PL = ~(1 << 5); данные MG103_16PL. */ #define MG103_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG103_16PL = 0xFFFF; данные MG103_16PL. */ #define MG103_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G107PL >= G103PL) или (G107PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G107PL >= G103PL) || (G107PL == 0) +/* Задаёт MG103_17PL = ~(1 << 6); данные MG103_17PL. */ #define MG103_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG103_17PL = 0xFFFF; данные MG103_17PL. */ #define MG103_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G108PL >= G103PL) или (G108PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G108PL >= G103PL) || (G108PL == 0) +/* Задаёт MG103_18PL = ~(1 << 7); данные MG103_18PL. */ #define MG103_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG103_18PL = 0xFFFF; данные MG103_18PL. */ #define MG103_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG103_13PL = 0x00FB; данные MG103_13PL. */ #define MG103_13PL 0x00FB +/* Задаёт MG103 = (MG103_11PL & MG103_12PL & MG103_13PL & MG103_14PL &; маска разрешённых прерываний внутри группы PIE 103. */ #define MG103 (MG103_11PL & MG103_12PL & MG103_13PL & MG103_14PL & \ - MG103_15PL & MG103_16PL & MG103_17PL & MG103_18PL) + MG103_15PL & MG103_16PL & MG103_17PL & MG103_18PL) /* Продолжает список аргументов, полей или выражение MG103_15PL & MG103_16PL & MG103_17PL & MG103_18PL); порядок элементов сохраняется. */ // End of MG103: // Beginning of MG104: +/* Условие компиляции (G101PL >= G104PL) или (G101PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G101PL >= G104PL) || (G101PL == 0) +/* Задаёт MG104_11PL = ~(1); данные MG104_11PL. */ #define MG104_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG104_11PL = 0xFFFF; данные MG104_11PL. */ #define MG104_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G102PL >= G104PL) или (G102PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G102PL >= G104PL) || (G102PL == 0) +/* Задаёт MG104_12PL = ~(1 << 1); данные MG104_12PL. */ #define MG104_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG104_12PL = 0xFFFF; данные MG104_12PL. */ #define MG104_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G103PL >= G104PL) или (G103PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G103PL >= G104PL) || (G103PL == 0) +/* Задаёт MG104_13PL = ~(1 << 2); данные MG104_13PL. */ #define MG104_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG104_13PL = 0xFFFF; данные MG104_13PL. */ #define MG104_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G105PL >= G104PL) или (G105PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G105PL >= G104PL) || (G105PL == 0) +/* Задаёт MG104_15PL = ~(1 << 4); данные MG104_15PL. */ #define MG104_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG104_15PL = 0xFFFF; данные MG104_15PL. */ #define MG104_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G106PL >= G104PL) или (G106PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G106PL >= G104PL) || (G106PL == 0) +/* Задаёт MG104_16PL = ~(1 << 5); данные MG104_16PL. */ #define MG104_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG104_16PL = 0xFFFF; данные MG104_16PL. */ #define MG104_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G107PL >= G104PL) или (G107PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G107PL >= G104PL) || (G107PL == 0) +/* Задаёт MG104_17PL = ~(1 << 6); данные MG104_17PL. */ #define MG104_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG104_17PL = 0xFFFF; данные MG104_17PL. */ #define MG104_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G108PL >= G104PL) или (G108PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G108PL >= G104PL) || (G108PL == 0) +/* Задаёт MG104_18PL = ~(1 << 7); данные MG104_18PL. */ #define MG104_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG104_18PL = 0xFFFF; данные MG104_18PL. */ #define MG104_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG104_14PL = 0x00F7; данные MG104_14PL. */ #define MG104_14PL 0x00F7 +/* Задаёт MG104 = (MG104_11PL & MG104_12PL & MG104_13PL & MG104_14PL &; маска разрешённых прерываний внутри группы PIE 104. */ #define MG104 (MG104_11PL & MG104_12PL & MG104_13PL & MG104_14PL & \ - MG104_15PL & MG104_16PL & MG104_17PL & MG104_18PL) + MG104_15PL & MG104_16PL & MG104_17PL & MG104_18PL) /* Продолжает список аргументов, полей или выражение MG104_15PL & MG104_16PL & MG104_17PL & MG104_18PL); порядок элементов сохраняется. */ // End of MG104: // Beginning of MG105: +/* Условие компиляции (G101PL >= G105PL) или (G101PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G101PL >= G105PL) || (G101PL == 0) +/* Задаёт MG105_11PL = ~(1); данные MG105_11PL. */ #define MG105_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG105_11PL = 0xFFFF; данные MG105_11PL. */ #define MG105_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G102PL >= G105PL) или (G102PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G102PL >= G105PL) || (G102PL == 0) +/* Задаёт MG105_12PL = ~(1 << 1); данные MG105_12PL. */ #define MG105_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG105_12PL = 0xFFFF; данные MG105_12PL. */ #define MG105_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G103PL >= G105PL) или (G103PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G103PL >= G105PL) || (G103PL == 0) +/* Задаёт MG105_13PL = ~(1 << 2); данные MG105_13PL. */ #define MG105_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG105_13PL = 0xFFFF; данные MG105_13PL. */ #define MG105_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G104PL >= G105PL) или (G104PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G104PL >= G105PL) || (G104PL == 0) +/* Задаёт MG105_14PL = ~(1 << 3); данные MG105_14PL. */ #define MG105_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG105_14PL = 0xFFFF; данные MG105_14PL. */ #define MG105_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G106PL >= G105PL) или (G106PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G106PL >= G105PL) || (G106PL == 0) +/* Задаёт MG105_16PL = ~(1 << 5); данные MG105_16PL. */ #define MG105_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG105_16PL = 0xFFFF; данные MG105_16PL. */ #define MG105_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G107PL >= G105PL) или (G107PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G107PL >= G105PL) || (G107PL == 0) +/* Задаёт MG105_17PL = ~(1 << 6); данные MG105_17PL. */ #define MG105_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG105_17PL = 0xFFFF; данные MG105_17PL. */ #define MG105_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G108PL >= G105PL) или (G108PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G108PL >= G105PL) || (G108PL == 0) +/* Задаёт MG105_18PL = ~(1 << 7); данные MG105_18PL. */ #define MG105_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG105_18PL = 0xFFFF; данные MG105_18PL. */ #define MG105_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG105_15PL = 0x00EF; данные MG105_15PL. */ #define MG105_15PL 0x00EF +/* Задаёт MG105 = (MG105_11PL & MG105_12PL & MG105_13PL & MG105_14PL &; маска разрешённых прерываний внутри группы PIE 105. */ #define MG105 (MG105_11PL & MG105_12PL & MG105_13PL & MG105_14PL & \ - MG105_15PL & MG105_16PL & MG105_17PL & MG105_18PL) + MG105_15PL & MG105_16PL & MG105_17PL & MG105_18PL) /* Продолжает список аргументов, полей или выражение MG105_15PL & MG105_16PL & MG105_17PL & MG105_18PL); порядок элементов сохраняется. */ // End of MG105: // Beginning of MG106: +/* Условие компиляции (G101PL >= G106PL) или (G101PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G101PL >= G106PL) || (G101PL == 0) +/* Задаёт MG106_11PL = ~(1); данные MG106_11PL. */ #define MG106_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG106_11PL = 0xFFFF; данные MG106_11PL. */ #define MG106_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G102PL >= G106PL) или (G102PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G102PL >= G106PL) || (G102PL == 0) +/* Задаёт MG106_12PL = ~(1 << 1); данные MG106_12PL. */ #define MG106_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG106_12PL = 0xFFFF; данные MG106_12PL. */ #define MG106_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G103PL >= G106PL) или (G103PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G103PL >= G106PL) || (G103PL == 0) +/* Задаёт MG106_13PL = ~(1 << 2); данные MG106_13PL. */ #define MG106_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG106_13PL = 0xFFFF; данные MG106_13PL. */ #define MG106_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G104PL >= G106PL) или (G104PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G104PL >= G106PL) || (G104PL == 0) +/* Задаёт MG106_14PL = ~(1 << 3); данные MG106_14PL. */ #define MG106_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG106_14PL = 0xFFFF; данные MG106_14PL. */ #define MG106_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G105PL >= G106PL) или (G105PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G105PL >= G106PL) || (G105PL == 0) +/* Задаёт MG106_15PL = ~(1 << 4); данные MG106_15PL. */ #define MG106_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG106_15PL = 0xFFFF; данные MG106_15PL. */ #define MG106_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G107PL >= G106PL) или (G107PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G107PL >= G106PL) || (G107PL == 0) +/* Задаёт MG106_17PL = ~(1 << 6); данные MG106_17PL. */ #define MG106_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG106_17PL = 0xFFFF; данные MG106_17PL. */ #define MG106_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G108PL >= G106PL) или (G108PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G108PL >= G106PL) || (G108PL == 0) +/* Задаёт MG106_18PL = ~(1 << 7); данные MG106_18PL. */ #define MG106_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG106_18PL = 0xFFFF; данные MG106_18PL. */ #define MG106_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG106_16PL = 0x00DF; данные MG106_16PL. */ #define MG106_16PL 0x00DF +/* Задаёт MG106 = (MG106_11PL & MG106_12PL & MG106_13PL & MG106_14PL &; маска разрешённых прерываний внутри группы PIE 106. */ #define MG106 (MG106_11PL & MG106_12PL & MG106_13PL & MG106_14PL & \ - MG106_15PL & MG106_16PL & MG106_17PL & MG106_18PL) + MG106_15PL & MG106_16PL & MG106_17PL & MG106_18PL) /* Продолжает список аргументов, полей или выражение MG106_15PL & MG106_16PL & MG106_17PL & MG106_18PL); порядок элементов сохраняется. */ // End of MG106: // Beginning of MG107: +/* Условие компиляции (G101PL >= G107PL) или (G101PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G101PL >= G107PL) || (G101PL == 0) +/* Задаёт MG107_11PL = ~(1); данные MG107_11PL. */ #define MG107_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG107_11PL = 0xFFFF; данные MG107_11PL. */ #define MG107_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G102PL >= G107PL) или (G102PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G102PL >= G107PL) || (G102PL == 0) +/* Задаёт MG107_12PL = ~(1 << 1); данные MG107_12PL. */ #define MG107_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG107_12PL = 0xFFFF; данные MG107_12PL. */ #define MG107_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G103PL >= G107PL) или (G103PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G103PL >= G107PL) || (G103PL == 0) +/* Задаёт MG107_13PL = ~(1 << 2); данные MG107_13PL. */ #define MG107_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG107_13PL = 0xFFFF; данные MG107_13PL. */ #define MG107_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G104PL >= G107PL) или (G104PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G104PL >= G107PL) || (G104PL == 0) +/* Задаёт MG107_14PL = ~(1 << 3); данные MG107_14PL. */ #define MG107_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG107_14PL = 0xFFFF; данные MG107_14PL. */ #define MG107_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G105PL >= G107PL) или (G105PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G105PL >= G107PL) || (G105PL == 0) +/* Задаёт MG107_15PL = ~(1 << 4); данные MG107_15PL. */ #define MG107_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG107_15PL = 0xFFFF; данные MG107_15PL. */ #define MG107_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G106PL >= G107PL) или (G106PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G106PL >= G107PL) || (G106PL == 0) +/* Задаёт MG107_16PL = ~(1 << 5); данные MG107_16PL. */ #define MG107_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG107_16PL = 0xFFFF; данные MG107_16PL. */ #define MG107_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G108PL >= G107PL) или (G108PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G108PL >= G107PL) || (G108PL == 0) +/* Задаёт MG107_18PL = ~(1 << 7); данные MG107_18PL. */ #define MG107_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG107_18PL = 0xFFFF; данные MG107_18PL. */ #define MG107_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG107_17PL = 0x00BF; данные MG107_17PL. */ #define MG107_17PL 0x00BF +/* Задаёт MG107 = (MG107_11PL & MG107_12PL & MG107_13PL & MG107_14PL &; маска разрешённых прерываний внутри группы PIE 107. */ #define MG107 (MG107_11PL & MG107_12PL & MG107_13PL & MG107_14PL & \ - MG107_15PL & MG107_16PL & MG107_17PL & MG107_18PL) + MG107_15PL & MG107_16PL & MG107_17PL & MG107_18PL) /* Продолжает список аргументов, полей или выражение MG107_15PL & MG107_16PL & MG107_17PL & MG107_18PL); порядок элементов сохраняется. */ // End of MG107: // Beginning of MG108: +/* Условие компиляции (G101PL >= G108PL) или (G101PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G101PL >= G108PL) || (G101PL == 0) +/* Задаёт MG108_11PL = ~(1); данные MG108_11PL. */ #define MG108_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG108_11PL = 0xFFFF; данные MG108_11PL. */ #define MG108_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G102PL >= G108PL) или (G102PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G102PL >= G108PL) || (G102PL == 0) +/* Задаёт MG108_12PL = ~(1 << 1); данные MG108_12PL. */ #define MG108_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG108_12PL = 0xFFFF; данные MG108_12PL. */ #define MG108_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G103PL >= G108PL) или (G103PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G103PL >= G108PL) || (G103PL == 0) +/* Задаёт MG108_13PL = ~(1 << 2); данные MG108_13PL. */ #define MG108_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG108_13PL = 0xFFFF; данные MG108_13PL. */ #define MG108_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G104PL >= G108PL) или (G104PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G104PL >= G108PL) || (G104PL == 0) +/* Задаёт MG108_14PL = ~(1 << 3); данные MG108_14PL. */ #define MG108_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG108_14PL = 0xFFFF; данные MG108_14PL. */ #define MG108_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G105PL >= G108PL) или (G105PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G105PL >= G108PL) || (G105PL == 0) +/* Задаёт MG108_15PL = ~(1 << 4); данные MG108_15PL. */ #define MG108_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG108_15PL = 0xFFFF; данные MG108_15PL. */ #define MG108_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G106PL >= G108PL) или (G106PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G106PL >= G108PL) || (G106PL == 0) +/* Задаёт MG108_16PL = ~(1 << 5); данные MG108_16PL. */ #define MG108_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG108_16PL = 0xFFFF; данные MG108_16PL. */ #define MG108_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G107PL >= G108PL) или (G107PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G107PL >= G108PL) || (G107PL == 0) +/* Задаёт MG108_17PL = ~(1 << 6); данные MG108_17PL. */ #define MG108_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG108_17PL = 0xFFFF; данные MG108_17PL. */ #define MG108_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG108_18PL = 0x007F; данные MG108_18PL. */ #define MG108_18PL 0x007F +/* Задаёт MG108 = (MG108_11PL & MG108_12PL & MG108_13PL & MG108_14PL &; маска разрешённых прерываний внутри группы PIE 108. */ #define MG108 (MG108_11PL & MG108_12PL & MG108_13PL & MG108_14PL & \ - MG108_15PL & MG108_16PL & MG108_17PL & MG108_18PL) + MG108_15PL & MG108_16PL & MG108_17PL & MG108_18PL) /* Продолжает список аргументов, полей или выражение MG108_15PL & MG108_16PL & MG108_17PL & MG108_18PL); порядок элементов сохраняется. */ // End of MG108: //------------------------------------------------------------------------------- @@ -5179,331 +9537,627 @@ extern "C" { // // Beginning of MG111: +/* Условие компиляции (G112PL >= G111PL) или (G112PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G112PL >= G111PL) || (G112PL == 0) +/* Задаёт MG111_12PL = ~(1 << 1); данные MG111_12PL. */ #define MG111_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG111_12PL = 0xFFFF; данные MG111_12PL. */ #define MG111_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G113PL >= G111PL) или (G113PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G113PL >= G111PL) || (G113PL == 0) +/* Задаёт MG111_13PL = ~(1 << 2); данные MG111_13PL. */ #define MG111_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG111_13PL = 0xFFFF; данные MG111_13PL. */ #define MG111_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G114PL >= G111PL) или (G114PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G114PL >= G111PL) || (G114PL == 0) +/* Задаёт MG111_14PL = ~(1 << 3); данные MG111_14PL. */ #define MG111_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG111_14PL = 0xFFFF; данные MG111_14PL. */ #define MG111_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G115PL >= G111PL) или (G115PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G115PL >= G111PL) || (G115PL == 0) +/* Задаёт MG111_15PL = ~(1 << 4); данные MG111_15PL. */ #define MG111_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG111_15PL = 0xFFFF; данные MG111_15PL. */ #define MG111_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G116PL >= G111PL) или (G116PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G116PL >= G111PL) || (G116PL == 0) +/* Задаёт MG111_16PL = ~(1 << 5); данные MG111_16PL. */ #define MG111_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG111_16PL = 0xFFFF; данные MG111_16PL. */ #define MG111_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G117PL >= G111PL) или (G117PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G117PL >= G111PL) || (G117PL == 0) +/* Задаёт MG111_17PL = ~(1 << 6); данные MG111_17PL. */ #define MG111_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG111_17PL = 0xFFFF; данные MG111_17PL. */ #define MG111_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G118PL >= G111PL) или (G118PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G118PL >= G111PL) || (G118PL == 0) +/* Задаёт MG111_18PL = ~(1 << 7); данные MG111_18PL. */ #define MG111_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG111_18PL = 0xFFFF; данные MG111_18PL. */ #define MG111_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG111_11PL = 0x00FE; данные MG111_11PL. */ #define MG111_11PL 0x00FE +/* Задаёт MG111 = (MG111_11PL & MG111_12PL & MG111_13PL & MG111_14PL &; маска разрешённых прерываний внутри группы PIE 111. */ #define MG111 (MG111_11PL & MG111_12PL & MG111_13PL & MG111_14PL & \ - MG111_15PL & MG111_16PL & MG111_17PL & MG111_18PL) + MG111_15PL & MG111_16PL & MG111_17PL & MG111_18PL) /* Продолжает список аргументов, полей или выражение MG111_15PL & MG111_16PL & MG111_17PL & MG111_18PL); порядок элементов сохраняется. */ // End of MG111: // Beginning of MG112: +/* Условие компиляции (G111PL >= G112PL) или (G111PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G111PL >= G112PL) || (G111PL == 0) +/* Задаёт MG112_11PL = ~(1); данные MG112_11PL. */ #define MG112_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG112_11PL = 0xFFFF; данные MG112_11PL. */ #define MG112_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G113PL >= G112PL) или (G113PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G113PL >= G112PL) || (G113PL == 0) +/* Задаёт MG112_13PL = ~(1 << 2); данные MG112_13PL. */ #define MG112_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG112_13PL = 0xFFFF; данные MG112_13PL. */ #define MG112_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G114PL >= G112PL) или (G114PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G114PL >= G112PL) || (G114PL == 0) +/* Задаёт MG112_14PL = ~(1 << 3); данные MG112_14PL. */ #define MG112_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG112_14PL = 0xFFFF; данные MG112_14PL. */ #define MG112_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G115PL >= G112PL) или (G115PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G115PL >= G112PL) || (G115PL == 0) +/* Задаёт MG112_15PL = ~(1 << 4); данные MG112_15PL. */ #define MG112_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG112_15PL = 0xFFFF; данные MG112_15PL. */ #define MG112_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G116PL >= G112PL) или (G116PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G116PL >= G112PL) || (G116PL == 0) +/* Задаёт MG112_16PL = ~(1 << 5); данные MG112_16PL. */ #define MG112_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG112_16PL = 0xFFFF; данные MG112_16PL. */ #define MG112_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G117PL >= G112PL) или (G117PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G117PL >= G112PL) || (G117PL == 0) +/* Задаёт MG112_17PL = ~(1 << 6); данные MG112_17PL. */ #define MG112_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG112_17PL = 0xFFFF; данные MG112_17PL. */ #define MG112_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G118PL >= G112PL) или (G118PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G118PL >= G112PL) || (G118PL == 0) +/* Задаёт MG112_18PL = ~(1 << 7); данные MG112_18PL. */ #define MG112_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG112_18PL = 0xFFFF; данные MG112_18PL. */ #define MG112_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG112_12PL = 0x00FD; данные MG112_12PL. */ #define MG112_12PL 0x00FD +/* Задаёт MG112 = (MG112_11PL & MG112_12PL & MG112_13PL & MG112_14PL &; маска разрешённых прерываний внутри группы PIE 112. */ #define MG112 (MG112_11PL & MG112_12PL & MG112_13PL & MG112_14PL & \ - MG112_15PL & MG112_16PL & MG112_17PL & MG112_18PL) + MG112_15PL & MG112_16PL & MG112_17PL & MG112_18PL) /* Продолжает список аргументов, полей или выражение MG112_15PL & MG112_16PL & MG112_17PL & MG112_18PL); порядок элементов сохраняется. */ // End of MG112: // Beginning of MG113: +/* Условие компиляции (G111PL >= G113PL) или (G111PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G111PL >= G113PL) || (G111PL == 0) +/* Задаёт MG113_11PL = ~(1); данные MG113_11PL. */ #define MG113_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG113_11PL = 0xFFFF; данные MG113_11PL. */ #define MG113_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G112PL >= G113PL) или (G112PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G112PL >= G113PL) || (G112PL == 0) +/* Задаёт MG113_12PL = ~(1 << 1); данные MG113_12PL. */ #define MG113_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG113_12PL = 0xFFFF; данные MG113_12PL. */ #define MG113_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G114PL >= G113PL) или (G114PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G114PL >= G113PL) || (G114PL == 0) +/* Задаёт MG113_14PL = ~(1 << 3); данные MG113_14PL. */ #define MG113_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG113_14PL = 0xFFFF; данные MG113_14PL. */ #define MG113_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G115PL >= G113PL) или (G115PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G115PL >= G113PL) || (G115PL == 0) +/* Задаёт MG113_15PL = ~(1 << 4); данные MG113_15PL. */ #define MG113_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG113_15PL = 0xFFFF; данные MG113_15PL. */ #define MG113_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G116PL >= G113PL) или (G116PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G116PL >= G113PL) || (G116PL == 0) +/* Задаёт MG113_16PL = ~(1 << 5); данные MG113_16PL. */ #define MG113_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG113_16PL = 0xFFFF; данные MG113_16PL. */ #define MG113_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G117PL >= G113PL) или (G117PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G117PL >= G113PL) || (G117PL == 0) +/* Задаёт MG113_17PL = ~(1 << 6); данные MG113_17PL. */ #define MG113_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG113_17PL = 0xFFFF; данные MG113_17PL. */ #define MG113_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G118PL >= G113PL) или (G118PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G118PL >= G113PL) || (G118PL == 0) +/* Задаёт MG113_18PL = ~(1 << 7); данные MG113_18PL. */ #define MG113_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG113_18PL = 0xFFFF; данные MG113_18PL. */ #define MG113_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG113_13PL = 0x00FB; данные MG113_13PL. */ #define MG113_13PL 0x00FB +/* Задаёт MG113 = (MG113_11PL & MG113_12PL & MG113_13PL & MG113_14PL &; маска разрешённых прерываний внутри группы PIE 113. */ #define MG113 (MG113_11PL & MG113_12PL & MG113_13PL & MG113_14PL & \ - MG113_15PL & MG113_16PL & MG113_17PL & MG113_18PL) + MG113_15PL & MG113_16PL & MG113_17PL & MG113_18PL) /* Продолжает список аргументов, полей или выражение MG113_15PL & MG113_16PL & MG113_17PL & MG113_18PL); порядок элементов сохраняется. */ // End of MG113: // Beginning of MG114: +/* Условие компиляции (G111PL >= G114PL) или (G111PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G111PL >= G114PL) || (G111PL == 0) +/* Задаёт MG114_11PL = ~(1); данные MG114_11PL. */ #define MG114_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG114_11PL = 0xFFFF; данные MG114_11PL. */ #define MG114_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G112PL >= G114PL) или (G112PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G112PL >= G114PL) || (G112PL == 0) +/* Задаёт MG114_12PL = ~(1 << 1); данные MG114_12PL. */ #define MG114_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG114_12PL = 0xFFFF; данные MG114_12PL. */ #define MG114_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G113PL >= G114PL) или (G113PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G113PL >= G114PL) || (G113PL == 0) +/* Задаёт MG114_13PL = ~(1 << 2); данные MG114_13PL. */ #define MG114_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG114_13PL = 0xFFFF; данные MG114_13PL. */ #define MG114_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G115PL >= G114PL) или (G115PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G115PL >= G114PL) || (G115PL == 0) +/* Задаёт MG114_15PL = ~(1 << 4); данные MG114_15PL. */ #define MG114_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG114_15PL = 0xFFFF; данные MG114_15PL. */ #define MG114_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G116PL >= G114PL) или (G116PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G116PL >= G114PL) || (G116PL == 0) +/* Задаёт MG114_16PL = ~(1 << 5); данные MG114_16PL. */ #define MG114_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG114_16PL = 0xFFFF; данные MG114_16PL. */ #define MG114_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G117PL >= G114PL) или (G117PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G117PL >= G114PL) || (G117PL == 0) +/* Задаёт MG114_17PL = ~(1 << 6); данные MG114_17PL. */ #define MG114_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG114_17PL = 0xFFFF; данные MG114_17PL. */ #define MG114_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G118PL >= G114PL) или (G118PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G118PL >= G114PL) || (G118PL == 0) +/* Задаёт MG114_18PL = ~(1 << 7); данные MG114_18PL. */ #define MG114_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG114_18PL = 0xFFFF; данные MG114_18PL. */ #define MG114_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG114_14PL = 0x00F7; данные MG114_14PL. */ #define MG114_14PL 0x00F7 +/* Задаёт MG114 = (MG114_11PL & MG114_12PL & MG114_13PL & MG114_14PL &; маска разрешённых прерываний внутри группы PIE 114. */ #define MG114 (MG114_11PL & MG114_12PL & MG114_13PL & MG114_14PL & \ - MG114_15PL & MG114_16PL & MG114_17PL & MG114_18PL) + MG114_15PL & MG114_16PL & MG114_17PL & MG114_18PL) /* Продолжает список аргументов, полей или выражение MG114_15PL & MG114_16PL & MG114_17PL & MG114_18PL); порядок элементов сохраняется. */ // End of MG114: // Beginning of MG115: +/* Условие компиляции (G111PL >= G115PL) или (G111PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G111PL >= G115PL) || (G111PL == 0) +/* Задаёт MG115_11PL = ~(1); данные MG115_11PL. */ #define MG115_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG115_11PL = 0xFFFF; данные MG115_11PL. */ #define MG115_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G112PL >= G115PL) или (G112PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G112PL >= G115PL) || (G112PL == 0) +/* Задаёт MG115_12PL = ~(1 << 1); данные MG115_12PL. */ #define MG115_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG115_12PL = 0xFFFF; данные MG115_12PL. */ #define MG115_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G113PL >= G115PL) или (G113PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G113PL >= G115PL) || (G113PL == 0) +/* Задаёт MG115_13PL = ~(1 << 2); данные MG115_13PL. */ #define MG115_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG115_13PL = 0xFFFF; данные MG115_13PL. */ #define MG115_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G114PL >= G115PL) или (G114PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G114PL >= G115PL) || (G114PL == 0) +/* Задаёт MG115_14PL = ~(1 << 3); данные MG115_14PL. */ #define MG115_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG115_14PL = 0xFFFF; данные MG115_14PL. */ #define MG115_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G116PL >= G115PL) или (G116PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G116PL >= G115PL) || (G116PL == 0) +/* Задаёт MG115_16PL = ~(1 << 5); данные MG115_16PL. */ #define MG115_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG115_16PL = 0xFFFF; данные MG115_16PL. */ #define MG115_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G117PL >= G115PL) или (G117PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G117PL >= G115PL) || (G117PL == 0) +/* Задаёт MG115_17PL = ~(1 << 6); данные MG115_17PL. */ #define MG115_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG115_17PL = 0xFFFF; данные MG115_17PL. */ #define MG115_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G118PL >= G115PL) или (G118PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G118PL >= G115PL) || (G118PL == 0) +/* Задаёт MG115_18PL = ~(1 << 7); данные MG115_18PL. */ #define MG115_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG115_18PL = 0xFFFF; данные MG115_18PL. */ #define MG115_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG115_15PL = 0x00EF; данные MG115_15PL. */ #define MG115_15PL 0x00EF +/* Задаёт MG115 = (MG115_11PL & MG115_12PL & MG115_13PL & MG115_14PL &; маска разрешённых прерываний внутри группы PIE 115. */ #define MG115 (MG115_11PL & MG115_12PL & MG115_13PL & MG115_14PL & \ - MG115_15PL & MG115_16PL & MG115_17PL & MG115_18PL) + MG115_15PL & MG115_16PL & MG115_17PL & MG115_18PL) /* Продолжает список аргументов, полей или выражение MG115_15PL & MG115_16PL & MG115_17PL & MG115_18PL); порядок элементов сохраняется. */ // End of MG115: // Beginning of MG116: +/* Условие компиляции (G111PL >= G116PL) или (G111PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G111PL >= G116PL) || (G111PL == 0) +/* Задаёт MG116_11PL = ~(1); данные MG116_11PL. */ #define MG116_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG116_11PL = 0xFFFF; данные MG116_11PL. */ #define MG116_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G112PL >= G116PL) или (G112PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G112PL >= G116PL) || (G112PL == 0) +/* Задаёт MG116_12PL = ~(1 << 1); данные MG116_12PL. */ #define MG116_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG116_12PL = 0xFFFF; данные MG116_12PL. */ #define MG116_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G113PL >= G116PL) или (G113PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G113PL >= G116PL) || (G113PL == 0) +/* Задаёт MG116_13PL = ~(1 << 2); данные MG116_13PL. */ #define MG116_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG116_13PL = 0xFFFF; данные MG116_13PL. */ #define MG116_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G114PL >= G116PL) или (G114PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G114PL >= G116PL) || (G114PL == 0) +/* Задаёт MG116_14PL = ~(1 << 3); данные MG116_14PL. */ #define MG116_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG116_14PL = 0xFFFF; данные MG116_14PL. */ #define MG116_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G115PL >= G116PL) или (G115PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G115PL >= G116PL) || (G115PL == 0) +/* Задаёт MG116_15PL = ~(1 << 4); данные MG116_15PL. */ #define MG116_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG116_15PL = 0xFFFF; данные MG116_15PL. */ #define MG116_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G117PL >= G116PL) или (G117PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G117PL >= G116PL) || (G117PL == 0) +/* Задаёт MG116_17PL = ~(1 << 6); данные MG116_17PL. */ #define MG116_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG116_17PL = 0xFFFF; данные MG116_17PL. */ #define MG116_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G118PL >= G116PL) или (G118PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G118PL >= G116PL) || (G118PL == 0) +/* Задаёт MG116_18PL = ~(1 << 7); данные MG116_18PL. */ #define MG116_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG116_18PL = 0xFFFF; данные MG116_18PL. */ #define MG116_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG116_16PL = 0x00DF; данные MG116_16PL. */ #define MG116_16PL 0x00DF +/* Задаёт MG116 = (MG116_11PL & MG116_12PL & MG116_13PL & MG116_14PL &; маска разрешённых прерываний внутри группы PIE 116. */ #define MG116 (MG116_11PL & MG116_12PL & MG116_13PL & MG116_14PL & \ - MG116_15PL & MG116_16PL & MG116_17PL & MG116_18PL) + MG116_15PL & MG116_16PL & MG116_17PL & MG116_18PL) /* Продолжает список аргументов, полей или выражение MG116_15PL & MG116_16PL & MG116_17PL & MG116_18PL); порядок элементов сохраняется. */ // End of MG116: // Beginning of MG117: +/* Условие компиляции (G111PL >= G117PL) или (G111PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G111PL >= G117PL) || (G111PL == 0) +/* Задаёт MG117_11PL = ~(1); данные MG117_11PL. */ #define MG117_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG117_11PL = 0xFFFF; данные MG117_11PL. */ #define MG117_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G112PL >= G117PL) или (G112PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G112PL >= G117PL) || (G112PL == 0) +/* Задаёт MG117_12PL = ~(1 << 1); данные MG117_12PL. */ #define MG117_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG117_12PL = 0xFFFF; данные MG117_12PL. */ #define MG117_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G113PL >= G117PL) или (G113PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G113PL >= G117PL) || (G113PL == 0) +/* Задаёт MG117_13PL = ~(1 << 2); данные MG117_13PL. */ #define MG117_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG117_13PL = 0xFFFF; данные MG117_13PL. */ #define MG117_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G114PL >= G117PL) или (G114PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G114PL >= G117PL) || (G114PL == 0) +/* Задаёт MG117_14PL = ~(1 << 3); данные MG117_14PL. */ #define MG117_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG117_14PL = 0xFFFF; данные MG117_14PL. */ #define MG117_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G115PL >= G117PL) или (G115PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G115PL >= G117PL) || (G115PL == 0) +/* Задаёт MG117_15PL = ~(1 << 4); данные MG117_15PL. */ #define MG117_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG117_15PL = 0xFFFF; данные MG117_15PL. */ #define MG117_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G116PL >= G117PL) или (G116PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G116PL >= G117PL) || (G116PL == 0) +/* Задаёт MG117_16PL = ~(1 << 5); данные MG117_16PL. */ #define MG117_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG117_16PL = 0xFFFF; данные MG117_16PL. */ #define MG117_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G118PL >= G117PL) или (G118PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G118PL >= G117PL) || (G118PL == 0) +/* Задаёт MG117_18PL = ~(1 << 7); данные MG117_18PL. */ #define MG117_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG117_18PL = 0xFFFF; данные MG117_18PL. */ #define MG117_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG117_17PL = 0x00BF; данные MG117_17PL. */ #define MG117_17PL 0x00BF +/* Задаёт MG117 = (MG117_11PL & MG117_12PL & MG117_13PL & MG117_14PL &; маска разрешённых прерываний внутри группы PIE 117. */ #define MG117 (MG117_11PL & MG117_12PL & MG117_13PL & MG117_14PL & \ - MG117_15PL & MG117_16PL & MG117_17PL & MG117_18PL) + MG117_15PL & MG117_16PL & MG117_17PL & MG117_18PL) /* Продолжает список аргументов, полей или выражение MG117_15PL & MG117_16PL & MG117_17PL & MG117_18PL); порядок элементов сохраняется. */ // End of MG117: // Beginning of MG118: +/* Условие компиляции (G111PL >= G118PL) или (G111PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G111PL >= G118PL) || (G111PL == 0) +/* Задаёт MG118_11PL = ~(1); данные MG118_11PL. */ #define MG118_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG118_11PL = 0xFFFF; данные MG118_11PL. */ #define MG118_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G112PL >= G118PL) или (G112PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G112PL >= G118PL) || (G112PL == 0) +/* Задаёт MG118_12PL = ~(1 << 1); данные MG118_12PL. */ #define MG118_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG118_12PL = 0xFFFF; данные MG118_12PL. */ #define MG118_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G113PL >= G118PL) или (G113PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G113PL >= G118PL) || (G113PL == 0) +/* Задаёт MG118_13PL = ~(1 << 2); данные MG118_13PL. */ #define MG118_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG118_13PL = 0xFFFF; данные MG118_13PL. */ #define MG118_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G114PL >= G118PL) или (G114PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G114PL >= G118PL) || (G114PL == 0) +/* Задаёт MG118_14PL = ~(1 << 3); данные MG118_14PL. */ #define MG118_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG118_14PL = 0xFFFF; данные MG118_14PL. */ #define MG118_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G115PL >= G118PL) или (G115PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G115PL >= G118PL) || (G115PL == 0) +/* Задаёт MG118_15PL = ~(1 << 4); данные MG118_15PL. */ #define MG118_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG118_15PL = 0xFFFF; данные MG118_15PL. */ #define MG118_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G116PL >= G118PL) или (G116PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G116PL >= G118PL) || (G116PL == 0) +/* Задаёт MG118_16PL = ~(1 << 5); данные MG118_16PL. */ #define MG118_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG118_16PL = 0xFFFF; данные MG118_16PL. */ #define MG118_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G117PL >= G118PL) или (G117PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G117PL >= G118PL) || (G117PL == 0) +/* Задаёт MG118_17PL = ~(1 << 6); данные MG118_17PL. */ #define MG118_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG118_17PL = 0xFFFF; данные MG118_17PL. */ #define MG118_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG118_18PL = 0x007F; данные MG118_18PL. */ #define MG118_18PL 0x007F +/* Задаёт MG118 = (MG118_11PL & MG118_12PL & MG118_13PL & MG118_14PL &; маска разрешённых прерываний внутри группы PIE 118. */ #define MG118 (MG118_11PL & MG118_12PL & MG118_13PL & MG118_14PL & \ - MG118_15PL & MG118_16PL & MG118_17PL & MG118_18PL) + MG118_15PL & MG118_16PL & MG118_17PL & MG118_18PL) /* Продолжает список аргументов, полей или выражение MG118_15PL & MG118_16PL & MG118_17PL & MG118_18PL); порядок элементов сохраняется. */ // End of MG118: //------------------------------------------------------------------------------- @@ -5511,338 +10165,637 @@ extern "C" { // // Beginning of MG121: +/* Условие компиляции (G122PL >= G121PL) или (G122PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G122PL >= G121PL) || (G122PL == 0) +/* Задаёт MG121_12PL = ~(1 << 1); данные MG121_12PL. */ #define MG121_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG121_12PL = 0xFFFF; данные MG121_12PL. */ #define MG121_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G123PL >= G121PL) или (G123PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G123PL >= G121PL) || (G123PL == 0) +/* Задаёт MG121_13PL = ~(1 << 2); данные MG121_13PL. */ #define MG121_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG121_13PL = 0xFFFF; данные MG121_13PL. */ #define MG121_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G124PL >= G121PL) или (G124PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G124PL >= G121PL) || (G124PL == 0) +/* Задаёт MG121_14PL = ~(1 << 3); данные MG121_14PL. */ #define MG121_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG121_14PL = 0xFFFF; данные MG121_14PL. */ #define MG121_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G125PL >= G121PL) или (G125PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G125PL >= G121PL) || (G125PL == 0) +/* Задаёт MG121_15PL = ~(1 << 4); данные MG121_15PL. */ #define MG121_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG121_15PL = 0xFFFF; данные MG121_15PL. */ #define MG121_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G126PL >= G121PL) или (G126PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G126PL >= G121PL) || (G126PL == 0) +/* Задаёт MG121_16PL = ~(1 << 5); данные MG121_16PL. */ #define MG121_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG121_16PL = 0xFFFF; данные MG121_16PL. */ #define MG121_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G127PL >= G121PL) или (G127PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G127PL >= G121PL) || (G127PL == 0) +/* Задаёт MG121_17PL = ~(1 << 6); данные MG121_17PL. */ #define MG121_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG121_17PL = 0xFFFF; данные MG121_17PL. */ #define MG121_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G128PL >= G121PL) или (G128PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G128PL >= G121PL) || (G128PL == 0) +/* Задаёт MG121_18PL = ~(1 << 7); данные MG121_18PL. */ #define MG121_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG121_18PL = 0xFFFF; данные MG121_18PL. */ #define MG121_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG121_11PL = 0x00FE; данные MG121_11PL. */ #define MG121_11PL 0x00FE +/* Задаёт MG121 = (MG121_11PL & MG121_12PL & MG121_13PL & MG121_14PL &; маска разрешённых прерываний внутри группы PIE 121. */ #define MG121 (MG121_11PL & MG121_12PL & MG121_13PL & MG121_14PL & \ - MG121_15PL & MG121_16PL & MG121_17PL & MG121_18PL) + MG121_15PL & MG121_16PL & MG121_17PL & MG121_18PL) /* Продолжает список аргументов, полей или выражение MG121_15PL & MG121_16PL & MG121_17PL & MG121_18PL); порядок элементов сохраняется. */ // End of MG121: // Beginning of MG121: +/* Условие компиляции (G121PL >= G122PL) или (G121PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G121PL >= G122PL) || (G121PL == 0) +/* Задаёт MG122_11PL = ~(1); данные MG122_11PL. */ #define MG122_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG122_11PL = 0xFFFF; данные MG122_11PL. */ #define MG122_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G123PL >= G122PL) или (G123PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G123PL >= G122PL) || (G123PL == 0) +/* Задаёт MG122_13PL = ~(1 << 2); данные MG122_13PL. */ #define MG122_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG122_13PL = 0xFFFF; данные MG122_13PL. */ #define MG122_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G124PL >= G122PL) или (G124PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G124PL >= G122PL) || (G124PL == 0) +/* Задаёт MG122_14PL = ~(1 << 3); данные MG122_14PL. */ #define MG122_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG122_14PL = 0xFFFF; данные MG122_14PL. */ #define MG122_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G125PL >= G122PL) или (G125PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G125PL >= G122PL) || (G125PL == 0) +/* Задаёт MG122_15PL = ~(1 << 4); данные MG122_15PL. */ #define MG122_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG122_15PL = 0xFFFF; данные MG122_15PL. */ #define MG122_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G126PL >= G122PL) или (G126PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G126PL >= G122PL) || (G126PL == 0) +/* Задаёт MG122_16PL = ~(1 << 5); данные MG122_16PL. */ #define MG122_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG122_16PL = 0xFFFF; данные MG122_16PL. */ #define MG122_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G127PL >= G122PL) или (G127PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G127PL >= G122PL) || (G127PL == 0) +/* Задаёт MG122_17PL = ~(1 << 6); данные MG122_17PL. */ #define MG122_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG122_17PL = 0xFFFF; данные MG122_17PL. */ #define MG122_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G128PL >= G122PL) или (G128PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G128PL >= G122PL) || (G128PL == 0) +/* Задаёт MG122_18PL = ~(1 << 7); данные MG122_18PL. */ #define MG122_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG122_18PL = 0xFFFF; данные MG122_18PL. */ #define MG122_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG122_12PL = 0x00FD; данные MG122_12PL. */ #define MG122_12PL 0x00FD +/* Задаёт MG122 = (MG122_11PL & MG122_12PL & MG122_13PL & MG122_14PL &; маска разрешённых прерываний внутри группы PIE 122. */ #define MG122 (MG122_11PL & MG122_12PL & MG122_13PL & MG122_14PL & \ - MG122_15PL & MG122_16PL & MG122_17PL & MG122_18PL) + MG122_15PL & MG122_16PL & MG122_17PL & MG122_18PL) /* Продолжает список аргументов, полей или выражение MG122_15PL & MG122_16PL & MG122_17PL & MG122_18PL); порядок элементов сохраняется. */ // End of MG122: // Beginning of MG123: +/* Условие компиляции (G121PL >= G123PL) или (G121PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G121PL >= G123PL) || (G121PL == 0) +/* Задаёт MG123_11PL = ~(1); данные MG123_11PL. */ #define MG123_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG123_11PL = 0xFFFF; данные MG123_11PL. */ #define MG123_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G122PL >= G123PL) или (G122PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G122PL >= G123PL) || (G122PL == 0) +/* Задаёт MG123_12PL = ~(1 << 1); данные MG123_12PL. */ #define MG123_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG123_12PL = 0xFFFF; данные MG123_12PL. */ #define MG123_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G124PL >= G123PL) или (G124PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G124PL >= G123PL) || (G124PL == 0) +/* Задаёт MG123_14PL = ~(1 << 3); данные MG123_14PL. */ #define MG123_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG123_14PL = 0xFFFF; данные MG123_14PL. */ #define MG123_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G125PL >= G123PL) или (G125PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G125PL >= G123PL) || (G125PL == 0) +/* Задаёт MG123_15PL = ~(1 << 4); данные MG123_15PL. */ #define MG123_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG123_15PL = 0xFFFF; данные MG123_15PL. */ #define MG123_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G126PL >= G123PL) или (G126PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G126PL >= G123PL) || (G126PL == 0) +/* Задаёт MG123_16PL = ~(1 << 5); данные MG123_16PL. */ #define MG123_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG123_16PL = 0xFFFF; данные MG123_16PL. */ #define MG123_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G127PL >= G123PL) или (G127PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G127PL >= G123PL) || (G127PL == 0) +/* Задаёт MG123_17PL = ~(1 << 6); данные MG123_17PL. */ #define MG123_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG123_17PL = 0xFFFF; данные MG123_17PL. */ #define MG123_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G128PL >= G123PL) или (G128PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G128PL >= G123PL) || (G128PL == 0) +/* Задаёт MG123_18PL = ~(1 << 7); данные MG123_18PL. */ #define MG123_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG123_18PL = 0xFFFF; данные MG123_18PL. */ #define MG123_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG123_13PL = 0x00FB; данные MG123_13PL. */ #define MG123_13PL 0x00FB +/* Задаёт MG123 = (MG123_11PL & MG123_12PL & MG123_13PL & MG123_14PL &; маска разрешённых прерываний внутри группы PIE 123. */ #define MG123 (MG123_11PL & MG123_12PL & MG123_13PL & MG123_14PL & \ - MG123_15PL & MG123_16PL & MG123_17PL & MG123_18PL) + MG123_15PL & MG123_16PL & MG123_17PL & MG123_18PL) /* Продолжает список аргументов, полей или выражение MG123_15PL & MG123_16PL & MG123_17PL & MG123_18PL); порядок элементов сохраняется. */ // End of MG123: // Beginning of MG124: +/* Условие компиляции (G121PL >= G124PL) или (G121PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G121PL >= G124PL) || (G121PL == 0) +/* Задаёт MG124_11PL = ~(1); данные MG124_11PL. */ #define MG124_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG124_11PL = 0xFFFF; данные MG124_11PL. */ #define MG124_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G122PL >= G124PL) или (G122PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G122PL >= G124PL) || (G122PL == 0) +/* Задаёт MG124_12PL = ~(1 << 1); данные MG124_12PL. */ #define MG124_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG124_12PL = 0xFFFF; данные MG124_12PL. */ #define MG124_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G123PL >= G124PL) или (G123PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G123PL >= G124PL) || (G123PL == 0) +/* Задаёт MG124_13PL = ~(1 << 2); данные MG124_13PL. */ #define MG124_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG124_13PL = 0xFFFF; данные MG124_13PL. */ #define MG124_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G125PL >= G124PL) или (G125PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G125PL >= G124PL) || (G125PL == 0) +/* Задаёт MG124_15PL = ~(1 << 4); данные MG124_15PL. */ #define MG124_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG124_15PL = 0xFFFF; данные MG124_15PL. */ #define MG124_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G126PL >= G124PL) или (G126PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G126PL >= G124PL) || (G126PL == 0) +/* Задаёт MG124_16PL = ~(1 << 5); данные MG124_16PL. */ #define MG124_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG124_16PL = 0xFFFF; данные MG124_16PL. */ #define MG124_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G127PL >= G124PL) или (G127PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G127PL >= G124PL) || (G127PL == 0) +/* Задаёт MG124_17PL = ~(1 << 6); данные MG124_17PL. */ #define MG124_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG124_17PL = 0xFFFF; данные MG124_17PL. */ #define MG124_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G128PL >= G124PL) или (G128PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G128PL >= G124PL) || (G128PL == 0) +/* Задаёт MG124_18PL = ~(1 << 7); данные MG124_18PL. */ #define MG124_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG124_18PL = 0xFFFF; данные MG124_18PL. */ #define MG124_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG124_14PL = 0x00F7; данные MG124_14PL. */ #define MG124_14PL 0x00F7 +/* Задаёт MG124 = (MG124_11PL & MG124_12PL & MG124_13PL & MG124_14PL &; маска разрешённых прерываний внутри группы PIE 124. */ #define MG124 (MG124_11PL & MG124_12PL & MG124_13PL & MG124_14PL & \ - MG124_15PL & MG124_16PL & MG124_17PL & MG124_18PL) + MG124_15PL & MG124_16PL & MG124_17PL & MG124_18PL) /* Продолжает список аргументов, полей или выражение MG124_15PL & MG124_16PL & MG124_17PL & MG124_18PL); порядок элементов сохраняется. */ // End of MG124: // Beginning of MG125: +/* Условие компиляции (G121PL >= G125PL) или (G121PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G121PL >= G125PL) || (G121PL == 0) +/* Задаёт MG125_11PL = ~(1); данные MG125_11PL. */ #define MG125_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG125_11PL = 0xFFFF; данные MG125_11PL. */ #define MG125_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G122PL >= G125PL) или (G122PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G122PL >= G125PL) || (G122PL == 0) +/* Задаёт MG125_12PL = ~(1 << 1); данные MG125_12PL. */ #define MG125_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG125_12PL = 0xFFFF; данные MG125_12PL. */ #define MG125_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G123PL >= G125PL) или (G123PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G123PL >= G125PL) || (G123PL == 0) +/* Задаёт MG125_13PL = ~(1 << 2); данные MG125_13PL. */ #define MG125_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG125_13PL = 0xFFFF; данные MG125_13PL. */ #define MG125_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G124PL >= G125PL) или (G124PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G124PL >= G125PL) || (G124PL == 0) +/* Задаёт MG125_14PL = ~(1 << 3); данные MG125_14PL. */ #define MG125_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG125_14PL = 0xFFFF; данные MG125_14PL. */ #define MG125_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G126PL >= G125PL) или (G126PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G126PL >= G125PL) || (G126PL == 0) +/* Задаёт MG125_16PL = ~(1 << 5); данные MG125_16PL. */ #define MG125_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG125_16PL = 0xFFFF; данные MG125_16PL. */ #define MG125_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G127PL >= G125PL) или (G127PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G127PL >= G125PL) || (G127PL == 0) +/* Задаёт MG125_17PL = ~(1 << 6); данные MG125_17PL. */ #define MG125_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG125_17PL = 0xFFFF; данные MG125_17PL. */ #define MG125_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G128PL >= G125PL) или (G128PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G128PL >= G125PL) || (G128PL == 0) +/* Задаёт MG125_18PL = ~(1 << 7); данные MG125_18PL. */ #define MG125_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG125_18PL = 0xFFFF; данные MG125_18PL. */ #define MG125_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG125_15PL = 0x00EF; данные MG125_15PL. */ #define MG125_15PL 0x00EF +/* Задаёт MG125 = (MG125_11PL & MG125_12PL & MG125_13PL & MG125_14PL &; маска разрешённых прерываний внутри группы PIE 125. */ #define MG125 (MG125_11PL & MG125_12PL & MG125_13PL & MG125_14PL & \ - MG125_15PL & MG125_16PL & MG125_17PL & MG125_18PL) + MG125_15PL & MG125_16PL & MG125_17PL & MG125_18PL) /* Продолжает список аргументов, полей или выражение MG125_15PL & MG125_16PL & MG125_17PL & MG125_18PL); порядок элементов сохраняется. */ // End of MG125: // Beginning of MG126: +/* Условие компиляции (G121PL >= G126PL) или (G121PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G121PL >= G126PL) || (G121PL == 0) +/* Задаёт MG126_11PL = ~(1); данные MG126_11PL. */ #define MG126_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG126_11PL = 0xFFFF; данные MG126_11PL. */ #define MG126_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G122PL >= G126PL) или (G122PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G122PL >= G126PL) || (G122PL == 0) +/* Задаёт MG126_12PL = ~(1 << 1); данные MG126_12PL. */ #define MG126_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG126_12PL = 0xFFFF; данные MG126_12PL. */ #define MG126_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G123PL >= G126PL) или (G123PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G123PL >= G126PL) || (G123PL == 0) +/* Задаёт MG126_13PL = ~(1 << 2); данные MG126_13PL. */ #define MG126_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG126_13PL = 0xFFFF; данные MG126_13PL. */ #define MG126_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G124PL >= G126PL) или (G124PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G124PL >= G126PL) || (G124PL == 0) +/* Задаёт MG126_14PL = ~(1 << 3); данные MG126_14PL. */ #define MG126_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG126_14PL = 0xFFFF; данные MG126_14PL. */ #define MG126_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G125PL >= G126PL) или (G125PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G125PL >= G126PL) || (G125PL == 0) +/* Задаёт MG126_15PL = ~(1 << 4); данные MG126_15PL. */ #define MG126_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG126_15PL = 0xFFFF; данные MG126_15PL. */ #define MG126_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G127PL >= G126PL) или (G127PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G127PL >= G126PL) || (G127PL == 0) +/* Задаёт MG126_17PL = ~(1 << 6); данные MG126_17PL. */ #define MG126_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG126_17PL = 0xFFFF; данные MG126_17PL. */ #define MG126_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G128PL >= G126PL) или (G128PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G128PL >= G126PL) || (G128PL == 0) +/* Задаёт MG126_18PL = ~(1 << 7); данные MG126_18PL. */ #define MG126_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG126_18PL = 0xFFFF; данные MG126_18PL. */ #define MG126_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG126_16PL = 0x00DF; данные MG126_16PL. */ #define MG126_16PL 0x00DF +/* Задаёт MG126 = (MG126_11PL & MG126_12PL & MG126_13PL & MG126_14PL &; маска разрешённых прерываний внутри группы PIE 126. */ #define MG126 (MG126_11PL & MG126_12PL & MG126_13PL & MG126_14PL & \ - MG126_15PL & MG126_16PL & MG126_17PL & MG126_18PL) + MG126_15PL & MG126_16PL & MG126_17PL & MG126_18PL) /* Продолжает список аргументов, полей или выражение MG126_15PL & MG126_16PL & MG126_17PL & MG126_18PL); порядок элементов сохраняется. */ // End of MG126: // Beginning of MG127: +/* Условие компиляции (G121PL >= G127PL) или (G121PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G121PL >= G127PL) || (G121PL == 0) +/* Задаёт MG127_11PL = ~(1); данные MG127_11PL. */ #define MG127_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG127_11PL = 0xFFFF; данные MG127_11PL. */ #define MG127_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G122PL >= G127PL) или (G122PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G122PL >= G127PL) || (G122PL == 0) +/* Задаёт MG127_12PL = ~(1 << 1); данные MG127_12PL. */ #define MG127_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG127_12PL = 0xFFFF; данные MG127_12PL. */ #define MG127_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G123PL >= G127PL) или (G123PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G123PL >= G127PL) || (G123PL == 0) +/* Задаёт MG127_13PL = ~(1 << 2); данные MG127_13PL. */ #define MG127_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG127_13PL = 0xFFFF; данные MG127_13PL. */ #define MG127_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G124PL >= G127PL) или (G124PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G124PL >= G127PL) || (G124PL == 0) +/* Задаёт MG127_14PL = ~(1 << 3); данные MG127_14PL. */ #define MG127_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG127_14PL = 0xFFFF; данные MG127_14PL. */ #define MG127_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G125PL >= G127PL) или (G125PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G125PL >= G127PL) || (G125PL == 0) +/* Задаёт MG127_15PL = ~(1 << 4); данные MG127_15PL. */ #define MG127_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG127_15PL = 0xFFFF; данные MG127_15PL. */ #define MG127_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G126PL >= G127PL) или (G126PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G126PL >= G127PL) || (G126PL == 0) +/* Задаёт MG127_16PL = ~(1 << 5); данные MG127_16PL. */ #define MG127_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG127_16PL = 0xFFFF; данные MG127_16PL. */ #define MG127_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G128PL >= G127PL) или (G128PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G128PL >= G127PL) || (G128PL == 0) +/* Задаёт MG127_18PL = ~(1 << 7); данные MG127_18PL. */ #define MG127_18PL ~(1 << 7) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG127_18PL = 0xFFFF; данные MG127_18PL. */ #define MG127_18PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG127_17PL = 0x00BF; данные MG127_17PL. */ #define MG127_17PL 0x00BF +/* Задаёт MG127 = (MG127_11PL & MG127_12PL & MG127_13PL & MG127_14PL &; маска разрешённых прерываний внутри группы PIE 127. */ #define MG127 (MG127_11PL & MG127_12PL & MG127_13PL & MG127_14PL & \ - MG127_15PL & MG127_16PL & MG127_17PL & MG127_18PL) + MG127_15PL & MG127_16PL & MG127_17PL & MG127_18PL) /* Продолжает список аргументов, полей или выражение MG127_15PL & MG127_16PL & MG127_17PL & MG127_18PL); порядок элементов сохраняется. */ // End of MG127: // Beginning of MG128: +/* Условие компиляции (G121PL >= G128PL) или (G121PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G121PL >= G128PL) || (G121PL == 0) +/* Задаёт MG128_11PL = ~(1); данные MG128_11PL. */ #define MG128_11PL ~(1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG128_11PL = 0xFFFF; данные MG128_11PL. */ #define MG128_11PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G122PL >= G128PL) или (G122PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G122PL >= G128PL) || (G122PL == 0) +/* Задаёт MG128_12PL = ~(1 << 1); данные MG128_12PL. */ #define MG128_12PL ~(1 << 1) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG128_12PL = 0xFFFF; данные MG128_12PL. */ #define MG128_12PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G123PL >= G128PL) или (G123PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G123PL >= G128PL) || (G123PL == 0) +/* Задаёт MG128_13PL = ~(1 << 2); данные MG128_13PL. */ #define MG128_13PL ~(1 << 2) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG128_13PL = 0xFFFF; данные MG128_13PL. */ #define MG128_13PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G124PL >= G128PL) или (G124PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G124PL >= G128PL) || (G124PL == 0) +/* Задаёт MG128_14PL = ~(1 << 3); данные MG128_14PL. */ #define MG128_14PL ~(1 << 3) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG128_14PL = 0xFFFF; данные MG128_14PL. */ #define MG128_14PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G125PL >= G128PL) или (G125PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G125PL >= G128PL) || (G125PL == 0) +/* Задаёт MG128_15PL = ~(1 << 4); данные MG128_15PL. */ #define MG128_15PL ~(1 << 4) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG128_15PL = 0xFFFF; данные MG128_15PL. */ #define MG128_15PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G126PL >= G128PL) или (G126PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G126PL >= G128PL) || (G126PL == 0) +/* Задаёт MG128_16PL = ~(1 << 5); данные MG128_16PL. */ #define MG128_16PL ~(1 << 5) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG128_16PL = 0xFFFF; данные MG128_16PL. */ #define MG128_16PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции (G127PL >= G128PL) или (G127PL == 0): выбранный блок включается в текущий вариант прошивки. */ #if (G127PL >= G128PL) || (G127PL == 0) +/* Задаёт MG128_17PL = ~(1 << 6); данные MG128_17PL. */ #define MG128_17PL ~(1 << 6) +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Задаёт MG128_17PL = 0xFFFF; данные MG128_17PL. */ #define MG128_17PL 0xFFFF +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт MG128_18PL = 0x007F; данные MG128_18PL. */ #define MG128_18PL 0x007F +/* Задаёт MG128 = (MG128_11PL & MG128_12PL & MG128_13PL & MG128_14PL &; маска разрешённых прерываний внутри группы PIE 128. */ #define MG128 (MG128_11PL & MG128_12PL & MG128_13PL & MG128_14PL & \ - MG128_15PL & MG128_16PL & MG128_17PL & MG128_18PL) + MG128_15PL & MG128_16PL & MG128_17PL & MG128_18PL) /* Продолжает список аргументов, полей или выражение MG128_15PL & MG128_16PL & MG128_17PL & MG128_18PL); порядок элементов сохраняется. */ // End of MG128: +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // eof //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/include/DSP28x_Project.h b/Source/External/v120/DSP2833x_common/include/DSP28x_Project.h index 399c1db..6c936cd 100644 --- a/Source/External/v120/DSP2833x_common/include/DSP28x_Project.h +++ b/Source/External/v120/DSP2833x_common/include/DSP28x_Project.h @@ -1,3 +1,4 @@ +/* Настройки и интерфейс DSP28x_Project. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: April 22, 2008 14:35:56 $ @@ -12,11 +13,16 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP28x_PROJECT_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP28x_PROJECT_H +/* Определяет защитный символ или переключатель DSP28x_PROJECT_H для последующей компиляции. */ #define DSP28x_PROJECT_H +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // DSP2833x Examples Include File +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP28x_PROJECT_H definition diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm b/Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm index 7108ffa..fe502df 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm @@ -1,3 +1,4 @@ +; Поставляемое ti описание adc_cal для семейства c2833x. Пояснения в UTF-8. ;; TI File $Revision: /main/1 $ ;; Checkin $Date: July 30, 2007 10:29:23 $ ;;########################################################################### @@ -8,7 +9,7 @@ ;; ;; Functions: ;; -;; _ADC_cal - Copies device specific calibration data into ADCREFSEL and ADCOFFTRIM registers +;; _ADC_cal - Copies device specific calibration data into ADCREFSEL and ADCOFFTRIM registers ;; Notes: ;; ;;########################################################################### @@ -16,27 +17,35 @@ ;; $Release Date: August 1, 2008 $ ;;########################################################################### + ; Экспортирует символ для связывания с C-кодом. Операция: .def _ADC_cal. .def _ADC_cal + ; Задаёт текстовый псевдоним константы для ассемблера. Операция: .asg "0x711C", ADCREFSEL_LOC. .asg "0x711C", ADCREFSEL_LOC ;----------------------------------------------- ; _ADC_cal ;----------------------------------------------- ;----------------------------------------------- -; This is the ADC cal routine.This routine is programmed into -; reserved memory by the factory. 0xAAAA and 0xBBBB are place- -; holders for calibration data. -;The actual values programmed by TI are device specific. +; This is the ADC cal routine.This routine is programmed into +; reserved memory by the factory. 0xAAAA and 0xBBBB are place- +; holders for calibration data. +;The actual values programmed by TI are device specific. ; ; This function assumes that the clocks have been ; enabled to the ADC module. ;----------------------------------------------- + ; Выбирает секцию объектного файла для следующих инструкций. Операция: .sect ".adc_cal". .sect ".adc_cal" +; Объявляет метку _ADC_cal для перехода или вызова. Операция: _ADC_cal. _ADC_cal + ; Загружает регистр страниц данных DP для доступа к указанной области. Операция: MOVW DP, #ADCREFSEL_LOC >> 6. MOVW DP, #ADCREFSEL_LOC >> 6 + ; Переносит операнд в регистр или ячейку назначения. Операция: MOV @28, #0xAAAA. MOV @28, #0xAAAA ; actual value may not be 0xAAAA + ; Переносит операнд в регистр или ячейку назначения. Операция: MOV @29, #0xBBBB. MOV @29, #0xBBBB ; actual value may not be 0xBBBB + ; Возвращает управление вызывающему коду через длинный адрес возврата. Операция: LRETR. LRETR ;eof ---------- diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c b/Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c index 730415b..d2bc54d 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Adc для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/5 $ // Checkin $Date: October 23, 2007 13:34:09 $ //########################################################################### @@ -11,9 +12,12 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // DSP2833x Examples Include File +/* Задаёт ADC_usDELAY = 5000L; АЦП us DELAY. */ #define ADC_usDELAY 5000L //--------------------------------------------------------------------------- @@ -21,8 +25,11 @@ //--------------------------------------------------------------------------- // This function initializes ADC to a known state. // +/* Начинает функцию InitAdc; назначение модуля — поставляемое TI описание Adc для семейства C2833x. */ void InitAdc(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет интерфейс функции DSP28x_usDelay; реализация вызывается через этот прототип. */ extern void DSP28x_usDelay(Uint32 Count); @@ -36,9 +43,13 @@ void InitAdc(void) // See the device data manual and/or the ADC Reference // Manual for more information. + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает SysCtrlRegs.PCLKCR0.bit.ADCENCLK значением 1; данные ADCENCLK. */ SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; + /* Вызывает ADC_cal с аргументами () в текущей последовательности операций. */ ADC_cal(); + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; @@ -53,10 +64,14 @@ void InitAdc(void) // CPU_RATE define statement in the DSP2833x_Examples.h file must // contain the correct CPU clock period in nanoseconds. + /* Записывает AdcRegs.ADCREFSEL.bit.REF_SEL значением 0x01; данные REF_SEL. */ AdcRegs.ADCREFSEL.bit.REF_SEL = 0x01; + /* Записывает AdcRegs.ADCTRL3.all значением 0x00E0; представление регистра целым словом без разбиения на битовые поля. */ AdcRegs.ADCTRL3.all = 0x00E0; // Power up bandgap/reference/ADC circuits + /* Вызывает DELAY_US с аргументами (ADC_usDELAY) в текущей последовательности операций. */ DELAY_US(ADC_usDELAY); // Delay before converting ADC channels //pause_us(50L); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c b/Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c index b0dfd76..d3c2840 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c @@ -1,3 +1,4 @@ +/* Поставляемое TI описание CpuTimers для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/3 $ // Checkin $Date: March 16, 2007 08:37:30 $ //########################################################################### @@ -18,13 +19,18 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // Examples Include File +/* Описывает структуру CPUTIMER_VARS CpuTimer0;; порядок полей определяет расположение данных. */ struct CPUTIMER_VARS CpuTimer0; // CpuTimer 1 and CpuTimer2 are used by DSP BIOS & other RTOS. Comment out if using DSP BIOS or other RTOS. +/* Описывает структуру CPUTIMER_VARS CpuTimer1;; порядок полей определяет расположение данных. */ struct CPUTIMER_VARS CpuTimer1; +/* Описывает структуру CPUTIMER_VARS CpuTimer2;; порядок полей определяет расположение данных. */ struct CPUTIMER_VARS CpuTimer2; //--------------------------------------------------------------------------- @@ -32,21 +38,30 @@ struct CPUTIMER_VARS CpuTimer2; //--------------------------------------------------------------------------- // This function initializes all three CPU timers to a known state. // +/* Начинает функцию InitCpuTimers; назначение модуля — поставляемое TI описание CpuTimers для семейства C2833x. */ void InitCpuTimers(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // CPU Timer 0 // Initialize address pointers to respective timer registers: + /* Записывает CpuTimer0.RegsAddr значением &CpuTimer0Regs; данные RegsAddr. */ CpuTimer0.RegsAddr = &CpuTimer0Regs; // Initialize timer period to maximum: + /* Записывает CpuTimer0Regs.PRD.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer0Regs.PRD.all = 0xFFFFFFFF; // Initialize pre-scale counter to divide by 1 (SYSCLKOUT): + /* Записывает CpuTimer0Regs.TPR.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer0Regs.TPR.all = 0; + /* Записывает CpuTimer0Regs.TPRH.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer0Regs.TPRH.all = 0; // Make sure timer is stopped: + /* Записывает CpuTimer0Regs.TCR.bit.TSS значением 1; данные TSS. */ CpuTimer0Regs.TCR.bit.TSS = 1; // Reload all counter register with period value: + /* Записывает CpuTimer0Regs.TCR.bit.TRB значением 1; данные TRB. */ CpuTimer0Regs.TCR.bit.TRB = 1; // Reset interrupt counters: + /* Записывает CpuTimer0.InterruptCount значением 0; прерывание число. */ CpuTimer0.InterruptCount = 0; @@ -55,26 +70,41 @@ void InitCpuTimers(void) // DSP-BIOS or another realtime OS. // // Initialize address pointers to respective timer registers: + /* Записывает CpuTimer1.RegsAddr значением &CpuTimer1Regs; данные RegsAddr. */ CpuTimer1.RegsAddr = &CpuTimer1Regs; + /* Записывает CpuTimer2.RegsAddr значением &CpuTimer2Regs; данные RegsAddr. */ CpuTimer2.RegsAddr = &CpuTimer2Regs; // Initialize timer period to maximum: + /* Записывает CpuTimer1Regs.PRD.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer1Regs.PRD.all = 0xFFFFFFFF; + /* Записывает CpuTimer2Regs.PRD.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer2Regs.PRD.all = 0xFFFFFFFF; // Initialize pre-scale counter to divide by 1 (SYSCLKOUT): + /* Записывает CpuTimer1Regs.TPR.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer1Regs.TPR.all = 0; + /* Записывает CpuTimer1Regs.TPRH.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer1Regs.TPRH.all = 0; + /* Записывает CpuTimer2Regs.TPR.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer2Regs.TPR.all = 0; + /* Записывает CpuTimer2Regs.TPRH.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer2Regs.TPRH.all = 0; // Make sure timers are stopped: + /* Записывает CpuTimer1Regs.TCR.bit.TSS значением 1; данные TSS. */ CpuTimer1Regs.TCR.bit.TSS = 1; + /* Записывает CpuTimer2Regs.TCR.bit.TSS значением 1; данные TSS. */ CpuTimer2Regs.TCR.bit.TSS = 1; // Reload all counter register with period value: + /* Записывает CpuTimer1Regs.TCR.bit.TRB значением 1; данные TRB. */ CpuTimer1Regs.TCR.bit.TRB = 1; + /* Записывает CpuTimer2Regs.TCR.bit.TRB значением 1; данные TRB. */ CpuTimer2Regs.TCR.bit.TRB = 1; // Reset interrupt counters: + /* Записывает CpuTimer1.InterruptCount значением 0; прерывание число. */ CpuTimer1.InterruptCount = 0; + /* Записывает CpuTimer2.InterruptCount значением 0; прерывание число. */ CpuTimer2.InterruptCount = 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //--------------------------------------------------------------------------- @@ -85,29 +115,45 @@ void InitCpuTimers(void) // and the period in "uSeconds". The timer is held in the stopped state // after configuration. // +/* Начинает функцию ConfigCpuTimer; назначение модуля — поставляемое TI описание CpuTimers для семейства C2833x. */ void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет temp — данные temp. */ Uint32 temp; // Initialize timer period: + /* Записывает Timer->CPUFreqInMHz значением Freq; таймер CPU Freq In M Hz. */ Timer->CPUFreqInMHz = Freq; + /* Записывает Timer->PeriodInUSec значением Period; таймер период In U Sec. */ Timer->PeriodInUSec = Period; + /* Записывает temp значением (long) (Freq * Period); данные temp. */ temp = (long) (Freq * Period); + /* Записывает Timer->RegsAddr->PRD.all значением temp; представление регистра целым словом без разбиения на битовые поля. */ Timer->RegsAddr->PRD.all = temp; // Set pre-scale counter to divide by 1 (SYSCLKOUT): + /* Записывает Timer->RegsAddr->TPR.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ Timer->RegsAddr->TPR.all = 0; + /* Записывает Timer->RegsAddr->TPRH.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ Timer->RegsAddr->TPRH.all = 0; // Initialize timer control register: + /* Записывает Timer->RegsAddr->TCR.bit.TSS значением 1; данные TSS. */ Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer + /* Записывает Timer->RegsAddr->TCR.bit.TRB значением 1; данные TRB. */ Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer + /* Записывает Timer->RegsAddr->TCR.bit.SOFT значением 0; данные SOFT. */ Timer->RegsAddr->TCR.bit.SOFT = 0; + /* Записывает Timer->RegsAddr->TCR.bit.FREE значением 0; данные FREE. */ Timer->RegsAddr->TCR.bit.FREE = 0; // Timer Free Run Disabled + /* Записывает Timer->RegsAddr->TCR.bit.TIE значением 1; данные TIE. */ Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt // Reset interrupt counter: + /* Записывает Timer->InterruptCount значением 0; таймер прерывание число. */ Timer->InterruptCount = 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c b/Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c index f1eafe3..ff559f3 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c @@ -1,3 +1,4 @@ +/* Поставляемое TI описание PieCtrl для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:46:35 $ //########################################################################### @@ -11,70 +12,107 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // DSP2833x Examples Include File //--------------------------------------------------------------------------- -// InitPieCtrl: +// InitPieCtrl: //--------------------------------------------------------------------------- // This function initializes the PIE control registers to a known state. // +/* Начинает функцию InitPieCtrl; назначение модуля — поставляемое TI описание PieCtrl для семейства C2833x. */ void InitPieCtrl(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Disable Interrupts at the CPU level: + /* Запрет маскируемых прерываний ядра. */ DINT; // Disable the PIE + /* Записывает PieCtrlRegs.PIECTRL.bit.ENPIE значением 0; данные ENPIE. */ PieCtrlRegs.PIECTRL.bit.ENPIE = 0; // Clear all PIEIER registers: + /* Записывает PieCtrlRegs.PIEIER1.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all = 0; + /* Записывает PieCtrlRegs.PIEIER2.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all = 0; - PieCtrlRegs.PIEIER3.all = 0; + /* Записывает PieCtrlRegs.PIEIER3.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEIER3.all = 0; + /* Записывает PieCtrlRegs.PIEIER4.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all = 0; + /* Записывает PieCtrlRegs.PIEIER5.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER5.all = 0; + /* Записывает PieCtrlRegs.PIEIER6.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all = 0; + /* Записывает PieCtrlRegs.PIEIER7.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all = 0; + /* Записывает PieCtrlRegs.PIEIER8.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER8.all = 0; + /* Записывает PieCtrlRegs.PIEIER9.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = 0; + /* Записывает PieCtrlRegs.PIEIER10.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER10.all = 0; + /* Записывает PieCtrlRegs.PIEIER11.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER11.all = 0; + /* Записывает PieCtrlRegs.PIEIER12.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all = 0; // Clear all PIEIFR registers: + /* Записывает PieCtrlRegs.PIEIFR1.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR1.all = 0; + /* Записывает PieCtrlRegs.PIEIFR2.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR2.all = 0; - PieCtrlRegs.PIEIFR3.all = 0; + /* Записывает PieCtrlRegs.PIEIFR3.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEIFR3.all = 0; + /* Записывает PieCtrlRegs.PIEIFR4.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR4.all = 0; + /* Записывает PieCtrlRegs.PIEIFR5.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR5.all = 0; + /* Записывает PieCtrlRegs.PIEIFR6.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR6.all = 0; + /* Записывает PieCtrlRegs.PIEIFR7.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR7.all = 0; + /* Записывает PieCtrlRegs.PIEIFR8.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR8.all = 0; + /* Записывает PieCtrlRegs.PIEIFR9.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR9.all = 0; + /* Записывает PieCtrlRegs.PIEIFR10.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR10.all = 0; + /* Записывает PieCtrlRegs.PIEIFR11.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR11.all = 0; + /* Записывает PieCtrlRegs.PIEIFR12.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIFR12.all = 0; -} +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} //--------------------------------------------------------------------------- -// EnableInterrupts: +// EnableInterrupts: //--------------------------------------------------------------------------- // This function enables the PIE module and CPU interrupts // +/* Начинает функцию EnableInterrupts; назначение модуля — поставляемое TI описание PieCtrl для семейства C2833x. */ void EnableInterrupts() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Enable the PIE + /* Записывает PieCtrlRegs.PIECTRL.bit.ENPIE значением 1; данные ENPIE. */ PieCtrlRegs.PIECTRL.bit.ENPIE = 1; - - // Enables PIE to drive a pulse into the CPU - PieCtrlRegs.PIEACK.all = 0xFFFF; - // Enable Interrupts at the CPU level + // Enables PIE to drive a pulse into the CPU + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEACK.all = 0xFFFF; + + // Enable Interrupts at the CPU level + /* Разрешение маскируемых прерываний ядра. */ EINT; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_PieVect.c b/Source/External/v120/DSP2833x_common/source/DSP2833x_PieVect.c index d163c54..371d968 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_PieVect.c +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_PieVect.c @@ -1,3 +1,4 @@ +/* Поставляемое TI описание PieVect для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:46:38 $ //########################################################################### @@ -11,192 +12,335 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // DSP2833x Examples Include File +/* Записывает PieVectTableInit значением {; данные PieVectTableInit. */ const struct PIE_VECT_TABLE PieVectTableInit = { + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // 0 Reserved space - PIE_RESERVED, // 1 Reserved space - PIE_RESERVED, // 2 Reserved space - PIE_RESERVED, // 3 Reserved space - PIE_RESERVED, // 4 Reserved space - PIE_RESERVED, // 5 Reserved space - PIE_RESERVED, // 6 Reserved space - PIE_RESERVED, // 7 Reserved space - PIE_RESERVED, // 8 Reserved space - PIE_RESERVED, // 9 Reserved space - PIE_RESERVED, // 10 Reserved space - PIE_RESERVED, // 11 Reserved space - PIE_RESERVED, // 12 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 1 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 2 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 3 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 4 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 5 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 6 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 7 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 8 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 9 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 10 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 11 Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ + PIE_RESERVED, // 12 Reserved space // Non-Peripheral Interrupts + /* Продолжает список аргументов, полей или выражение INT13_ISR,; порядок элементов сохраняется. */ INT13_ISR, // XINT13 or CPU-Timer 1 + /* Продолжает список аргументов, полей или выражение INT14_ISR,; порядок элементов сохраняется. */ INT14_ISR, // CPU-Timer2 + /* Продолжает список аргументов, полей или выражение DATALOG_ISR,; порядок элементов сохраняется. */ DATALOG_ISR, // Datalogging interrupt + /* Продолжает список аргументов, полей или выражение RTOSINT_ISR,; порядок элементов сохраняется. */ RTOSINT_ISR, // RTOS interrupt + /* Продолжает список аргументов, полей или выражение EMUINT_ISR,; порядок элементов сохраняется. */ EMUINT_ISR, // Emulation interrupt + /* Продолжает список аргументов, полей или выражение NMI_ISR,; порядок элементов сохраняется. */ NMI_ISR, // Non-maskable interrupt + /* Продолжает список аргументов, полей или выражение ILLEGAL_ISR,; порядок элементов сохраняется. */ ILLEGAL_ISR, // Illegal operation TRAP + /* Продолжает список аргументов, полей или выражение USER1_ISR,; порядок элементов сохраняется. */ USER1_ISR, // User Defined trap 1 + /* Продолжает список аргументов, полей или выражение USER2_ISR,; порядок элементов сохраняется. */ USER2_ISR, // User Defined trap 2 + /* Продолжает список аргументов, полей или выражение USER3_ISR,; порядок элементов сохраняется. */ USER3_ISR, // User Defined trap 3 + /* Продолжает список аргументов, полей или выражение USER4_ISR,; порядок элементов сохраняется. */ USER4_ISR, // User Defined trap 4 + /* Продолжает список аргументов, полей или выражение USER5_ISR,; порядок элементов сохраняется. */ USER5_ISR, // User Defined trap 5 + /* Продолжает список аргументов, полей или выражение USER6_ISR,; порядок элементов сохраняется. */ USER6_ISR, // User Defined trap 6 + /* Продолжает список аргументов, полей или выражение USER7_ISR,; порядок элементов сохраняется. */ USER7_ISR, // User Defined trap 7 + /* Продолжает список аргументов, полей или выражение USER8_ISR,; порядок элементов сохраняется. */ USER8_ISR, // User Defined trap 8 + /* Продолжает список аргументов, полей или выражение USER9_ISR,; порядок элементов сохраняется. */ USER9_ISR, // User Defined trap 9 + /* Продолжает список аргументов, полей или выражение USER10_ISR,; порядок элементов сохраняется. */ USER10_ISR, // User Defined trap 10 + /* Продолжает список аргументов, полей или выражение USER11_ISR,; порядок элементов сохраняется. */ USER11_ISR, // User Defined trap 11 + /* Продолжает список аргументов, полей или выражение USER12_ISR,; порядок элементов сохраняется. */ USER12_ISR, // User Defined trap 12 // Group 1 PIE Vectors - SEQ1INT_ISR, // 1.1 ADC - SEQ2INT_ISR, // 1.2 ADC + /* Продолжает список аргументов, полей или выражение SEQ1INT_ISR,; порядок элементов сохраняется. */ + SEQ1INT_ISR, // 1.1 ADC + /* Продолжает список аргументов, полей или выражение SEQ2INT_ISR,; порядок элементов сохраняется. */ + SEQ2INT_ISR, // 1.2 ADC + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, // 1.3 - XINT1_ISR, // 1.4 + /* Продолжает список аргументов, полей или выражение XINT1_ISR,; порядок элементов сохраняется. */ + XINT1_ISR, // 1.4 + /* Продолжает список аргументов, полей или выражение XINT2_ISR,; порядок элементов сохраняется. */ XINT2_ISR, // 1.5 + /* Продолжает список аргументов, полей или выражение ADCINT_ISR,; порядок элементов сохраняется. */ ADCINT_ISR, // 1.6 ADC + /* Продолжает список аргументов, полей или выражение TINT0_ISR,; порядок элементов сохраняется. */ TINT0_ISR, // 1.7 Timer 0 + /* Продолжает список аргументов, полей или выражение WAKEINT_ISR,; порядок элементов сохраняется. */ WAKEINT_ISR, // 1.8 WD, Low Power // Group 2 PIE Vectors + /* Продолжает список аргументов, полей или выражение EPWM1_TZINT_ISR,; порядок элементов сохраняется. */ EPWM1_TZINT_ISR, // 2.1 EPWM-1 Trip Zone + /* Продолжает список аргументов, полей или выражение EPWM2_TZINT_ISR,; порядок элементов сохраняется. */ EPWM2_TZINT_ISR, // 2.2 EPWM-2 Trip Zone + /* Продолжает список аргументов, полей или выражение EPWM3_TZINT_ISR,; порядок элементов сохраняется. */ EPWM3_TZINT_ISR, // 2.3 EPWM-3 Trip Zone + /* Продолжает список аргументов, полей или выражение EPWM4_TZINT_ISR,; порядок элементов сохраняется. */ EPWM4_TZINT_ISR, // 2.4 EPWM-4 Trip Zone + /* Продолжает список аргументов, полей или выражение EPWM5_TZINT_ISR,; порядок элементов сохраняется. */ EPWM5_TZINT_ISR, // 2.5 EPWM-5 Trip Zone - EPWM6_TZINT_ISR, // 2.6 EPWM-6 Trip Zone + /* Продолжает список аргументов, полей или выражение EPWM6_TZINT_ISR,; порядок элементов сохраняется. */ + EPWM6_TZINT_ISR, // 2.6 EPWM-6 Trip Zone + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, // 2.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, // 2.8 - + // Group 3 PIE Vectors + /* Продолжает список аргументов, полей или выражение EPWM1_INT_ISR,; порядок элементов сохраняется. */ EPWM1_INT_ISR, // 3.1 EPWM-1 Interrupt + /* Продолжает список аргументов, полей или выражение EPWM2_INT_ISR,; порядок элементов сохраняется. */ EPWM2_INT_ISR, // 3.2 EPWM-2 Interrupt + /* Продолжает список аргументов, полей или выражение EPWM3_INT_ISR,; порядок элементов сохраняется. */ EPWM3_INT_ISR, // 3.3 EPWM-3 Interrupt + /* Продолжает список аргументов, полей или выражение EPWM4_INT_ISR,; порядок элементов сохраняется. */ EPWM4_INT_ISR, // 3.4 EPWM-4 Interrupt + /* Продолжает список аргументов, полей или выражение EPWM5_INT_ISR,; порядок элементов сохраняется. */ EPWM5_INT_ISR, // 3.5 EPWM-5 Interrupt - EPWM6_INT_ISR, // 3.6 EPWM-6 Interrupt + /* Продолжает список аргументов, полей или выражение EPWM6_INT_ISR,; порядок элементов сохраняется. */ + EPWM6_INT_ISR, // 3.6 EPWM-6 Interrupt + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, // 3.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, // 3.8 - + // Group 4 PIE Vectors + /* Продолжает список аргументов, полей или выражение ECAP1_INT_ISR,; порядок элементов сохраняется. */ ECAP1_INT_ISR, // 4.1 ECAP-1 + /* Продолжает список аргументов, полей или выражение ECAP2_INT_ISR,; порядок элементов сохраняется. */ ECAP2_INT_ISR, // 4.2 ECAP-2 + /* Продолжает список аргументов, полей или выражение ECAP3_INT_ISR,; порядок элементов сохраняется. */ ECAP3_INT_ISR, // 4.3 ECAP-3 - ECAP4_INT_ISR, // 4.4 ECAP-4 - ECAP5_INT_ISR, // 4.5 ECAP-5 - ECAP6_INT_ISR, // 4.6 ECAP-6 - rsvd_ISR, // 4.7 - rsvd_ISR, // 4.8 - + /* Продолжает список аргументов, полей или выражение ECAP4_INT_ISR,; порядок элементов сохраняется. */ + ECAP4_INT_ISR, // 4.4 ECAP-4 + /* Продолжает список аргументов, полей или выражение ECAP5_INT_ISR,; порядок элементов сохраняется. */ + ECAP5_INT_ISR, // 4.5 ECAP-5 + /* Продолжает список аргументов, полей или выражение ECAP6_INT_ISR,; порядок элементов сохраняется. */ + ECAP6_INT_ISR, // 4.6 ECAP-6 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 4.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 4.8 + // Group 5 PIE Vectors + /* Продолжает список аргументов, полей или выражение EQEP1_INT_ISR,; порядок элементов сохраняется. */ EQEP1_INT_ISR, // 5.1 EQEP-1 + /* Продолжает список аргументов, полей или выражение EQEP2_INT_ISR,; порядок элементов сохраняется. */ EQEP2_INT_ISR, // 5.2 EQEP-2 - rsvd_ISR, // 5.3 - rsvd_ISR, // 5.4 - rsvd_ISR, // 5.5 - rsvd_ISR, // 5.6 - rsvd_ISR, // 5.7 - rsvd_ISR, // 5.8 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 5.3 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 5.4 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 5.5 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 5.6 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 5.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 5.8 // Group 6 PIE Vectors + /* Продолжает список аргументов, полей или выражение SPIRXINTA_ISR,; порядок элементов сохраняется. */ SPIRXINTA_ISR, // 6.1 SPI-A + /* Продолжает список аргументов, полей или выражение SPITXINTA_ISR,; порядок элементов сохраняется. */ SPITXINTA_ISR, // 6.2 SPI-A + /* Продолжает список аргументов, полей или выражение MRINTA_ISR,; порядок элементов сохраняется. */ MRINTA_ISR, // 6.3 McBSP-A + /* Продолжает список аргументов, полей или выражение MXINTA_ISR,; порядок элементов сохраняется. */ MXINTA_ISR, // 6.4 McBSP-A + /* Продолжает список аргументов, полей или выражение MRINTB_ISR,; порядок элементов сохраняется. */ MRINTB_ISR, // 6.5 McBSP-B + /* Продолжает список аргументов, полей или выражение MXINTB_ISR,; порядок элементов сохраняется. */ MXINTB_ISR, // 6.6 McBSP-B - rsvd_ISR, // 6.7 - rsvd_ISR, // 6.8 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 6.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 6.8 + - // Group 7 PIE Vectors - DINTCH1_ISR, // 7.1 DMA channel 1 + /* Продолжает список аргументов, полей или выражение DINTCH1_ISR,; порядок элементов сохраняется. */ + DINTCH1_ISR, // 7.1 DMA channel 1 + /* Продолжает список аргументов, полей или выражение DINTCH2_ISR,; порядок элементов сохраняется. */ DINTCH2_ISR, // 7.2 DMA channel 2 - DINTCH3_ISR, // 7.3 DMA channel 3 - DINTCH4_ISR, // 7.4 DMA channel 4 - DINTCH5_ISR, // 7.5 DMA channel 5 - DINTCH6_ISR, // 7.6 DMA channel 6 - rsvd_ISR, // 7.7 - rsvd_ISR, // 7.8 + /* Продолжает список аргументов, полей или выражение DINTCH3_ISR,; порядок элементов сохраняется. */ + DINTCH3_ISR, // 7.3 DMA channel 3 + /* Продолжает список аргументов, полей или выражение DINTCH4_ISR,; порядок элементов сохраняется. */ + DINTCH4_ISR, // 7.4 DMA channel 4 + /* Продолжает список аргументов, полей или выражение DINTCH5_ISR,; порядок элементов сохраняется. */ + DINTCH5_ISR, // 7.5 DMA channel 5 + /* Продолжает список аргументов, полей или выражение DINTCH6_ISR,; порядок элементов сохраняется. */ + DINTCH6_ISR, // 7.6 DMA channel 6 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 7.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 7.8 // Group 8 PIE Vectors - I2CINT1A_ISR, // 8.1 I2C + /* Продолжает список аргументов, полей или выражение I2CINT1A_ISR,; порядок элементов сохраняется. */ + I2CINT1A_ISR, // 8.1 I2C + /* Продолжает список аргументов, полей или выражение I2CINT2A_ISR,; порядок элементов сохраняется. */ I2CINT2A_ISR, // 8.2 I2C - rsvd_ISR, // 8.3 - rsvd_ISR, // 8.4 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 8.3 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 8.4 + /* Продолжает список аргументов, полей или выражение SCIRXINTC_ISR,; порядок элементов сохраняется. */ SCIRXINTC_ISR, // 8.5 SCI-C - SCITXINTC_ISR, // 8.6 SCI-C - rsvd_ISR, // 8.7 - rsvd_ISR, // 8.8 - -// Group 9 PIE Vectors + /* Продолжает список аргументов, полей или выражение SCITXINTC_ISR,; порядок элементов сохраняется. */ + SCITXINTC_ISR, // 8.6 SCI-C + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 8.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 8.8 + +// Group 9 PIE Vectors + /* Продолжает список аргументов, полей или выражение SCIRXINTA_ISR,; порядок элементов сохраняется. */ SCIRXINTA_ISR, // 9.1 SCI-A + /* Продолжает список аргументов, полей или выражение SCITXINTA_ISR,; порядок элементов сохраняется. */ SCITXINTA_ISR, // 9.2 SCI-A + /* Продолжает список аргументов, полей или выражение SCIRXINTB_ISR,; порядок элементов сохраняется. */ SCIRXINTB_ISR, // 9.3 SCI-B + /* Продолжает список аргументов, полей или выражение SCITXINTB_ISR,; порядок элементов сохраняется. */ SCITXINTB_ISR, // 9.4 SCI-B + /* Продолжает список аргументов, полей или выражение ECAN0INTA_ISR,; порядок элементов сохраняется. */ ECAN0INTA_ISR, // 9.5 eCAN-A + /* Продолжает список аргументов, полей или выражение ECAN1INTA_ISR,; порядок элементов сохраняется. */ ECAN1INTA_ISR, // 9.6 eCAN-A + /* Продолжает список аргументов, полей или выражение ECAN0INTB_ISR,; порядок элементов сохраняется. */ ECAN0INTB_ISR, // 9.7 eCAN-B + /* Продолжает список аргументов, полей или выражение ECAN1INTB_ISR,; порядок элементов сохраняется. */ ECAN1INTB_ISR, // 9.8 eCAN-B - + // Group 10 PIE Vectors - rsvd_ISR, // 10.1 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 10.1 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, // 10.2 - rsvd_ISR, // 10.3 - rsvd_ISR, // 10.4 - rsvd_ISR, // 10.5 - rsvd_ISR, // 10.6 - rsvd_ISR, // 10.7 - rsvd_ISR, // 10.8 - + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 10.3 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 10.4 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 10.5 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 10.6 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 10.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 10.8 + // Group 11 PIE Vectors - rsvd_ISR, // 11.1 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 11.1 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, // 11.2 - rsvd_ISR, // 11.3 - rsvd_ISR, // 11.4 - rsvd_ISR, // 11.5 - rsvd_ISR, // 11.6 - rsvd_ISR, // 11.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 11.3 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 11.4 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 11.5 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 11.6 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 11.7 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, // 11.8 - + // Group 12 PIE Vectors - XINT3_ISR, // 12.1 + /* Продолжает список аргументов, полей или выражение XINT3_ISR,; порядок элементов сохраняется. */ + XINT3_ISR, // 12.1 + /* Продолжает список аргументов, полей или выражение XINT4_ISR,; порядок элементов сохраняется. */ XINT4_ISR, // 12.2 - XINT5_ISR, // 12.3 - XINT6_ISR, // 12.4 - XINT7_ISR, // 12.5 - rsvd_ISR, // 12.6 - LVF_ISR, // 12.7 - LUF_ISR, // 12.8 + /* Продолжает список аргументов, полей или выражение XINT5_ISR,; порядок элементов сохраняется. */ + XINT5_ISR, // 12.3 + /* Продолжает список аргументов, полей или выражение XINT6_ISR,; порядок элементов сохраняется. */ + XINT6_ISR, // 12.4 + /* Продолжает список аргументов, полей или выражение XINT7_ISR,; порядок элементов сохраняется. */ + XINT7_ISR, // 12.5 + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, // 12.6 + /* Продолжает список аргументов, полей или выражение LVF_ISR,; порядок элементов сохраняется. */ + LVF_ISR, // 12.7 + /* Продолжает список аргументов, полей или выражение LUF_ISR,; порядок элементов сохраняется. */ + LUF_ISR, // 12.8 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- -// InitPieVectTable: +// InitPieVectTable: //--------------------------------------------------------------------------- // This function initializes the PIE vector table to a known state. // This function must be executed after boot time. // +/* Начинает функцию InitPieVectTable; назначение модуля — поставляемое TI описание PieVect для семейства C2833x. */ void InitPieVectTable(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Продолжает список аргументов, полей или выражение int16 i;; порядок элементов сохраняется. */ int16 i; + /* Объявляет Source — данные Source; PieVectTableInit — данные PieVectTableInit. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */ Uint32 *Source = (void *) &PieVectTableInit; + /* Объявляет Dest — данные Dest; PieVectTable — данные PieVectTable. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */ Uint32 *Dest = (void *) &PieVectTable; - - EALLOW; + + /* Разрешение записи в защищённые регистры периферии. */ + EALLOW; + /* Цикл for(i=0; i < 128; i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0; i < 128; i++) - *Dest++ = *Source++; + /* Изменяет счётчик в выражении *Dest++ = *Source++; на один для следующего шага. */ + *Dest++ = *Source++; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; // Enable the PIE Vector Table - PieCtrlRegs.PIECTRL.bit.ENPIE = 1; - + /* Записывает PieCtrlRegs.PIECTRL.bit.ENPIE значением 1; данные ENPIE. */ + PieCtrlRegs.PIECTRL.bit.ENPIE = 1; + +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c b/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c index bf821e1..c81094e 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c @@ -1,3 +1,4 @@ +/* Поставляемое TI описание SWPrioritizedDefaultIsr для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/5 $ // Checkin $Date: January 14, 2008 11:28:12 $ //########################################################################### @@ -13,259 +14,388 @@ //########################################################################### +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // DSP2833x Examples Include File +/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */ #include "DSP2833x_SWPrioritizedIsrLevels.h" // Connected to INT13 of CPU (use MINT13 mask): // Note CPU-Timer1 is reserved for TI use, however XINT13 // ISR can be used by the user. +/* Условие компиляции (INT13PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL != 0) +/* Объявляет обработчик INT13_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void INT13_ISR(void) // INT13 or CPU-Timer1 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Устанавливает биты IER значением MINT13; регистр разрешения прерываний ядра C28x. */ IER |= MINT13; // Set "global" priority + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to INT14 of CPU (use MINT14 mask): +/* Условие компиляции (INT14PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL != 0) +/* Объявляет обработчик INT14_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void INT14_ISR(void) // CPU-Timer2 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Устанавливает биты IER значением MINT14; регистр разрешения прерываний ядра C28x. */ IER |= MINT14; // Set "global" priority + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to INT15 of CPU (use MINT15 mask): +/* Условие компиляции (INT15PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL != 0) +/* Объявляет обработчик DATALOG_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DATALOG_ISR(void) // Datalogging interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Устанавливает биты IER значением MINT15; регистр разрешения прерываний ядра C28x. */ IER |= MINT15; // Set "global" priority + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to INT16 of CPU (use MINT16 mask): +/* Условие компиляции (INT16PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL != 0) +/* Объявляет обработчик RTOSINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void RTOSINT_ISR(void) // RTOS interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Устанавливает биты IER значением MINT16; регистр разрешения прерываний ядра C28x. */ IER |= MINT16; // Set "global" priority + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to EMUINT of CPU (non-maskable): +/* Объявляет обработчик EMUINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EMUINT_ISR(void) // Emulation interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } // Connected to NMI of CPU (non-maskable): +/* Объявляет обработчик NMI_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void NMI_ISR(void) // Non-maskable interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик ILLEGAL_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ILLEGAL_ISR(void) // Illegal operation TRAP +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER1_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER1_ISR(void) // User Defined trap 1 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER2_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER2_ISR(void) // User Defined trap 2 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER3_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER3_ISR(void) // User Defined trap 3 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER4_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER4_ISR(void) // User Defined trap 4 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER5_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER5_ISR(void) // User Defined trap 5 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER6_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER6_ISR(void) // User Defined trap 6 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER7_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER7_ISR(void) // User Defined trap 7 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER8_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER8_ISR(void) // User Defined trap 8 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER9_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER9_ISR(void) // User Defined trap 9 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER10_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER10_ISR(void) // User Defined trap 10 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER11_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER11_ISR(void) // User Defined trap 11 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик USER12_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void USER12_ISR(void) // User Defined trap 12 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } @@ -274,41 +404,65 @@ interrupt void USER12_ISR(void) // User Defined trap 12 // ----------------------------------------------------------- // Connected to PIEIER1_1 (use MINT1 and MG11 masks): +/* Условие компиляции (G11PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G11PL != 0) +/* Объявляет обработчик SEQ1INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SEQ1INT_ISR( void ) // ADC +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + /* Устанавливает биты IER значением M_INT1; регистр разрешения прерываний ядра C28x. */ IER |= M_INT1; + /* Оставляет биты маски IER значением MINT1; регистр разрешения прерываний ядра C28x. */ IER &= MINT1; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG11; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all &= MG11; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER1_2 (use MINT1 and MG12 masks): +/* Условие компиляции (G12PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G12PL != 0) +/* Объявляет обработчик SEQ2INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SEQ2INT_ISR( void ) // ADC +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + /* Устанавливает биты IER значением M_INT1; регистр разрешения прерываний ядра C28x. */ IER |= M_INT1; + /* Оставляет биты маски IER значением MINT1; регистр разрешения прерываний ядра C28x. */ IER &= MINT1; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG12; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all &= MG12; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... @@ -317,50 +471,78 @@ interrupt void SEQ2INT_ISR( void ) // ADC // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER1_4 (use MINT1 and MG14 masks): +/* Условие компиляции (G14PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G14PL != 0) +/* Объявляет обработчик XINT1_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT1_ISR(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + /* Устанавливает биты IER значением MINT1; регистр разрешения прерываний ядра C28x. */ IER |= MINT1; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG14; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all &= MG14; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER1_5 (use MINT1 and MG15 masks): +/* Условие компиляции (G15PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G15PL != 0) +/* Объявляет обработчик XINT2_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT2_ISR(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + /* Устанавливает биты IER значением MINT1; регистр разрешения прерываний ядра C28x. */ IER |= MINT1; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG15; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all &= MG15; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... @@ -368,92 +550,143 @@ interrupt void XINT2_ISR(void) // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER1_6 (use MINT1 and MG16 masks): +/* Условие компиляции (G16PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G16PL != 0) +/* Объявляет обработчик ADCINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ADCINT_ISR(void) // ADC +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + /* Устанавливает биты IER значением M_INT1; регистр разрешения прерываний ядра C28x. */ IER |= M_INT1; + /* Оставляет биты маски IER значением MINT1; регистр разрешения прерываний ядра C28x. */ IER &= MINT1; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG16; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all &= MG16; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER1_7 (use MINT1 and MG17 masks): +/* Условие компиляции (G17PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G17PL != 0) +/* Объявляет обработчик TINT0_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void TINT0_ISR(void) // CPU-Timer 0 +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + /* Устанавливает биты IER значением M_INT1; регистр разрешения прерываний ядра C28x. */ IER |= M_INT1; + /* Оставляет биты маски IER значением MINT1; регистр разрешения прерываний ядра C28x. */ IER &= MINT1; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG17; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all &= MG17; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER1_8 (use MINT1 and MG18 masks): +/* Условие компиляции (G18PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G18PL != 0) +/* Объявляет обработчик WAKEINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void WAKEINT_ISR(void) // WD/LPM +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all; + /* Устанавливает биты IER значением M_INT1; регистр разрешения прерываний ядра C28x. */ IER |= M_INT1; + /* Оставляет биты маски IER значением MINT1; регистр разрешения прерываний ядра C28x. */ IER &= MINT1; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG18; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all &= MG18; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER1.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -462,157 +695,247 @@ interrupt void WAKEINT_ISR(void) // WD/LPM // ----------------------------------------------------------- // Connected to PIEIER2_1 (use MINT2 and MG21 masks): +/* Условие компиляции (G21PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G21PL != 0) +/* Объявляет обработчик EPWM1_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM1_TZINT_ISR(void) // ePWM1 Trip Zone +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + /* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */ IER |= M_INT2; + /* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */ IER &= MINT2; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG21; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all &= MG21; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER2_2 (use MINT2 and MG22 masks): +/* Условие компиляции (G22PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G22PL != 0) +/* Объявляет обработчик EPWM2_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM2_TZINT_ISR(void) // ePWM2 Trip Zone +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + /* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */ IER |= M_INT2; + /* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */ IER &= MINT2; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG22; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all &= MG22; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER2_3 (use MINT2 and MG23 masks): +/* Условие компиляции (G23PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G23PL != 0) +/* Объявляет обработчик EPWM3_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM3_TZINT_ISR(void) // ePWM3 Trip Zone +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + /* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */ IER |= M_INT2; + /* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */ IER &= MINT2; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG23; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all &= MG23; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER2_4 (use MINT2 and MG24 masks): +/* Условие компиляции (G24PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G24PL != 0) +/* Объявляет обработчик EPWM4_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM4_TZINT_ISR(void) // ePWM4 Trip Zone +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + /* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */ IER |= M_INT2; + /* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */ IER &= MINT2; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG24; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all &= MG24; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER2_5 (use MINT2 and MG25 masks): +/* Условие компиляции (G25PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G25PL != 0) +/* Объявляет обработчик EPWM5_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM5_TZINT_ISR(void) // ePWM5 Trip Zone +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + /* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */ IER |= M_INT2; + /* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */ IER &= MINT2; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG25; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all &= MG25; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER2_6 (use MINT2 and MG26 masks): +/* Условие компиляции (G26PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G26PL != 0) +/* Объявляет обработчик EPWM6_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM6_TZINT_ISR(void) // ePWM6 Trip Zone +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all; + /* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */ IER |= M_INT2; + /* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */ IER &= MINT2; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG26; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all &= MG26; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER2.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -622,157 +945,247 @@ interrupt void EPWM6_TZINT_ISR(void) // ePWM6 Trip Zone // Connected to PIEIER3_1 (use MINT3 and MG31 masks): +/* Условие компиляции (G31PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G31PL != 0) +/* Объявляет обработчик EPWM1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM1_INT_ISR(void) // ePWM1 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + /* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */ IER |= M_INT3; + /* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */ IER &= MINT3; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG31; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all &= MG31; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER3_2 (use MINT3 and MG32 masks): +/* Условие компиляции (G32PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G32PL != 0) +/* Объявляет обработчик EPWM2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM2_INT_ISR(void) // ePWM2 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + /* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */ IER |= M_INT3; + /* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */ IER &= MINT3; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG32; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all &= MG32; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER3_3 (use MINT3 and MG33 masks): +/* Условие компиляции (G33PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G33PL != 0) +/* Объявляет обработчик EPWM3_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM3_INT_ISR(void) // ePWM3 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + /* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */ IER |= M_INT3; + /* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */ IER &= MINT3; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG33; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all &= MG33; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER3_4 (use MINT3 and MG34 masks): +/* Условие компиляции (G34PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G34PL != 0) +/* Объявляет обработчик EPWM4_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM4_INT_ISR(void) // ePWM4 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + /* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */ IER |= M_INT3; + /* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */ IER &= MINT3; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG34; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all &= MG34; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER3_5 (use MINT3 and MG35 masks): +/* Условие компиляции (G35PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G35PL != 0) +/* Объявляет обработчик EPWM5_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM5_INT_ISR(void) // ePWM5 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + /* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */ IER |= M_INT3; + /* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */ IER &= MINT3; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG35; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all &= MG35; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER3_6 (use MINT3 and MG36 masks): +/* Условие компиляции (G36PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G36PL != 0) +/* Объявляет обработчик EPWM6_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EPWM6_INT_ISR(void) // ePWM6 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all; + /* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */ IER |= M_INT3; + /* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */ IER &= MINT3; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG36; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all &= MG36; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER3.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -782,159 +1195,249 @@ interrupt void EPWM6_INT_ISR(void) // ePWM6 Interrupt // Connected to PIEIER4_1 (use MINT4 and MG41 masks): +/* Условие компиляции (G41PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G41PL != 0) +/* Объявляет обработчик ECAP1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP1_INT_ISR(void) // eCAP1 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + /* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */ IER |= M_INT4; + /* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */ IER &= MINT4; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG41; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all &= MG41; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER4_2 (use MINT4 and MG42 masks): +/* Условие компиляции (G42PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G42PL != 0) +/* Объявляет обработчик ECAP2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP2_INT_ISR(void) // eCAP2 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER5.all; + /* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */ IER |= M_INT4; + /* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */ IER &= MINT4; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG42; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all &= MG42; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER4_3 (use MINT4 and MG43 masks): +/* Условие компиляции (G43PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G43PL != 0) +/* Объявляет обработчик ECAP3_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP3_INT_ISR(void) // eCAP3 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + /* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */ IER |= M_INT4; + /* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */ IER &= MINT4; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG43; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all &= MG43; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER4_4 (use MINT4 and MG44 masks): +/* Условие компиляции (G44PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G44PL != 0) +/* Объявляет обработчик ECAP4_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP4_INT_ISR(void) // eCAP4 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + /* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */ IER |= M_INT4; + /* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */ IER &= MINT4; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG44; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all &= MG44; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER4_5 (use MINT4 and MG45 masks): +/* Условие компиляции (G45PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G45PL != 0) +/* Объявляет обработчик ECAP5_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP5_INT_ISR(void) // eCAP5 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + /* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */ IER |= M_INT4; + /* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */ IER &= MINT4; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG45; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all &= MG45; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER4_6 (use MINT4 and MG46 masks): +/* Условие компиляции (G46PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G46PL != 0) +/* Объявляет обработчик ECAP6_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAP6_INT_ISR(void) // eCAP6 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all; + /* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */ IER |= M_INT4; + /* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */ IER &= MINT4; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG46; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all &= MG46; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER4.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -944,57 +1447,87 @@ interrupt void ECAP6_INT_ISR(void) // eCAP6 Interrupt // ----------------------------------------------------------- // Connected to PIEIER5_1 (use MINT5 and MG51 masks): +/* Условие компиляции (G51PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G51PL != 0) +/* Объявляет обработчик EQEP1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EQEP1_INT_ISR(void) // eQEP1 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER5.all; + /* Устанавливает биты IER значением M_INT5; регистр разрешения прерываний ядра C28x. */ IER |= M_INT5; + /* Оставляет биты маски IER значением MINT5; регистр разрешения прерываний ядра C28x. */ IER &= MINT5; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER5.all значением MG51; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER5.all &= MG51; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER5.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER5.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER5_2 (use MINT5 and MG52 masks): +/* Условие компиляции (G52PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G52PL != 0) +/* Объявляет обработчик EQEP2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void EQEP2_INT_ISR(void) // eQEP2 Interrupt +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER5.all; + /* Устанавливает биты IER значением M_INT5; регистр разрешения прерываний ядра C28x. */ IER |= M_INT5; + /* Оставляет биты маски IER значением MINT5; регистр разрешения прерываний ядра C28x. */ IER &= MINT5; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER5.all значением MG52; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER5.all &= MG52; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER5.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER5.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // ----------------------------------------------------------- @@ -1002,160 +1535,250 @@ interrupt void EQEP2_INT_ISR(void) // eQEP2 Interrupt // ----------------------------------------------------------- // Connected to PIEIER6_1 (use MINT6 and MG61 masks): +/* Условие компиляции (G61PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G61PL != 0) +/* Объявляет обработчик SPIRXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SPIRXINTA_ISR(void) // SPI-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + /* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */ IER |= M_INT6; + /* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */ IER &= MINT6; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG61; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all &= MG61; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER6_2 (use MINT6 and MG62 masks): +/* Условие компиляции (G62PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G62PL != 0) +/* Объявляет обработчик SPITXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SPITXINTA_ISR(void) // SPI-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + /* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */ IER |= M_INT6; + /* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */ IER &= MINT6; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG62; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all &= MG62; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER6_3 (use MINT6 and MG63 masks): +/* Условие компиляции (G63PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G63PL != 0) +/* Объявляет обработчик MRINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void MRINTB_ISR(void) // McBSP-B +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + /* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */ IER |= M_INT6; + /* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */ IER &= MINT6; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG63; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all &= MG63; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER6_4 (use MINT6 and MG64 masks): +/* Условие компиляции (G64PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G64PL != 0) +/* Объявляет обработчик MXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void MXINTB_ISR(void) // McBSP-B +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + /* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */ IER |= M_INT6; + /* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */ IER &= MINT6; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG64; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all &= MG64; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER6_5 (use MINT6 and MG65 masks): +/* Условие компиляции (G65PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G65PL != 0) +/* Объявляет обработчик MRINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void MRINTA_ISR(void) // McBSP-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + /* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */ IER |= M_INT6; + /* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */ IER &= MINT6; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG65; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all &= MG65; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER6_6 (use MINT6 and MG66 masks): +/* Условие компиляции (G66PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G66PL != 0) +/* Объявляет обработчик MXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void MXINTA_ISR(void) // McBSP-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all; + /* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */ IER |= M_INT6; + /* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */ IER &= MINT6; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG66; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all &= MG66; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -1164,160 +1787,250 @@ interrupt void MXINTA_ISR(void) // McBSP-A // ----------------------------------------------------------- // Connected to PIEIER7_1 (use MINT7 and MG71 masks): +/* Условие компиляции (G71PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G71PL != 0) +/* Объявляет обработчик DINTCH1_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH1_ISR(void) // DMA +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + /* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */ IER |= M_INT7; + /* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */ IER &= MINT7; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG71; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all &= MG71; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER7_2 (use MINT7 and MG72 masks): +/* Условие компиляции (G72PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G72PL != 0) +/* Объявляет обработчик DINTCH2_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH2_ISR(void) // DMA +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + /* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */ IER |= M_INT7; + /* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */ IER &= MINT7; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG72; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all &= MG72; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER7_3 (use MINT7 and MG73 masks): +/* Условие компиляции (G73PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G73PL != 0) +/* Объявляет обработчик DINTCH3_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH3_ISR(void) // DMA +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + /* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */ IER |= M_INT7; + /* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */ IER &= MINT7; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG73; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all &= MG73; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER7_4 (use MINT7 and MG74 masks): +/* Условие компиляции (G74PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G74PL != 0) +/* Объявляет обработчик DINTCH4_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH4_ISR(void) // DMA +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + /* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */ IER |= M_INT7; + /* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */ IER &= MINT7; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG74; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all &= MG74; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER7_5 (use MINT7 and MG75 masks): +/* Условие компиляции (G75PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G75PL != 0) +/* Объявляет обработчик DINTCH5_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH5_ISR(void) // DMA +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + /* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */ IER |= M_INT7; + /* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */ IER &= MINT7; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG75; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all &= MG75; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER7_6 (use MINT7 and MG76 masks): +/* Условие компиляции (G76PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G76PL != 0) +/* Объявляет обработчик DINTCH6_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void DINTCH6_ISR(void) // DMA +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all; + /* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */ IER |= M_INT7; + /* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */ IER &= MINT7; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG76; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all &= MG76; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER7.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -1326,107 +2039,167 @@ interrupt void DINTCH6_ISR(void) // DMA // ----------------------------------------------------------- // Connected to PIEIER8_1 (use MINT8 and MG81 masks): +/* Условие компиляции (G81PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G81PL != 0) +/* Объявляет обработчик I2CINT1A_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void I2CINT1A_ISR(void) // I2C-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all; + /* Устанавливает биты IER значением M_INT8; регистр разрешения прерываний ядра C28x. */ IER |= M_INT8; + /* Оставляет биты маски IER значением MINT8; регистр разрешения прерываний ядра C28x. */ IER &= MINT8; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG81; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all &= MG81; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER8.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER8.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER8_2 (use MINT8 and MG82 masks): +/* Условие компиляции (G82PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL != 0) +/* Объявляет обработчик I2CINT2A_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void I2CINT2A_ISR(void) // I2C-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all; + /* Устанавливает биты IER значением M_INT8; регистр разрешения прерываний ядра C28x. */ IER |= M_INT8; + /* Оставляет биты маски IER значением MINT8; регистр разрешения прерываний ядра C28x. */ IER &= MINT8; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER8.all значением MG82; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER8.all &= MG82; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER8.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER8.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER8_5 (use MINT8 and MG85 masks): +/* Условие компиляции (G85PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G85PL != 0) +/* Объявляет обработчик SCIRXINTC_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCIRXINTC_ISR(void) // SCI-C +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all; + /* Устанавливает биты IER значением M_INT8; регистр разрешения прерываний ядра C28x. */ IER |= M_INT8; + /* Оставляет биты маски IER значением MINT8; регистр разрешения прерываний ядра C28x. */ IER &= MINT8; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG85; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER6.all &= MG85; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER8.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER8.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER8_6 (use MINT8 and MG86 masks): +/* Условие компиляции (G82PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL != 0) +/* Объявляет обработчик SCITXINTC_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCITXINTC_ISR(void) // SCI-C +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all; + /* Устанавливает биты IER значением M_INT8; регистр разрешения прерываний ядра C28x. */ IER |= M_INT8; + /* Оставляет биты маски IER значением MINT8; регистр разрешения прерываний ядра C28x. */ IER &= MINT8; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER8.all значением MG86; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER8.all &= MG86; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER8.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER8.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // ----------------------------------------------------------- @@ -1434,212 +2207,332 @@ interrupt void SCITXINTC_ISR(void) // SCI-C // ----------------------------------------------------------- // Connected to PIEIER9_1 (use MINT9 and MG91 masks): +/* Условие компиляции (G91PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G91PL != 0) +/* Объявляет обработчик SCIRXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCIRXINTA_ISR(void) // SCI-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG91; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG91; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER9_2 (use MINT9 and MG92 masks): +/* Условие компиляции (G92PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G92PL != 0) +/* Объявляет обработчик SCITXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCITXINTA_ISR(void) // SCI-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG92; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG92; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER9_3 (use MINT9 and MG93 masks): +/* Условие компиляции (G93PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G93PL != 0) +/* Объявляет обработчик SCIRXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCIRXINTB_ISR(void) // SCI-B +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG93; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG93; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER9_4 (use MINT9 and MG94 masks): +/* Условие компиляции (G94PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G94PL != 0) +/* Объявляет обработчик SCITXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void SCITXINTB_ISR(void) // SCI-B +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG94; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG94; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER9_5 (use MINT9 and MG95 masks): +/* Условие компиляции (G95PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G95PL != 0) +/* Объявляет обработчик ECAN0INTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAN0INTA_ISR(void) // eCAN-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG95; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG95; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER9_6 (use MINT9 and MG96 masks): +/* Условие компиляции (G96PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G96PL != 0) +/* Объявляет обработчик ECAN1INTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAN1INTA_ISR(void) // eCAN-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG96; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG96; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER9_7 (use MINT9 and MG97 masks): +/* Условие компиляции (G97PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G97PL != 0) +/* Объявляет обработчик ECAN0INTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAN0INTB_ISR(void) // eCAN-B +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG97; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG97; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER9_8 (use MINT9 and MG98 masks): +/* Условие компиляции (G98PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G98PL != 0) +/* Объявляет обработчик ECAN1INTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void ECAN1INTB_ISR(void) // eCAN-B +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG98; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG98; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // ----------------------------------------------------------- @@ -1653,186 +2546,291 @@ interrupt void ECAN1INTB_ISR(void) // eCAN-B // ----------------------------------------------------------- // Connected to PIEIER9_1 (use MINT12 and MG121 masks): +/* Условие компиляции (G121PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G121PL != 0) +/* Объявляет обработчик XINT3_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT3_ISR(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + /* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */ IER |= M_INT12; + /* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */ IER &= MINT12; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG121; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all &= MG121; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER12_2 (use MINT12 and MG122 masks): +/* Условие компиляции (G122PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G122PL != 0) +/* Объявляет обработчик XINT4_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT4_ISR(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + /* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */ IER |= M_INT12; + /* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */ IER &= MINT12; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG122; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all &= MG122; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER12_3 (use MINT12 and MG123 masks): +/* Условие компиляции (G123PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G123PL != 0) +/* Объявляет обработчик XINT5_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT5_ISR(void) // SCI-B +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + /* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */ IER |= M_INT12; + /* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */ IER &= MINT12; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG123; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all &= MG123; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER12_4 (use MINT12 and MG124 masks): +/* Условие компиляции (G124PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G124PL != 0) +/* Объявляет обработчик XINT6_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT6_ISR(void) // SCI-B +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + /* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */ IER |= M_INT12; + /* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */ IER &= MINT12; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG124; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all &= MG124; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER12_5 (use MINT12 and MG125 masks): +/* Условие компиляции (G125PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G125PL != 0) +/* Объявляет обработчик XINT7_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void XINT7_ISR(void) // eCAN-A +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + /* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */ IER |= M_INT12; + /* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */ IER &= MINT12; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG125; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all &= MG125; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER12_7 (use MINT12 and MG127 masks): +/* Условие компиляции (G127PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G127PL != 0) +/* Объявляет обработчик LVF_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void LVF_ISR(void) // FPU +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + /* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */ IER |= M_INT12; + /* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */ IER &= MINT12; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG127; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all &= MG127; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Connected to PIEIER12_8 (use MINT12 and MG128 masks): +/* Условие компиляции (G128PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G128PL != 0) +/* Объявляет обработчик LUF_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void LUF_ISR(void) // FPU +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all; + /* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */ IER |= M_INT12; + /* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */ IER &= MINT12; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG128; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all &= MG128; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; // Insert ISR Code here....... // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER12.all = TempPIEIER; // Next two lines for debug only to halt the processor here // Remove after inserting ISR Code + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -1840,22 +2838,37 @@ interrupt void LUF_ISR(void) // FPU // Catch All Default ISRs: // +/* Начинает функцию PIE_RESERVED; назначение модуля — поставляемое TI описание SWPrioritizedDefaultIsr для семейства C2833x. */ interrupt void PIE_RESERVED(void) // Reserved space. For test. +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик INT_NOTUSED_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void INT_NOTUSED_ISR(void) // Reserved space. For test. +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик rsvd_ISR; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void rsvd_ISR(void) // For test +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm (" ESTOP0"); + /* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(;;); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c b/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c index 99379ea..8ff7d9f 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c @@ -1,3 +1,4 @@ +/* Поставляемое TI описание SWPrioritizedPieVect для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/2 $ // Checkin $Date: April 4, 2007 14:25:31 $ //########################################################################### @@ -7,503 +8,895 @@ // TITLE: DSP2833x Devices SW Prioritized PIE Vector Table Initialization. // //########################################################################### -// +// // Original Source by A.T. // // $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ // $Release Date: August 1, 2008 $ //########################################################################### +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // DSP2833x Examples Include File -#include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */ +#include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Записывает PieVectTableInit значением {; данные PieVectTableInit. */ const struct PIE_VECT_TABLE PieVectTableInit = { + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // Reserved space + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved + /* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */ PIE_RESERVED, // reserved // Non-Peripheral Interrupts: + /* Условие компиляции (INT13PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT13PL != 0) + /* Продолжает список аргументов, полей или выражение INT13_ISR,; порядок элементов сохраняется. */ INT13_ISR, // XINT13 + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - + + /* Условие компиляции (INT14PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT14PL != 0) + /* Продолжает список аргументов, полей или выражение INT14_ISR,; порядок элементов сохраняется. */ INT14_ISR, // CPU-Timer2 + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - + + /* Условие компиляции (INT15PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT15PL != 0) + /* Продолжает список аргументов, полей или выражение DATALOG_ISR,; порядок элементов сохраняется. */ DATALOG_ISR, // Datalogging interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (INT16PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (INT16PL != 0) + /* Продолжает список аргументов, полей или выражение RTOSINT_ISR,; порядок элементов сохраняется. */ RTOSINT_ISR, // RTOS interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, // reserved interrupt + /* Продолжает список аргументов, полей или выражение NMI_ISR,; порядок элементов сохраняется. */ NMI_ISR, // Non-maskable interrupt + /* Продолжает список аргументов, полей или выражение ILLEGAL_ISR,; порядок элементов сохраняется. */ ILLEGAL_ISR, // Illegal operation TRAP + /* Продолжает список аргументов, полей или выражение USER1_ISR,; порядок элементов сохраняется. */ USER1_ISR, // User Defined trap 1 + /* Продолжает список аргументов, полей или выражение USER2_ISR,; порядок элементов сохраняется. */ USER2_ISR, // User Defined trap 2 + /* Продолжает список аргументов, полей или выражение USER3_ISR,; порядок элементов сохраняется. */ USER3_ISR, // User Defined trap 3 + /* Продолжает список аргументов, полей или выражение USER4_ISR,; порядок элементов сохраняется. */ USER4_ISR, // User Defined trap 4 + /* Продолжает список аргументов, полей или выражение USER5_ISR,; порядок элементов сохраняется. */ USER5_ISR, // User Defined trap 5 + /* Продолжает список аргументов, полей или выражение USER6_ISR,; порядок элементов сохраняется. */ USER6_ISR, // User Defined trap 6 + /* Продолжает список аргументов, полей или выражение USER7_ISR,; порядок элементов сохраняется. */ USER7_ISR, // User Defined trap 7 + /* Продолжает список аргументов, полей или выражение USER8_ISR,; порядок элементов сохраняется. */ USER8_ISR, // User Defined trap 8 + /* Продолжает список аргументов, полей или выражение USER9_ISR,; порядок элементов сохраняется. */ USER9_ISR, // User Defined trap 9 + /* Продолжает список аргументов, полей или выражение USER10_ISR,; порядок элементов сохраняется. */ USER10_ISR, // User Defined trap 10 + /* Продолжает список аргументов, полей или выражение USER11_ISR,; порядок элементов сохраняется. */ USER11_ISR, // User Defined trap 11 + /* Продолжает список аргументов, полей или выражение USER12_ISR,; порядок элементов сохраняется. */ USER12_ISR, // User Defined trap 12 // Group 1 PIE Vectors: + /* Условие компиляции (G11PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G11PL != 0) + /* Продолжает список аргументов, полей или выражение SEQ1INT_ISR,; порядок элементов сохраняется. */ SEQ1INT_ISR, // ADC + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G12PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G12PL != 0) - SEQ2INT_ISR, // ADC + /* Продолжает список аргументов, полей или выражение SEQ2INT_ISR,; порядок элементов сохраняется. */ + SEQ2INT_ISR, // ADC + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, + /* Условие компиляции (G14PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G14PL != 0) + /* Продолжает список аргументов, полей или выражение XINT1_ISR,; порядок элементов сохраняется. */ XINT1_ISR, // External + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G15PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G15PL != 0) + /* Продолжает список аргументов, полей или выражение XINT2_ISR,; порядок элементов сохраняется. */ XINT2_ISR, // External + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G16PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G16PL != 0) + /* Продолжает список аргументов, полей или выражение ADCINT_ISR,; порядок элементов сохраняется. */ ADCINT_ISR, // ADC + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G17PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G17PL != 0) + /* Продолжает список аргументов, полей или выражение TINT0_ISR,; порядок элементов сохраняется. */ TINT0_ISR, // Timer 0 + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G18PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G18PL != 0) + /* Продолжает список аргументов, полей или выражение WAKEINT_ISR,; порядок элементов сохраняется. */ WAKEINT_ISR, // WD & Low Power + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Group 2 PIE Vectors: + /* Условие компиляции (G21PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G21PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM1_TZINT_ISR,; порядок элементов сохраняется. */ EPWM1_TZINT_ISR, // ePWM1 Trip Zone + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G22PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G22PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM2_TZINT_ISR,; порядок элементов сохраняется. */ EPWM2_TZINT_ISR, // ePWM2 Trip Zone + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G23PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G23PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM3_TZINT_ISR,; порядок элементов сохраняется. */ EPWM3_TZINT_ISR, // ePWM3 Trip Zone + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G24PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G24PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM4_TZINT_ISR,; порядок элементов сохраняется. */ EPWM4_TZINT_ISR, // ePWM4 Trip Zone + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G25PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G25PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM5_TZINT_ISR,; порядок элементов сохраняется. */ EPWM5_TZINT_ISR, // ePWM5 Trip Zone + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G26PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G26PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM6_TZINT_ISR,; порядок элементов сохраняется. */ EPWM6_TZINT_ISR, // ePWM6 Trip Zone + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, - + // Group 3 PIE Vectors: + /* Условие компиляции (G31PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G31PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM1_INT_ISR,; порядок элементов сохраняется. */ EPWM1_INT_ISR, // ePWM1 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G32PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G32PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM2_INT_ISR,; порядок элементов сохраняется. */ EPWM2_INT_ISR, // ePWM2 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G33PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G33PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM3_INT_ISR,; порядок элементов сохраняется. */ EPWM3_INT_ISR, // ePWM3 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G34PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G34PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM4_INT_ISR,; порядок элементов сохраняется. */ EPWM4_INT_ISR, // ePWM4 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G35PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G35PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM5_INT_ISR,; порядок элементов сохраняется. */ EPWM5_INT_ISR, // ePWM5 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G36PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G36PL != 0) + /* Продолжает список аргументов, полей или выражение EPWM6_INT_ISR,; порядок элементов сохраняется. */ EPWM6_INT_ISR, // ePWM6 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, - + // Group 4 PIE Vectors: + /* Условие компиляции (G41PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G41PL != 0) + /* Продолжает список аргументов, полей или выражение ECAP1_INT_ISR,; порядок элементов сохраняется. */ ECAP1_INT_ISR, // eCAP1 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G42PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G42PL != 0) + /* Продолжает список аргументов, полей или выражение ECAP2_INT_ISR,; порядок элементов сохраняется. */ ECAP2_INT_ISR, // eCAP2 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G43PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G43PL != 0) + /* Продолжает список аргументов, полей или выражение ECAP3_INT_ISR,; порядок элементов сохраняется. */ ECAP3_INT_ISR, // eCAP3 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G44PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G44PL != 0) + /* Продолжает список аргументов, полей или выражение ECAP4_INT_ISR,; порядок элементов сохраняется. */ ECAP4_INT_ISR, // eCAP4 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G45PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G45PL != 0) + /* Продолжает список аргументов, полей или выражение ECAP5_INT_ISR,; порядок элементов сохраняется. */ ECAP5_INT_ISR, // eCAP5 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G46PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G46PL != 0) + /* Продолжает список аргументов, полей или выражение ECAP6_INT_ISR,; порядок элементов сохраняется. */ ECAP6_INT_ISR, // eCAP6 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, - rsvd_ISR, - + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + // Group 5 PIE Vectors: + /* Условие компиляции (G51PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G51PL != 0) + /* Продолжает список аргументов, полей или выражение EQEP1_INT_ISR,; порядок элементов сохраняется. */ EQEP1_INT_ISR, // eQEP1 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G52PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G52PL != 0) + /* Продолжает список аргументов, полей или выражение EQEP2_INT_ISR,; порядок элементов сохраняется. */ EQEP2_INT_ISR, // eQEP2 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, - rsvd_ISR, // Group 6 PIE Vectors: + /* Условие компиляции (G61PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G61PL != 0) + /* Продолжает список аргументов, полей или выражение SPIRXINTA_ISR,; порядок элементов сохраняется. */ SPIRXINTA_ISR, // SPI-A + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G62PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G62PL != 0) + /* Продолжает список аргументов, полей или выражение SPITXINTA_ISR,; порядок элементов сохраняется. */ SPITXINTA_ISR, // SPI-A + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G63PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G63PL != 0) + /* Продолжает список аргументов, полей или выражение MRINTB_ISR,; порядок элементов сохраняется. */ MRINTB_ISR, // McBSP-B + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G64PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G64PL != 0) + /* Продолжает список аргументов, полей или выражение MXINTB_ISR,; порядок элементов сохраняется. */ MXINTB_ISR, // McBSP-B + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G65PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G65PL != 0) + /* Продолжает список аргументов, полей или выражение MRINTA_ISR,; порядок элементов сохраняется. */ MRINTA_ISR, // McBSP-A + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G66PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G66PL != 0) + /* Продолжает список аргументов, полей или выражение MXINTA_ISR,; порядок элементов сохраняется. */ MXINTA_ISR, // McBSP-A + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, - + // Group 7 PIE Vectors: + /* Условие компиляции (G71PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G71PL != 0) + /* Продолжает список аргументов, полей или выражение DINTCH1_ISR,; порядок элементов сохраняется. */ DINTCH1_ISR, // DMA-Channel 1 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G72PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G72PL != 0) + /* Продолжает список аргументов, полей или выражение DINTCH2_ISR,; порядок элементов сохраняется. */ DINTCH2_ISR, // DMA-Channel 2 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G73PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G73PL != 0) + /* Продолжает список аргументов, полей или выражение DINTCH3_ISR,; порядок элементов сохраняется. */ DINTCH3_ISR, // DMA-Channel 3 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G74PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G74PL != 0) + /* Продолжает список аргументов, полей или выражение DINTCH4_ISR,; порядок элементов сохраняется. */ DINTCH4_ISR, // DMA-Channel 4 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G75PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G75PL != 0) + /* Продолжает список аргументов, полей или выражение DINTCH5_ISR,; порядок элементов сохраняется. */ DINTCH5_ISR, // DMA-Channel 5 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G76PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G76PL != 0) + /* Продолжает список аргументов, полей или выражение DINTCH6_ISR,; порядок элементов сохраняется. */ DINTCH6_ISR, // DMA-Channel 6 Interrupt + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, - rsvd_ISR, // Group 8 PIE Vectors: + /* Условие компиляции (G81PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G81PL != 0) + /* Продолжает список аргументов, полей или выражение I2CINT1A_ISR,; порядок элементов сохраняется. */ I2CINT1A_ISR, // I2C-A + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (G82PL != 0): выбранный блок включается в текущий вариант прошивки. */ #if (G82PL != 0) + /* Продолжает список аргументов, полей или выражение I2CINT2A_ISR,; порядок элементов сохраняется. */ I2CINT2A_ISR, // I2C-A + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, - #endif - - rsvd_ISR, - rsvd_ISR, - - #if (G85PL != 0) - SCIRXINTC_ISR, // SCI-C - #else - INT_NOTUSED_ISR, - #endif - - #if (G86PL != 0) - SCITXINTC_ISR, // SCI-C - #else - INT_NOTUSED_ISR, - #endif - - rsvd_ISR, - rsvd_ISR, - -// Group 9 PIE Vectors: - #if (G91PL != 0) - SCIRXINTA_ISR, // SCI-A - #else - INT_NOTUSED_ISR, - #endif - - #if (G92PL != 0) - SCITXINTA_ISR, // SCI-A - #else - INT_NOTUSED_ISR, - #endif - - #if (G93PL != 0) - SCIRXINTB_ISR, // SCI-B - #else - INT_NOTUSED_ISR, - #endif - - #if (G94PL != 0) - SCITXINTB_ISR, // SCI-B - #else - INT_NOTUSED_ISR, - #endif - - #if (G95PL != 0) - ECAN0INTA_ISR, // eCAN-A - #else - INT_NOTUSED_ISR, - #endif - - #if (G96PL != 0) - ECAN1INTA_ISR, // eCAN-A - #else - INT_NOTUSED_ISR, - #endif - - #if (G97PL != 0) - ECAN0INTB_ISR, // eCAN-B - #else - INT_NOTUSED_ISR, - #endif - - #if (G98PL != 0) - ECAN1INTB_ISR, // eCAN-B - #else - INT_NOTUSED_ISR, - #endif - -// Group 10 PIE Vectors - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - -// Group 11 PIE Vectors - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - rsvd_ISR, - -// Group 12 PIE Vectors - #if (G121PL != 0) - XINT3_ISR, // External interrupt 3 - #else - INT_NOTUSED_ISR, - #endif - - #if (G122PL != 0) - XINT4_ISR, // External interrupt 4 - #else - INT_NOTUSED_ISR, - #endif - - #if (G123PL != 0) - XINT5_ISR, // External interrupt 5 - #else - INT_NOTUSED_ISR, - #endif - - #if (G124PL != 0) - XINT6_ISR, // External interrupt 6 - #else - INT_NOTUSED_ISR, - #endif - - #if (G125PL != 0) - XINT7_ISR, // External interrupt 7 - #else - INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ rsvd_ISR, - #if (G127PL != 0) - LVF_ISR, // Latched overflow flag + /* Условие компиляции (G85PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G85PL != 0) + /* Продолжает список аргументов, полей или выражение SCIRXINTC_ISR,; порядок элементов сохраняется. */ + SCIRXINTC_ISR, // SCI-C + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - #if (G128PL != 0) - LUF_ISR, // Latched underflow flag + /* Условие компиляции (G86PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G86PL != 0) + /* Продолжает список аргументов, полей или выражение SCITXINTC_ISR,; порядок элементов сохраняется. */ + SCITXINTC_ISR, // SCI-C + /* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ INT_NOTUSED_ISR, - #endif + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + +// Group 9 PIE Vectors: + /* Условие компиляции (G91PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G91PL != 0) + /* Продолжает список аргументов, полей или выражение SCIRXINTA_ISR,; порядок элементов сохраняется. */ + SCIRXINTA_ISR, // SCI-A + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G92PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G92PL != 0) + /* Продолжает список аргументов, полей или выражение SCITXINTA_ISR,; порядок элементов сохраняется. */ + SCITXINTA_ISR, // SCI-A + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G93PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G93PL != 0) + /* Продолжает список аргументов, полей или выражение SCIRXINTB_ISR,; порядок элементов сохраняется. */ + SCIRXINTB_ISR, // SCI-B + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G94PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G94PL != 0) + /* Продолжает список аргументов, полей или выражение SCITXINTB_ISR,; порядок элементов сохраняется. */ + SCITXINTB_ISR, // SCI-B + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G95PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G95PL != 0) + /* Продолжает список аргументов, полей или выражение ECAN0INTA_ISR,; порядок элементов сохраняется. */ + ECAN0INTA_ISR, // eCAN-A + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G96PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G96PL != 0) + /* Продолжает список аргументов, полей или выражение ECAN1INTA_ISR,; порядок элементов сохраняется. */ + ECAN1INTA_ISR, // eCAN-A + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G97PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G97PL != 0) + /* Продолжает список аргументов, полей или выражение ECAN0INTB_ISR,; порядок элементов сохраняется. */ + ECAN0INTB_ISR, // eCAN-B + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G98PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G98PL != 0) + /* Продолжает список аргументов, полей или выражение ECAN1INTB_ISR,; порядок элементов сохраняется. */ + ECAN1INTB_ISR, // eCAN-B + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + +// Group 10 PIE Vectors + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + +// Group 11 PIE Vectors + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + +// Group 12 PIE Vectors + /* Условие компиляции (G121PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G121PL != 0) + /* Продолжает список аргументов, полей или выражение XINT3_ISR,; порядок элементов сохраняется. */ + XINT3_ISR, // External interrupt 3 + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G122PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G122PL != 0) + /* Продолжает список аргументов, полей или выражение XINT4_ISR,; порядок элементов сохраняется. */ + XINT4_ISR, // External interrupt 4 + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G123PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G123PL != 0) + /* Продолжает список аргументов, полей или выражение XINT5_ISR,; порядок элементов сохраняется. */ + XINT5_ISR, // External interrupt 5 + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G124PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G124PL != 0) + /* Продолжает список аргументов, полей или выражение XINT6_ISR,; порядок элементов сохраняется. */ + XINT6_ISR, // External interrupt 6 + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G125PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G125PL != 0) + /* Продолжает список аргументов, полей или выражение XINT7_ISR,; порядок элементов сохраняется. */ + XINT7_ISR, // External interrupt 7 + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */ + rsvd_ISR, + + /* Условие компиляции (G127PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G127PL != 0) + /* Продолжает список аргументов, полей или выражение LVF_ISR,; порядок элементов сохраняется. */ + LVF_ISR, // Latched overflow flag + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif + + /* Условие компиляции (G128PL != 0): выбранный блок включается в текущий вариант прошивки. */ + #if (G128PL != 0) + /* Продолжает список аргументов, полей или выражение LUF_ISR,; порядок элементов сохраняется. */ + LUF_ISR, // Latched underflow flag + /* Выбирает альтернативный блок текущего условия компиляции. */ + #else + /* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */ + INT_NOTUSED_ISR, + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ + #endif +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- -// InitPieVectTable: +// InitPieVectTable: //--------------------------------------------------------------------------- // This function initializes the PIE vector table to a known state. // This function must be executed after boot time. // +/* Начинает функцию InitPieVectTable; назначение модуля — поставляемое TI описание SWPrioritizedPieVect для семейства C2833x. */ void InitPieVectTable(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Продолжает список аргументов, полей или выражение int16 i;; порядок элементов сохраняется. */ int16 i; + /* Объявляет Source — данные Source; PieVectTableInit — данные PieVectTableInit. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */ Uint32 *Source = (void *) &PieVectTableInit; + /* Объявляет Dest — данные Dest; PieVectTable — данные PieVectTable. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */ Uint32 *Dest = (void *) &PieVectTable; + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Цикл for(i=0; i < 128; i++) ; задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0; i < 128; i++) { + /* Изменяет счётчик в выражении *Dest++ = *Source++; на один для следующего шага. */ *Dest++ = *Source++; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c b/Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c index 7d9ea10..028b875 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c @@ -1,3 +1,4 @@ +/* Поставляемое TI описание SysCtrl для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/7 $ // Checkin $Date: September 20, 2007 13:30:31 $ //########################################################################### @@ -16,7 +17,9 @@ //########################################################################### +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // Examples Include File //#include "RS485.h" @@ -26,6 +29,7 @@ // a different section. This section will then be mapped to a load and // run address using the linker cmd file. +/* Указание компилятору CODE_SECTION(InitFlash, "ramfuncs");: размещение данных или настройка обработки объявлений. */ #pragma CODE_SECTION(InitFlash, "ramfuncs"); //--------------------------------------------------------------------------- @@ -37,20 +41,27 @@ // - Set the pre-scaler for the high and low frequency peripheral clocks // - Enable the clocks to the peripherals +/* Объявляет SYSCLKOUT — данные SYSCLKOUT; LSPCLK — данные LSPCLK; HSPCLK — данные HSPCLK. */ long SYSCLKOUT, LSPCLK, HSPCLK; +/* Начинает функцию InitSysCtrl; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */ void InitSysCtrl(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Disable the watchdog + /* Вызывает DisableDog с аргументами () в текущей последовательности операций. */ DisableDog(); // Initialize the PLL control: PLLCR and DIVSEL // DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.h + /* Инициализирует модуль вызовом InitPll(DSP28_PLLCR,DSP28_DIVSEL); перед его дальнейшим использованием. */ InitPll(DSP28_PLLCR,DSP28_DIVSEL); // Initialize the peripheral clocks + /* Инициализирует модуль вызовом InitPeripheralClocks(); перед его дальнейшим использованием. */ InitPeripheralClocks(); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } @@ -63,48 +74,67 @@ void InitSysCtrl(void) // This function MUST be executed out of RAM. Executing it // out of OTP/Flash will yield unpredictable results +/* Начинает функцию InitFlash; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */ void InitFlash(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; //Enable Flash Pipeline mode to improve performance //of code executed from Flash. + /* Записывает FlashRegs.FOPT.bit.ENPIPE значением 1; данные ENPIPE. */ FlashRegs.FOPT.bit.ENPIPE = 1; // CAUTION //Minimum waitstates required for the flash operating //at a given CPU rate must be characterized by TI. //Refer to the datasheet for the latest information. +/* Условие компиляции CPU_FRQ_150MHZ: выбранный блок включается в текущий вариант прошивки. */ #if CPU_FRQ_150MHZ //Set the Paged Waitstate for the Flash + /* Записывает FlashRegs.FBANKWAIT.bit.PAGEWAIT значением 5; данные PAGEWAIT. */ FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5; //Set the Random Waitstate for the Flash + /* Записывает FlashRegs.FBANKWAIT.bit.RANDWAIT значением 5; данные RANDWAIT. */ FlashRegs.FBANKWAIT.bit.RANDWAIT = 5; //Set the Waitstate for the OTP + /* Записывает FlashRegs.FOTPWAIT.bit.OTPWAIT значением 8; данные OTPWAIT. */ FlashRegs.FOTPWAIT.bit.OTPWAIT = 8; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции CPU_FRQ_100MHZ: выбранный блок включается в текущий вариант прошивки. */ #if CPU_FRQ_100MHZ //Set the Paged Waitstate for the Flash + /* Записывает FlashRegs.FBANKWAIT.bit.PAGEWAIT значением 3; данные PAGEWAIT. */ FlashRegs.FBANKWAIT.bit.PAGEWAIT = 3; //Set the Random Waitstate for the Flash + /* Записывает FlashRegs.FBANKWAIT.bit.RANDWAIT значением 3; данные RANDWAIT. */ FlashRegs.FBANKWAIT.bit.RANDWAIT = 3; //Set the Waitstate for the OTP + /* Записывает FlashRegs.FOTPWAIT.bit.OTPWAIT значением 5; данные OTPWAIT. */ FlashRegs.FOTPWAIT.bit.OTPWAIT = 5; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // CAUTION //ONLY THE DEFAULT VALUE FOR THESE 2 REGISTERS SHOULD BE USED + /* Записывает FlashRegs.FSTDBYWAIT.bit.STDBYWAIT значением 0x01FF; данные STDBYWAIT. */ FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF; + /* Записывает FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT значением 0x01FF; данные ACTIVEWAIT. */ FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; //Force a pipeline flush to ensure that the write to //the last register configured occurs before returning. + /* Вызывает asm с аргументами (" RPT #7 || NOP") в текущей последовательности операций. */ asm(" RPT #7 || NOP"); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } @@ -114,16 +144,27 @@ void InitFlash(void) // This function resets the watchdog timer. // Enable this function for using ServiceDog in the application +/* Начинает функцию ServiceDog; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */ void ServiceDog(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(SysCtrlRegs.PLLCR.bit.DIV == DSP28_PLLCR); последующий оператор выполняется только при истинном условии. */ if(SysCtrlRegs.PLLCR.bit.DIV == DSP28_PLLCR) + /* Проверяет if(SysCtrlRegs.PLLSTS.bit.DIVSEL == DSP28_DIVSEL); последующий оператор выполняется только при истинном условии. */ if(SysCtrlRegs.PLLSTS.bit.DIVSEL == DSP28_DIVSEL) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает SysCtrlRegs.WDKEY значением 0x0055; данные WDKEY. */ SysCtrlRegs.WDKEY = 0x0055; + /* Записывает SysCtrlRegs.WDKEY значением 0x00AA; данные WDKEY. */ SysCtrlRegs.WDKEY = 0x00AA; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; + /* Завершает ServiceDog без возвращаемого значения. */ return; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } @@ -132,11 +173,17 @@ void ServiceDog(void) //--------------------------------------------------------------------------- // This function disables the watchdog timer. +/* Начинает функцию DisableDog; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */ void DisableDog(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает SysCtrlRegs.WDCR значением 0x0068; данные WDCR. */ SysCtrlRegs.WDCR= 0x0068; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //--------------------------------------------------------------------------- @@ -144,40 +191,60 @@ void DisableDog(void) //--------------------------------------------------------------------------- // This function initializes the PLLCR register. +/* Начинает функцию InitPll; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */ void InitPll(Uint16 divval, Uint16 divsel) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет clkVal — данные clkVal. */ long clkVal; // Make sure the PLL is not running in limp mode + /* Проверяет if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0); последующий оператор выполняется только при истинном условии. */ if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Missing external clock has been detected // Replace this line with a call to an appropriate // SystemShutdown(); function. + /* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */ asm(" ESTOP0"); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } // DIVSEL MUST be 0 before PLLCR can be changed from // 0x0000. It is set to 0 by an external reset XRSn // This puts us in 1/4 + /* Проверяет if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0); последующий оператор выполняется только при истинном условии. */ if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает SysCtrlRegs.PLLSTS.bit.DIVSEL значением 0; данные DIVSEL. */ SysCtrlRegs.PLLSTS.bit.DIVSEL = 0; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } // Change the PLLCR // if (SysCtrlRegs.PLLCR.bit.DIV != val) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; // Before setting PLLCR turn off missing clock detect logic + /* Записывает SysCtrlRegs.PLLSTS.bit.MCLKOFF значением 1; данные MCLKOFF. */ SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1; + /* Записывает SysCtrlRegs.PLLCR.bit.DIV значением divval; данные DIV. */ SysCtrlRegs.PLLCR.bit.DIV = divval; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; + /* Записывает clkVal значением (divval)?divval:1; данные clkVal. */ clkVal = (divval)?divval:1; + /* Записывает clkVal значением XCLKIN * clkVal; данные clkVal. */ clkVal = XCLKIN * clkVal; // Optional: Wait for PLL to lock. @@ -198,47 +265,74 @@ void InitPll(Uint16 divval, Uint16 divsel) // the loop via ServiceDog(). // Uncomment to disable the watchdog + /* Вызывает DisableDog с аргументами () в текущей последовательности операций. */ DisableDog(); + /* Повторяет или ожидает, пока выполняется while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1). */ while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Uncomment to service the watchdog // ServiceDog(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает SysCtrlRegs.PLLSTS.bit.MCLKOFF значением 0; данные MCLKOFF. */ SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } // If switching to 1/2 + /* Проверяет if((divsel == 1) или (divsel == 2)); последующий оператор выполняется только при истинном условии. */ if((divsel == 1)||(divsel == 2)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает SysCtrlRegs.PLLSTS.bit.DIVSEL значением divsel; данные DIVSEL. */ SysCtrlRegs.PLLSTS.bit.DIVSEL = divsel; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(divsel == 0) clkVal /= 4; последующий оператор выполняется только при истинном условии. */ if(divsel == 0) clkVal /= 4; + /* Проверяет if(divsel == 1) clkVal /= 4; последующий оператор выполняется только при истинном условии. */ if(divsel == 1) clkVal /= 4; + /* Проверяет if(divsel == 2) clkVal /= 2; последующий оператор выполняется только при истинном условии. */ if(divsel == 2) clkVal /= 2; - + // If switching to 1/1 // * First go to 1/2 and let the power settle // The time required will depend on the system, this is only an example // * Then switch to 1/1 + /* Проверяет if((divval == 0) и (divsel == 3)); последующий оператор выполняется только при истинном условии. */ if((divval == 0) && (divsel == 3)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает SysCtrlRegs.PLLSTS.bit.DIVSEL значением 2; данные DIVSEL. */ SysCtrlRegs.PLLSTS.bit.DIVSEL = 2; + /* Вызывает DELAY_US с аргументами (50L) в текущей последовательности операций. */ DELAY_US(50L); // pause_us(50L); + /* Записывает SysCtrlRegs.PLLSTS.bit.DIVSEL значением 3; данные DIVSEL. */ SysCtrlRegs.PLLSTS.bit.DIVSEL = 3; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает SYSCLKOUT значением clkVal; данные SYSCLKOUT. */ SYSCLKOUT = clkVal; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //-------------------------------------------------------------------------- @@ -252,52 +346,86 @@ void InitPll(Uint16 divval, Uint16 divsel) // Note: If a peripherals clock is not enabled then you cannot // read or write to the registers for that peripheral +/* Начинает функцию InitPeripheralClocks; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */ void InitPeripheralClocks(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Val — данные Val. */ long Val; + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; // HISPCP/LOSPCP prescale register settings, normally it will be set to default values +/* Условие компиляции CLKMULT == 0: выбранный блок включается в текущий вариант прошивки. */ #if CLKMULT == 0 + /* Записывает SysCtrlRegs.HISPCP.all значением 0x0000; представление регистра целым словом без разбиения на битовые поля. */ SysCtrlRegs.HISPCP.all = 0x0000; -#endif -#if CLKMULT == 1 - SysCtrlRegs.HISPCP.all = 0x0000; -#endif -#if CLKMULT == 2 - SysCtrlRegs.HISPCP.all = 0x0001; -#endif -#if CLKMULT == 3 - SysCtrlRegs.HISPCP.all = 0x0002; -#endif -#if CLKMULT == 4 - SysCtrlRegs.HISPCP.all = 0x0002; -#endif -#if CLKMULT == 5 - SysCtrlRegs.HISPCP.all = 0x0003; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - +/* Условие компиляции CLKMULT == 1: выбранный блок включается в текущий вариант прошивки. */ +#if CLKMULT == 1 + /* Записывает SysCtrlRegs.HISPCP.all значением 0x0000; представление регистра целым словом без разбиения на битовые поля. */ + SysCtrlRegs.HISPCP.all = 0x0000; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif +/* Условие компиляции CLKMULT == 2: выбранный блок включается в текущий вариант прошивки. */ +#if CLKMULT == 2 + /* Записывает SysCtrlRegs.HISPCP.all значением 0x0001; представление регистра целым словом без разбиения на битовые поля. */ + SysCtrlRegs.HISPCP.all = 0x0001; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif +/* Условие компиляции CLKMULT == 3: выбранный блок включается в текущий вариант прошивки. */ +#if CLKMULT == 3 + /* Записывает SysCtrlRegs.HISPCP.all значением 0x0002; представление регистра целым словом без разбиения на битовые поля. */ + SysCtrlRegs.HISPCP.all = 0x0002; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif +/* Условие компиляции CLKMULT == 4: выбранный блок включается в текущий вариант прошивки. */ +#if CLKMULT == 4 + /* Записывает SysCtrlRegs.HISPCP.all значением 0x0002; представление регистра целым словом без разбиения на битовые поля. */ + SysCtrlRegs.HISPCP.all = 0x0002; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif +/* Условие компиляции CLKMULT == 5: выбранный блок включается в текущий вариант прошивки. */ +#if CLKMULT == 5 + /* Записывает SysCtrlRegs.HISPCP.all значением 0x0003; представление регистра целым словом без разбиения на битовые поля. */ + SysCtrlRegs.HISPCP.all = 0x0003; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif + + /* Записывает SysCtrlRegs.LOSPCP.all значением 0x0000; представление регистра целым словом без разбиения на битовые поля. */ SysCtrlRegs.LOSPCP.all = 0x0000; + /* Записывает Val значением (SysCtrlRegs.HISPCP.all)?; данные Val. */ Val = (SysCtrlRegs.HISPCP.all)? + /* Продолжает список аргументов, полей или выражение SysCtrlRegs.HISPCP.all*2 : 1;; порядок элементов сохраняется. */ SysCtrlRegs.HISPCP.all*2 : 1; + /* Записывает Val значением SYSCLKOUT / Val; данные Val. */ Val = SYSCLKOUT / Val; + /* Записывает HSPCLK значением Val; данные HSPCLK. */ HSPCLK = Val; + /* Записывает Val значением (SysCtrlRegs.LOSPCP.all)?; данные Val. */ Val = (SysCtrlRegs.LOSPCP.all)? + /* Продолжает список аргументов, полей или выражение SysCtrlRegs.LOSPCP.all*2 : 1;; порядок элементов сохраняется. */ SysCtrlRegs.LOSPCP.all*2 : 1; + /* Записывает Val значением SYSCLKOUT / Val; данные Val. */ Val = SYSCLKOUT / Val; + /* Записывает LSPCLK значением Val; данные LSPCLK. */ LSPCLK = Val; // XCLKOUT to SYSCLKOUT ratio. By default XCLKOUT = 1/4 SYSCLKOUT // XTIMCLK = SYSCLKOUT/2 + /* Записывает XintfRegs.XINTCNF2.bit.XTIMCLK значением 1; данные XTIMCLK. */ XintfRegs.XINTCNF2.bit.XTIMCLK = 1; // XCLKOUT = XTIMCLK/2 + /* Записывает XintfRegs.XINTCNF2.bit.CLKMODE значением 1; данные CLKMODE. */ XintfRegs.XINTCNF2.bit.CLKMODE = 1; // Enable XCLKOUT + /* Записывает XintfRegs.XINTCNF2.bit.CLKOFF значением 0; данные CLKOFF. */ XintfRegs.XINTCNF2.bit.CLKOFF = 0; // Peripheral clock enables set for the selected peripherals. @@ -309,6 +437,7 @@ void InitPeripheralClocks(void) // // This function is not written to be an example of efficient code. + /* Записывает SysCtrlRegs.PCLKCR0.bit.ADCENCLK значением 1; данные ADCENCLK. */ SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC // *IMPORTANT* @@ -321,46 +450,80 @@ void InitPeripheralClocks(void) // See the device data manual and/or the ADC Reference // Manual for more information. + /* Вызывает ADC_cal с аргументами () в текущей последовательности операций. */ ADC_cal(); + /* Записывает SysCtrlRegs.PCLKCR0.bit.I2CAENCLK значением 1; данные I2CAENCLK. */ SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1; // I2C + /* Записывает SysCtrlRegs.PCLKCR0.bit.SCIAENCLK значением 1; данные SCIAENCLK. */ SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A + /* Записывает SysCtrlRegs.PCLKCR0.bit.SCIBENCLK значением 1; данные SCIBENCLK. */ SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1; // SCI-B + /* Записывает SysCtrlRegs.PCLKCR0.bit.SCICENCLK значением 1; данные SCICENCLK. */ SysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1; // SCI-C + /* Записывает SysCtrlRegs.PCLKCR0.bit.SPIAENCLK значением 1; данные SPIAENCLK. */ SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; // SPI-A + /* Записывает SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK значением 1; данные MCBSPAENCLK. */ SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1; // McBSP-A + /* Записывает SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK значением 1; данные MCBSPBENCLK. */ SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; // McBSP-B + /* Записывает SysCtrlRegs.PCLKCR0.bit.ECANAENCLK значением 1; данные ECANAENCLK. */ SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1; // eCAN-A + /* Записывает SysCtrlRegs.PCLKCR0.bit.ECANBENCLK значением 1; данные ECANBENCLK. */ SysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1; // eCAN-B + /* Записывает SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC значением 0; данные TBCLKSYNC. */ SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM + /* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK значением 1; данные EPWM1ENCLK. */ SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // ePWM1 + /* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK значением 1; данные EPWM2ENCLK. */ SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1; // ePWM2 + /* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK значением 1; данные EPWM3ENCLK. */ SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1; // ePWM3 + /* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK значением 1; данные EPWM4ENCLK. */ SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1; // ePWM4 + /* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK значением 1; данные EPWM5ENCLK. */ SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1; // ePWM5 + /* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK значением 1; данные EPWM6ENCLK. */ SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1; // ePWM6 + /* Записывает SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC значением 1; данные TBCLKSYNC. */ SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM + /* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK значением 1; данные ECAP3ENCLK. */ SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1; // eCAP3 + /* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK значением 1; данные ECAP4ENCLK. */ SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1; // eCAP4 + /* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK значением 1; данные ECAP5ENCLK. */ SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1; // eCAP5 + /* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK значением 1; данные ECAP6ENCLK. */ SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1; // eCAP6 + /* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK значением 1; данные ECAP1ENCLK. */ SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1; // eCAP1 + /* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK значением 1; данные ECAP2ENCLK. */ SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1; // eCAP2 + /* Записывает SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK значением 1; данные EQEP1ENCLK. */ SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1; // eQEP1 + /* Записывает SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK значением 1; данные EQEP2ENCLK. */ SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1; // eQEP2 + /* Записывает SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK значением 1; данные CPUTIMER0ENCLK. */ SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0 + /* Записывает SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK значением 1; данные CPUTIMER1ENCLK. */ SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1 + /* Записывает SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK значением 1; данные CPUTIMER2ENCLK. */ SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2 + /* Записывает SysCtrlRegs.PCLKCR3.bit.DMAENCLK значением 1; данные DMAENCLK. */ SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1; // DMA Clock + /* Записывает SysCtrlRegs.PCLKCR3.bit.XINTFENCLK значением 1; данные XINTFENCLK. */ SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1; // XTIMCLK + /* Записывает SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK значением 1; аппаратная линия ввода/вывода GPIOINENCLK. */ SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //--------------------------------------------------------------------------- @@ -369,44 +532,70 @@ void InitPeripheralClocks(void) // This function unlocks the CSM. User must replace 0xFFFF's with current // password for the DSP. Returns 1 if unlock is successful. +/* Задаёт STATUS_FAIL = 0; состояние FAIL. */ #define STATUS_FAIL 0 +/* Задаёт STATUS_SUCCESS = 1; состояние SUCCESS. */ #define STATUS_SUCCESS 1 +/* Начинает функцию CsmUnlock; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */ Uint16 CsmUnlock() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет temp — данные temp. volatile требует фактического чтения или записи при каждом доступе. */ volatile Uint16 temp; // Load the key registers with the current password. The 0xFFFF's are dummy // passwords. User should replace them with the correct password for the DSP. + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает CsmRegs.KEY0 значением 0xFFFF; данные KEY0. */ CsmRegs.KEY0 = 0xFFFF; + /* Записывает CsmRegs.KEY1 значением 0xFFFF; данные KEY1. */ CsmRegs.KEY1 = 0xFFFF; + /* Записывает CsmRegs.KEY2 значением 0xFFFF; данные KEY2. */ CsmRegs.KEY2 = 0xFFFF; + /* Записывает CsmRegs.KEY3 значением 0xFFFF; данные KEY3. */ CsmRegs.KEY3 = 0xFFFF; + /* Записывает CsmRegs.KEY4 значением 0xFFFF; данные KEY4. */ CsmRegs.KEY4 = 0xFFFF; + /* Записывает CsmRegs.KEY5 значением 0xFFFF; данные KEY5. */ CsmRegs.KEY5 = 0xFFFF; + /* Записывает CsmRegs.KEY6 значением 0xFFFF; данные KEY6. */ CsmRegs.KEY6 = 0xFFFF; + /* Записывает CsmRegs.KEY7 значением 0xFFFF; данные KEY7. */ CsmRegs.KEY7 = 0xFFFF; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; // Perform a dummy read of the password locations // if they match the key values, the CSM will unlock + /* Записывает temp значением CsmPwl.PSWD0; данные temp. */ temp = CsmPwl.PSWD0; + /* Записывает temp значением CsmPwl.PSWD1; данные temp. */ temp = CsmPwl.PSWD1; + /* Записывает temp значением CsmPwl.PSWD2; данные temp. */ temp = CsmPwl.PSWD2; + /* Записывает temp значением CsmPwl.PSWD3; данные temp. */ temp = CsmPwl.PSWD3; + /* Записывает temp значением CsmPwl.PSWD4; данные temp. */ temp = CsmPwl.PSWD4; + /* Записывает temp значением CsmPwl.PSWD5; данные temp. */ temp = CsmPwl.PSWD5; + /* Записывает temp значением CsmPwl.PSWD6; данные temp. */ temp = CsmPwl.PSWD6; + /* Записывает temp значением CsmPwl.PSWD7; данные temp. */ temp = CsmPwl.PSWD7; // If the CSM unlocked, return succes, otherwise return // failure. + /* Проверяет if (CsmRegs.CSMSCR.bit.SECURE == 0) return STATUS_SUCCESS; последующий оператор выполняется только при истинном условии. */ if (CsmRegs.CSMSCR.bit.SECURE == 0) return STATUS_SUCCESS; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else return STATUS_FAIL; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c b/Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c index 0d3619a..105412e 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Xintf для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/5 $ // Checkin $Date: August 16, 2007 11:06:26 $ //########################################################################### @@ -18,7 +19,9 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // DSP2833x Examples Include File //--------------------------------------------------------------------------- @@ -30,7 +33,9 @@ // so can yield unpredictable results +/* Начинает функцию InitXintf; назначение модуля — поставляемое TI описание Xintf для семейства C2833x. */ void InitXintf(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // This shows how to write to the XINTF registers. The // values used here are the default state after reset. @@ -44,13 +49,18 @@ void InitXintf(void) // All Zones--------------------------------- // Timing for all zones based on XTIMCLK = 1/2 SYSCLKOUT + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает XintfRegs.XINTCNF2.bit.XTIMCLK значением 1; данные XTIMCLK. */ XintfRegs.XINTCNF2.bit.XTIMCLK = 1; // No write buffering + /* Записывает XintfRegs.XINTCNF2.bit.WRBUFF значением 0; данные WRBUFF. */ XintfRegs.XINTCNF2.bit.WRBUFF = 0; // XCLKOUT is enabled + /* Записывает XintfRegs.XINTCNF2.bit.CLKOFF значением 0; данные CLKOFF. */ XintfRegs.XINTCNF2.bit.CLKOFF = 0; // XCLKOUT = XTIMCLK/2 + /* Записывает XintfRegs.XINTCNF2.bit.CLKMODE значением 1; данные CLKMODE. */ XintfRegs.XINTCNF2.bit.CLKMODE = 1; @@ -58,48 +68,68 @@ void InitXintf(void) // When using ready, ACTIVE must be 1 or greater // Lead must always be 1 or greater // Zone write timing + /* Записывает XintfRegs.XTIMING0.bit.XWRLEAD значением 3; данные XWRLEAD. */ XintfRegs.XTIMING0.bit.XWRLEAD = 3; + /* Записывает XintfRegs.XTIMING0.bit.XWRACTIVE значением 7; данные XWRACTIVE. */ XintfRegs.XTIMING0.bit.XWRACTIVE = 7; + /* Записывает XintfRegs.XTIMING0.bit.XWRTRAIL значением 3; данные XWRTRAIL. */ XintfRegs.XTIMING0.bit.XWRTRAIL = 3; // Zone read timing + /* Записывает XintfRegs.XTIMING0.bit.XRDLEAD значением 3; данные XRDLEAD. */ XintfRegs.XTIMING0.bit.XRDLEAD = 3; + /* Записывает XintfRegs.XTIMING0.bit.XRDACTIVE значением 7; данные XRDACTIVE. */ XintfRegs.XTIMING0.bit.XRDACTIVE = 7; + /* Записывает XintfRegs.XTIMING0.bit.XRDTRAIL значением 3; данные XRDTRAIL. */ XintfRegs.XTIMING0.bit.XRDTRAIL = 3; // double all Zone read/write lead/active/trail timing + /* Записывает XintfRegs.XTIMING0.bit.X2TIMING значением 1; данные X2TIMING. */ XintfRegs.XTIMING0.bit.X2TIMING = 1; // Zone will sample XREADY signal + /* Записывает XintfRegs.XTIMING0.bit.USEREADY значением 1; данные USEREADY. */ XintfRegs.XTIMING0.bit.USEREADY = 1; + /* Записывает XintfRegs.XTIMING0.bit.READYMODE значением 1; данные READYMODE. */ XintfRegs.XTIMING0.bit.READYMODE = 1; // sample asynchronous // Size must be either: // 0,1 = x32 or // 1,1 = x16 other values are reserved + /* Записывает XintfRegs.XTIMING0.bit.XSIZE значением 3; данные XSIZE. */ XintfRegs.XTIMING0.bit.XSIZE = 3; // Zone 6------------------------------------ // When using ready, ACTIVE must be 1 or greater // Lead must always be 1 or greater // Zone write timing + /* Записывает XintfRegs.XTIMING6.bit.XWRLEAD значением 3; данные XWRLEAD. */ XintfRegs.XTIMING6.bit.XWRLEAD = 3; + /* Записывает XintfRegs.XTIMING6.bit.XWRACTIVE значением 7; данные XWRACTIVE. */ XintfRegs.XTIMING6.bit.XWRACTIVE = 7; + /* Записывает XintfRegs.XTIMING6.bit.XWRTRAIL значением 3; данные XWRTRAIL. */ XintfRegs.XTIMING6.bit.XWRTRAIL = 3; // Zone read timing + /* Записывает XintfRegs.XTIMING6.bit.XRDLEAD значением 3; данные XRDLEAD. */ XintfRegs.XTIMING6.bit.XRDLEAD = 3; + /* Записывает XintfRegs.XTIMING6.bit.XRDACTIVE значением 7; данные XRDACTIVE. */ XintfRegs.XTIMING6.bit.XRDACTIVE = 7; + /* Записывает XintfRegs.XTIMING6.bit.XRDTRAIL значением 3; данные XRDTRAIL. */ XintfRegs.XTIMING6.bit.XRDTRAIL = 3; // double all Zone read/write lead/active/trail timing + /* Записывает XintfRegs.XTIMING6.bit.X2TIMING значением 1; данные X2TIMING. */ XintfRegs.XTIMING6.bit.X2TIMING = 1; // Zone will sample XREADY signal + /* Записывает XintfRegs.XTIMING6.bit.USEREADY значением 1; данные USEREADY. */ XintfRegs.XTIMING6.bit.USEREADY = 1; + /* Записывает XintfRegs.XTIMING6.bit.READYMODE значением 1; данные READYMODE. */ XintfRegs.XTIMING6.bit.READYMODE = 1; // sample asynchronous // Size must be either: // 0,1 = x32 or // 1,1 = x16 other values are reserved + /* Записывает XintfRegs.XTIMING6.bit.XSIZE значением 3; данные XSIZE. */ XintfRegs.XTIMING6.bit.XSIZE = 3; @@ -107,135 +137,229 @@ void InitXintf(void) // When using ready, ACTIVE must be 1 or greater // Lead must always be 1 or greater // Zone write timing + /* Записывает XintfRegs.XTIMING7.bit.XWRLEAD значением 3; данные XWRLEAD. */ XintfRegs.XTIMING7.bit.XWRLEAD = 3; + /* Записывает XintfRegs.XTIMING7.bit.XWRACTIVE значением 7; данные XWRACTIVE. */ XintfRegs.XTIMING7.bit.XWRACTIVE = 7; + /* Записывает XintfRegs.XTIMING7.bit.XWRTRAIL значением 3; данные XWRTRAIL. */ XintfRegs.XTIMING7.bit.XWRTRAIL = 3; // Zone read timing + /* Записывает XintfRegs.XTIMING7.bit.XRDLEAD значением 3; данные XRDLEAD. */ XintfRegs.XTIMING7.bit.XRDLEAD = 3; + /* Записывает XintfRegs.XTIMING7.bit.XRDACTIVE значением 7; данные XRDACTIVE. */ XintfRegs.XTIMING7.bit.XRDACTIVE = 7; + /* Записывает XintfRegs.XTIMING7.bit.XRDTRAIL значением 3; данные XRDTRAIL. */ XintfRegs.XTIMING7.bit.XRDTRAIL = 3; // double all Zone read/write lead/active/trail timing + /* Записывает XintfRegs.XTIMING7.bit.X2TIMING значением 1; данные X2TIMING. */ XintfRegs.XTIMING7.bit.X2TIMING = 1; // Zone will sample XREADY signal + /* Записывает XintfRegs.XTIMING7.bit.USEREADY значением 1; данные USEREADY. */ XintfRegs.XTIMING7.bit.USEREADY = 1; + /* Записывает XintfRegs.XTIMING7.bit.READYMODE значением 1; данные READYMODE. */ XintfRegs.XTIMING7.bit.READYMODE = 1; // sample asynchronous // Size must be either: // 0,1 = x32 or // 1,1 = x16 other values are reserved + /* Записывает XintfRegs.XTIMING7.bit.XSIZE значением 3; данные XSIZE. */ XintfRegs.XTIMING7.bit.XSIZE = 3; // Bank switching // Assume Zone 7 is slow, so add additional BCYC cycles // when ever switching from Zone 7 to another Zone. // This will help avoid bus contention. + /* Записывает XintfRegs.XBANK.bit.BANK значением 7; данные BANK. */ XintfRegs.XBANK.bit.BANK = 7; + /* Записывает XintfRegs.XBANK.bit.BCYC значением 7; данные BCYC. */ XintfRegs.XBANK.bit.BCYC = 7; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; //Force a pipeline flush to ensure that the write to //the last register configured occurs before returning. + /* Инициализирует модуль вызовом InitXintf16Gpio(); перед его дальнейшим использованием. */ InitXintf16Gpio(); // InitXintf32Gpio(); + /* Вызывает asm с аргументами (" RPT #7 || NOP") в текущей последовательности операций. */ asm(" RPT #7 || NOP"); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию InitXintf32Gpio; назначение модуля — поставляемое TI описание Xintf для семейства C2833x. */ void InitXintf32Gpio() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO48 значением 3; аппаратная линия ввода/вывода GPIO48. */ GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 3; // XD31 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO49 значением 3; аппаратная линия ввода/вывода GPIO49. */ GpioCtrlRegs.GPBMUX2.bit.GPIO49 = 3; // XD30 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO50 значением 3; аппаратная линия ввода/вывода GPIO50. */ GpioCtrlRegs.GPBMUX2.bit.GPIO50 = 3; // XD29 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO51 значением 3; аппаратная линия ввода/вывода GPIO51. */ GpioCtrlRegs.GPBMUX2.bit.GPIO51 = 3; // XD28 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO52 значением 3; аппаратная линия ввода/вывода GPIO52. */ GpioCtrlRegs.GPBMUX2.bit.GPIO52 = 3; // XD27 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO53 значением 3; аппаратная линия ввода/вывода GPIO53. */ GpioCtrlRegs.GPBMUX2.bit.GPIO53 = 3; // XD26 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO54 значением 3; аппаратная линия ввода/вывода GPIO54. */ GpioCtrlRegs.GPBMUX2.bit.GPIO54 = 3; // XD25 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO55 значением 3; аппаратная линия ввода/вывода GPIO55. */ GpioCtrlRegs.GPBMUX2.bit.GPIO55 = 3; // XD24 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO56 значением 3; аппаратная линия ввода/вывода GPIO56. */ GpioCtrlRegs.GPBMUX2.bit.GPIO56 = 3; // XD23 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO57 значением 3; аппаратная линия ввода/вывода GPIO57. */ GpioCtrlRegs.GPBMUX2.bit.GPIO57 = 3; // XD22 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO58 значением 3; аппаратная линия ввода/вывода GPIO58. */ GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3; // XD21 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO59 значением 3; аппаратная линия ввода/вывода GPIO59. */ GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3; // XD20 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO60 значением 3; аппаратная линия ввода/вывода GPIO60. */ GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3; // XD19 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO61 значением 3; аппаратная линия ввода/вывода GPIO61. */ GpioCtrlRegs.GPBMUX2.bit.GPIO61 = 3; // XD18 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO62 значением 3; аппаратная линия ввода/вывода GPIO62. */ GpioCtrlRegs.GPBMUX2.bit.GPIO62 = 3; // XD17 + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO63 значением 3; аппаратная линия ввода/вывода GPIO63. */ GpioCtrlRegs.GPBMUX2.bit.GPIO63 = 3; // XD16 + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO48 значением 3; аппаратная линия ввода/вывода GPIO48. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO48 = 3; // XD31 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO49 значением 3; аппаратная линия ввода/вывода GPIO49. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO49 = 3; // XD30 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO50 значением 3; аппаратная линия ввода/вывода GPIO50. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO50 = 3; // XD29 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO51 значением 3; аппаратная линия ввода/вывода GPIO51. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO51 = 3; // XD28 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO52 значением 3; аппаратная линия ввода/вывода GPIO52. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO52 = 3; // XD27 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO53 значением 3; аппаратная линия ввода/вывода GPIO53. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO53 = 3; // XD26 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO54 значением 3; аппаратная линия ввода/вывода GPIO54. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO54 = 3; // XD25 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO55 значением 3; аппаратная линия ввода/вывода GPIO55. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO55 = 3; // XD24 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO56 значением 3; аппаратная линия ввода/вывода GPIO56. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO56 = 3; // XD23 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO57 значением 3; аппаратная линия ввода/вывода GPIO57. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO57 = 3; // XD22 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO58 значением 3; аппаратная линия ввода/вывода GPIO58. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // XD21 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO59 значением 3; аппаратная линия ввода/вывода GPIO59. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // XD20 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO60 значением 3; аппаратная линия ввода/вывода GPIO60. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3; // XD19 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO61 значением 3; аппаратная линия ввода/вывода GPIO61. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO61 = 3; // XD18 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO62 значением 3; аппаратная линия ввода/вывода GPIO62. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO62 = 3; // XD17 asynchronous input + /* Записывает GpioCtrlRegs.GPBQSEL2.bit.GPIO63 значением 3; аппаратная линия ввода/вывода GPIO63. */ GpioCtrlRegs.GPBQSEL2.bit.GPIO63 = 3; // XD16 asynchronous input + /* Инициализирует модуль вызовом InitXintf16Gpio(); перед его дальнейшим использованием. */ InitXintf16Gpio(); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию InitXintf16Gpio; назначение модуля — поставляемое TI описание Xintf для семейства C2833x. */ void InitXintf16Gpio() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO64 значением 3; аппаратная линия ввода/вывода GPIO64. */ GpioCtrlRegs.GPCMUX1.bit.GPIO64 = 3; // XD15 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO65 значением 3; аппаратная линия ввода/вывода GPIO65. */ GpioCtrlRegs.GPCMUX1.bit.GPIO65 = 3; // XD14 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO66 значением 3; аппаратная линия ввода/вывода GPIO66. */ GpioCtrlRegs.GPCMUX1.bit.GPIO66 = 3; // XD13 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO67 значением 3; аппаратная линия ввода/вывода GPIO67. */ GpioCtrlRegs.GPCMUX1.bit.GPIO67 = 3; // XD12 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO68 значением 3; аппаратная линия ввода/вывода GPIO68. */ GpioCtrlRegs.GPCMUX1.bit.GPIO68 = 3; // XD11 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO69 значением 3; аппаратная линия ввода/вывода GPIO69. */ GpioCtrlRegs.GPCMUX1.bit.GPIO69 = 3; // XD10 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO70 значением 3; аппаратная линия ввода/вывода GPIO70. */ GpioCtrlRegs.GPCMUX1.bit.GPIO70 = 3; // XD19 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO71 значением 3; аппаратная линия ввода/вывода GPIO71. */ GpioCtrlRegs.GPCMUX1.bit.GPIO71 = 3; // XD8 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO72 значением 3; аппаратная линия ввода/вывода GPIO72. */ GpioCtrlRegs.GPCMUX1.bit.GPIO72 = 3; // XD7 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO73 значением 3; аппаратная линия ввода/вывода GPIO73. */ GpioCtrlRegs.GPCMUX1.bit.GPIO73 = 3; // XD6 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO74 значением 3; аппаратная линия ввода/вывода GPIO74. */ GpioCtrlRegs.GPCMUX1.bit.GPIO74 = 3; // XD5 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO75 значением 3; аппаратная линия ввода/вывода GPIO75. */ GpioCtrlRegs.GPCMUX1.bit.GPIO75 = 3; // XD4 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO76 значением 3; аппаратная линия ввода/вывода GPIO76. */ GpioCtrlRegs.GPCMUX1.bit.GPIO76 = 3; // XD3 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO77 значением 3; аппаратная линия ввода/вывода GPIO77. */ GpioCtrlRegs.GPCMUX1.bit.GPIO77 = 3; // XD2 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO78 значением 3; аппаратная линия ввода/вывода GPIO78. */ GpioCtrlRegs.GPCMUX1.bit.GPIO78 = 3; // XD1 + /* Записывает GpioCtrlRegs.GPCMUX1.bit.GPIO79 значением 3; аппаратная линия ввода/вывода GPIO79. */ GpioCtrlRegs.GPCMUX1.bit.GPIO79 = 3; // XD0 + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO40 значением 3; аппаратная линия ввода/вывода GPIO40. */ GpioCtrlRegs.GPBMUX1.bit.GPIO40 = 3; // XA0/XWE1n + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO41 значением 3; аппаратная линия ввода/вывода GPIO41. */ GpioCtrlRegs.GPBMUX1.bit.GPIO41 = 3; // XA1 + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO42 значением 3; аппаратная линия ввода/вывода GPIO42. */ GpioCtrlRegs.GPBMUX1.bit.GPIO42 = 3; // XA2 + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO43 значением 3; аппаратная линия ввода/вывода GPIO43. */ GpioCtrlRegs.GPBMUX1.bit.GPIO43 = 3; // XA3 + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO44 значением 3; аппаратная линия ввода/вывода GPIO44. */ GpioCtrlRegs.GPBMUX1.bit.GPIO44 = 3; // XA4 + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO45 значением 3; аппаратная линия ввода/вывода GPIO45. */ GpioCtrlRegs.GPBMUX1.bit.GPIO45 = 3; // XA5 + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO46 значением 3; аппаратная линия ввода/вывода GPIO46. */ GpioCtrlRegs.GPBMUX1.bit.GPIO46 = 3; // XA6 + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO47 значением 3; аппаратная линия ввода/вывода GPIO47. */ GpioCtrlRegs.GPBMUX1.bit.GPIO47 = 3; // XA7 + /* Записывает GpioCtrlRegs.GPCMUX2.bit.GPIO80 значением 3; аппаратная линия ввода/вывода GPIO80. */ GpioCtrlRegs.GPCMUX2.bit.GPIO80 = 3; // XA8 + /* Записывает GpioCtrlRegs.GPCMUX2.bit.GPIO81 значением 3; аппаратная линия ввода/вывода GPIO81. */ GpioCtrlRegs.GPCMUX2.bit.GPIO81 = 3; // XA9 + /* Записывает GpioCtrlRegs.GPCMUX2.bit.GPIO82 значением 3; аппаратная линия ввода/вывода GPIO82. */ GpioCtrlRegs.GPCMUX2.bit.GPIO82 = 3; // XA10 + /* Записывает GpioCtrlRegs.GPCMUX2.bit.GPIO83 значением 3; аппаратная линия ввода/вывода GPIO83. */ GpioCtrlRegs.GPCMUX2.bit.GPIO83 = 3; // XA11 + /* Записывает GpioCtrlRegs.GPCMUX2.bit.GPIO84 значением 3; аппаратная линия ввода/вывода GPIO84. */ GpioCtrlRegs.GPCMUX2.bit.GPIO84 = 3; // XA12 + /* Записывает GpioCtrlRegs.GPCMUX2.bit.GPIO85 значением 3; аппаратная линия ввода/вывода GPIO85. */ GpioCtrlRegs.GPCMUX2.bit.GPIO85 = 3; // XA13 + /* Записывает GpioCtrlRegs.GPCMUX2.bit.GPIO86 значением 3; аппаратная линия ввода/вывода GPIO86. */ GpioCtrlRegs.GPCMUX2.bit.GPIO86 = 3; // XA14 + /* Записывает GpioCtrlRegs.GPCMUX2.bit.GPIO87 значением 3; аппаратная линия ввода/вывода GPIO87. */ GpioCtrlRegs.GPCMUX2.bit.GPIO87 = 3; // XA15 + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO39 значением 3; аппаратная линия ввода/вывода GPIO39. */ GpioCtrlRegs.GPBMUX1.bit.GPIO39 = 3; // XA16 // GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 3; // XA17 // GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 3; // XA18 // GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 3; // XA19 // GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 3; // XREADY + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO35 значением 3; аппаратная линия ввода/вывода GPIO35. */ GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 3; // XRNW + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO38 значением 3; аппаратная линия ввода/вывода GPIO38. */ GpioCtrlRegs.GPBMUX1.bit.GPIO38 = 3; // XWE0 // GpioCtrlRegs.GPBMUX1.bit.GPIO36 = 3; // XZCS0 + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO37 значением 3; аппаратная линия ввода/вывода GPIO37. */ GpioCtrlRegs.GPBMUX1.bit.GPIO37 = 3; // XZCS7 // GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 3; // XZCS6 + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //=========================================================================== diff --git a/Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm b/Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm index d3878b4..d91efde 100644 --- a/Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm +++ b/Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm @@ -1,3 +1,4 @@ +; Поставляемое ti описание usdelay для семейства c2833x. Пояснения в UTF-8. ;// TI File $Revision: /main/4 $ ;// Checkin $Date: July 30, 2007 10:28:57 $ ;//########################################################################### @@ -7,38 +8,38 @@ ;// TITLE: Simple delay function ;// ;// DESCRIPTION: -;// +;// ;// This is a simple delay function that can be used to insert a specified -;// delay into code. -;// +;// delay into code. +;// ;// This function is only accurate if executed from internal zero-waitstate ;// SARAM. If it is executed from waitstate memory then the delay will be -;// longer then specified. -;// +;// longer then specified. +;// ;// To use this function: ;// ;// 1 - update the CPU clock speed in the DSP2833x_Examples.h ;// file. For example: ;// #define CPU_RATE 6.667L // for a 150MHz CPU clock speed -;// or #define CPU_RATE 10.000L // for a 100MHz CPU clock speed +;// or #define CPU_RATE 10.000L // for a 100MHz CPU clock speed ;// ;// 2 - Call this function by using the DELAY_US(A) macro ;// that is defined in the DSP2833x_Examples.h file. This macro ;// will convert the number of microseconds specified -;// into a loop count for use with this function. +;// into a loop count for use with this function. ;// This count will be based on the CPU frequency you specify. ;// -;// 3 - For the most accurate delay -;// - Execute this function in 0 waitstate RAM. +;// 3 - For the most accurate delay +;// - Execute this function in 0 waitstate RAM. ;// - Disable interrupts before calling the function ;// If you do not disable interrupts, then think of ;// this as an "at least" delay function as the actual -;// delay may be longer. +;// delay may be longer. ;// ;// The C assembly call from the DELAY_US(time) macro will -;// look as follows: +;// look as follows: ;// -;// extern void Delay(long LoopCount); +;// extern void Delay(long LoopCount); ;// ;// MOV AL,#LowLoopCount ;// MOV AH,#HighLoopCount @@ -53,16 +54,23 @@ ;//########################################################################### ;// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $ ;// $Release Date: August 1, 2008 $ -;//########################################################################### +;//########################################################################### + ; Экспортирует символ для связывания с C-кодом. Операция: .def _DSP28x_usDelay. .def _DSP28x_usDelay + ; Выбирает секцию объектного файла для следующих инструкций. Операция: .sect ".text". .sect ".text" + ; Объявляет глобальный символ для линкера. Операция: .global __DSP28x_usDelay. .global __DSP28x_usDelay +; Объявляет метку _DSP28x_usDelay: для перехода или вызова. Операция: _DSP28x_usDelay:. _DSP28x_usDelay: + ; Вычитает операнд и обновляет арифметическое состояние. Операция: SUB ACC,#1. SUB ACC,#1 + ; Выполняет условный переход по флагам результата. Операция: BF _DSP28x_usDelay,GEQ. BF _DSP28x_usDelay,GEQ ;; Loop if ACC >= 0 - LRETR + ; Возвращает управление вызывающему коду через длинный адрес возврата. Операция: LRETR. + LRETR ;There is a 9/10 cycle overhead and each loop ;takes five cycles. The LoopCount is given by diff --git a/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd b/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd index fe2d6c5..bf950d0 100644 --- a/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd +++ b/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Headers_BIOS для семейства C2833x. Русские пояснения сохранены в UTF-8. */ /* // TI File $Revision: /main/9 $ // Checkin $Date: August 8, 2008 11:09:25 $ @@ -5,18 +6,18 @@ // // FILE: DSP2833x_Headers_BIOS.cmd // -// TITLE: DSP2833x Peripheral registers linker command file +// TITLE: DSP2833x Peripheral registers linker command file +// +// DESCRIPTION: // -// DESCRIPTION: -// // This file is for use in BIOS applications. // -// Linker command file to place the peripheral structures +// Linker command file to place the peripheral structures // used within the DSP2833x headerfiles into the correct memory // mapped locations. // // This version of the file does not include the PieVectorTable structure. -// For non-BIOS applications, please use the DSP2833x_Headers_nonBIOS.cmd +// For non-BIOS applications, please use the DSP2833x_Headers_nonBIOS.cmd // file which includes the PieVectorTable structure. // //##################################################################### @@ -25,154 +26,210 @@ //##################################################################### */ +/* Начинает описание физических блоков памяти для линкера. */ MEMORY +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - PAGE 0: /* Program Memory */ + PAGE 0: /* Program Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */ - PAGE 1: /* Data Memory */ - - DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */ - FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */ - CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */ - - ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror */ + PAGE 1: /* Data Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */ - XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */ - - CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */ - CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ - CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ + DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */ /* Записывает origin значением 0x000880, length = 0x000180; данные origin. */ + FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */ /* Записывает origin значением 0x000A80, length = 0x000060; данные origin. */ + CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */ /* Записывает origin значением 0x000AE0, length = 0x000010; данные origin. */ - PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */ + ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror */ /* Записывает origin значением 0x000B00, length = 0x000010; данные origin. */ - DMA : origin = 0x001000, length = 0x000200 /* DMA registers */ + XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */ /* Записывает origin значением 0x000B20, length = 0x000020; данные origin. */ - MCBSPA : origin = 0x005000, length = 0x000040 /* McBSP-A registers */ - MCBSPB : origin = 0x005040, length = 0x000040 /* McBSP-B registers */ + CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */ /* Записывает origin значением 0x000C00, length = 0x000008; данные origin. */ + CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ /* Записывает origin значением 0x000C08, length = 0x000008; данные origin. */ + CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ /* Записывает origin значением 0x000C10, length = 0x000008; данные origin. */ - ECANA : origin = 0x006000, length = 0x000040 /* eCAN-A control and status registers */ - ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN-A local acceptance masks */ - ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN-A message object time stamps */ - ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN-A object time-out registers */ - ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN-A mailboxes */ + PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */ /* Записывает origin значением 0x000CE0, length = 0x000020; данные origin. */ - ECANB : origin = 0x006200, length = 0x000040 /* eCAN-B control and status registers */ - ECANB_LAM : origin = 0x006240, length = 0x000040 /* eCAN-B local acceptance masks */ - ECANB_MOTS : origin = 0x006280, length = 0x000040 /* eCAN-B message object time stamps */ - ECANB_MOTO : origin = 0x0062C0, length = 0x000040 /* eCAN-B object time-out registers */ - ECANB_MBOX : origin = 0x006300, length = 0x000100 /* eCAN-B mailboxes */ + DMA : origin = 0x001000, length = 0x000200 /* DMA registers */ /* Записывает origin значением 0x001000, length = 0x000200; данные origin. */ - EPWM1 : origin = 0x006800, length = 0x000022 /* Enhanced PWM 1 registers */ - EPWM2 : origin = 0x006840, length = 0x000022 /* Enhanced PWM 2 registers */ - EPWM3 : origin = 0x006880, length = 0x000022 /* Enhanced PWM 3 registers */ - EPWM4 : origin = 0x0068C0, length = 0x000022 /* Enhanced PWM 4 registers */ - EPWM5 : origin = 0x006900, length = 0x000022 /* Enhanced PWM 5 registers */ - EPWM6 : origin = 0x006940, length = 0x000022 /* Enhanced PWM 6 registers */ + MCBSPA : origin = 0x005000, length = 0x000040 /* McBSP-A registers */ /* Записывает origin значением 0x005000, length = 0x000040; данные origin. */ + MCBSPB : origin = 0x005040, length = 0x000040 /* McBSP-B registers */ /* Записывает origin значением 0x005040, length = 0x000040; данные origin. */ - ECAP1 : origin = 0x006A00, length = 0x000020 /* Enhanced Capture 1 registers */ - ECAP2 : origin = 0x006A20, length = 0x000020 /* Enhanced Capture 2 registers */ - ECAP3 : origin = 0x006A40, length = 0x000020 /* Enhanced Capture 3 registers */ - ECAP4 : origin = 0x006A60, length = 0x000020 /* Enhanced Capture 4 registers */ - ECAP5 : origin = 0x006A80, length = 0x000020 /* Enhanced Capture 5 registers */ - ECAP6 : origin = 0x006AA0, length = 0x000020 /* Enhanced Capture 6 registers */ - - EQEP1 : origin = 0x006B00, length = 0x000040 /* Enhanced QEP 1 registers */ - EQEP2 : origin = 0x006B40, length = 0x000040 /* Enhanced QEP 2 registers */ + ECANA : origin = 0x006000, length = 0x000040 /* eCAN-A control and status registers */ /* Записывает origin значением 0x006000, length = 0x000040; данные origin. */ + ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN-A local acceptance masks */ /* Записывает origin значением 0x006040, length = 0x000040; данные origin. */ + ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN-A message object time stamps */ /* Записывает origin значением 0x006080, length = 0x000040; данные origin. */ + ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN-A object time-out registers */ /* Записывает origin значением 0x0060C0, length = 0x000040; данные origin. */ + ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN-A mailboxes */ /* Записывает origin значением 0x006100, length = 0x000100; данные origin. */ - GPIOCTRL : origin = 0x006F80, length = 0x000040 /* GPIO control registers */ - GPIODAT : origin = 0x006FC0, length = 0x000020 /* GPIO data registers */ - GPIOINT : origin = 0x006FE0, length = 0x000020 /* GPIO interrupt/LPM registers */ - - SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */ - SPIA : origin = 0x007040, length = 0x000010 /* SPI-A registers */ - SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */ - XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */ + ECANB : origin = 0x006200, length = 0x000040 /* eCAN-B control and status registers */ /* Записывает origin значением 0x006200, length = 0x000040; данные origin. */ + ECANB_LAM : origin = 0x006240, length = 0x000040 /* eCAN-B local acceptance masks */ /* Записывает origin значением 0x006240, length = 0x000040; данные origin. */ + ECANB_MOTS : origin = 0x006280, length = 0x000040 /* eCAN-B message object time stamps */ /* Записывает origin значением 0x006280, length = 0x000040; данные origin. */ + ECANB_MOTO : origin = 0x0062C0, length = 0x000040 /* eCAN-B object time-out registers */ /* Записывает origin значением 0x0062C0, length = 0x000040; данные origin. */ + ECANB_MBOX : origin = 0x006300, length = 0x000100 /* eCAN-B mailboxes */ /* Записывает origin значением 0x006300, length = 0x000100; данные origin. */ - ADC : origin = 0x007100, length = 0x000020 /* ADC registers */ + EPWM1 : origin = 0x006800, length = 0x000022 /* Enhanced PWM 1 registers */ /* Записывает origin значением 0x006800, length = 0x000022; данные origin. */ + EPWM2 : origin = 0x006840, length = 0x000022 /* Enhanced PWM 2 registers */ /* Записывает origin значением 0x006840, length = 0x000022; данные origin. */ + EPWM3 : origin = 0x006880, length = 0x000022 /* Enhanced PWM 3 registers */ /* Записывает origin значением 0x006880, length = 0x000022; данные origin. */ + EPWM4 : origin = 0x0068C0, length = 0x000022 /* Enhanced PWM 4 registers */ /* Записывает origin значением 0x0068C0, length = 0x000022; данные origin. */ + EPWM5 : origin = 0x006900, length = 0x000022 /* Enhanced PWM 5 registers */ /* Записывает origin значением 0x006900, length = 0x000022; данные origin. */ + EPWM6 : origin = 0x006940, length = 0x000022 /* Enhanced PWM 6 registers */ /* Записывает origin значением 0x006940, length = 0x000022; данные origin. */ - SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */ + ECAP1 : origin = 0x006A00, length = 0x000020 /* Enhanced Capture 1 registers */ /* Записывает origin значением 0x006A00, length = 0x000020; данные origin. */ + ECAP2 : origin = 0x006A20, length = 0x000020 /* Enhanced Capture 2 registers */ /* Записывает origin значением 0x006A20, length = 0x000020; данные origin. */ + ECAP3 : origin = 0x006A40, length = 0x000020 /* Enhanced Capture 3 registers */ /* Записывает origin значением 0x006A40, length = 0x000020; данные origin. */ + ECAP4 : origin = 0x006A60, length = 0x000020 /* Enhanced Capture 4 registers */ /* Записывает origin значением 0x006A60, length = 0x000020; данные origin. */ + ECAP5 : origin = 0x006A80, length = 0x000020 /* Enhanced Capture 5 registers */ /* Записывает origin значением 0x006A80, length = 0x000020; данные origin. */ + ECAP6 : origin = 0x006AA0, length = 0x000020 /* Enhanced Capture 6 registers */ /* Записывает origin значением 0x006AA0, length = 0x000020; данные origin. */ - SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */ - - I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */ - - CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */ + EQEP1 : origin = 0x006B00, length = 0x000040 /* Enhanced QEP 1 registers */ /* Записывает origin значением 0x006B00, length = 0x000040; данные origin. */ + EQEP2 : origin = 0x006B40, length = 0x000040 /* Enhanced QEP 2 registers */ /* Записывает origin значением 0x006B40, length = 0x000040; данные origin. */ - PARTID : origin = 0x380090, length = 0x000001 /* Part ID register location */ + GPIOCTRL : origin = 0x006F80, length = 0x000040 /* GPIO control registers */ /* Записывает origin значением 0x006F80, length = 0x000040; данные origin. */ + GPIODAT : origin = 0x006FC0, length = 0x000020 /* GPIO data registers */ /* Записывает origin значением 0x006FC0, length = 0x000020; данные origin. */ + GPIOINT : origin = 0x006FE0, length = 0x000020 /* GPIO interrupt/LPM registers */ /* Записывает origin значением 0x006FE0, length = 0x000020; данные origin. */ + + SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */ /* Записывает origin значением 0x007010, length = 0x000020; данные origin. */ + SPIA : origin = 0x007040, length = 0x000010 /* SPI-A registers */ /* Записывает origin значением 0x007040, length = 0x000010; данные origin. */ + SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */ /* Записывает origin значением 0x007050, length = 0x000010; данные origin. */ + XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */ /* Записывает origin значением 0x007070, length = 0x000010; данные origin. */ + + ADC : origin = 0x007100, length = 0x000020 /* ADC registers */ /* Записывает origin значением 0x007100, length = 0x000020; данные origin. */ + + SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */ /* Записывает origin значением 0x007750, length = 0x000010; данные origin. */ + + SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */ /* Записывает origin значением 0x007770, length = 0x000010; данные origin. */ + + I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */ /* Записывает origin значением 0x007900, length = 0x000040; данные origin. */ + + CSM_PWL : origin = 0x3F7FF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */ /* Записывает origin значением 0x3F7FF8, length = 0x000008; данные origin. */ + + PARTID : origin = 0x380090, length = 0x000001 /* Part ID register location */ /* Записывает origin значением 0x380090, length = 0x000001; данные origin. */ +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - + +/* Начинает описание размещения секций объектных файлов для линкера. */ SECTIONS +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { /*** The PIE Vector table is called PIEVECT by DSP/BIOS ***/ + /* Записывает PAGE значением 1, TYPE = DSECT; данные PAGE. */ PieVectTableFile : > PIEVECT, PAGE = 1, TYPE = DSECT /*** Peripheral Frame 0 Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ DevEmuRegsFile : > DEV_EMU, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ FlashRegsFile : > FLASH_REGS, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ CsmRegsFile : > CSM, PAGE = 1 - AdcMirrorFile : > ADC_MIRROR, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + AdcMirrorFile : > ADC_MIRROR, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ XintfRegsFile : > XINTF, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1 - CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1 - PieCtrlRegsFile : > PIE_CTRL, PAGE = 1 - DmaRegsFile : > DMA, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + PieCtrlRegsFile : > PIE_CTRL, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + DmaRegsFile : > DMA, PAGE = 1 /*** Peripheral Frame 3 Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ McbspaRegsFile : > MCBSPA, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ McbspbRegsFile : > MCBSPB, PAGE = 1 /*** Peripheral Frame 1 Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ ECanaRegsFile : > ECANA, PAGE = 1 - ECanaLAMRegsFile : > ECANA_LAM PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECanaLAMRegsFile : > ECANA_LAM PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanaMboxesFile : > ECANA_MBOX PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanaMOTSRegsFile : > ECANA_MOTS PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanaMOTORegsFile : > ECANA_MOTO PAGE = 1 - + + /* Записывает PAGE значением 1; данные PAGE. */ ECanbRegsFile : > ECANB, PAGE = 1 - ECanbLAMRegsFile : > ECANB_LAM PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECanbLAMRegsFile : > ECANB_LAM PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanbMboxesFile : > ECANB_MBOX PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanbMOTSRegsFile : > ECANB_MOTS PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanbMOTORegsFile : > ECANB_MOTO PAGE = 1 - - EPwm1RegsFile : > EPWM1 PAGE = 1 - EPwm2RegsFile : > EPWM2 PAGE = 1 - EPwm3RegsFile : > EPWM3 PAGE = 1 - EPwm4RegsFile : > EPWM4 PAGE = 1 - EPwm5RegsFile : > EPWM5 PAGE = 1 + + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm1RegsFile : > EPWM1 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm2RegsFile : > EPWM2 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm3RegsFile : > EPWM3 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm4RegsFile : > EPWM4 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm5RegsFile : > EPWM5 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ EPwm6RegsFile : > EPWM6 PAGE = 1 - - ECap1RegsFile : > ECAP1 PAGE = 1 - ECap2RegsFile : > ECAP2 PAGE = 1 - ECap3RegsFile : > ECAP3 PAGE = 1 + + /* Записывает PAGE значением 1; данные PAGE. */ + ECap1RegsFile : > ECAP1 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECap2RegsFile : > ECAP2 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECap3RegsFile : > ECAP3 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECap4RegsFile : > ECAP4 PAGE = 1 - ECap5RegsFile : > ECAP5 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECap5RegsFile : > ECAP5 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECap6RegsFile : > ECAP6 PAGE = 1 - EQep1RegsFile : > EQEP1 PAGE = 1 - EQep2RegsFile : > EQEP2 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EQep1RegsFile : > EQEP1 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EQep2RegsFile : > EQEP2 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ GpioCtrlRegsFile : > GPIOCTRL PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ GpioDataRegsFile : > GPIODAT PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ GpioIntRegsFile : > GPIOINT PAGE = 1 - + /*** Peripheral Frame 2 Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ SysCtrlRegsFile : > SYSTEM, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ SpiaRegsFile : > SPIA, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ SciaRegsFile : > SCIA, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ XIntruptRegsFile : > XINTRUPT, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ AdcRegsFile : > ADC, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ScibRegsFile : > SCIB, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ScicRegsFile : > SCIC, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ I2caRegsFile : > I2CA, PAGE = 1 - + /*** Code Security Module Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ CsmPwlFile : > CSM_PWL, PAGE = 1 /*** Device Part ID Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ PartIdRegsFile : > PARTID, PAGE = 1 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } @@ -180,4 +237,4 @@ SECTIONS //=========================================================================== // End of file. //=========================================================================== -*/ \ No newline at end of file +*/ diff --git a/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd b/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd index 9da1026..d6716e7 100644 --- a/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd +++ b/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Headers_nonBIOS для семейства C2833x. Русские пояснения сохранены в UTF-8. */ /* // TI File $Revision: /main/8 $ // Checkin $Date: June 2, 2008 11:12:24 $ @@ -5,13 +6,13 @@ // // FILE: DSP2833x_Headers_nonBIOS.cmd // -// TITLE: DSP2833x Peripheral registers linker command file +// TITLE: DSP2833x Peripheral registers linker command file +// +// DESCRIPTION: // -// DESCRIPTION: -// // This file is for use in Non-BIOS applications. // -// Linker command file to place the peripheral structures +// Linker command file to place the peripheral structures // used within the DSP2833x headerfiles into the correct memory // mapped locations. // @@ -25,154 +26,210 @@ //########################################################################### */ +/* Начинает описание физических блоков памяти для линкера. */ MEMORY +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - PAGE 0: /* Program Memory */ + PAGE 0: /* Program Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */ - PAGE 1: /* Data Memory */ - - DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */ - FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */ - CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */ - - ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror */ + PAGE 1: /* Data Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */ - XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */ - - CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */ - CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ - CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ + DEV_EMU : origin = 0x000880, length = 0x000180 /* device emulation registers */ /* Записывает origin значением 0x000880, length = 0x000180; данные origin. */ + FLASH_REGS : origin = 0x000A80, length = 0x000060 /* FLASH registers */ /* Записывает origin значением 0x000A80, length = 0x000060; данные origin. */ + CSM : origin = 0x000AE0, length = 0x000010 /* code security module registers */ /* Записывает origin значением 0x000AE0, length = 0x000010; данные origin. */ - PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */ - PIE_VECT : origin = 0x000D00, length = 0x000100 /* PIE Vector Table */ + ADC_MIRROR : origin = 0x000B00, length = 0x000010 /* ADC Results register mirror */ /* Записывает origin значением 0x000B00, length = 0x000010; данные origin. */ - DMA : origin = 0x001000, length = 0x000200 /* DMA registers */ + XINTF : origin = 0x000B20, length = 0x000020 /* external interface registers */ /* Записывает origin значением 0x000B20, length = 0x000020; данные origin. */ - MCBSPA : origin = 0x005000, length = 0x000040 /* McBSP-A registers */ - MCBSPB : origin = 0x005040, length = 0x000040 /* McBSP-B registers */ + CPU_TIMER0 : origin = 0x000C00, length = 0x000008 /* CPU Timer0 registers */ /* Записывает origin значением 0x000C00, length = 0x000008; данные origin. */ + CPU_TIMER1 : origin = 0x000C08, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ /* Записывает origin значением 0x000C08, length = 0x000008; данные origin. */ + CPU_TIMER2 : origin = 0x000C10, length = 0x000008 /* CPU Timer0 registers (CPU Timer1 & Timer2 reserved TI use)*/ /* Записывает origin значением 0x000C10, length = 0x000008; данные origin. */ - ECANA : origin = 0x006000, length = 0x000040 /* eCAN-A control and status registers */ - ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN-A local acceptance masks */ - ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN-A message object time stamps */ - ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN-A object time-out registers */ - ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN-A mailboxes */ + PIE_CTRL : origin = 0x000CE0, length = 0x000020 /* PIE control registers */ /* Записывает origin значением 0x000CE0, length = 0x000020; данные origin. */ + PIE_VECT : origin = 0x000D00, length = 0x000100 /* PIE Vector Table */ /* Записывает origin значением 0x000D00, length = 0x000100; данные origin. */ - ECANB : origin = 0x006200, length = 0x000040 /* eCAN-B control and status registers */ - ECANB_LAM : origin = 0x006240, length = 0x000040 /* eCAN-B local acceptance masks */ - ECANB_MOTS : origin = 0x006280, length = 0x000040 /* eCAN-B message object time stamps */ - ECANB_MOTO : origin = 0x0062C0, length = 0x000040 /* eCAN-B object time-out registers */ - ECANB_MBOX : origin = 0x006300, length = 0x000100 /* eCAN-B mailboxes */ + DMA : origin = 0x001000, length = 0x000200 /* DMA registers */ /* Записывает origin значением 0x001000, length = 0x000200; данные origin. */ - EPWM1 : origin = 0x006800, length = 0x000022 /* Enhanced PWM 1 registers */ - EPWM2 : origin = 0x006840, length = 0x000022 /* Enhanced PWM 2 registers */ - EPWM3 : origin = 0x006880, length = 0x000022 /* Enhanced PWM 3 registers */ - EPWM4 : origin = 0x0068C0, length = 0x000022 /* Enhanced PWM 4 registers */ - EPWM5 : origin = 0x006900, length = 0x000022 /* Enhanced PWM 5 registers */ - EPWM6 : origin = 0x006940, length = 0x000022 /* Enhanced PWM 6 registers */ + MCBSPA : origin = 0x005000, length = 0x000040 /* McBSP-A registers */ /* Записывает origin значением 0x005000, length = 0x000040; данные origin. */ + MCBSPB : origin = 0x005040, length = 0x000040 /* McBSP-B registers */ /* Записывает origin значением 0x005040, length = 0x000040; данные origin. */ - ECAP1 : origin = 0x006A00, length = 0x000020 /* Enhanced Capture 1 registers */ - ECAP2 : origin = 0x006A20, length = 0x000020 /* Enhanced Capture 2 registers */ - ECAP3 : origin = 0x006A40, length = 0x000020 /* Enhanced Capture 3 registers */ - ECAP4 : origin = 0x006A60, length = 0x000020 /* Enhanced Capture 4 registers */ - ECAP5 : origin = 0x006A80, length = 0x000020 /* Enhanced Capture 5 registers */ - ECAP6 : origin = 0x006AA0, length = 0x000020 /* Enhanced Capture 6 registers */ - - EQEP1 : origin = 0x006B00, length = 0x000040 /* Enhanced QEP 1 registers */ - EQEP2 : origin = 0x006B40, length = 0x000040 /* Enhanced QEP 2 registers */ + ECANA : origin = 0x006000, length = 0x000040 /* eCAN-A control and status registers */ /* Записывает origin значением 0x006000, length = 0x000040; данные origin. */ + ECANA_LAM : origin = 0x006040, length = 0x000040 /* eCAN-A local acceptance masks */ /* Записывает origin значением 0x006040, length = 0x000040; данные origin. */ + ECANA_MOTS : origin = 0x006080, length = 0x000040 /* eCAN-A message object time stamps */ /* Записывает origin значением 0x006080, length = 0x000040; данные origin. */ + ECANA_MOTO : origin = 0x0060C0, length = 0x000040 /* eCAN-A object time-out registers */ /* Записывает origin значением 0x0060C0, length = 0x000040; данные origin. */ + ECANA_MBOX : origin = 0x006100, length = 0x000100 /* eCAN-A mailboxes */ /* Записывает origin значением 0x006100, length = 0x000100; данные origin. */ - GPIOCTRL : origin = 0x006F80, length = 0x000040 /* GPIO control registers */ - GPIODAT : origin = 0x006FC0, length = 0x000020 /* GPIO data registers */ - GPIOINT : origin = 0x006FE0, length = 0x000020 /* GPIO interrupt/LPM registers */ - - SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */ - SPIA : origin = 0x007040, length = 0x000010 /* SPI-A registers */ - SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */ - XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */ + ECANB : origin = 0x006200, length = 0x000040 /* eCAN-B control and status registers */ /* Записывает origin значением 0x006200, length = 0x000040; данные origin. */ + ECANB_LAM : origin = 0x006240, length = 0x000040 /* eCAN-B local acceptance masks */ /* Записывает origin значением 0x006240, length = 0x000040; данные origin. */ + ECANB_MOTS : origin = 0x006280, length = 0x000040 /* eCAN-B message object time stamps */ /* Записывает origin значением 0x006280, length = 0x000040; данные origin. */ + ECANB_MOTO : origin = 0x0062C0, length = 0x000040 /* eCAN-B object time-out registers */ /* Записывает origin значением 0x0062C0, length = 0x000040; данные origin. */ + ECANB_MBOX : origin = 0x006300, length = 0x000100 /* eCAN-B mailboxes */ /* Записывает origin значением 0x006300, length = 0x000100; данные origin. */ - ADC : origin = 0x007100, length = 0x000020 /* ADC registers */ + EPWM1 : origin = 0x006800, length = 0x000022 /* Enhanced PWM 1 registers */ /* Записывает origin значением 0x006800, length = 0x000022; данные origin. */ + EPWM2 : origin = 0x006840, length = 0x000022 /* Enhanced PWM 2 registers */ /* Записывает origin значением 0x006840, length = 0x000022; данные origin. */ + EPWM3 : origin = 0x006880, length = 0x000022 /* Enhanced PWM 3 registers */ /* Записывает origin значением 0x006880, length = 0x000022; данные origin. */ + EPWM4 : origin = 0x0068C0, length = 0x000022 /* Enhanced PWM 4 registers */ /* Записывает origin значением 0x0068C0, length = 0x000022; данные origin. */ + EPWM5 : origin = 0x006900, length = 0x000022 /* Enhanced PWM 5 registers */ /* Записывает origin значением 0x006900, length = 0x000022; данные origin. */ + EPWM6 : origin = 0x006940, length = 0x000022 /* Enhanced PWM 6 registers */ /* Записывает origin значением 0x006940, length = 0x000022; данные origin. */ - SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */ + ECAP1 : origin = 0x006A00, length = 0x000020 /* Enhanced Capture 1 registers */ /* Записывает origin значением 0x006A00, length = 0x000020; данные origin. */ + ECAP2 : origin = 0x006A20, length = 0x000020 /* Enhanced Capture 2 registers */ /* Записывает origin значением 0x006A20, length = 0x000020; данные origin. */ + ECAP3 : origin = 0x006A40, length = 0x000020 /* Enhanced Capture 3 registers */ /* Записывает origin значением 0x006A40, length = 0x000020; данные origin. */ + ECAP4 : origin = 0x006A60, length = 0x000020 /* Enhanced Capture 4 registers */ /* Записывает origin значением 0x006A60, length = 0x000020; данные origin. */ + ECAP5 : origin = 0x006A80, length = 0x000020 /* Enhanced Capture 5 registers */ /* Записывает origin значением 0x006A80, length = 0x000020; данные origin. */ + ECAP6 : origin = 0x006AA0, length = 0x000020 /* Enhanced Capture 6 registers */ /* Записывает origin значением 0x006AA0, length = 0x000020; данные origin. */ - SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */ - - I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */ - - CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */ + EQEP1 : origin = 0x006B00, length = 0x000040 /* Enhanced QEP 1 registers */ /* Записывает origin значением 0x006B00, length = 0x000040; данные origin. */ + EQEP2 : origin = 0x006B40, length = 0x000040 /* Enhanced QEP 2 registers */ /* Записывает origin значением 0x006B40, length = 0x000040; данные origin. */ - PARTID : origin = 0x380090, length = 0x000001 /* Part ID register location */ + GPIOCTRL : origin = 0x006F80, length = 0x000040 /* GPIO control registers */ /* Записывает origin значением 0x006F80, length = 0x000040; данные origin. */ + GPIODAT : origin = 0x006FC0, length = 0x000020 /* GPIO data registers */ /* Записывает origin значением 0x006FC0, length = 0x000020; данные origin. */ + GPIOINT : origin = 0x006FE0, length = 0x000020 /* GPIO interrupt/LPM registers */ /* Записывает origin значением 0x006FE0, length = 0x000020; данные origin. */ + + SYSTEM : origin = 0x007010, length = 0x000020 /* System control registers */ /* Записывает origin значением 0x007010, length = 0x000020; данные origin. */ + SPIA : origin = 0x007040, length = 0x000010 /* SPI-A registers */ /* Записывает origin значением 0x007040, length = 0x000010; данные origin. */ + SCIA : origin = 0x007050, length = 0x000010 /* SCI-A registers */ /* Записывает origin значением 0x007050, length = 0x000010; данные origin. */ + XINTRUPT : origin = 0x007070, length = 0x000010 /* external interrupt registers */ /* Записывает origin значением 0x007070, length = 0x000010; данные origin. */ + + ADC : origin = 0x007100, length = 0x000020 /* ADC registers */ /* Записывает origin значением 0x007100, length = 0x000020; данные origin. */ + + SCIB : origin = 0x007750, length = 0x000010 /* SCI-B registers */ /* Записывает origin значением 0x007750, length = 0x000010; данные origin. */ + + SCIC : origin = 0x007770, length = 0x000010 /* SCI-C registers */ /* Записывает origin значением 0x007770, length = 0x000010; данные origin. */ + + I2CA : origin = 0x007900, length = 0x000040 /* I2C-A registers */ /* Записывает origin значением 0x007900, length = 0x000040; данные origin. */ + + CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations. */ /* Записывает origin значением 0x33FFF8, length = 0x000008; данные origin. */ + + PARTID : origin = 0x380090, length = 0x000001 /* Part ID register location */ /* Записывает origin значением 0x380090, length = 0x000001; данные origin. */ +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - + +/* Начинает описание размещения секций объектных файлов для линкера. */ SECTIONS +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает PAGE значением 1; данные PAGE. */ PieVectTableFile : > PIE_VECT, PAGE = 1 /*** Peripheral Frame 0 Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ DevEmuRegsFile : > DEV_EMU, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ FlashRegsFile : > FLASH_REGS, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ CsmRegsFile : > CSM, PAGE = 1 - AdcMirrorFile : > ADC_MIRROR, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + AdcMirrorFile : > ADC_MIRROR, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ XintfRegsFile : > XINTF, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1 - CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1 - PieCtrlRegsFile : > PIE_CTRL, PAGE = 1 - DmaRegsFile : > DMA, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + PieCtrlRegsFile : > PIE_CTRL, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + DmaRegsFile : > DMA, PAGE = 1 /*** Peripheral Frame 3 Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ McbspaRegsFile : > MCBSPA, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ McbspbRegsFile : > MCBSPB, PAGE = 1 /*** Peripheral Frame 1 Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ ECanaRegsFile : > ECANA, PAGE = 1 - ECanaLAMRegsFile : > ECANA_LAM PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECanaLAMRegsFile : > ECANA_LAM PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanaMboxesFile : > ECANA_MBOX PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanaMOTSRegsFile : > ECANA_MOTS PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanaMOTORegsFile : > ECANA_MOTO PAGE = 1 - + + /* Записывает PAGE значением 1; данные PAGE. */ ECanbRegsFile : > ECANB, PAGE = 1 - ECanbLAMRegsFile : > ECANB_LAM PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECanbLAMRegsFile : > ECANB_LAM PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanbMboxesFile : > ECANB_MBOX PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanbMOTSRegsFile : > ECANB_MOTS PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECanbMOTORegsFile : > ECANB_MOTO PAGE = 1 - - EPwm1RegsFile : > EPWM1 PAGE = 1 - EPwm2RegsFile : > EPWM2 PAGE = 1 - EPwm3RegsFile : > EPWM3 PAGE = 1 - EPwm4RegsFile : > EPWM4 PAGE = 1 - EPwm5RegsFile : > EPWM5 PAGE = 1 + + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm1RegsFile : > EPWM1 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm2RegsFile : > EPWM2 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm3RegsFile : > EPWM3 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm4RegsFile : > EPWM4 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EPwm5RegsFile : > EPWM5 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ EPwm6RegsFile : > EPWM6 PAGE = 1 - - ECap1RegsFile : > ECAP1 PAGE = 1 - ECap2RegsFile : > ECAP2 PAGE = 1 - ECap3RegsFile : > ECAP3 PAGE = 1 + + /* Записывает PAGE значением 1; данные PAGE. */ + ECap1RegsFile : > ECAP1 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECap2RegsFile : > ECAP2 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECap3RegsFile : > ECAP3 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECap4RegsFile : > ECAP4 PAGE = 1 - ECap5RegsFile : > ECAP5 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + ECap5RegsFile : > ECAP5 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ECap6RegsFile : > ECAP6 PAGE = 1 - EQep1RegsFile : > EQEP1 PAGE = 1 - EQep2RegsFile : > EQEP2 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EQep1RegsFile : > EQEP1 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ + EQep2RegsFile : > EQEP2 PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ GpioCtrlRegsFile : > GPIOCTRL PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ GpioDataRegsFile : > GPIODAT PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ GpioIntRegsFile : > GPIOINT PAGE = 1 - + /*** Peripheral Frame 2 Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ SysCtrlRegsFile : > SYSTEM, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ SpiaRegsFile : > SPIA, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ SciaRegsFile : > SCIA, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ XIntruptRegsFile : > XINTRUPT, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ AdcRegsFile : > ADC, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ScibRegsFile : > SCIB, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ScicRegsFile : > SCIC, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ I2caRegsFile : > I2CA, PAGE = 1 - + /*** Code Security Module Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ CsmPwlFile : > CSM_PWL, PAGE = 1 /*** Device Part ID Register Structures ***/ + /* Записывает PAGE значением 1; данные PAGE. */ PartIdRegsFile : > PARTID, PAGE = 1 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Adc.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Adc.h index 5c8467a..5e7e011 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Adc.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Adc.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Adc для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:51:50 $ //########################################################################### @@ -11,252 +12,452 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_ADC_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_ADC_H +/* Определяет защитный символ или переключатель DSP2833x_ADC_H для последующей компиляции. */ #define DSP2833x_ADC_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //--------------------------------------------------------------------------- // ADC Individual Register Bit Definitions: +/* Описывает структуру ADCTRL1_BITS; порядок полей определяет расположение данных. */ struct ADCTRL1_BITS { // bits description + /* Битовое поле rsvd1, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:4; // 3:0 reserved + /* Битовое поле SEQ_CASC, ширина 1 бит; данные SEQ_CASC. */ Uint16 SEQ_CASC:1; // 4 Cascaded sequencer mode - Uint16 SEQ_OVRD:1; // 5 Sequencer override + /* Битовое поле SEQ_OVRD, ширина 1 бит; данные SEQ_OVRD. */ + Uint16 SEQ_OVRD:1; // 5 Sequencer override + /* Битовое поле CONT_RUN, ширина 1 бит; данные CONT_RUN. */ Uint16 CONT_RUN:1; // 6 Continuous run + /* Битовое поле CPS, ширина 1 бит; данные CPS. */ Uint16 CPS:1; // 7 ADC core clock pre-scalar + /* Битовое поле ACQ_PS, ширина 4 бит; данные ACQ_PS. */ Uint16 ACQ_PS:4; // 11:8 Acquisition window size + /* Битовое поле SUSMOD, ширина 2 бит; данные SUSMOD. */ Uint16 SUSMOD:2; // 13:12 Emulation suspend mode + /* Битовое поле RESET, ширина 1 бит; сброс. */ Uint16 RESET:1; // 14 ADC reset + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCTRL1_REG в одной области памяти. */ union ADCTRL1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCTRL1_BITS bit;; порядок полей определяет расположение данных. */ struct ADCTRL1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCTRL2_BITS; порядок полей определяет расположение данных. */ struct ADCTRL2_BITS { // bits description + /* Битовое поле EPWM_SOCB_SEQ2, ширина 1 бит; данные EPWM_SOCB_SEQ2. */ Uint16 EPWM_SOCB_SEQ2:1; // 0 EPWM compare B SOC mask for SEQ2 + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 1 reserved + /* Битовое поле INT_MOD_SEQ2, ширина 1 бит; данные INT_MOD_SEQ2. */ Uint16 INT_MOD_SEQ2:1; // 2 SEQ2 Interrupt mode + /* Битовое поле INT_ENA_SEQ2, ширина 1 бит; данные INT_ENA_SEQ2. */ Uint16 INT_ENA_SEQ2:1; // 3 SEQ2 Interrupt enable + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 4 reserved + /* Битовое поле SOC_SEQ2, ширина 1 бит; данные SOC_SEQ2. */ Uint16 SOC_SEQ2:1; // 5 Start of conversion for SEQ2 + /* Битовое поле RST_SEQ2, ширина 1 бит; данные RST_SEQ2. */ Uint16 RST_SEQ2:1; // 6 Reset SEQ2 + /* Битовое поле EXT_SOC_SEQ1, ширина 1 бит; данные EXT_SOC_SEQ1. */ Uint16 EXT_SOC_SEQ1:1; // 7 External start of conversion for SEQ1 + /* Битовое поле EPWM_SOCA_SEQ1, ширина 1 бит; данные EPWM_SOCA_SEQ1. */ Uint16 EPWM_SOCA_SEQ1:1; // 8 EPWM compare B SOC mask for SEQ1 + /* Битовое поле rsvd3, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:1; // 9 reserved + /* Битовое поле INT_MOD_SEQ1, ширина 1 бит; данные INT_MOD_SEQ1. */ Uint16 INT_MOD_SEQ1:1; // 10 SEQ1 Interrupt mode + /* Битовое поле INT_ENA_SEQ1, ширина 1 бит; данные INT_ENA_SEQ1. */ Uint16 INT_ENA_SEQ1:1; // 11 SEQ1 Interrupt enable + /* Битовое поле rsvd4, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd4:1; // 12 reserved + /* Битовое поле SOC_SEQ1, ширина 1 бит; данные SOC_SEQ1. */ Uint16 SOC_SEQ1:1; // 13 Start of conversion trigger for SEQ1 - Uint16 RST_SEQ1:1; // 14 Restart sequencer 1 + /* Битовое поле RST_SEQ1, ширина 1 бит; данные RST_SEQ1. */ + Uint16 RST_SEQ1:1; // 14 Restart sequencer 1 + /* Битовое поле EPWM_SOCB_SEQ, ширина 1 бит; данные EPWM_SOCB_SEQ. */ Uint16 EPWM_SOCB_SEQ:1; // 15 EPWM compare B SOC enable +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCTRL2_REG в одной области памяти. */ union ADCTRL2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCTRL2_BITS bit;; порядок полей определяет расположение данных. */ struct ADCTRL2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCASEQSR_BITS; порядок полей определяет расположение данных. */ struct ADCASEQSR_BITS { // bits description + /* Битовое поле SEQ1_STATE, ширина 4 бит; данные SEQ1_STATE. */ Uint16 SEQ1_STATE:4; // 3:0 SEQ1 state + /* Битовое поле SEQ2_STATE, ширина 3 бит; данные SEQ2_STATE. */ Uint16 SEQ2_STATE:3; // 6:4 SEQ2 state + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 7 reserved - Uint16 SEQ_CNTR:4; // 11:8 Sequencing counter status - Uint16 rsvd2:4; // 15:12 reserved + /* Битовое поле SEQ_CNTR, ширина 4 бит; данные SEQ_CNTR. */ + Uint16 SEQ_CNTR:4; // 11:8 Sequencing counter status + /* Битовое поле rsvd2, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd2:4; // 15:12 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCASEQSR_REG в одной области памяти. */ union ADCASEQSR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCASEQSR_BITS bit;; порядок полей определяет расположение данных. */ struct ADCASEQSR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCMAXCONV_BITS; порядок полей определяет расположение данных. */ struct ADCMAXCONV_BITS { // bits description + /* Битовое поле MAX_CONV1, ширина 4 бит; данные MAX_CONV1. */ Uint16 MAX_CONV1:4; // 3:0 Max number of conversions - Uint16 MAX_CONV2:3; // 6:4 Max number of conversions - Uint16 rsvd1:9; // 15:7 reserved + /* Битовое поле MAX_CONV2, ширина 3 бит; данные MAX_CONV2. */ + Uint16 MAX_CONV2:3; // 6:4 Max number of conversions + /* Битовое поле rsvd1, ширина 9 бит; зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd1:9; // 15:7 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCMAXCONV_REG в одной области памяти. */ union ADCMAXCONV_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCMAXCONV_BITS bit;; порядок полей определяет расположение данных. */ struct ADCMAXCONV_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCCHSELSEQ1_BITS; порядок полей определяет расположение данных. */ struct ADCCHSELSEQ1_BITS { // bits description + /* Битовое поле CONV00, ширина 4 бит; данные CONV00. */ Uint16 CONV00:4; // 3:0 Conversion selection 00 + /* Битовое поле CONV01, ширина 4 бит; данные CONV01. */ Uint16 CONV01:4; // 7:4 Conversion selection 01 + /* Битовое поле CONV02, ширина 4 бит; данные CONV02. */ Uint16 CONV02:4; // 11:8 Conversion selection 02 + /* Битовое поле CONV03, ширина 4 бит; данные CONV03. */ Uint16 CONV03:4; // 15:12 Conversion selection 03 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCCHSELSEQ1_REG в одной области памяти. */ union ADCCHSELSEQ1_REG{ + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCCHSELSEQ1_BITS bit;; порядок полей определяет расположение данных. */ struct ADCCHSELSEQ1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCCHSELSEQ2_BITS; порядок полей определяет расположение данных. */ struct ADCCHSELSEQ2_BITS { // bits description + /* Битовое поле CONV04, ширина 4 бит; данные CONV04. */ Uint16 CONV04:4; // 3:0 Conversion selection 04 + /* Битовое поле CONV05, ширина 4 бит; данные CONV05. */ Uint16 CONV05:4; // 7:4 Conversion selection 05 + /* Битовое поле CONV06, ширина 4 бит; данные CONV06. */ Uint16 CONV06:4; // 11:8 Conversion selection 06 + /* Битовое поле CONV07, ширина 4 бит; данные CONV07. */ Uint16 CONV07:4; // 15:12 Conversion selection 07 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCCHSELSEQ2_REG в одной области памяти. */ union ADCCHSELSEQ2_REG{ + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCCHSELSEQ2_BITS bit;; порядок полей определяет расположение данных. */ struct ADCCHSELSEQ2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCCHSELSEQ3_BITS; порядок полей определяет расположение данных. */ struct ADCCHSELSEQ3_BITS { // bits description + /* Битовое поле CONV08, ширина 4 бит; данные CONV08. */ Uint16 CONV08:4; // 3:0 Conversion selection 08 + /* Битовое поле CONV09, ширина 4 бит; данные CONV09. */ Uint16 CONV09:4; // 7:4 Conversion selection 09 + /* Битовое поле CONV10, ширина 4 бит; данные CONV10. */ Uint16 CONV10:4; // 11:8 Conversion selection 10 + /* Битовое поле CONV11, ширина 4 бит; данные CONV11. */ Uint16 CONV11:4; // 15:12 Conversion selection 11 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCCHSELSEQ3_REG в одной области памяти. */ union ADCCHSELSEQ3_REG{ + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCCHSELSEQ3_BITS bit;; порядок полей определяет расположение данных. */ struct ADCCHSELSEQ3_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCCHSELSEQ4_BITS; порядок полей определяет расположение данных. */ struct ADCCHSELSEQ4_BITS { // bits description + /* Битовое поле CONV12, ширина 4 бит; данные CONV12. */ Uint16 CONV12:4; // 3:0 Conversion selection 12 + /* Битовое поле CONV13, ширина 4 бит; данные CONV13. */ Uint16 CONV13:4; // 7:4 Conversion selection 13 + /* Битовое поле CONV14, ширина 4 бит; данные CONV14. */ Uint16 CONV14:4; // 11:8 Conversion selection 14 + /* Битовое поле CONV15, ширина 4 бит; данные CONV15. */ Uint16 CONV15:4; // 15:12 Conversion selection 15 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCCHSELSEQ4_REG в одной области памяти. */ union ADCCHSELSEQ4_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCCHSELSEQ4_BITS bit;; порядок полей определяет расположение данных. */ struct ADCCHSELSEQ4_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCTRL3_BITS; порядок полей определяет расположение данных. */ struct ADCTRL3_BITS { // bits description + /* Битовое поле SMODE_SEL, ширина 1 бит; данные SMODE_SEL. */ Uint16 SMODE_SEL:1; // 0 Sampling mode select + /* Битовое поле ADCCLKPS, ширина 4 бит; данные ADCCLKPS. */ Uint16 ADCCLKPS:4; // 4:1 ADC core clock divider + /* Битовое поле ADCPWDN, ширина 1 бит; данные ADCPWDN. */ Uint16 ADCPWDN:1; // 5 ADC powerdown + /* Битовое поле ADCBGRFDN, ширина 2 бит; данные ADCBGRFDN. */ Uint16 ADCBGRFDN:2; // 7:6 ADC bandgap/ref power down + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 15:8 reserved -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; +/* Объединяет несколько представлений ADCTRL3_REG в одной области памяти. */ union ADCTRL3_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCTRL3_BITS bit;; порядок полей определяет расположение данных. */ struct ADCTRL3_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCST_BITS; порядок полей определяет расположение данных. */ struct ADCST_BITS { // bits description - Uint16 INT_SEQ1:1; // 0 SEQ1 Interrupt flag + /* Битовое поле INT_SEQ1, ширина 1 бит; данные INT_SEQ1. */ + Uint16 INT_SEQ1:1; // 0 SEQ1 Interrupt flag + /* Битовое поле INT_SEQ2, ширина 1 бит; данные INT_SEQ2. */ Uint16 INT_SEQ2:1; // 1 SEQ2 Interrupt flag + /* Битовое поле SEQ1_BSY, ширина 1 бит; данные SEQ1_BSY. */ Uint16 SEQ1_BSY:1; // 2 SEQ1 busy status + /* Битовое поле SEQ2_BSY, ширина 1 бит; данные SEQ2_BSY. */ Uint16 SEQ2_BSY:1; // 3 SEQ2 busy status + /* Битовое поле INT_SEQ1_CLR, ширина 1 бит; данные INT_SEQ1_CLR. */ Uint16 INT_SEQ1_CLR:1; // 4 SEQ1 Interrupt clear + /* Битовое поле INT_SEQ2_CLR, ширина 1 бит; данные INT_SEQ2_CLR. */ Uint16 INT_SEQ2_CLR:1; // 5 SEQ2 Interrupt clear + /* Битовое поле EOS_BUF1, ширина 1 бит; данные EOS_BUF1. */ Uint16 EOS_BUF1:1; // 6 End of sequence buffer1 + /* Битовое поле EOS_BUF2, ширина 1 бит; данные EOS_BUF2. */ Uint16 EOS_BUF2:1; // 7 End of sequence buffer2 + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; - -union ADCST_REG { - Uint16 all; - struct ADCST_BITS bit; -}; +/* Объединяет несколько представлений ADCST_REG в одной области памяти. */ +union ADCST_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ + Uint16 all; + /* Описывает структуру ADCST_BITS bit;; порядок полей определяет расположение данных. */ + struct ADCST_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; + +/* Описывает структуру ADCREFSEL_BITS; порядок полей определяет расположение данных. */ struct ADCREFSEL_BITS { // bits description - Uint16 rsvd1:14; // 13:0 reserved + /* Битовое поле rsvd1, ширина 14 бит; зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd1:14; // 13:0 reserved + /* Битовое поле REF_SEL, ширина 2 бит; данные REF_SEL. */ Uint16 REF_SEL:2; // 15:14 Reference select +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCREFSEL_REG в одной области памяти. */ union ADCREFSEL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCREFSEL_BITS bit;; порядок полей определяет расположение данных. */ struct ADCREFSEL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADCOFFTRIM_BITS; порядок полей определяет расположение данных. */ struct ADCOFFTRIM_BITS{ // bits description - int16 OFFSET_TRIM:9; // 8:0 Offset Trim + /* Продолжает список аргументов, полей или выражение int16 OFFSET_TRIM:9;; порядок элементов сохраняется. */ + int16 OFFSET_TRIM:9; // 8:0 Offset Trim + /* Битовое поле rsvd1, ширина 7 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:7; // 15:9 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ADCOFFTRIM_REG в одной области памяти. */ union ADCOFFTRIM_REG{ + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ADCOFFTRIM_BITS bit;; порядок полей определяет расположение данных. */ struct ADCOFFTRIM_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADC_REGS; порядок полей определяет расположение данных. */ struct ADC_REGS { + /* Объединяет несколько представлений ADCTRL1_REG ADCTRL1; в одной области памяти. */ union ADCTRL1_REG ADCTRL1; // ADC Control 1 + /* Объединяет несколько представлений ADCTRL2_REG ADCTRL2; в одной области памяти. */ union ADCTRL2_REG ADCTRL2; // ADC Control 2 + /* Объединяет несколько представлений ADCMAXCONV_REG ADCMAXCONV; в одной области памяти. */ union ADCMAXCONV_REG ADCMAXCONV; // Max conversions + /* Объединяет несколько представлений ADCCHSELSEQ1_REG ADCCHSELSEQ1; в одной области памяти. */ union ADCCHSELSEQ1_REG ADCCHSELSEQ1; // Channel select sequencing control 1 + /* Объединяет несколько представлений ADCCHSELSEQ2_REG ADCCHSELSEQ2; в одной области памяти. */ union ADCCHSELSEQ2_REG ADCCHSELSEQ2; // Channel select sequencing control 2 + /* Объединяет несколько представлений ADCCHSELSEQ3_REG ADCCHSELSEQ3; в одной области памяти. */ union ADCCHSELSEQ3_REG ADCCHSELSEQ3; // Channel select sequencing control 3 + /* Объединяет несколько представлений ADCCHSELSEQ4_REG ADCCHSELSEQ4; в одной области памяти. */ union ADCCHSELSEQ4_REG ADCCHSELSEQ4; // Channel select sequencing control 4 + /* Объединяет несколько представлений ADCASEQSR_REG ADCASEQSR; в одной области памяти. */ union ADCASEQSR_REG ADCASEQSR; // Autosequence status register + /* Объявляет ADCRESULT0 — данные ADCRESULT0. */ Uint16 ADCRESULT0; // Conversion Result Buffer 0 + /* Объявляет ADCRESULT1 — данные ADCRESULT1. */ Uint16 ADCRESULT1; // Conversion Result Buffer 1 + /* Объявляет ADCRESULT2 — данные ADCRESULT2. */ Uint16 ADCRESULT2; // Conversion Result Buffer 2 + /* Объявляет ADCRESULT3 — данные ADCRESULT3. */ Uint16 ADCRESULT3; // Conversion Result Buffer 3 + /* Объявляет ADCRESULT4 — данные ADCRESULT4. */ Uint16 ADCRESULT4; // Conversion Result Buffer 4 + /* Объявляет ADCRESULT5 — данные ADCRESULT5. */ Uint16 ADCRESULT5; // Conversion Result Buffer 5 + /* Объявляет ADCRESULT6 — данные ADCRESULT6. */ Uint16 ADCRESULT6; // Conversion Result Buffer 6 + /* Объявляет ADCRESULT7 — данные ADCRESULT7. */ Uint16 ADCRESULT7; // Conversion Result Buffer 7 + /* Объявляет ADCRESULT8 — данные ADCRESULT8. */ Uint16 ADCRESULT8; // Conversion Result Buffer 8 + /* Объявляет ADCRESULT9 — данные ADCRESULT9. */ Uint16 ADCRESULT9; // Conversion Result Buffer 9 + /* Объявляет ADCRESULT10 — данные ADCRESULT10. */ Uint16 ADCRESULT10; // Conversion Result Buffer 10 + /* Объявляет ADCRESULT11 — данные ADCRESULT11. */ Uint16 ADCRESULT11; // Conversion Result Buffer 11 + /* Объявляет ADCRESULT12 — данные ADCRESULT12. */ Uint16 ADCRESULT12; // Conversion Result Buffer 12 + /* Объявляет ADCRESULT13 — данные ADCRESULT13. */ Uint16 ADCRESULT13; // Conversion Result Buffer 13 + /* Объявляет ADCRESULT14 — данные ADCRESULT14. */ Uint16 ADCRESULT14; // Conversion Result Buffer 14 + /* Объявляет ADCRESULT15 — данные ADCRESULT15. */ Uint16 ADCRESULT15; // Conversion Result Buffer 15 - union ADCTRL3_REG ADCTRL3; // ADC Control 3 + /* Объединяет несколько представлений ADCTRL3_REG ADCTRL3; в одной области памяти. */ + union ADCTRL3_REG ADCTRL3; // ADC Control 3 + /* Объединяет несколько представлений ADCST_REG ADCST; в одной области памяти. */ union ADCST_REG ADCST; // ADC Status Register + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1; + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2; + /* Объединяет несколько представлений ADCREFSEL_REG ADCREFSEL; в одной области памяти. */ union ADCREFSEL_REG ADCREFSEL; // Reference Select Register + /* Объединяет несколько представлений ADCOFFTRIM_REG ADCOFFTRIM; в одной области памяти. */ union ADCOFFTRIM_REG ADCOFFTRIM; // Offset Trim Register +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру ADC_RESULT_MIRROR_REGS; порядок полей определяет расположение данных. */ struct ADC_RESULT_MIRROR_REGS +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет ADCRESULT0 — данные ADCRESULT0. */ Uint16 ADCRESULT0; // Conversion Result Buffer 0 + /* Объявляет ADCRESULT1 — данные ADCRESULT1. */ Uint16 ADCRESULT1; // Conversion Result Buffer 1 + /* Объявляет ADCRESULT2 — данные ADCRESULT2. */ Uint16 ADCRESULT2; // Conversion Result Buffer 2 + /* Объявляет ADCRESULT3 — данные ADCRESULT3. */ Uint16 ADCRESULT3; // Conversion Result Buffer 3 + /* Объявляет ADCRESULT4 — данные ADCRESULT4. */ Uint16 ADCRESULT4; // Conversion Result Buffer 4 + /* Объявляет ADCRESULT5 — данные ADCRESULT5. */ Uint16 ADCRESULT5; // Conversion Result Buffer 5 + /* Объявляет ADCRESULT6 — данные ADCRESULT6. */ Uint16 ADCRESULT6; // Conversion Result Buffer 6 + /* Объявляет ADCRESULT7 — данные ADCRESULT7. */ Uint16 ADCRESULT7; // Conversion Result Buffer 7 + /* Объявляет ADCRESULT8 — данные ADCRESULT8. */ Uint16 ADCRESULT8; // Conversion Result Buffer 8 + /* Объявляет ADCRESULT9 — данные ADCRESULT9. */ Uint16 ADCRESULT9; // Conversion Result Buffer 9 + /* Объявляет ADCRESULT10 — данные ADCRESULT10. */ Uint16 ADCRESULT10; // Conversion Result Buffer 10 + /* Объявляет ADCRESULT11 — данные ADCRESULT11. */ Uint16 ADCRESULT11; // Conversion Result Buffer 11 + /* Объявляет ADCRESULT12 — данные ADCRESULT12. */ Uint16 ADCRESULT12; // Conversion Result Buffer 12 + /* Объявляет ADCRESULT13 — данные ADCRESULT13. */ Uint16 ADCRESULT13; // Conversion Result Buffer 13 + /* Объявляет ADCRESULT14 — данные ADCRESULT14. */ Uint16 ADCRESULT14; // Conversion Result Buffer 14 + /* Объявляет ADCRESULT15 — данные ADCRESULT15. */ Uint16 ADCRESULT15; // Conversion Result Buffer 15 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // ADC External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct ADC_REGS AdcRegs;; порядок элементов сохраняется. */ extern volatile struct ADC_REGS AdcRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct ADC_RESULT_MIRROR_REGS AdcMirror;; порядок элементов сохраняется. */ extern volatile struct ADC_RESULT_MIRROR_REGS AdcMirror; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_ADC_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_CpuTimers.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_CpuTimers.h index 3475801..dd140be 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_CpuTimers.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_CpuTimers.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание CpuTimers для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/4 $ // Checkin $Date: March 20, 2007 15:33:42 $ //########################################################################### @@ -20,11 +21,16 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_CPU_TIMERS_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_CPU_TIMERS_H +/* Определяет защитный символ или переключатель DSP2833x_CPU_TIMERS_H для последующей компиляции. */ #define DSP2833x_CPU_TIMERS_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //--------------------------------------------------------------------------- @@ -32,121 +38,195 @@ extern "C" { // // // TCR: Control register bit definitions: +/* Описывает структуру TCR_BITS; порядок полей определяет расположение данных. */ struct TCR_BITS { // bits description + /* Битовое поле rsvd1, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:4; // 3:0 reserved + /* Битовое поле TSS, ширина 1 бит; данные TSS. */ Uint16 TSS:1; // 4 Timer Start/Stop + /* Битовое поле TRB, ширина 1 бит; данные TRB. */ Uint16 TRB:1; // 5 Timer reload + /* Битовое поле rsvd2, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:4; // 9:6 reserved + /* Битовое поле SOFT, ширина 1 бит; данные SOFT. */ Uint16 SOFT:1; // 10 Emulation modes + /* Битовое поле FREE, ширина 1 бит; данные FREE. */ Uint16 FREE:1; // 11 + /* Битовое поле rsvd3, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:2; // 12:13 reserved + /* Битовое поле TIE, ширина 1 бит; данные TIE. */ Uint16 TIE:1; // 14 Output enable + /* Битовое поле TIF, ширина 1 бит; данные TIF. */ Uint16 TIF:1; // 15 Interrupt flag +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TCR_REG в одной области памяти. */ union TCR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TCR_BITS bit;; порядок полей определяет расположение данных. */ struct TCR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // TPR: Pre-scale low bit definitions: +/* Описывает структуру TPR_BITS; порядок полей определяет расположение данных. */ struct TPR_BITS { // bits description + /* Битовое поле TDDR, ширина 8 бит; данные TDDR. */ Uint16 TDDR:8; // 7:0 Divide-down low + /* Битовое поле PSC, ширина 8 бит; данные PSC. */ Uint16 PSC:8; // 15:8 Prescale counter low +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TPR_REG в одной области памяти. */ union TPR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TPR_BITS bit;; порядок полей определяет расположение данных. */ struct TPR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // TPRH: Pre-scale high bit definitions: +/* Описывает структуру TPRH_BITS; порядок полей определяет расположение данных. */ struct TPRH_BITS { // bits description + /* Битовое поле TDDRH, ширина 8 бит; данные TDDRH. */ Uint16 TDDRH:8; // 7:0 Divide-down high + /* Битовое поле PSCH, ширина 8 бит; данные PSCH. */ Uint16 PSCH:8; // 15:8 Prescale counter high +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TPRH_REG в одной области памяти. */ union TPRH_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TPRH_BITS bit;; порядок полей определяет расположение данных. */ struct TPRH_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // TIM, TIMH: Timer register definitions: +/* Описывает структуру TIM_REG; порядок полей определяет расположение данных. */ struct TIM_REG { + /* Объявляет LSW — данные LSW. */ Uint16 LSW; + /* Объявляет MSW — данные MSW. */ Uint16 MSW; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TIM_GROUP в одной области памяти. */ union TIM_GROUP { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру TIM_REG half;; порядок полей определяет расположение данных. */ struct TIM_REG half; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // PRD, PRDH: Period register definitions: +/* Описывает структуру PRD_REG; порядок полей определяет расположение данных. */ struct PRD_REG { + /* Объявляет LSW — данные LSW. */ Uint16 LSW; + /* Объявляет MSW — данные MSW. */ Uint16 MSW; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PRD_GROUP в одной области памяти. */ union PRD_GROUP { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру PRD_REG half;; порядок полей определяет расположение данных. */ struct PRD_REG half; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // CPU Timer Register File: // +/* Описывает структуру CPUTIMER_REGS; порядок полей определяет расположение данных. */ struct CPUTIMER_REGS { + /* Объединяет несколько представлений TIM_GROUP TIM; в одной области памяти. */ union TIM_GROUP TIM; // Timer counter register + /* Объединяет несколько представлений PRD_GROUP PRD; в одной области памяти. */ union PRD_GROUP PRD; // Period register + /* Объединяет несколько представлений TCR_REG TCR; в одной области памяти. */ union TCR_REG TCR; // Timer control register + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1; // reserved + /* Объединяет несколько представлений TPR_REG TPR; в одной области памяти. */ union TPR_REG TPR; // Timer pre-scale low + /* Объединяет несколько представлений TPRH_REG TPRH; в одной области памяти. */ union TPRH_REG TPRH; // Timer pre-scale high +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // CPU Timer Support Variables: // +/* Описывает структуру CPUTIMER_VARS; порядок полей определяет расположение данных. */ struct CPUTIMER_VARS { + /* Продолжает список аргументов, полей или выражение volatile struct CPUTIMER_REGS *RegsAddr;; порядок элементов сохраняется. */ volatile struct CPUTIMER_REGS *RegsAddr; + /* Объявляет InterruptCount — прерывание число. */ Uint32 InterruptCount; + /* Объявляет CPUFreqInMHz — данные CPUFreqInMHz. */ float CPUFreqInMHz; + /* Объявляет PeriodInUSec — период In U Sec. */ float PeriodInUSec; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // Function prototypes and external definitions: // +/* Объявляет интерфейс функции InitCpuTimers; реализация вызывается через этот прототип. */ void InitCpuTimers(void); +/* Объявляет интерфейс функции ConfigCpuTimer; реализация вызывается через этот прототип. */ void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period); +/* Продолжает список аргументов, полей или выражение extern volatile struct CPUTIMER_REGS CpuTimer0Regs;; порядок элементов сохраняется. */ extern volatile struct CPUTIMER_REGS CpuTimer0Regs; +/* Продолжает список аргументов, полей или выражение extern struct CPUTIMER_VARS CpuTimer0;; порядок элементов сохраняется. */ extern struct CPUTIMER_VARS CpuTimer0; // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS. Comment out CpuTimer1 and CpuTimer2 if using DSP BIOS or other RTOS +/* Продолжает список аргументов, полей или выражение extern volatile struct CPUTIMER_REGS CpuTimer1Regs;; порядок элементов сохраняется. */ extern volatile struct CPUTIMER_REGS CpuTimer1Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct CPUTIMER_REGS CpuTimer2Regs;; порядок элементов сохраняется. */ extern volatile struct CPUTIMER_REGS CpuTimer2Regs; +/* Продолжает список аргументов, полей или выражение extern struct CPUTIMER_VARS CpuTimer1;; порядок элементов сохраняется. */ extern struct CPUTIMER_VARS CpuTimer1; +/* Продолжает список аргументов, полей или выражение extern struct CPUTIMER_VARS CpuTimer2;; порядок элементов сохраняется. */ extern struct CPUTIMER_VARS CpuTimer2; //--------------------------------------------------------------------------- // Usefull Timer Operations: // // Start Timer: +/* Задаёт StartCpuTimer0 = CpuTimer0Regs.TCR.bit.TSS = 0; Start Cpu таймер 0. */ #define StartCpuTimer0() CpuTimer0Regs.TCR.bit.TSS = 0 // Stop Timer: +/* Задаёт StopCpuTimer0 = CpuTimer0Regs.TCR.bit.TSS = 1; Stop Cpu таймер 0. */ #define StopCpuTimer0() CpuTimer0Regs.TCR.bit.TSS = 1 // Reload Timer With period Value: +/* Задаёт ReloadCpuTimer0 = CpuTimer0Regs.TCR.bit.TRB = 1; Reload Cpu таймер 0. */ #define ReloadCpuTimer0() CpuTimer0Regs.TCR.bit.TRB = 1 // Read 32-Bit Timer Value: +/* Задаёт ReadCpuTimer0Counter = CpuTimer0Regs.TIM.all; чтение Cpu таймер 0 счётчик. */ #define ReadCpuTimer0Counter() CpuTimer0Regs.TIM.all // Read 32-Bit Period Value: +/* Задаёт ReadCpuTimer0Period = CpuTimer0Regs.PRD.all; чтение Cpu таймер 0 период. */ #define ReadCpuTimer0Period() CpuTimer0Regs.PRD.all // CpuTimer 1 and CpuTimer2 are reserved for DSP BIOS & other RTOS @@ -157,31 +237,44 @@ extern struct CPUTIMER_VARS CpuTimer2; // if using DSP-BIOS or another realtime OS. // Start Timer: +/* Задаёт StartCpuTimer1 = CpuTimer1Regs.TCR.bit.TSS = 0; Start Cpu таймер 1. */ #define StartCpuTimer1() CpuTimer1Regs.TCR.bit.TSS = 0 +/* Задаёт StartCpuTimer2 = CpuTimer2Regs.TCR.bit.TSS = 0; Start Cpu таймер 2. */ #define StartCpuTimer2() CpuTimer2Regs.TCR.bit.TSS = 0 // Stop Timer: +/* Задаёт StopCpuTimer1 = CpuTimer1Regs.TCR.bit.TSS = 1; Stop Cpu таймер 1. */ #define StopCpuTimer1() CpuTimer1Regs.TCR.bit.TSS = 1 +/* Задаёт StopCpuTimer2 = CpuTimer2Regs.TCR.bit.TSS = 1; Stop Cpu таймер 2. */ #define StopCpuTimer2() CpuTimer2Regs.TCR.bit.TSS = 1 // Reload Timer With period Value: +/* Задаёт ReloadCpuTimer1 = CpuTimer1Regs.TCR.bit.TRB = 1; Reload Cpu таймер 1. */ #define ReloadCpuTimer1() CpuTimer1Regs.TCR.bit.TRB = 1 +/* Задаёт ReloadCpuTimer2 = CpuTimer2Regs.TCR.bit.TRB = 1; Reload Cpu таймер 2. */ #define ReloadCpuTimer2() CpuTimer2Regs.TCR.bit.TRB = 1 // Read 32-Bit Timer Value: +/* Задаёт ReadCpuTimer1Counter = CpuTimer1Regs.TIM.all; чтение Cpu таймер 1 счётчик. */ #define ReadCpuTimer1Counter() CpuTimer1Regs.TIM.all +/* Задаёт ReadCpuTimer2Counter = CpuTimer2Regs.TIM.all; чтение Cpu таймер 2 счётчик. */ #define ReadCpuTimer2Counter() CpuTimer2Regs.TIM.all // Read 32-Bit Period Value: +/* Задаёт ReadCpuTimer1Period = CpuTimer1Regs.PRD.all; чтение Cpu таймер 1 период. */ #define ReadCpuTimer1Period() CpuTimer1Regs.PRD.all +/* Задаёт ReadCpuTimer2Period = CpuTimer2Regs.PRD.all; чтение Cpu таймер 2 период. */ #define ReadCpuTimer2Period() CpuTimer2Regs.PRD.all +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_CPU_TIMERS_H definition diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_DMA.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_DMA.h index e8b0d59..de23b04 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_DMA.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_DMA.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание DMA для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/11 $ // Checkin $Date: June 23, 2008 11:34:15 $ //########################################################################### @@ -11,17 +12,24 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_DMA_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_DMA_H +/* Определяет защитный символ или переключатель DSP2833x_DMA_H для последующей компиляции. */ #define DSP2833x_DMA_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //---------------------------------------------------- // Channel MODE register bit definitions: +/* Описывает структуру MODE_BITS; порядок полей определяет расположение данных. */ struct MODE_BITS { // bits description + /* Битовое поле PERINTSEL, ширина 5 бит; данные PERINTSEL. */ Uint16 PERINTSEL:5; // 4:0 Peripheral Interrupt and Sync Select Bits (R/W): // 0 no interrupt // 1 SEQ1INT & ADCSYNC @@ -54,127 +62,191 @@ struct MODE_BITS { // bits description // 28 ePWM6SOCA // 29 ePWM6SOCB // 30:31 no interrupt + /* Битовое поле rsvd1, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:2; // 6:5 (R=0:0) + /* Битовое поле OVRINTE, ширина 1 бит; данные OVRINTE. */ Uint16 OVRINTE:1; // 7 Overflow Interrupt Enable (R/W): // 0 overflow interrupt disabled // 1 overflow interrupt enabled + /* Битовое поле PERINTE, ширина 1 бит; данные PERINTE. */ Uint16 PERINTE:1; // 8 Peripheral Interrupt Enable Bit (R/W): // 0 peripheral interrupt disabled // 1 peripheral interrupt enabled + /* Битовое поле CHINTMODE, ширина 1 бит; данные CHINTMODE. */ Uint16 CHINTMODE:1; // 9 Channel Interrupt Mode Bit (R/W): // 0 generate interrupt at beginning of new transfer // 1 generate interrupt at end of transfer + /* Битовое поле ONESHOT, ширина 1 бит; данные ONESHOT. */ Uint16 ONESHOT:1; // 10 One Shot Mode Bit (R/W): // 0 only interrupt event triggers single burst transfer // 1 first interrupt triggers burst, continue until transfer count is zero + /* Битовое поле CONTINUOUS, ширина 1 бит; данные CONTINUOUS. */ Uint16 CONTINUOUS:1; // 11 Continous Mode Bit (R/W): // 0 stop when transfer count is zero // 1 re-initialize when transfer count is zero + /* Битовое поле SYNCE, ширина 1 бит; данные SYNCE. */ Uint16 SYNCE:1; // 12 Sync Enable Bit (R/W): // 0 ignore selected interrupt sync signal // 1 enable selected interrupt sync signal + /* Битовое поле SYNCSEL, ширина 1 бит; данные SYNCSEL. */ Uint16 SYNCSEL:1; // 13 Sync Select Bit (R/W): // 0 sync signal controls source wrap counter // 1 sync signal controls destination wrap counter + /* Битовое поле DATASIZE, ширина 1 бит; данные DATASIZE. */ Uint16 DATASIZE:1; // 14 Data Size Mode Bit (R/W): // 0 16-bit data transfer size // 1 32-bit data transfer size + /* Битовое поле CHINTE, ширина 1 бит; данные CHINTE. */ Uint16 CHINTE:1; // 15 Channel Interrupt Enable Bit (R/W): // 0 channel interrupt disabled // 1 channel interrupt enabled +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений MODE_REG в одной области памяти. */ union MODE_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру MODE_BITS bit;; порядок полей определяет расположение данных. */ struct MODE_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // Channel CONTROL register bit definitions: +/* Описывает структуру CONTROL_BITS; порядок полей определяет расположение данных. */ struct CONTROL_BITS { // bits description + /* Битовое поле RUN, ширина 1 бит; данные RUN. */ Uint16 RUN:1; // 0 Run Bit (R=0/W=1) + /* Битовое поле HALT, ширина 1 бит; данные HALT. */ Uint16 HALT:1; // 1 Halt Bit (R=0/W=1) + /* Битовое поле SOFTRESET, ширина 1 бит; данные SOFTRESET. */ Uint16 SOFTRESET:1; // 2 Soft Reset Bit (R=0/W=1) + /* Битовое поле PERINTFRC, ширина 1 бит; данные PERINTFRC. */ Uint16 PERINTFRC:1; // 3 Interrupt Force Bit (R=0/W=1) + /* Битовое поле PERINTCLR, ширина 1 бит; данные PERINTCLR. */ Uint16 PERINTCLR:1; // 4 Interrupt Clear Bit (R=0/W=1) + /* Битовое поле SYNCFRC, ширина 1 бит; данные SYNCFRC. */ Uint16 SYNCFRC:1; // 5 Sync Force Bit (R=0/W=1) + /* Битовое поле SYNCCLR, ширина 1 бит; данные SYNCCLR. */ Uint16 SYNCCLR:1; // 6 Sync Clear Bit (R=0/W=1) + /* Битовое поле ERRCLR, ширина 1 бит; данные ERRCLR. */ Uint16 ERRCLR:1; // 7 Error Clear Bit (R=0/W=1) + /* Битовое поле PERINTFLG, ширина 1 бит; данные PERINTFLG. */ Uint16 PERINTFLG:1; // 8 Interrupt Flag Bit (R): // 0 no interrupt pending // 1 interrupt pending + /* Битовое поле SYNCFLG, ширина 1 бит; данные SYNCFLG. */ Uint16 SYNCFLG:1; // 9 Sync Flag Bit (R): // 0 no sync pending // 1 sync pending + /* Битовое поле SYNCERR, ширина 1 бит; данные SYNCERR. */ Uint16 SYNCERR:1; // 10 Sync Error Flag Bit (R): // 0 no sync error // 1 sync error detected + /* Битовое поле TRANSFERSTS, ширина 1 бит; данные TRANSFERSTS. */ Uint16 TRANSFERSTS:1; // 11 Transfer Status Bit (R): // 0 no transfer in progress or pending // 1 transfer in progress or pending + /* Битовое поле BURSTSTS, ширина 1 бит; данные BURSTSTS. */ Uint16 BURSTSTS:1; // 12 Burst Status Bit (R): // 0 no burst in progress or pending // 1 burst in progress or pending + /* Битовое поле RUNSTS, ширина 1 бит; данные RUNSTS. */ Uint16 RUNSTS:1; // 13 Run Status Bit (R): // 0 channel not running or halted // 1 channel running + /* Битовое поле OVRFLG, ширина 1 бит; данные OVRFLG. */ Uint16 OVRFLG:1; // 14 Overflow Flag Bit(R) // 0 no overflow event // 1 overflow event + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 15 (R=0) +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений CONTROL_REG в одной области памяти. */ union CONTROL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру CONTROL_BITS bit;; порядок полей определяет расположение данных. */ struct CONTROL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // DMACTRL register bit definitions: +/* Описывает структуру DMACTRL_BITS; порядок полей определяет расположение данных. */ struct DMACTRL_BITS { // bits description + /* Битовое поле HARDRESET, ширина 1 бит; данные HARDRESET. */ Uint16 HARDRESET:1; // 0 Hard Reset Bit (R=0/W=1) + /* Битовое поле PRIORITYRESET, ширина 1 бит; данные PRIORITYRESET. */ Uint16 PRIORITYRESET:1; // 1 Priority Reset Bit (R=0/W=1) + /* Битовое поле rsvd1, ширина 14 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:14; // 15:2 (R=0:0) +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений DMACTRL_REG в одной области памяти. */ union DMACTRL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру DMACTRL_BITS bit;; порядок полей определяет расположение данных. */ struct DMACTRL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // DEBUGCTRL register bit definitions: +/* Описывает структуру DEBUGCTRL_BITS; порядок полей определяет расположение данных. */ struct DEBUGCTRL_BITS { // bits description + /* Битовое поле rsvd1, ширина 15 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:15; // 14:0 (R=0:0) + /* Битовое поле FREE, ширина 1 бит; данные FREE. */ Uint16 FREE:1; // 15 Debug Mode Bit (R/W): // 0 halt after current read-write operation // 1 continue running +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений DEBUGCTRL_REG в одной области памяти. */ union DEBUGCTRL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру DEBUGCTRL_BITS bit;; порядок полей определяет расположение данных. */ struct DEBUGCTRL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // PRIORITYCTRL1 register bit definitions: +/* Описывает структуру PRIORITYCTRL1_BITS; порядок полей определяет расположение данных. */ struct PRIORITYCTRL1_BITS { // bits description + /* Битовое поле CH1PRIORITY, ширина 1 бит; 1 приоритет. */ Uint16 CH1PRIORITY:1; // 0 Ch1 Priority Bit (R/W): // 0 same priority as all other channels // 1 highest priority channel + /* Битовое поле rsvd1, ширина 15 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:15; // 15:1 (R=0:0) +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PRIORITYCTRL1_REG в одной области памяти. */ union PRIORITYCTRL1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PRIORITYCTRL1_BITS bit;; порядок полей определяет расположение данных. */ struct PRIORITYCTRL1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // PRIORITYSTAT register bit definitions: +/* Описывает структуру PRIORITYSTAT_BITS; порядок полей определяет расположение данных. */ struct PRIORITYSTAT_BITS { // bits description + /* Битовое поле ACTIVESTS, ширина 3 бит; данные ACTIVESTS. */ Uint16 ACTIVESTS:3; // 2:0 Active Channel Status Bits (R): // 0,0,0 no channel active // 0,0,1 Ch1 channel active @@ -183,7 +255,9 @@ struct PRIORITYSTAT_BITS { // bits description // 1,0,0 Ch4 channel active // 1,0,1 Ch5 channel active // 1,1,0 Ch6 channel active + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 3 (R=0) + /* Битовое поле ACTIVESTS_SHADOW, ширина 3 бит; данные ACTIVESTS_SHADOW. */ Uint16 ACTIVESTS_SHADOW:3; // 6:4 Active Channel Status Shadow Bits (R): // 0,0,0 no channel active and interrupted by Ch1 // 0,0,1 cannot occur @@ -192,102 +266,170 @@ struct PRIORITYSTAT_BITS { // bits description // 1,0,0 Ch4 was active and interrupted by Ch1 // 1,0,1 Ch5 was active and interrupted by Ch1 // 1,1,0 Ch6 was active and interrupted by Ch1 + /* Битовое поле rsvd2, ширина 9 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:9; // 15:7 (R=0:0) +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PRIORITYSTAT_REG в одной области памяти. */ union PRIORITYSTAT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PRIORITYSTAT_BITS bit;; порядок полей определяет расположение данных. */ struct PRIORITYSTAT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // Burst Size +/* Описывает структуру BURST_SIZE_BITS; порядок полей определяет расположение данных. */ struct BURST_SIZE_BITS { // bits description + /* Битовое поле BURSTSIZE, ширина 5 бит; данные BURSTSIZE. */ Uint16 BURSTSIZE:5; // 4:0 Burst transfer size + /* Битовое поле rsvd1, ширина 11 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:11; // 15:5 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений BURST_SIZE_REG в одной области памяти. */ union BURST_SIZE_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру BURST_SIZE_BITS bit;; порядок полей определяет расположение данных. */ struct BURST_SIZE_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // Burst Count +/* Описывает структуру BURST_COUNT_BITS; порядок полей определяет расположение данных. */ struct BURST_COUNT_BITS { // bits description + /* Битовое поле BURSTCOUNT, ширина 5 бит; данные BURSTCOUNT. */ Uint16 BURSTCOUNT:5; // 4:0 Burst transfer size + /* Битовое поле rsvd1, ширина 11 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:11; // 15:5 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений BURST_COUNT_REG в одной области памяти. */ union BURST_COUNT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру BURST_COUNT_BITS bit;; порядок полей определяет расположение данных. */ struct BURST_COUNT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // DMA Channel Registers: +/* Описывает структуру CH_REGS; порядок полей определяет расположение данных. */ struct CH_REGS { + /* Объединяет несколько представлений MODE_REG MODE; в одной области памяти. */ union MODE_REG MODE; // Mode Register + /* Объединяет несколько представлений CONTROL_REG CONTROL; в одной области памяти. */ union CONTROL_REG CONTROL; // Control Register + /* Объединяет несколько представлений BURST_SIZE_REG BURST_SIZE; в одной области памяти. */ union BURST_SIZE_REG BURST_SIZE; // Burst Size Register + /* Объединяет несколько представлений BURST_COUNT_REG BURST_COUNT; в одной области памяти. */ union BURST_COUNT_REG BURST_COUNT; // Burst Count Register + /* Продолжает список аргументов, полей или выражение int16 SRC_BURST_STEP;; порядок элементов сохраняется. */ int16 SRC_BURST_STEP; // Source Burst Step Register + /* Продолжает список аргументов, полей или выражение int16 DST_BURST_STEP;; порядок элементов сохраняется. */ int16 DST_BURST_STEP; // Destination Burst Step Register + /* Объявляет TRANSFER_SIZE — TRANSFER размер. */ Uint16 TRANSFER_SIZE; // Transfer Size Register + /* Объявляет TRANSFER_COUNT — TRANSFER число. */ Uint16 TRANSFER_COUNT; // Transfer Count Register + /* Продолжает список аргументов, полей или выражение int16 SRC_TRANSFER_STEP;; порядок элементов сохраняется. */ int16 SRC_TRANSFER_STEP; // Source Transfer Step Register + /* Продолжает список аргументов, полей или выражение int16 DST_TRANSFER_STEP;; порядок элементов сохраняется. */ int16 DST_TRANSFER_STEP; // Destination Transfer Step Register + /* Объявляет SRC_WRAP_SIZE — SRC WRAP размер. */ Uint16 SRC_WRAP_SIZE; // Source Wrap Size Register + /* Объявляет SRC_WRAP_COUNT — SRC WRAP число. */ Uint16 SRC_WRAP_COUNT; // Source Wrap Count Register + /* Продолжает список аргументов, полей или выражение int16 SRC_WRAP_STEP;; порядок элементов сохраняется. */ int16 SRC_WRAP_STEP; // Source Wrap Step Register + /* Объявляет DST_WRAP_SIZE — DST WRAP размер. */ Uint16 DST_WRAP_SIZE; // Destination Wrap Size Register + /* Объявляет DST_WRAP_COUNT — DST WRAP число. */ Uint16 DST_WRAP_COUNT; // Destination Wrap Count Register + /* Продолжает список аргументов, полей или выражение int16 DST_WRAP_STEP;; порядок элементов сохраняется. */ int16 DST_WRAP_STEP; // Destination Wrap Step Register + /* Объявляет SRC_BEG_ADDR_SHADOW — данные SRC_BEG_ADDR_SHADOW. */ Uint32 SRC_BEG_ADDR_SHADOW; // Source Begin Address Shadow Register + /* Объявляет SRC_ADDR_SHADOW — данные SRC_ADDR_SHADOW. */ Uint32 SRC_ADDR_SHADOW; // Source Address Shadow Register + /* Объявляет SRC_BEG_ADDR_ACTIVE — данные SRC_BEG_ADDR_ACTIVE. */ Uint32 SRC_BEG_ADDR_ACTIVE; // Source Begin Address Active Register + /* Объявляет SRC_ADDR_ACTIVE — данные SRC_ADDR_ACTIVE. */ Uint32 SRC_ADDR_ACTIVE; // Source Address Active Register + /* Объявляет DST_BEG_ADDR_SHADOW — данные DST_BEG_ADDR_SHADOW. */ Uint32 DST_BEG_ADDR_SHADOW; // Destination Begin Address Shadow Register + /* Объявляет DST_ADDR_SHADOW — данные DST_ADDR_SHADOW. */ Uint32 DST_ADDR_SHADOW; // Destination Address Shadow Register + /* Объявляет DST_BEG_ADDR_ACTIVE — данные DST_BEG_ADDR_ACTIVE. */ Uint32 DST_BEG_ADDR_ACTIVE; // Destination Begin Address Active Register + /* Объявляет DST_ADDR_ACTIVE — данные DST_ADDR_ACTIVE. */ Uint32 DST_ADDR_ACTIVE; // Destination Address Active Register +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // DMA Registers: +/* Описывает структуру DMA_REGS; порядок полей определяет расположение данных. */ struct DMA_REGS { + /* Объединяет несколько представлений DMACTRL_REG DMACTRL; в одной области памяти. */ union DMACTRL_REG DMACTRL; // DMA Control Register + /* Объединяет несколько представлений DEBUGCTRL_REG DEBUGCTRL; в одной области памяти. */ union DEBUGCTRL_REG DEBUGCTRL; // Debug Control Register + /* Объявляет rsvd0 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd0; // reserved + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1; // + /* Объединяет несколько представлений PRIORITYCTRL1_REG PRIORITYCTRL1; в одной области памяти. */ union PRIORITYCTRL1_REG PRIORITYCTRL1; // Priority Control 1 Register + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2; // + /* Объединяет несколько представлений PRIORITYSTAT_REG PRIORITYSTAT; в одной области памяти. */ union PRIORITYSTAT_REG PRIORITYSTAT; // Priority Status Register + /* Объявляет rsvd3 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3[25]; // + /* Описывает структуру CH_REGS CH1;; порядок полей определяет расположение данных. */ struct CH_REGS CH1; // DMA Channel 1 Registers + /* Описывает структуру CH_REGS CH2;; порядок полей определяет расположение данных. */ struct CH_REGS CH2; // DMA Channel 2 Registers + /* Описывает структуру CH_REGS CH3;; порядок полей определяет расположение данных. */ struct CH_REGS CH3; // DMA Channel 3 Registers + /* Описывает структуру CH_REGS CH4;; порядок полей определяет расположение данных. */ struct CH_REGS CH4; // DMA Channel 4 Registers + /* Описывает структуру CH_REGS CH5;; порядок полей определяет расположение данных. */ struct CH_REGS CH5; // DMA Channel 5 Registers + /* Описывает структуру CH_REGS CH6;; порядок полей определяет расположение данных. */ struct CH_REGS CH6; // DMA Channel 6 Registers +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct DMA_REGS DmaRegs;; порядок элементов сохраняется. */ extern volatile struct DMA_REGS DmaRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_DMA_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_DevEmu.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_DevEmu.h index 3a765c6..68506f6 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_DevEmu.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_DevEmu.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание DevEmu для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/3 $ // Checkin $Date: June 2, 2008 11:12:30 $ //########################################################################### @@ -11,71 +12,122 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_DEV_EMU_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_DEV_EMU_H +/* Определяет защитный символ или переключатель DSP2833x_DEV_EMU_H для последующей компиляции. */ #define DSP2833x_DEV_EMU_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //--------------------------------------------------------------------------- // Device Emulation Register Bit Definitions: // // Device Configuration Register Bit Definitions +/* Описывает структуру DEVICECNF_BITS; порядок полей определяет расположение данных. */ struct DEVICECNF_BITS { // bits description + /* Битовое поле rsvd1, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:3; // 2:0 reserved + /* Битовое поле VMAPS, ширина 1 бит; данные VMAPS. */ Uint16 VMAPS:1; // 3 VMAP Status + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 4 reserved + /* Битовое поле XRSn, ширина 1 бит; данные XRSn. */ Uint16 XRSn:1; // 5 XRSn Signal Status + /* Битовое поле rsvd3, ширина 10 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:10; // 15:6 + /* Битовое поле rsvd4, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd4:3; // 18:16 + /* Битовое поле ENPROT, ширина 1 бит; данные ENPROT. */ Uint16 ENPROT:1; // 19 Enable/Disable pipeline protection + /* Битовое поле MONPRIV, ширина 1 бит; данные MONPRIV. */ Uint16 MONPRIV:1; // 20 MONPRIV enable bit + /* Битовое поле rsvd5, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd5:1; // 21 reserved + /* Битовое поле EMU0SEL, ширина 2 бит; данные EMU0SEL. */ Uint16 EMU0SEL:2; // 23,22 EMU0 Mux select + /* Битовое поле EMU1SEL, ширина 2 бит; данные EMU1SEL. */ Uint16 EMU1SEL:2; // 25,24 EMU1 Mux select + /* Битовое поле MCBSPCON, ширина 1 бит; данные MCBSPCON. */ Uint16 MCBSPCON:1; // 26 McBSP-B to EMU0/EMU1 pins control + /* Битовое поле rsvd6, ширина 5 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd6:5; // 31:27 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений DEVICECNF_REG в одной области памяти. */ union DEVICECNF_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру DEVICECNF_BITS bit;; порядок полей определяет расположение данных. */ struct DEVICECNF_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // CLASSID +/* Описывает структуру CLASSID_BITS; порядок полей определяет расположение данных. */ struct CLASSID_BITS { // bits description + /* Битовое поле CLASSNO, ширина 8 бит; данные CLASSNO. */ Uint16 CLASSNO:8; // 7:0 Class Number + /* Битовое поле PARTTYPE, ширина 8 бит; данные PARTTYPE. */ Uint16 PARTTYPE:8; // 15:8 Part Type +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений CLASSID_REG в одной области памяти. */ union CLASSID_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру CLASSID_BITS bit;; порядок полей определяет расположение данных. */ struct CLASSID_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру DEV_EMU_REGS; порядок полей определяет расположение данных. */ struct DEV_EMU_REGS { + /* Объединяет несколько представлений DEVICECNF_REG DEVICECNF; в одной области памяти. */ union DEVICECNF_REG DEVICECNF; // device configuration + /* Объединяет несколько представлений CLASSID_REG CLASSID; в одной области памяти. */ union CLASSID_REG CLASSID; // Class ID + /* Объявляет REVID — данные REVID. */ Uint16 REVID; // Device ID + /* Объявляет PROTSTART — данные PROTSTART. */ Uint16 PROTSTART; // Write-Read protection start + /* Объявляет PROTRANGE — данные PROTRANGE. */ Uint16 PROTRANGE; // Write-Read protection range + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2[202]; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // PARTID +/* Описывает структуру PARTID_BITS; порядок полей определяет расположение данных. */ struct PARTID_BITS { // bits description + /* Битовое поле PARTNO, ширина 8 бит; данные PARTNO. */ Uint16 PARTNO:8; // 7:0 Part Number + /* Битовое поле PARTTYPE, ширина 8 бит; данные PARTTYPE. */ Uint16 PARTTYPE:8; // 15:8 Part Type +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PARTID_REG в одной области памяти. */ union PARTID_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PARTID_BITS bit;; порядок полей определяет расположение данных. */ struct PARTID_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру PARTID_REGS; порядок полей определяет расположение данных. */ struct PARTID_REGS { + /* Объединяет несколько представлений PARTID_REG PARTID; в одной области памяти. */ union PARTID_REG PARTID; // Part ID +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; @@ -83,13 +135,18 @@ struct PARTID_REGS { //--------------------------------------------------------------------------- // Device Emulation Register References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct DEV_EMU_REGS DevEmuRegs;; порядок элементов сохраняется. */ extern volatile struct DEV_EMU_REGS DevEmuRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct PARTID_REGS PartIdRegs;; порядок элементов сохраняется. */ extern volatile struct PARTID_REGS PartIdRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_DEV_EMU_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Device.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Device.h index 0cf9a3b..008c8e5 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Device.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Device.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Device для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/5 $ // Checkin $Date: January 22, 2008 16:55:35 $ //########################################################################### @@ -11,21 +12,30 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_DEVICE_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_DEVICE_H +/* Определяет защитный символ или переключатель DSP2833x_DEVICE_H для последующей компиляции. */ #define DSP2833x_DEVICE_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Задаёт TARGET = 1; данные TARGET. */ #define TARGET 1 //--------------------------------------------------------------------------- // User To Select Target Device: +/* Задаёт DSP28_28335 = TARGET; данные DSP28_28335. */ #define DSP28_28335 TARGET // Selects '28335/'28235 +/* Задаёт DSP28_28334 = 0; данные DSP28_28334. */ #define DSP28_28334 0 // Selects '28334/'28234 +/* Задаёт DSP28_28332 = 0; данные DSP28_28332. */ #define DSP28_28332 0 // Selects '28332/'28232 @@ -33,49 +43,90 @@ extern "C" { // Common CPU Definitions: // +/* Продолжает список аргументов, полей или выражение extern cregister volatile unsigned int IFR;; порядок элементов сохраняется. */ extern cregister volatile unsigned int IFR; +/* Продолжает список аргументов, полей или выражение extern cregister volatile unsigned int IER;; порядок элементов сохраняется. */ extern cregister volatile unsigned int IER; +/* Задаёт EINT = asm(" clrc INTM"); разрешение маскируемых прерываний ядра. */ #define EINT asm(" clrc INTM") +/* Задаёт DINT = asm(" setc INTM"); запрет маскируемых прерываний ядра. */ #define DINT asm(" setc INTM") +/* Задаёт ERTM = asm(" clrc DBGM"); данные ERTM. */ #define ERTM asm(" clrc DBGM") +/* Задаёт DRTM = asm(" setc DBGM"); данные DRTM. */ #define DRTM asm(" setc DBGM") +/* Задаёт EALLOW = asm(" EALLOW"); разрешение записи в защищённые регистры периферии. */ #define EALLOW asm(" EALLOW") +/* Задаёт EDIS = asm(" EDIS"); закрытие доступа к защищённым регистрам периферии. */ #define EDIS asm(" EDIS") +/* Задаёт ESTOP0 = asm(" ESTOP0"); данные ESTOP0. */ #define ESTOP0 asm(" ESTOP0") +/* Задаёт M_INT1 = 0x0001; данные M_INT1. */ #define M_INT1 0x0001 +/* Задаёт M_INT2 = 0x0002; данные M_INT2. */ #define M_INT2 0x0002 +/* Задаёт M_INT3 = 0x0004; данные M_INT3. */ #define M_INT3 0x0004 +/* Задаёт M_INT4 = 0x0008; данные M_INT4. */ #define M_INT4 0x0008 +/* Задаёт M_INT5 = 0x0010; данные M_INT5. */ #define M_INT5 0x0010 +/* Задаёт M_INT6 = 0x0020; данные M_INT6. */ #define M_INT6 0x0020 +/* Задаёт M_INT7 = 0x0040; данные M_INT7. */ #define M_INT7 0x0040 +/* Задаёт M_INT8 = 0x0080; данные M_INT8. */ #define M_INT8 0x0080 +/* Задаёт M_INT9 = 0x0100; данные M_INT9. */ #define M_INT9 0x0100 +/* Задаёт M_INT10 = 0x0200; данные M_INT10. */ #define M_INT10 0x0200 +/* Задаёт M_INT11 = 0x0400; данные M_INT11. */ #define M_INT11 0x0400 +/* Задаёт M_INT12 = 0x0800; данные M_INT12. */ #define M_INT12 0x0800 +/* Задаёт M_INT13 = 0x1000; данные M_INT13. */ #define M_INT13 0x1000 +/* Задаёт M_INT14 = 0x2000; данные M_INT14. */ #define M_INT14 0x2000 +/* Задаёт M_DLOG = 0x4000; данные M_DLOG. */ #define M_DLOG 0x4000 +/* Задаёт M_RTOS = 0x8000; данные M_RTOS. */ #define M_RTOS 0x8000 +/* Задаёт BIT0 = 0x0001; данные BIT0. */ #define BIT0 0x0001 +/* Задаёт BIT1 = 0x0002; данные BIT1. */ #define BIT1 0x0002 +/* Задаёт BIT2 = 0x0004; данные BIT2. */ #define BIT2 0x0004 +/* Задаёт BIT3 = 0x0008; данные BIT3. */ #define BIT3 0x0008 +/* Задаёт BIT4 = 0x0010; данные BIT4. */ #define BIT4 0x0010 +/* Задаёт BIT5 = 0x0020; данные BIT5. */ #define BIT5 0x0020 +/* Задаёт BIT6 = 0x0040; данные BIT6. */ #define BIT6 0x0040 +/* Задаёт BIT7 = 0x0080; данные BIT7. */ #define BIT7 0x0080 +/* Задаёт BIT8 = 0x0100; данные BIT8. */ #define BIT8 0x0100 +/* Задаёт BIT9 = 0x0200; данные BIT9. */ #define BIT9 0x0200 +/* Задаёт BIT10 = 0x0400; данные BIT10. */ #define BIT10 0x0400 +/* Задаёт BIT11 = 0x0800; данные BIT11. */ #define BIT11 0x0800 +/* Задаёт BIT12 = 0x1000; данные BIT12. */ #define BIT12 0x1000 +/* Задаёт BIT13 = 0x2000; данные BIT13. */ #define BIT13 0x2000 +/* Задаёт BIT14 = 0x4000; данные BIT14. */ #define BIT14 0x4000 +/* Задаёт BIT15 = 0x8000; данные BIT15. */ #define BIT15 0x8000 @@ -85,281 +136,517 @@ extern cregister volatile unsigned int IER; // Definitions For 16-bit and 32-Bit Signed/Unsigned Integers: // +/* Начинает условие: DSP28_DATA_TYPES ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP28_DATA_TYPES +/* Определяет защитный символ или переключатель DSP28_DATA_TYPES для последующей компиляции. */ #define DSP28_DATA_TYPES +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef int int16; +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef long int32; +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef long long int64; +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef unsigned int Uint16; +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef unsigned long Uint32; +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef unsigned long long Uint64; +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef float float32; +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef long double float64; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef union +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - struct + /* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */ + struct + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Битовое поле bit0, ширина 1 бит; бит 0. */ unsigned int bit0: 1; + /* Битовое поле bit1, ширина 1 бит; бит 1. */ unsigned int bit1: 1; + /* Битовое поле bit2, ширина 1 бит; бит 2. */ unsigned int bit2: 1; + /* Битовое поле bit3, ширина 1 бит; бит 3. */ unsigned int bit3: 1; + /* Битовое поле bit4, ширина 1 бит; бит 4. */ unsigned int bit4: 1; + /* Битовое поле bit5, ширина 1 бит; бит 5. */ unsigned int bit5: 1; + /* Битовое поле bit6, ширина 1 бит; бит 6. */ unsigned int bit6: 1; + /* Битовое поле bit7, ширина 1 бит; бит 7. */ unsigned int bit7: 1; + /* Продолжает список аргументов, полей или выражение } bit;; порядок элементов сохраняется. */ } bit; + /* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */ struct + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Битовое поле quad_0, ширина 4 бит; данные quad_0. */ unsigned int quad_0 :4; + /* Битовое поле quad_1, ширина 4 бит; данные quad_1. */ unsigned int quad_1 :4; + /* Продолжает список аргументов, полей или выражение } qua;; порядок элементов сохраняется. */ } qua; + /* Продолжает список аргументов, полей или выражение unsigned short all;; порядок элементов сохраняется. */ unsigned short all; -} BAITE; +/* Продолжает список аргументов, полей или выражение } BAITE;; порядок элементов сохраняется. */ +} BAITE; +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef union +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - struct + /* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */ + struct + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Битовое поле bit0, ширина 1 бит; бит 0. */ unsigned int bit0: 1; + /* Битовое поле bit1, ширина 1 бит; бит 1. */ unsigned int bit1: 1; + /* Битовое поле bit2, ширина 1 бит; бит 2. */ unsigned int bit2: 1; + /* Битовое поле bit3, ширина 1 бит; бит 3. */ unsigned int bit3: 1; + /* Битовое поле bit4, ширина 1 бит; бит 4. */ unsigned int bit4: 1; + /* Битовое поле bit5, ширина 1 бит; бит 5. */ unsigned int bit5: 1; + /* Битовое поле bit6, ширина 1 бит; бит 6. */ unsigned int bit6: 1; + /* Битовое поле bit7, ширина 1 бит; бит 7. */ unsigned int bit7: 1; + /* Битовое поле bit8, ширина 1 бит; бит 8. */ unsigned int bit8: 1; + /* Битовое поле bit9, ширина 1 бит; бит 9. */ unsigned int bit9: 1; + /* Битовое поле bitA, ширина 1 бит; бит A. */ unsigned int bitA: 1; + /* Битовое поле bitB, ширина 1 бит; бит B. */ unsigned int bitB: 1; + /* Битовое поле bitC, ширина 1 бит; бит C. */ unsigned int bitC: 1; + /* Битовое поле bitD, ширина 1 бит; бит D. */ unsigned int bitD: 1; + /* Битовое поле bitE, ширина 1 бит; бит E. */ unsigned int bitE: 1; + /* Битовое поле bitF, ширина 1 бит; бит F. */ unsigned int bitF: 1; + /* Продолжает список аргументов, полей или выражение } bit;; порядок элементов сохраняется. */ } bit; + /* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */ struct + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Битовое поле quad_0, ширина 4 бит; данные quad_0. */ unsigned int quad_0 :4; + /* Битовое поле quad_1, ширина 4 бит; данные quad_1. */ unsigned int quad_1 :4; + /* Битовое поле quad_2, ширина 4 бит; данные quad_2. */ unsigned int quad_2 :4; + /* Битовое поле quad_3, ширина 4 бит; данные quad_3. */ unsigned int quad_3 :4; + /* Продолжает список аргументов, полей или выражение } qua;; порядок элементов сохраняется. */ } qua; + /* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */ struct + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Битовое поле byte_0, ширина 8 бит; данные byte_0. */ unsigned int byte_0 :8; + /* Битовое поле byte_1, ширина 8 бит; данные byte_1. */ unsigned int byte_1 :8; + /* Продолжает список аргументов, полей или выражение } byt;; порядок элементов сохраняется. */ } byt; + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ int all; -} WORDE; +/* Продолжает список аргументов, полей или выражение } WORDE;; порядок элементов сохраняется. */ +} WORDE; +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef union +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - struct + /* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */ + struct + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Битовое поле bit00, ширина 1 бит; бит 00. */ unsigned int bit00: 1; + /* Битовое поле bit01, ширина 1 бит; бит 01. */ unsigned int bit01: 1; + /* Битовое поле bit02, ширина 1 бит; бит 02. */ unsigned int bit02: 1; + /* Битовое поле bit03, ширина 1 бит; бит 03. */ unsigned int bit03: 1; + /* Битовое поле bit04, ширина 1 бит; бит 04. */ unsigned int bit04: 1; + /* Битовое поле bit05, ширина 1 бит; бит 05. */ unsigned int bit05: 1; + /* Битовое поле bit06, ширина 1 бит; бит 06. */ unsigned int bit06: 1; + /* Битовое поле bit07, ширина 1 бит; бит 07. */ unsigned int bit07: 1; + /* Битовое поле bit08, ширина 1 бит; бит 08. */ unsigned int bit08: 1; + /* Битовое поле bit09, ширина 1 бит; бит 09. */ unsigned int bit09: 1; + /* Битовое поле bit0A, ширина 1 бит; бит 0 A. */ unsigned int bit0A: 1; + /* Битовое поле bit0B, ширина 1 бит; бит 0 B. */ unsigned int bit0B: 1; + /* Битовое поле bit0C, ширина 1 бит; бит 0 C. */ unsigned int bit0C: 1; + /* Битовое поле bit0D, ширина 1 бит; бит 0 D. */ unsigned int bit0D: 1; + /* Битовое поле bit0E, ширина 1 бит; бит 0 E. */ unsigned int bit0E: 1; + /* Битовое поле bit0F, ширина 1 бит; бит 0 F. */ unsigned int bit0F: 1; + /* Битовое поле bit10, ширина 1 бит; бит 10. */ unsigned int bit10: 1; + /* Битовое поле bit11, ширина 1 бит; бит 11. */ unsigned int bit11: 1; + /* Битовое поле bit12, ширина 1 бит; бит 12. */ unsigned int bit12: 1; + /* Битовое поле bit13, ширина 1 бит; бит 13. */ unsigned int bit13: 1; + /* Битовое поле bit14, ширина 1 бит; бит 14. */ unsigned int bit14: 1; + /* Битовое поле bit15, ширина 1 бит; бит 15. */ unsigned int bit15: 1; + /* Битовое поле bit16, ширина 1 бит; бит 16. */ unsigned int bit16: 1; + /* Битовое поле bit17, ширина 1 бит; бит 17. */ unsigned int bit17: 1; + /* Битовое поле bit18, ширина 1 бит; бит 18. */ unsigned int bit18: 1; + /* Битовое поле bit19, ширина 1 бит; бит 19. */ unsigned int bit19: 1; + /* Битовое поле bit1A, ширина 1 бит; бит 1 A. */ unsigned int bit1A: 1; + /* Битовое поле bit1B, ширина 1 бит; бит 1 B. */ unsigned int bit1B: 1; + /* Битовое поле bit1C, ширина 1 бит; бит 1 C. */ unsigned int bit1C: 1; + /* Битовое поле bit1D, ширина 1 бит; бит 1 D. */ unsigned int bit1D: 1; + /* Битовое поле bit1E, ширина 1 бит; бит 1 E. */ unsigned int bit1E: 1; + /* Битовое поле bit1F, ширина 1 бит; бит 1 F. */ unsigned int bit1F: 1; + /* Продолжает список аргументов, полей или выражение } bit;; порядок элементов сохраняется. */ } bit; + /* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */ struct + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Битовое поле quad_0, ширина 4 бит; данные quad_0. */ unsigned int quad_0 :4; + /* Битовое поле quad_1, ширина 4 бит; данные quad_1. */ unsigned int quad_1 :4; + /* Битовое поле quad_2, ширина 4 бит; данные quad_2. */ unsigned int quad_2 :4; + /* Битовое поле quad_3, ширина 4 бит; данные quad_3. */ unsigned int quad_3 :4; + /* Битовое поле quad_4, ширина 4 бит; данные quad_4. */ unsigned int quad_4 :4; + /* Битовое поле quad_5, ширина 4 бит; данные quad_5. */ unsigned int quad_5 :4; + /* Битовое поле quad_6, ширина 4 бит; данные quad_6. */ unsigned int quad_6 :4; + /* Битовое поле quad_7, ширина 4 бит; данные quad_7. */ unsigned int quad_7 :4; + /* Продолжает список аргументов, полей или выражение } qua;; порядок элементов сохраняется. */ } qua; + /* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */ struct + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Битовое поле byte_0, ширина 8 бит; данные byte_0. */ unsigned int byte_0 :8; + /* Битовое поле byte_1, ширина 8 бит; данные byte_1. */ unsigned int byte_1 :8; + /* Битовое поле byte_2, ширина 8 бит; данные byte_2. */ unsigned int byte_2 :8; + /* Битовое поле byte_3, ширина 8 бит; данные byte_3. */ unsigned int byte_3 :8; + /* Продолжает список аргументов, полей или выражение } byt;; порядок элементов сохраняется. */ } byt; + /* Продолжает список аргументов, полей или выражение struct; порядок элементов сохраняется. */ struct + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Битовое поле word_0, ширина 16 бит; слово 0. */ unsigned int word_0 :16; + /* Битовое поле word_1, ширина 16 бит; слово 1. */ unsigned int word_1 :16; + /* Продолжает список аргументов, полей или выражение } wrd;; порядок элементов сохраняется. */ } wrd; + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ unsigned long all; -} LONGE; +/* Продолжает список аргументов, полей или выражение } LONGE;; порядок элементов сохраняется. */ +} LONGE; +/* Задаёт XCLKIN = 30000000; данные XCLKIN. */ #define XCLKIN 30000000 // external oscillator frequency +/* Объявляет SYSCLKOUT — данные SYSCLKOUT; LSPCLK — данные LSPCLK; HSPCLK — данные HSPCLK. Память определена в другом модуле. */ extern long SYSCLKOUT, LSPCLK, HSPCLK; +/* Задаёт CLKMULT = 2L; данные CLKMULT. */ #define CLKMULT 2L // 1 to 5 +/* Задаёт LOWORD = int)( (long int)(l) &0xFFFF)); данные LOWORD. */ #define LOWORD(l)((short int)( (long int)(l) &0xFFFF)) +/* Задаёт HIWORD = int)(((long int)(l)>>16)&0xFFFF)); данные HIWORD. */ #define HIWORD(l)((short int)(((long int)(l)>>16)&0xFFFF)) +/* Задаёт LOBYTE = (short int)(w) &0xFF)); данные LOBYTE. */ #define LOBYTE(w)((char)( (short int)(w) &0xFF)) +/* Задаёт HIBYTE = int)(w)>>8)&0xFF)); данные HIBYTE. */ #define HIBYTE(w)((char)(((short int)(w)>>8)&0xFF)) +/* Задаёт BYTE3 = int)(l)>>24)&0xFF)); данные BYTE3. */ #define BYTE3(l)((char)(((long int)(l)>>24)&0xFF)) +/* Задаёт BYTE2 = int)(l)>>16)&0xFF)); данные BYTE2. */ #define BYTE2(l)((char)(((long int)(l)>>16)&0xFF)) +/* Задаёт BYTE1 = int)(l)>> 8)&0xFF)); данные BYTE1. */ #define BYTE1(l)((char)(((long int)(l)>> 8)&0xFF)) +/* Задаёт BYTE0 = (long int)(l) &0xFF)); данные BYTE0. */ #define BYTE0(l)((char)( (long int)(l) &0xFF)) //--------------------------------------------------------------------------- // Include All Peripheral Header Files: // +/* Подключает "DSP2833x_Adc.h": поставляемое TI описание Adc для семейства C2833x. */ #include "DSP2833x_Adc.h" // ADC Registers +/* Подключает "DSP2833x_DevEmu.h": поставляемое TI описание DevEmu для семейства C2833x. */ #include "DSP2833x_DevEmu.h" // Device Emulation Registers +/* Подключает "DSP2833x_CpuTimers.h": поставляемое TI описание CpuTimers для семейства C2833x. */ #include "DSP2833x_CpuTimers.h" // 32-bit CPU Timers +/* Подключает "DSP2833x_ECan.h": поставляемое TI описание ECan для семейства C2833x. */ #include "DSP2833x_ECan.h" // Enhanced eCAN Registers +/* Подключает "DSP2833x_ECap.h": поставляемое TI описание ECap для семейства C2833x. */ #include "DSP2833x_ECap.h" // Enhanced Capture +/* Подключает "DSP2833x_DMA.h": поставляемое TI описание DMA для семейства C2833x. */ #include "DSP2833x_DMA.h" // DMA Registers +/* Подключает "DSP2833x_EPwm.h": поставляемое TI описание EPwm для семейства C2833x. */ #include "DSP2833x_EPwm.h" // Enhanced PWM +/* Подключает "DSP2833x_EQep.h": поставляемое TI описание EQep для семейства C2833x. */ #include "DSP2833x_EQep.h" // Enhanced QEP +/* Подключает "DSP2833x_Gpio.h": поставляемое TI описание Gpio для семейства C2833x. */ #include "DSP2833x_Gpio.h" // General Purpose I/O Registers +/* Подключает "DSP2833x_I2c.h": поставляемое TI описание I2c для семейства C2833x. */ #include "DSP2833x_I2c.h" // I2C Registers +/* Подключает "DSP2833x_McBSP.h": поставляемое TI описание McBSP для семейства C2833x. */ #include "DSP2833x_McBSP.h" // McBSP +/* Подключает "DSP2833x_PieCtrl.h": поставляемое TI описание PieCtrl для семейства C2833x. */ #include "DSP2833x_PieCtrl.h" // PIE Control Registers +/* Подключает "DSP2833x_PieVect.h": поставляемое TI описание PieVect для семейства C2833x. */ #include "DSP2833x_PieVect.h" // PIE Vector Table +/* Подключает "DSP2833x_Spi.h": поставляемое TI описание Spi для семейства C2833x. */ #include "DSP2833x_Spi.h" // SPI Registers +/* Подключает "DSP2833x_Sci.h": поставляемое TI описание Sci для семейства C2833x. */ #include "DSP2833x_Sci.h" // SCI Registers +/* Подключает "DSP2833x_SysCtrl.h": поставляемое TI описание SysCtrl для семейства C2833x. */ #include "DSP2833x_SysCtrl.h" // System Control/Power Modes +/* Подключает "DSP2833x_XIntrupt.h": поставляемое TI описание XIntrupt для семейства C2833x. */ #include "DSP2833x_XIntrupt.h" // External Interrupts +/* Подключает "DSP2833x_Xintf.h": поставляемое TI описание Xintf для семейства C2833x. */ #include "DSP2833x_Xintf.h" // XINTF External Interface +/* Подключает "DSP2833x_GlobalPrototypes.h": поставляемое TI описание GlobalPrototypes для семейства C2833x. */ #include "DSP2833x_GlobalPrototypes.h" // Prototypes for global functions within the +/* Условие компиляции DSP28_28335: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_28335 +/* Задаёт DSP28_EPWM1 = 1; данные DSP28_EPWM1. */ #define DSP28_EPWM1 1 +/* Задаёт DSP28_EPWM2 = 1; данные DSP28_EPWM2. */ #define DSP28_EPWM2 1 +/* Задаёт DSP28_EPWM3 = 1; данные DSP28_EPWM3. */ #define DSP28_EPWM3 1 +/* Задаёт DSP28_EPWM4 = 1; данные DSP28_EPWM4. */ #define DSP28_EPWM4 1 +/* Задаёт DSP28_EPWM5 = 1; данные DSP28_EPWM5. */ #define DSP28_EPWM5 1 +/* Задаёт DSP28_EPWM6 = 1; данные DSP28_EPWM6. */ #define DSP28_EPWM6 1 +/* Задаёт DSP28_ECAP1 = 1; данные DSP28_ECAP1. */ #define DSP28_ECAP1 1 +/* Задаёт DSP28_ECAP2 = 1; данные DSP28_ECAP2. */ #define DSP28_ECAP2 1 +/* Задаёт DSP28_ECAP3 = 1; данные DSP28_ECAP3. */ #define DSP28_ECAP3 1 +/* Задаёт DSP28_ECAP4 = 1; данные DSP28_ECAP4. */ #define DSP28_ECAP4 1 +/* Задаёт DSP28_ECAP5 = 1; данные DSP28_ECAP5. */ #define DSP28_ECAP5 1 +/* Задаёт DSP28_ECAP6 = 1; данные DSP28_ECAP6. */ #define DSP28_ECAP6 1 +/* Задаёт DSP28_EQEP1 = 1; данные DSP28_EQEP1. */ #define DSP28_EQEP1 1 +/* Задаёт DSP28_EQEP2 = 1; данные DSP28_EQEP2. */ #define DSP28_EQEP2 1 +/* Задаёт DSP28_ECANA = 1; данные DSP28_ECANA. */ #define DSP28_ECANA 1 +/* Задаёт DSP28_ECANB = 1; данные DSP28_ECANB. */ #define DSP28_ECANB 1 +/* Задаёт DSP28_MCBSPA = 1; данные DSP28_MCBSPA. */ #define DSP28_MCBSPA 1 +/* Задаёт DSP28_MCBSPB = 1; данные DSP28_MCBSPB. */ #define DSP28_MCBSPB 1 +/* Задаёт DSP28_SPIA = 1; данные DSP28_SPIA. */ #define DSP28_SPIA 1 +/* Задаёт DSP28_SCIA = 1; данные DSP28_SCIA. */ #define DSP28_SCIA 1 +/* Задаёт DSP28_SCIB = 1; данные DSP28_SCIB. */ #define DSP28_SCIB 1 +/* Задаёт DSP28_SCIC = 1; данные DSP28_SCIC. */ #define DSP28_SCIC 1 +/* Задаёт DSP28_I2CA = 1; данные DSP28_I2CA. */ #define DSP28_I2CA 1 +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end DSP28_28335 +/* Условие компиляции DSP28_28334: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_28334 +/* Задаёт DSP28_EPWM1 = 1; данные DSP28_EPWM1. */ #define DSP28_EPWM1 1 +/* Задаёт DSP28_EPWM2 = 1; данные DSP28_EPWM2. */ #define DSP28_EPWM2 1 +/* Задаёт DSP28_EPWM3 = 1; данные DSP28_EPWM3. */ #define DSP28_EPWM3 1 +/* Задаёт DSP28_EPWM4 = 1; данные DSP28_EPWM4. */ #define DSP28_EPWM4 1 +/* Задаёт DSP28_EPWM5 = 1; данные DSP28_EPWM5. */ #define DSP28_EPWM5 1 +/* Задаёт DSP28_EPWM6 = 1; данные DSP28_EPWM6. */ #define DSP28_EPWM6 1 +/* Задаёт DSP28_ECAP1 = 1; данные DSP28_ECAP1. */ #define DSP28_ECAP1 1 +/* Задаёт DSP28_ECAP2 = 1; данные DSP28_ECAP2. */ #define DSP28_ECAP2 1 +/* Задаёт DSP28_ECAP3 = 1; данные DSP28_ECAP3. */ #define DSP28_ECAP3 1 +/* Задаёт DSP28_ECAP4 = 1; данные DSP28_ECAP4. */ #define DSP28_ECAP4 1 +/* Задаёт DSP28_ECAP5 = 0; данные DSP28_ECAP5. */ #define DSP28_ECAP5 0 +/* Задаёт DSP28_ECAP6 = 0; данные DSP28_ECAP6. */ #define DSP28_ECAP6 0 +/* Задаёт DSP28_EQEP1 = 1; данные DSP28_EQEP1. */ #define DSP28_EQEP1 1 +/* Задаёт DSP28_EQEP2 = 1; данные DSP28_EQEP2. */ #define DSP28_EQEP2 1 +/* Задаёт DSP28_ECANA = 1; данные DSP28_ECANA. */ #define DSP28_ECANA 1 +/* Задаёт DSP28_ECANB = 1; данные DSP28_ECANB. */ #define DSP28_ECANB 1 +/* Задаёт DSP28_MCBSPA = 1; данные DSP28_MCBSPA. */ #define DSP28_MCBSPA 1 +/* Задаёт DSP28_MCBSPB = 1; данные DSP28_MCBSPB. */ #define DSP28_MCBSPB 1 +/* Задаёт DSP28_SPIA = 1; данные DSP28_SPIA. */ #define DSP28_SPIA 1 +/* Задаёт DSP28_SCIA = 1; данные DSP28_SCIA. */ #define DSP28_SCIA 1 +/* Задаёт DSP28_SCIB = 1; данные DSP28_SCIB. */ #define DSP28_SCIB 1 +/* Задаёт DSP28_SCIC = 1; данные DSP28_SCIC. */ #define DSP28_SCIC 1 +/* Задаёт DSP28_I2CA = 1; данные DSP28_I2CA. */ #define DSP28_I2CA 1 +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end DSP28_28334 +/* Условие компиляции DSP28_28332: выбранный блок включается в текущий вариант прошивки. */ #if DSP28_28332 +/* Задаёт DSP28_EPWM1 = 1; данные DSP28_EPWM1. */ #define DSP28_EPWM1 1 +/* Задаёт DSP28_EPWM2 = 1; данные DSP28_EPWM2. */ #define DSP28_EPWM2 1 +/* Задаёт DSP28_EPWM3 = 1; данные DSP28_EPWM3. */ #define DSP28_EPWM3 1 +/* Задаёт DSP28_EPWM4 = 1; данные DSP28_EPWM4. */ #define DSP28_EPWM4 1 +/* Задаёт DSP28_EPWM5 = 1; данные DSP28_EPWM5. */ #define DSP28_EPWM5 1 +/* Задаёт DSP28_EPWM6 = 1; данные DSP28_EPWM6. */ #define DSP28_EPWM6 1 +/* Задаёт DSP28_ECAP1 = 1; данные DSP28_ECAP1. */ #define DSP28_ECAP1 1 +/* Задаёт DSP28_ECAP2 = 1; данные DSP28_ECAP2. */ #define DSP28_ECAP2 1 +/* Задаёт DSP28_ECAP3 = 1; данные DSP28_ECAP3. */ #define DSP28_ECAP3 1 +/* Задаёт DSP28_ECAP4 = 1; данные DSP28_ECAP4. */ #define DSP28_ECAP4 1 +/* Задаёт DSP28_ECAP5 = 0; данные DSP28_ECAP5. */ #define DSP28_ECAP5 0 +/* Задаёт DSP28_ECAP6 = 0; данные DSP28_ECAP6. */ #define DSP28_ECAP6 0 +/* Задаёт DSP28_EQEP1 = 1; данные DSP28_EQEP1. */ #define DSP28_EQEP1 1 +/* Задаёт DSP28_EQEP2 = 1; данные DSP28_EQEP2. */ #define DSP28_EQEP2 1 +/* Задаёт DSP28_ECANA = 1; данные DSP28_ECANA. */ #define DSP28_ECANA 1 +/* Задаёт DSP28_ECANB = 1; данные DSP28_ECANB. */ #define DSP28_ECANB 1 +/* Задаёт DSP28_MCBSPA = 1; данные DSP28_MCBSPA. */ #define DSP28_MCBSPA 1 +/* Задаёт DSP28_MCBSPB = 0; данные DSP28_MCBSPB. */ #define DSP28_MCBSPB 0 +/* Задаёт DSP28_SPIA = 1; данные DSP28_SPIA. */ #define DSP28_SPIA 1 +/* Задаёт DSP28_SCIA = 1; данные DSP28_SCIA. */ #define DSP28_SCIA 1 +/* Задаёт DSP28_SCIB = 1; данные DSP28_SCIB. */ #define DSP28_SCIB 1 +/* Задаёт DSP28_SCIC = 0; данные DSP28_SCIC. */ #define DSP28_SCIC 0 +/* Задаёт DSP28_I2CA = 1; данные DSP28_I2CA. */ #define DSP28_I2CA 1 +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end DSP28_28332 +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_DEVICE_H definition diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_ECan.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_ECan.h index 65988ca..a610c51 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_ECan.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_ECan.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание ECan для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/2 $ // Checkin $Date: May 7, 2007 16:05:39 $ //########################################################################### @@ -11,12 +12,17 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_ECAN_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_ECAN_H +/* Определяет защитный символ или переключатель DSP2833x_ECAN_H для последующей компиляции. */ #define DSP2833x_ECAN_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -25,854 +31,1577 @@ extern "C" { /* ----------------------------------------------------*/ /* eCAN Mailbox enable register (CANME) bit definitions */ +/* Описывает структуру CANME_BITS; порядок полей определяет расположение данных. */ struct CANME_BITS { // bit description + /* Битовое поле ME0, ширина 1 бит; данные ME0. */ Uint16 ME0:1; // 0 Enable Mailbox 0 + /* Битовое поле ME1, ширина 1 бит; данные ME1. */ Uint16 ME1:1; // 1 Enable Mailbox 1 + /* Битовое поле ME2, ширина 1 бит; данные ME2. */ Uint16 ME2:1; // 2 Enable Mailbox 2 + /* Битовое поле ME3, ширина 1 бит; данные ME3. */ Uint16 ME3:1; // 3 Enable Mailbox 3 + /* Битовое поле ME4, ширина 1 бит; данные ME4. */ Uint16 ME4:1; // 4 Enable Mailbox 4 + /* Битовое поле ME5, ширина 1 бит; данные ME5. */ Uint16 ME5:1; // 5 Enable Mailbox 5 + /* Битовое поле ME6, ширина 1 бит; данные ME6. */ Uint16 ME6:1; // 6 Enable Mailbox 6 + /* Битовое поле ME7, ширина 1 бит; данные ME7. */ Uint16 ME7:1; // 7 Enable Mailbox 7 + /* Битовое поле ME8, ширина 1 бит; данные ME8. */ Uint16 ME8:1; // 8 Enable Mailbox 8 + /* Битовое поле ME9, ширина 1 бит; данные ME9. */ Uint16 ME9:1; // 9 Enable Mailbox 9 + /* Битовое поле ME10, ширина 1 бит; данные ME10. */ Uint16 ME10:1; // 10 Enable Mailbox 10 + /* Битовое поле ME11, ширина 1 бит; данные ME11. */ Uint16 ME11:1; // 11 Enable Mailbox 11 + /* Битовое поле ME12, ширина 1 бит; данные ME12. */ Uint16 ME12:1; // 12 Enable Mailbox 12 + /* Битовое поле ME13, ширина 1 бит; данные ME13. */ Uint16 ME13:1; // 13 Enable Mailbox 13 + /* Битовое поле ME14, ширина 1 бит; данные ME14. */ Uint16 ME14:1; // 14 Enable Mailbox 14 + /* Битовое поле ME15, ширина 1 бит; данные ME15. */ Uint16 ME15:1; // 15 Enable Mailbox 15 + /* Битовое поле ME16, ширина 1 бит; данные ME16. */ Uint16 ME16:1; // 16 Enable Mailbox 16 + /* Битовое поле ME17, ширина 1 бит; данные ME17. */ Uint16 ME17:1; // 17 Enable Mailbox 17 + /* Битовое поле ME18, ширина 1 бит; данные ME18. */ Uint16 ME18:1; // 18 Enable Mailbox 18 + /* Битовое поле ME19, ширина 1 бит; данные ME19. */ Uint16 ME19:1; // 19 Enable Mailbox 19 + /* Битовое поле ME20, ширина 1 бит; данные ME20. */ Uint16 ME20:1; // 20 Enable Mailbox 20 + /* Битовое поле ME21, ширина 1 бит; данные ME21. */ Uint16 ME21:1; // 21 Enable Mailbox 21 + /* Битовое поле ME22, ширина 1 бит; данные ME22. */ Uint16 ME22:1; // 22 Enable Mailbox 22 + /* Битовое поле ME23, ширина 1 бит; данные ME23. */ Uint16 ME23:1; // 23 Enable Mailbox 23 + /* Битовое поле ME24, ширина 1 бит; данные ME24. */ Uint16 ME24:1; // 24 Enable Mailbox 24 + /* Битовое поле ME25, ширина 1 бит; данные ME25. */ Uint16 ME25:1; // 25 Enable Mailbox 25 + /* Битовое поле ME26, ширина 1 бит; данные ME26. */ Uint16 ME26:1; // 26 Enable Mailbox 26 + /* Битовое поле ME27, ширина 1 бит; данные ME27. */ Uint16 ME27:1; // 27 Enable Mailbox 27 + /* Битовое поле ME28, ширина 1 бит; данные ME28. */ Uint16 ME28:1; // 28 Enable Mailbox 28 + /* Битовое поле ME29, ширина 1 бит; данные ME29. */ Uint16 ME29:1; // 29 Enable Mailbox 29 + /* Битовое поле ME30, ширина 1 бит; данные ME30. */ Uint16 ME30:1; // 30 Enable Mailbox 30 + /* Битовое поле ME31, ширина 1 бит; данные ME31. */ Uint16 ME31:1; // 31 Enable Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANME_REG в одной области памяти. */ union CANME_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANME_BITS bit;; порядок полей определяет расположение данных. */ struct CANME_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Mailbox direction register (CANMD) bit definitions */ +/* Описывает структуру CANMD_BITS; порядок полей определяет расположение данных. */ struct CANMD_BITS { // bit description + /* Битовое поле MD0, ширина 1 бит; данные MD0. */ Uint16 MD0:1; // 0 0 -> Tx 1 -> Rx + /* Битовое поле MD1, ширина 1 бит; данные MD1. */ Uint16 MD1:1; // 1 0 -> Tx 1 -> Rx + /* Битовое поле MD2, ширина 1 бит; данные MD2. */ Uint16 MD2:1; // 2 0 -> Tx 1 -> Rx + /* Битовое поле MD3, ширина 1 бит; данные MD3. */ Uint16 MD3:1; // 3 0 -> Tx 1 -> Rx + /* Битовое поле MD4, ширина 1 бит; данные MD4. */ Uint16 MD4:1; // 4 0 -> Tx 1 -> Rx + /* Битовое поле MD5, ширина 1 бит; данные MD5. */ Uint16 MD5:1; // 5 0 -> Tx 1 -> Rx + /* Битовое поле MD6, ширина 1 бит; данные MD6. */ Uint16 MD6:1; // 6 0 -> Tx 1 -> Rx + /* Битовое поле MD7, ширина 1 бит; данные MD7. */ Uint16 MD7:1; // 7 0 -> Tx 1 -> Rx + /* Битовое поле MD8, ширина 1 бит; данные MD8. */ Uint16 MD8:1; // 8 0 -> Tx 1 -> Rx + /* Битовое поле MD9, ширина 1 бит; данные MD9. */ Uint16 MD9:1; // 9 0 -> Tx 1 -> Rx + /* Битовое поле MD10, ширина 1 бит; данные MD10. */ Uint16 MD10:1; // 10 0 -> Tx 1 -> Rx + /* Битовое поле MD11, ширина 1 бит; данные MD11. */ Uint16 MD11:1; // 11 0 -> Tx 1 -> Rx + /* Битовое поле MD12, ширина 1 бит; данные MD12. */ Uint16 MD12:1; // 12 0 -> Tx 1 -> Rx + /* Битовое поле MD13, ширина 1 бит; данные MD13. */ Uint16 MD13:1; // 13 0 -> Tx 1 -> Rx + /* Битовое поле MD14, ширина 1 бит; данные MD14. */ Uint16 MD14:1; // 14 0 -> Tx 1 -> Rx + /* Битовое поле MD15, ширина 1 бит; данные MD15. */ Uint16 MD15:1; // 15 0 -> Tx 1 -> Rx + /* Битовое поле MD16, ширина 1 бит; данные MD16. */ Uint16 MD16:1; // 16 0 -> Tx 1 -> Rx + /* Битовое поле MD17, ширина 1 бит; данные MD17. */ Uint16 MD17:1; // 17 0 -> Tx 1 -> Rx + /* Битовое поле MD18, ширина 1 бит; данные MD18. */ Uint16 MD18:1; // 18 0 -> Tx 1 -> Rx + /* Битовое поле MD19, ширина 1 бит; данные MD19. */ Uint16 MD19:1; // 19 0 -> Tx 1 -> Rx + /* Битовое поле MD20, ширина 1 бит; данные MD20. */ Uint16 MD20:1; // 20 0 -> Tx 1 -> Rx + /* Битовое поле MD21, ширина 1 бит; данные MD21. */ Uint16 MD21:1; // 21 0 -> Tx 1 -> Rx + /* Битовое поле MD22, ширина 1 бит; данные MD22. */ Uint16 MD22:1; // 22 0 -> Tx 1 -> Rx + /* Битовое поле MD23, ширина 1 бит; данные MD23. */ Uint16 MD23:1; // 23 0 -> Tx 1 -> Rx + /* Битовое поле MD24, ширина 1 бит; данные MD24. */ Uint16 MD24:1; // 24 0 -> Tx 1 -> Rx + /* Битовое поле MD25, ширина 1 бит; данные MD25. */ Uint16 MD25:1; // 25 0 -> Tx 1 -> Rx + /* Битовое поле MD26, ширина 1 бит; данные MD26. */ Uint16 MD26:1; // 26 0 -> Tx 1 -> Rx + /* Битовое поле MD27, ширина 1 бит; данные MD27. */ Uint16 MD27:1; // 27 0 -> Tx 1 -> Rx + /* Битовое поле MD28, ширина 1 бит; данные MD28. */ Uint16 MD28:1; // 28 0 -> Tx 1 -> Rx + /* Битовое поле MD29, ширина 1 бит; данные MD29. */ Uint16 MD29:1; // 29 0 -> Tx 1 -> Rx + /* Битовое поле MD30, ширина 1 бит; данные MD30. */ Uint16 MD30:1; // 30 0 -> Tx 1 -> Rx + /* Битовое поле MD31, ширина 1 бит; данные MD31. */ Uint16 MD31:1; // 31 0 -> Tx 1 -> Rx +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANMD_REG в одной области памяти. */ union CANMD_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANMD_BITS bit;; порядок полей определяет расположение данных. */ struct CANMD_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Transmit Request Set register (CANTRS) bit definitions */ +/* Описывает структуру CANTRS_BITS; порядок полей определяет расположение данных. */ struct CANTRS_BITS { // bit description + /* Битовое поле TRS0, ширина 1 бит; данные TRS0. */ Uint16 TRS0:1; // 0 TRS for Mailbox 0 + /* Битовое поле TRS1, ширина 1 бит; данные TRS1. */ Uint16 TRS1:1; // 1 TRS for Mailbox 1 + /* Битовое поле TRS2, ширина 1 бит; данные TRS2. */ Uint16 TRS2:1; // 2 TRS for Mailbox 2 + /* Битовое поле TRS3, ширина 1 бит; данные TRS3. */ Uint16 TRS3:1; // 3 TRS for Mailbox 3 + /* Битовое поле TRS4, ширина 1 бит; данные TRS4. */ Uint16 TRS4:1; // 4 TRS for Mailbox 4 + /* Битовое поле TRS5, ширина 1 бит; данные TRS5. */ Uint16 TRS5:1; // 5 TRS for Mailbox 5 + /* Битовое поле TRS6, ширина 1 бит; данные TRS6. */ Uint16 TRS6:1; // 6 TRS for Mailbox 6 + /* Битовое поле TRS7, ширина 1 бит; данные TRS7. */ Uint16 TRS7:1; // 7 TRS for Mailbox 7 + /* Битовое поле TRS8, ширина 1 бит; данные TRS8. */ Uint16 TRS8:1; // 8 TRS for Mailbox 8 + /* Битовое поле TRS9, ширина 1 бит; данные TRS9. */ Uint16 TRS9:1; // 9 TRS for Mailbox 9 + /* Битовое поле TRS10, ширина 1 бит; данные TRS10. */ Uint16 TRS10:1; // 10 TRS for Mailbox 10 + /* Битовое поле TRS11, ширина 1 бит; данные TRS11. */ Uint16 TRS11:1; // 11 TRS for Mailbox 11 + /* Битовое поле TRS12, ширина 1 бит; данные TRS12. */ Uint16 TRS12:1; // 12 TRS for Mailbox 12 + /* Битовое поле TRS13, ширина 1 бит; данные TRS13. */ Uint16 TRS13:1; // 13 TRS for Mailbox 13 + /* Битовое поле TRS14, ширина 1 бит; данные TRS14. */ Uint16 TRS14:1; // 14 TRS for Mailbox 14 + /* Битовое поле TRS15, ширина 1 бит; данные TRS15. */ Uint16 TRS15:1; // 15 TRS for Mailbox 15 + /* Битовое поле TRS16, ширина 1 бит; данные TRS16. */ Uint16 TRS16:1; // 16 TRS for Mailbox 16 + /* Битовое поле TRS17, ширина 1 бит; данные TRS17. */ Uint16 TRS17:1; // 17 TRS for Mailbox 17 + /* Битовое поле TRS18, ширина 1 бит; данные TRS18. */ Uint16 TRS18:1; // 18 TRS for Mailbox 18 + /* Битовое поле TRS19, ширина 1 бит; данные TRS19. */ Uint16 TRS19:1; // 19 TRS for Mailbox 19 + /* Битовое поле TRS20, ширина 1 бит; данные TRS20. */ Uint16 TRS20:1; // 20 TRS for Mailbox 20 + /* Битовое поле TRS21, ширина 1 бит; данные TRS21. */ Uint16 TRS21:1; // 21 TRS for Mailbox 21 + /* Битовое поле TRS22, ширина 1 бит; данные TRS22. */ Uint16 TRS22:1; // 22 TRS for Mailbox 22 + /* Битовое поле TRS23, ширина 1 бит; данные TRS23. */ Uint16 TRS23:1; // 23 TRS for Mailbox 23 + /* Битовое поле TRS24, ширина 1 бит; данные TRS24. */ Uint16 TRS24:1; // 24 TRS for Mailbox 24 + /* Битовое поле TRS25, ширина 1 бит; данные TRS25. */ Uint16 TRS25:1; // 25 TRS for Mailbox 25 + /* Битовое поле TRS26, ширина 1 бит; данные TRS26. */ Uint16 TRS26:1; // 26 TRS for Mailbox 26 + /* Битовое поле TRS27, ширина 1 бит; данные TRS27. */ Uint16 TRS27:1; // 27 TRS for Mailbox 27 + /* Битовое поле TRS28, ширина 1 бит; данные TRS28. */ Uint16 TRS28:1; // 28 TRS for Mailbox 28 + /* Битовое поле TRS29, ширина 1 бит; данные TRS29. */ Uint16 TRS29:1; // 29 TRS for Mailbox 29 + /* Битовое поле TRS30, ширина 1 бит; данные TRS30. */ Uint16 TRS30:1; // 30 TRS for Mailbox 30 + /* Битовое поле TRS31, ширина 1 бит; данные TRS31. */ Uint16 TRS31:1; // 31 TRS for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANTRS_REG в одной области памяти. */ union CANTRS_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANTRS_BITS bit;; порядок полей определяет расположение данных. */ struct CANTRS_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Transmit Request Reset register (CANTRR) bit definitions */ +/* Описывает структуру CANTRR_BITS; порядок полей определяет расположение данных. */ struct CANTRR_BITS { // bit description + /* Битовое поле TRR0, ширина 1 бит; данные TRR0. */ Uint16 TRR0:1; // 0 TRR for Mailbox 0 + /* Битовое поле TRR1, ширина 1 бит; данные TRR1. */ Uint16 TRR1:1; // 1 TRR for Mailbox 1 + /* Битовое поле TRR2, ширина 1 бит; данные TRR2. */ Uint16 TRR2:1; // 2 TRR for Mailbox 2 + /* Битовое поле TRR3, ширина 1 бит; данные TRR3. */ Uint16 TRR3:1; // 3 TRR for Mailbox 3 + /* Битовое поле TRR4, ширина 1 бит; данные TRR4. */ Uint16 TRR4:1; // 4 TRR for Mailbox 4 + /* Битовое поле TRR5, ширина 1 бит; данные TRR5. */ Uint16 TRR5:1; // 5 TRR for Mailbox 5 + /* Битовое поле TRR6, ширина 1 бит; данные TRR6. */ Uint16 TRR6:1; // 6 TRR for Mailbox 6 + /* Битовое поле TRR7, ширина 1 бит; данные TRR7. */ Uint16 TRR7:1; // 7 TRR for Mailbox 7 + /* Битовое поле TRR8, ширина 1 бит; данные TRR8. */ Uint16 TRR8:1; // 8 TRR for Mailbox 8 + /* Битовое поле TRR9, ширина 1 бит; данные TRR9. */ Uint16 TRR9:1; // 9 TRR for Mailbox 9 + /* Битовое поле TRR10, ширина 1 бит; данные TRR10. */ Uint16 TRR10:1; // 10 TRR for Mailbox 10 + /* Битовое поле TRR11, ширина 1 бит; данные TRR11. */ Uint16 TRR11:1; // 11 TRR for Mailbox 11 + /* Битовое поле TRR12, ширина 1 бит; данные TRR12. */ Uint16 TRR12:1; // 12 TRR for Mailbox 12 + /* Битовое поле TRR13, ширина 1 бит; данные TRR13. */ Uint16 TRR13:1; // 13 TRR for Mailbox 13 + /* Битовое поле TRR14, ширина 1 бит; данные TRR14. */ Uint16 TRR14:1; // 14 TRR for Mailbox 14 + /* Битовое поле TRR15, ширина 1 бит; данные TRR15. */ Uint16 TRR15:1; // 15 TRR for Mailbox 15 + /* Битовое поле TRR16, ширина 1 бит; данные TRR16. */ Uint16 TRR16:1; // 16 TRR for Mailbox 16 + /* Битовое поле TRR17, ширина 1 бит; данные TRR17. */ Uint16 TRR17:1; // 17 TRR for Mailbox 17 + /* Битовое поле TRR18, ширина 1 бит; данные TRR18. */ Uint16 TRR18:1; // 18 TRR for Mailbox 18 + /* Битовое поле TRR19, ширина 1 бит; данные TRR19. */ Uint16 TRR19:1; // 19 TRR for Mailbox 19 + /* Битовое поле TRR20, ширина 1 бит; данные TRR20. */ Uint16 TRR20:1; // 20 TRR for Mailbox 20 + /* Битовое поле TRR21, ширина 1 бит; данные TRR21. */ Uint16 TRR21:1; // 21 TRR for Mailbox 21 + /* Битовое поле TRR22, ширина 1 бит; данные TRR22. */ Uint16 TRR22:1; // 22 TRR for Mailbox 22 + /* Битовое поле TRR23, ширина 1 бит; данные TRR23. */ Uint16 TRR23:1; // 23 TRR for Mailbox 23 + /* Битовое поле TRR24, ширина 1 бит; данные TRR24. */ Uint16 TRR24:1; // 24 TRR for Mailbox 24 + /* Битовое поле TRR25, ширина 1 бит; данные TRR25. */ Uint16 TRR25:1; // 25 TRR for Mailbox 25 + /* Битовое поле TRR26, ширина 1 бит; данные TRR26. */ Uint16 TRR26:1; // 26 TRR for Mailbox 26 + /* Битовое поле TRR27, ширина 1 бит; данные TRR27. */ Uint16 TRR27:1; // 27 TRR for Mailbox 27 + /* Битовое поле TRR28, ширина 1 бит; данные TRR28. */ Uint16 TRR28:1; // 28 TRR for Mailbox 28 + /* Битовое поле TRR29, ширина 1 бит; данные TRR29. */ Uint16 TRR29:1; // 29 TRR for Mailbox 29 + /* Битовое поле TRR30, ширина 1 бит; данные TRR30. */ Uint16 TRR30:1; // 30 TRR for Mailbox 30 + /* Битовое поле TRR31, ширина 1 бит; данные TRR31. */ Uint16 TRR31:1; // 31 TRR for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANTRR_REG в одной области памяти. */ union CANTRR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANTRR_BITS bit;; порядок полей определяет расположение данных. */ struct CANTRR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Transmit Acknowledge register (CANTA) bit definitions */ +/* Описывает структуру CANTA_BITS; порядок полей определяет расположение данных. */ struct CANTA_BITS { // bit description + /* Битовое поле TA0, ширина 1 бит; данные TA0. */ Uint16 TA0:1; // 0 TA for Mailbox 0 + /* Битовое поле TA1, ширина 1 бит; данные TA1. */ Uint16 TA1:1; // 1 TA for Mailbox 1 + /* Битовое поле TA2, ширина 1 бит; данные TA2. */ Uint16 TA2:1; // 2 TA for Mailbox 2 + /* Битовое поле TA3, ширина 1 бит; данные TA3. */ Uint16 TA3:1; // 3 TA for Mailbox 3 + /* Битовое поле TA4, ширина 1 бит; данные TA4. */ Uint16 TA4:1; // 4 TA for Mailbox 4 + /* Битовое поле TA5, ширина 1 бит; данные TA5. */ Uint16 TA5:1; // 5 TA for Mailbox 5 + /* Битовое поле TA6, ширина 1 бит; данные TA6. */ Uint16 TA6:1; // 6 TA for Mailbox 6 + /* Битовое поле TA7, ширина 1 бит; данные TA7. */ Uint16 TA7:1; // 7 TA for Mailbox 7 + /* Битовое поле TA8, ширина 1 бит; данные TA8. */ Uint16 TA8:1; // 8 TA for Mailbox 8 + /* Битовое поле TA9, ширина 1 бит; данные TA9. */ Uint16 TA9:1; // 9 TA for Mailbox 9 + /* Битовое поле TA10, ширина 1 бит; данные TA10. */ Uint16 TA10:1; // 10 TA for Mailbox 10 + /* Битовое поле TA11, ширина 1 бит; данные TA11. */ Uint16 TA11:1; // 11 TA for Mailbox 11 + /* Битовое поле TA12, ширина 1 бит; данные TA12. */ Uint16 TA12:1; // 12 TA for Mailbox 12 + /* Битовое поле TA13, ширина 1 бит; данные TA13. */ Uint16 TA13:1; // 13 TA for Mailbox 13 + /* Битовое поле TA14, ширина 1 бит; данные TA14. */ Uint16 TA14:1; // 14 TA for Mailbox 14 + /* Битовое поле TA15, ширина 1 бит; данные TA15. */ Uint16 TA15:1; // 15 TA for Mailbox 15 + /* Битовое поле TA16, ширина 1 бит; данные TA16. */ Uint16 TA16:1; // 16 TA for Mailbox 16 + /* Битовое поле TA17, ширина 1 бит; данные TA17. */ Uint16 TA17:1; // 17 TA for Mailbox 17 + /* Битовое поле TA18, ширина 1 бит; данные TA18. */ Uint16 TA18:1; // 18 TA for Mailbox 18 + /* Битовое поле TA19, ширина 1 бит; данные TA19. */ Uint16 TA19:1; // 19 TA for Mailbox 19 + /* Битовое поле TA20, ширина 1 бит; данные TA20. */ Uint16 TA20:1; // 20 TA for Mailbox 20 + /* Битовое поле TA21, ширина 1 бит; данные TA21. */ Uint16 TA21:1; // 21 TA for Mailbox 21 + /* Битовое поле TA22, ширина 1 бит; данные TA22. */ Uint16 TA22:1; // 22 TA for Mailbox 22 + /* Битовое поле TA23, ширина 1 бит; данные TA23. */ Uint16 TA23:1; // 23 TA for Mailbox 23 + /* Битовое поле TA24, ширина 1 бит; данные TA24. */ Uint16 TA24:1; // 24 TA for Mailbox 24 + /* Битовое поле TA25, ширина 1 бит; данные TA25. */ Uint16 TA25:1; // 25 TA for Mailbox 25 + /* Битовое поле TA26, ширина 1 бит; данные TA26. */ Uint16 TA26:1; // 26 TA for Mailbox 26 + /* Битовое поле TA27, ширина 1 бит; данные TA27. */ Uint16 TA27:1; // 27 TA for Mailbox 27 + /* Битовое поле TA28, ширина 1 бит; данные TA28. */ Uint16 TA28:1; // 28 TA for Mailbox 28 + /* Битовое поле TA29, ширина 1 бит; данные TA29. */ Uint16 TA29:1; // 29 TA for Mailbox 29 + /* Битовое поле TA30, ширина 1 бит; данные TA30. */ Uint16 TA30:1; // 30 TA for Mailbox 30 + /* Битовое поле TA31, ширина 1 бит; данные TA31. */ Uint16 TA31:1; // 31 TA for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANTA_REG в одной области памяти. */ union CANTA_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANTA_BITS bit;; порядок полей определяет расположение данных. */ struct CANTA_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Transmit Abort Acknowledge register (CANAA) bit definitions */ +/* Описывает структуру CANAA_BITS; порядок полей определяет расположение данных. */ struct CANAA_BITS { // bit description + /* Битовое поле AA0, ширина 1 бит; данные AA0. */ Uint16 AA0:1; // 0 AA for Mailbox 0 + /* Битовое поле AA1, ширина 1 бит; данные AA1. */ Uint16 AA1:1; // 1 AA for Mailbox 1 + /* Битовое поле AA2, ширина 1 бит; данные AA2. */ Uint16 AA2:1; // 2 AA for Mailbox 2 + /* Битовое поле AA3, ширина 1 бит; данные AA3. */ Uint16 AA3:1; // 3 AA for Mailbox 3 + /* Битовое поле AA4, ширина 1 бит; данные AA4. */ Uint16 AA4:1; // 4 AA for Mailbox 4 + /* Битовое поле AA5, ширина 1 бит; данные AA5. */ Uint16 AA5:1; // 5 AA for Mailbox 5 + /* Битовое поле AA6, ширина 1 бит; данные AA6. */ Uint16 AA6:1; // 6 AA for Mailbox 6 + /* Битовое поле AA7, ширина 1 бит; данные AA7. */ Uint16 AA7:1; // 7 AA for Mailbox 7 + /* Битовое поле AA8, ширина 1 бит; данные AA8. */ Uint16 AA8:1; // 8 AA for Mailbox 8 + /* Битовое поле AA9, ширина 1 бит; данные AA9. */ Uint16 AA9:1; // 9 AA for Mailbox 9 + /* Битовое поле AA10, ширина 1 бит; данные AA10. */ Uint16 AA10:1; // 10 AA for Mailbox 10 + /* Битовое поле AA11, ширина 1 бит; данные AA11. */ Uint16 AA11:1; // 11 AA for Mailbox 11 + /* Битовое поле AA12, ширина 1 бит; данные AA12. */ Uint16 AA12:1; // 12 AA for Mailbox 12 + /* Битовое поле AA13, ширина 1 бит; данные AA13. */ Uint16 AA13:1; // 13 AA for Mailbox 13 + /* Битовое поле AA14, ширина 1 бит; данные AA14. */ Uint16 AA14:1; // 14 AA for Mailbox 14 + /* Битовое поле AA15, ширина 1 бит; данные AA15. */ Uint16 AA15:1; // 15 AA for Mailbox 15 + /* Битовое поле AA16, ширина 1 бит; данные AA16. */ Uint16 AA16:1; // 16 AA for Mailbox 16 + /* Битовое поле AA17, ширина 1 бит; данные AA17. */ Uint16 AA17:1; // 17 AA for Mailbox 17 + /* Битовое поле AA18, ширина 1 бит; данные AA18. */ Uint16 AA18:1; // 18 AA for Mailbox 18 + /* Битовое поле AA19, ширина 1 бит; данные AA19. */ Uint16 AA19:1; // 19 AA for Mailbox 19 + /* Битовое поле AA20, ширина 1 бит; данные AA20. */ Uint16 AA20:1; // 20 AA for Mailbox 20 + /* Битовое поле AA21, ширина 1 бит; данные AA21. */ Uint16 AA21:1; // 21 AA for Mailbox 21 + /* Битовое поле AA22, ширина 1 бит; данные AA22. */ Uint16 AA22:1; // 22 AA for Mailbox 22 + /* Битовое поле AA23, ширина 1 бит; данные AA23. */ Uint16 AA23:1; // 23 AA for Mailbox 23 + /* Битовое поле AA24, ширина 1 бит; данные AA24. */ Uint16 AA24:1; // 24 AA for Mailbox 24 + /* Битовое поле AA25, ширина 1 бит; данные AA25. */ Uint16 AA25:1; // 25 AA for Mailbox 25 + /* Битовое поле AA26, ширина 1 бит; данные AA26. */ Uint16 AA26:1; // 26 AA for Mailbox 26 + /* Битовое поле AA27, ширина 1 бит; данные AA27. */ Uint16 AA27:1; // 27 AA for Mailbox 27 + /* Битовое поле AA28, ширина 1 бит; данные AA28. */ Uint16 AA28:1; // 28 AA for Mailbox 28 + /* Битовое поле AA29, ширина 1 бит; данные AA29. */ Uint16 AA29:1; // 29 AA for Mailbox 29 + /* Битовое поле AA30, ширина 1 бит; данные AA30. */ Uint16 AA30:1; // 30 AA for Mailbox 30 + /* Битовое поле AA31, ширина 1 бит; данные AA31. */ Uint16 AA31:1; // 31 AA for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANAA_REG в одной области памяти. */ union CANAA_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANAA_BITS bit;; порядок полей определяет расположение данных. */ struct CANAA_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Received Message Pending register (CANRMP) bit definitions */ +/* Описывает структуру CANRMP_BITS; порядок полей определяет расположение данных. */ struct CANRMP_BITS { // bit description + /* Битовое поле RMP0, ширина 1 бит; данные RMP0. */ Uint16 RMP0:1; // 0 RMP for Mailbox 0 + /* Битовое поле RMP1, ширина 1 бит; данные RMP1. */ Uint16 RMP1:1; // 1 RMP for Mailbox 1 + /* Битовое поле RMP2, ширина 1 бит; данные RMP2. */ Uint16 RMP2:1; // 2 RMP for Mailbox 2 + /* Битовое поле RMP3, ширина 1 бит; данные RMP3. */ Uint16 RMP3:1; // 3 RMP for Mailbox 3 + /* Битовое поле RMP4, ширина 1 бит; данные RMP4. */ Uint16 RMP4:1; // 4 RMP for Mailbox 4 + /* Битовое поле RMP5, ширина 1 бит; данные RMP5. */ Uint16 RMP5:1; // 5 RMP for Mailbox 5 + /* Битовое поле RMP6, ширина 1 бит; данные RMP6. */ Uint16 RMP6:1; // 6 RMP for Mailbox 6 + /* Битовое поле RMP7, ширина 1 бит; данные RMP7. */ Uint16 RMP7:1; // 7 RMP for Mailbox 7 + /* Битовое поле RMP8, ширина 1 бит; данные RMP8. */ Uint16 RMP8:1; // 8 RMP for Mailbox 8 + /* Битовое поле RMP9, ширина 1 бит; данные RMP9. */ Uint16 RMP9:1; // 9 RMP for Mailbox 9 + /* Битовое поле RMP10, ширина 1 бит; данные RMP10. */ Uint16 RMP10:1; // 10 RMP for Mailbox 10 + /* Битовое поле RMP11, ширина 1 бит; данные RMP11. */ Uint16 RMP11:1; // 11 RMP for Mailbox 11 + /* Битовое поле RMP12, ширина 1 бит; данные RMP12. */ Uint16 RMP12:1; // 12 RMP for Mailbox 12 + /* Битовое поле RMP13, ширина 1 бит; данные RMP13. */ Uint16 RMP13:1; // 13 RMP for Mailbox 13 + /* Битовое поле RMP14, ширина 1 бит; данные RMP14. */ Uint16 RMP14:1; // 14 RMP for Mailbox 14 + /* Битовое поле RMP15, ширина 1 бит; данные RMP15. */ Uint16 RMP15:1; // 15 RMP for Mailbox 15 + /* Битовое поле RMP16, ширина 1 бит; данные RMP16. */ Uint16 RMP16:1; // 16 RMP for Mailbox 16 + /* Битовое поле RMP17, ширина 1 бит; данные RMP17. */ Uint16 RMP17:1; // 17 RMP for Mailbox 17 + /* Битовое поле RMP18, ширина 1 бит; данные RMP18. */ Uint16 RMP18:1; // 18 RMP for Mailbox 18 + /* Битовое поле RMP19, ширина 1 бит; данные RMP19. */ Uint16 RMP19:1; // 19 RMP for Mailbox 19 + /* Битовое поле RMP20, ширина 1 бит; данные RMP20. */ Uint16 RMP20:1; // 20 RMP for Mailbox 20 + /* Битовое поле RMP21, ширина 1 бит; данные RMP21. */ Uint16 RMP21:1; // 21 RMP for Mailbox 21 + /* Битовое поле RMP22, ширина 1 бит; данные RMP22. */ Uint16 RMP22:1; // 22 RMP for Mailbox 22 + /* Битовое поле RMP23, ширина 1 бит; данные RMP23. */ Uint16 RMP23:1; // 23 RMP for Mailbox 23 + /* Битовое поле RMP24, ширина 1 бит; данные RMP24. */ Uint16 RMP24:1; // 24 RMP for Mailbox 24 + /* Битовое поле RMP25, ширина 1 бит; данные RMP25. */ Uint16 RMP25:1; // 25 RMP for Mailbox 25 + /* Битовое поле RMP26, ширина 1 бит; данные RMP26. */ Uint16 RMP26:1; // 26 RMP for Mailbox 26 + /* Битовое поле RMP27, ширина 1 бит; данные RMP27. */ Uint16 RMP27:1; // 27 RMP for Mailbox 27 + /* Битовое поле RMP28, ширина 1 бит; данные RMP28. */ Uint16 RMP28:1; // 28 RMP for Mailbox 28 + /* Битовое поле RMP29, ширина 1 бит; данные RMP29. */ Uint16 RMP29:1; // 29 RMP for Mailbox 29 + /* Битовое поле RMP30, ширина 1 бит; данные RMP30. */ Uint16 RMP30:1; // 30 RMP for Mailbox 30 + /* Битовое поле RMP31, ширина 1 бит; данные RMP31. */ Uint16 RMP31:1; // 31 RMP for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANRMP_REG в одной области памяти. */ union CANRMP_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANRMP_BITS bit;; порядок полей определяет расположение данных. */ struct CANRMP_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Received Message Lost register (CANRML) bit definitions */ +/* Описывает структуру CANRML_BITS; порядок полей определяет расположение данных. */ struct CANRML_BITS { // bit description + /* Битовое поле RML0, ширина 1 бит; данные RML0. */ Uint16 RML0:1; // 0 RML for Mailbox 0 + /* Битовое поле RML1, ширина 1 бит; данные RML1. */ Uint16 RML1:1; // 1 RML for Mailbox 1 + /* Битовое поле RML2, ширина 1 бит; данные RML2. */ Uint16 RML2:1; // 2 RML for Mailbox 2 + /* Битовое поле RML3, ширина 1 бит; данные RML3. */ Uint16 RML3:1; // 3 RML for Mailbox 3 + /* Битовое поле RML4, ширина 1 бит; данные RML4. */ Uint16 RML4:1; // 4 RML for Mailbox 4 + /* Битовое поле RML5, ширина 1 бит; данные RML5. */ Uint16 RML5:1; // 5 RML for Mailbox 5 + /* Битовое поле RML6, ширина 1 бит; данные RML6. */ Uint16 RML6:1; // 6 RML for Mailbox 6 + /* Битовое поле RML7, ширина 1 бит; данные RML7. */ Uint16 RML7:1; // 7 RML for Mailbox 7 + /* Битовое поле RML8, ширина 1 бит; данные RML8. */ Uint16 RML8:1; // 8 RML for Mailbox 8 + /* Битовое поле RML9, ширина 1 бит; данные RML9. */ Uint16 RML9:1; // 9 RML for Mailbox 9 + /* Битовое поле RML10, ширина 1 бит; данные RML10. */ Uint16 RML10:1; // 10 RML for Mailbox 10 + /* Битовое поле RML11, ширина 1 бит; данные RML11. */ Uint16 RML11:1; // 11 RML for Mailbox 11 + /* Битовое поле RML12, ширина 1 бит; данные RML12. */ Uint16 RML12:1; // 12 RML for Mailbox 12 + /* Битовое поле RML13, ширина 1 бит; данные RML13. */ Uint16 RML13:1; // 13 RML for Mailbox 13 + /* Битовое поле RML14, ширина 1 бит; данные RML14. */ Uint16 RML14:1; // 14 RML for Mailbox 14 + /* Битовое поле RML15, ширина 1 бит; данные RML15. */ Uint16 RML15:1; // 15 RML for Mailbox 15 + /* Битовое поле RML16, ширина 1 бит; данные RML16. */ Uint16 RML16:1; // 16 RML for Mailbox 16 + /* Битовое поле RML17, ширина 1 бит; данные RML17. */ Uint16 RML17:1; // 17 RML for Mailbox 17 + /* Битовое поле RML18, ширина 1 бит; данные RML18. */ Uint16 RML18:1; // 18 RML for Mailbox 18 + /* Битовое поле RML19, ширина 1 бит; данные RML19. */ Uint16 RML19:1; // 19 RML for Mailbox 19 + /* Битовое поле RML20, ширина 1 бит; данные RML20. */ Uint16 RML20:1; // 20 RML for Mailbox 20 + /* Битовое поле RML21, ширина 1 бит; данные RML21. */ Uint16 RML21:1; // 21 RML for Mailbox 21 + /* Битовое поле RML22, ширина 1 бит; данные RML22. */ Uint16 RML22:1; // 22 RML for Mailbox 22 + /* Битовое поле RML23, ширина 1 бит; данные RML23. */ Uint16 RML23:1; // 23 RML for Mailbox 23 + /* Битовое поле RML24, ширина 1 бит; данные RML24. */ Uint16 RML24:1; // 24 RML for Mailbox 24 + /* Битовое поле RML25, ширина 1 бит; данные RML25. */ Uint16 RML25:1; // 25 RML for Mailbox 25 + /* Битовое поле RML26, ширина 1 бит; данные RML26. */ Uint16 RML26:1; // 26 RML for Mailbox 26 + /* Битовое поле RML27, ширина 1 бит; данные RML27. */ Uint16 RML27:1; // 27 RML for Mailbox 27 + /* Битовое поле RML28, ширина 1 бит; данные RML28. */ Uint16 RML28:1; // 28 RML for Mailbox 28 + /* Битовое поле RML29, ширина 1 бит; данные RML29. */ Uint16 RML29:1; // 29 RML for Mailbox 29 + /* Битовое поле RML30, ширина 1 бит; данные RML30. */ Uint16 RML30:1; // 30 RML for Mailbox 30 + /* Битовое поле RML31, ширина 1 бит; данные RML31. */ Uint16 RML31:1; // 31 RML for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANRML_REG в одной области памяти. */ union CANRML_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANRML_BITS bit;; порядок полей определяет расположение данных. */ struct CANRML_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Remote Frame Pending register (CANRFP) bit definitions */ +/* Описывает структуру CANRFP_BITS; порядок полей определяет расположение данных. */ struct CANRFP_BITS { // bit description + /* Битовое поле RFP0, ширина 1 бит; данные RFP0. */ Uint16 RFP0:1; // 0 RFP for Mailbox 0 + /* Битовое поле RFP1, ширина 1 бит; данные RFP1. */ Uint16 RFP1:1; // 1 RFP for Mailbox 1 + /* Битовое поле RFP2, ширина 1 бит; данные RFP2. */ Uint16 RFP2:1; // 2 RFP for Mailbox 2 + /* Битовое поле RFP3, ширина 1 бит; данные RFP3. */ Uint16 RFP3:1; // 3 RFP for Mailbox 3 + /* Битовое поле RFP4, ширина 1 бит; данные RFP4. */ Uint16 RFP4:1; // 4 RFP for Mailbox 4 + /* Битовое поле RFP5, ширина 1 бит; данные RFP5. */ Uint16 RFP5:1; // 5 RFP for Mailbox 5 + /* Битовое поле RFP6, ширина 1 бит; данные RFP6. */ Uint16 RFP6:1; // 6 RFP for Mailbox 6 + /* Битовое поле RFP7, ширина 1 бит; данные RFP7. */ Uint16 RFP7:1; // 7 RFP for Mailbox 7 + /* Битовое поле RFP8, ширина 1 бит; данные RFP8. */ Uint16 RFP8:1; // 8 RFP for Mailbox 8 + /* Битовое поле RFP9, ширина 1 бит; данные RFP9. */ Uint16 RFP9:1; // 9 RFP for Mailbox 9 + /* Битовое поле RFP10, ширина 1 бит; данные RFP10. */ Uint16 RFP10:1; // 10 RFP for Mailbox 10 + /* Битовое поле RFP11, ширина 1 бит; данные RFP11. */ Uint16 RFP11:1; // 11 RFP for Mailbox 11 + /* Битовое поле RFP12, ширина 1 бит; данные RFP12. */ Uint16 RFP12:1; // 12 RFP for Mailbox 12 + /* Битовое поле RFP13, ширина 1 бит; данные RFP13. */ Uint16 RFP13:1; // 13 RFP for Mailbox 13 + /* Битовое поле RFP14, ширина 1 бит; данные RFP14. */ Uint16 RFP14:1; // 14 RFP for Mailbox 14 + /* Битовое поле RFP15, ширина 1 бит; данные RFP15. */ Uint16 RFP15:1; // 15 RFP for Mailbox 15 + /* Битовое поле RFP16, ширина 1 бит; данные RFP16. */ Uint16 RFP16:1; // 16 RFP for Mailbox 16 + /* Битовое поле RFP17, ширина 1 бит; данные RFP17. */ Uint16 RFP17:1; // 17 RFP for Mailbox 17 + /* Битовое поле RFP18, ширина 1 бит; данные RFP18. */ Uint16 RFP18:1; // 18 RFP for Mailbox 18 + /* Битовое поле RFP19, ширина 1 бит; данные RFP19. */ Uint16 RFP19:1; // 19 RFP for Mailbox 19 + /* Битовое поле RFP20, ширина 1 бит; данные RFP20. */ Uint16 RFP20:1; // 20 RFP for Mailbox 20 + /* Битовое поле RFP21, ширина 1 бит; данные RFP21. */ Uint16 RFP21:1; // 21 RFP for Mailbox 21 + /* Битовое поле RFP22, ширина 1 бит; данные RFP22. */ Uint16 RFP22:1; // 22 RFP for Mailbox 22 + /* Битовое поле RFP23, ширина 1 бит; данные RFP23. */ Uint16 RFP23:1; // 23 RFP for Mailbox 23 + /* Битовое поле RFP24, ширина 1 бит; данные RFP24. */ Uint16 RFP24:1; // 24 RFP for Mailbox 24 + /* Битовое поле RFP25, ширина 1 бит; данные RFP25. */ Uint16 RFP25:1; // 25 RFP for Mailbox 25 + /* Битовое поле RFP26, ширина 1 бит; данные RFP26. */ Uint16 RFP26:1; // 26 RFP for Mailbox 26 + /* Битовое поле RFP27, ширина 1 бит; данные RFP27. */ Uint16 RFP27:1; // 27 RFP for Mailbox 27 + /* Битовое поле RFP28, ширина 1 бит; данные RFP28. */ Uint16 RFP28:1; // 28 RFP for Mailbox 28 + /* Битовое поле RFP29, ширина 1 бит; данные RFP29. */ Uint16 RFP29:1; // 29 RFP for Mailbox 29 + /* Битовое поле RFP30, ширина 1 бит; данные RFP30. */ Uint16 RFP30:1; // 30 RFP for Mailbox 30 + /* Битовое поле RFP31, ширина 1 бит; данные RFP31. */ Uint16 RFP31:1; // 31 RFP for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANRFP_REG в одной области памяти. */ union CANRFP_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANRFP_BITS bit;; порядок полей определяет расположение данных. */ struct CANRFP_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Global Acceptance Mask register (CANGAM) bit definitions */ +/* Описывает структуру CANGAM_BITS; порядок полей определяет расположение данных. */ struct CANGAM_BITS { // bits description + /* Битовое поле GAM150, ширина 16 бит; данные GAM150. */ Uint16 GAM150:16; // 15:0 Global acceptance mask bits 0-15 + /* Битовое поле GAM2816, ширина 13 бит; данные GAM2816. */ Uint16 GAM2816:13; // 28:16 Global acceptance mask bits 16-28 + /* Битовое поле rsvd, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:2; // 30:29 reserved + /* Битовое поле AMI, ширина 1 бит; данные AMI. */ Uint16 AMI:1; // 31 AMI bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANGAM_REG в одной области памяти. */ union CANGAM_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANGAM_BITS bit;; порядок полей определяет расположение данных. */ struct CANGAM_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Master Control register (CANMC) bit definitions */ +/* Описывает структуру CANMC_BITS; порядок полей определяет расположение данных. */ struct CANMC_BITS { // bits description + /* Битовое поле MBNR, ширина 5 бит; данные MBNR. */ Uint16 MBNR:5; // 4:0 MBX # for CDR bit + /* Битовое поле SRES, ширина 1 бит; данные SRES. */ Uint16 SRES:1; // 5 Soft reset + /* Битовое поле STM, ширина 1 бит; данные STM. */ Uint16 STM:1; // 6 Self-test mode + /* Битовое поле ABO, ширина 1 бит; данные ABO. */ Uint16 ABO:1; // 7 Auto bus-on + /* Битовое поле CDR, ширина 1 бит; данные CDR. */ Uint16 CDR:1; // 8 Change data request + /* Битовое поле WUBA, ширина 1 бит; данные WUBA. */ Uint16 WUBA:1; // 9 Wake-up on bus activity + /* Битовое поле DBO, ширина 1 бит; данные DBO. */ Uint16 DBO:1; // 10 Data-byte order + /* Битовое поле PDR, ширина 1 бит; данные PDR. */ Uint16 PDR:1; // 11 Power-down mode request + /* Битовое поле CCR, ширина 1 бит; данные CCR. */ Uint16 CCR:1; // 12 Change configuration request + /* Битовое поле SCB, ширина 1 бит; данные SCB. */ Uint16 SCB:1; // 13 SCC compatibility bit + /* Битовое поле TCC, ширина 1 бит; данные TCC. */ Uint16 TCC:1; // 14 TSC MSB clear bit + /* Битовое поле MBCC, ширина 1 бит; данные MBCC. */ Uint16 MBCC:1; // 15 TSC clear bit thru mailbox 16 + /* Битовое поле SUSP, ширина 1 бит; данные SUSP. */ Uint16 SUSP:1; // 16 SUSPEND free/soft bit + /* Битовое поле rsvd, ширина 15 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:15; // 31:17 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANMC_REG в одной области памяти. */ union CANMC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANMC_BITS bit;; порядок полей определяет расположение данных. */ struct CANMC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Bit -timing configuration register (CANBTC) bit definitions */ +/* Описывает структуру CANBTC_BITS; порядок полей определяет расположение данных. */ struct CANBTC_BITS { // bits description + /* Битовое поле TSEG2REG, ширина 3 бит; данные TSEG2REG. */ Uint16 TSEG2REG:3; // 2:0 TSEG2 register value + /* Битовое поле TSEG1REG, ширина 4 бит; данные TSEG1REG. */ Uint16 TSEG1REG:4; // 6:3 TSEG1 register value + /* Битовое поле SAM, ширина 1 бит; данные SAM. */ Uint16 SAM:1; // 7 Sample-point setting + /* Битовое поле SJWREG, ширина 2 бит; данные SJWREG. */ Uint16 SJWREG:2; // 9:8 Synchroniztion Jump Width register value + /* Битовое поле rsvd1, ширина 6 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:6; // 15:10 reserved + /* Битовое поле BRPREG, ширина 8 бит; данные BRPREG. */ Uint16 BRPREG:8; // 23:16 Baudrate prescaler register value + /* Битовое поле rsvd2, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:8; // 31:24 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANBTC_REG в одной области памяти. */ union CANBTC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANBTC_BITS bit;; порядок полей определяет расположение данных. */ struct CANBTC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Error & Status register (CANES) bit definitions */ +/* Описывает структуру CANES_BITS; порядок полей определяет расположение данных. */ struct CANES_BITS { // bits description + /* Битовое поле TM, ширина 1 бит; данные TM. */ Uint16 TM:1; // 0 Transmit Mode + /* Битовое поле RM, ширина 1 бит; данные RM. */ Uint16 RM:1; // 1 Receive Mode + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 2 reserved + /* Битовое поле PDA, ширина 1 бит; данные PDA. */ Uint16 PDA:1; // 3 Power-down acknowledge + /* Битовое поле CCE, ширина 1 бит; данные CCE. */ Uint16 CCE:1; // 4 Change Configuration Enable + /* Битовое поле SMA, ширина 1 бит; данные SMA. */ Uint16 SMA:1; // 5 Suspend Mode Acknowledge + /* Битовое поле rsvd2, ширина 10 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:10; // 15:6 reserved + /* Битовое поле EW, ширина 1 бит; данные EW. */ Uint16 EW:1; // 16 Warning status + /* Битовое поле EP, ширина 1 бит; данные EP. */ Uint16 EP:1; // 17 Error Passive status + /* Битовое поле BO, ширина 1 бит; данные BO. */ Uint16 BO:1; // 18 Bus-off status + /* Битовое поле ACKE, ширина 1 бит; данные ACKE. */ Uint16 ACKE:1; // 19 Acknowledge error + /* Битовое поле SE, ширина 1 бит; данные SE. */ Uint16 SE:1; // 20 Stuff error + /* Битовое поле CRCE, ширина 1 бит; данные CRCE. */ Uint16 CRCE:1; // 21 CRC error + /* Битовое поле SA1, ширина 1 бит; данные SA1. */ Uint16 SA1:1; // 22 Stuck at Dominant error + /* Битовое поле BE, ширина 1 бит; данные BE. */ Uint16 BE:1; // 23 Bit error + /* Битовое поле FE, ширина 1 бит; данные FE. */ Uint16 FE:1; // 24 Framing error + /* Битовое поле rsvd3, ширина 7 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:7; // 31:25 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANES_REG в одной области памяти. */ union CANES_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANES_BITS bit;; порядок полей определяет расположение данных. */ struct CANES_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Transmit Error Counter register (CANTEC) bit definitions */ +/* Описывает структуру CANTEC_BITS; порядок полей определяет расположение данных. */ struct CANTEC_BITS { // bits description + /* Битовое поле TEC, ширина 8 бит; данные TEC. */ Uint16 TEC:8; // 7:0 TEC + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 15:8 reserved + /* Битовое поле rsvd2, ширина 16 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:16; // 31:16 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANTEC_REG в одной области памяти. */ union CANTEC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANTEC_BITS bit;; порядок полей определяет расположение данных. */ struct CANTEC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Receive Error Counter register (CANREC) bit definitions */ +/* Описывает структуру CANREC_BITS; порядок полей определяет расположение данных. */ struct CANREC_BITS { // bits description + /* Битовое поле REC, ширина 8 бит; данные REC. */ Uint16 REC:8; // 7:0 REC + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 15:8 reserved + /* Битовое поле rsvd2, ширина 16 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:16; // 31:16 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANREC_REG в одной области памяти. */ union CANREC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANREC_BITS bit;; порядок полей определяет расположение данных. */ struct CANREC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Global Interrupt Flag 0 (CANGIF0) bit definitions */ +/* Описывает структуру CANGIF0_BITS; порядок полей определяет расположение данных. */ struct CANGIF0_BITS { // bits description + /* Битовое поле MIV0, ширина 5 бит; данные MIV0. */ Uint16 MIV0:5; // 4:0 Mailbox Interrupt Vector + /* Битовое поле rsvd1, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:3; // 7:5 reserved + /* Битовое поле WLIF0, ширина 1 бит; данные WLIF0. */ Uint16 WLIF0:1; // 8 Warning level interrupt flag + /* Битовое поле EPIF0, ширина 1 бит; данные EPIF0. */ Uint16 EPIF0:1; // 9 Error-passive interrupt flag + /* Битовое поле BOIF0, ширина 1 бит; данные BOIF0. */ Uint16 BOIF0:1; // 10 Bus-off interrupt flag + /* Битовое поле RMLIF0, ширина 1 бит; данные RMLIF0. */ Uint16 RMLIF0:1; // 11 Received message lost interrupt flag + /* Битовое поле WUIF0, ширина 1 бит; данные WUIF0. */ Uint16 WUIF0:1; // 12 Wakeup interrupt flag + /* Битовое поле WDIF0, ширина 1 бит; данные WDIF0. */ Uint16 WDIF0:1; // 13 Write denied interrupt flag + /* Битовое поле AAIF0, ширина 1 бит; данные AAIF0. */ Uint16 AAIF0:1; // 14 Abort Ack interrupt flag + /* Битовое поле GMIF0, ширина 1 бит; данные GMIF0. */ Uint16 GMIF0:1; // 15 Global MBX interrupt flag + /* Битовое поле TCOF0, ширина 1 бит; данные TCOF0. */ Uint16 TCOF0:1; // 16 TSC Overflow flag + /* Битовое поле MTOF0, ширина 1 бит; данные MTOF0. */ Uint16 MTOF0:1; // 17 Mailbox Timeout flag + /* Битовое поле rsvd2, ширина 14 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:14; // 31:18 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANGIF0_REG в одной области памяти. */ union CANGIF0_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANGIF0_BITS bit;; порядок полей определяет расположение данных. */ struct CANGIF0_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Global Interrupt Mask register (CANGIM) bit definitions */ +/* Описывает структуру CANGIM_BITS; порядок полей определяет расположение данных. */ struct CANGIM_BITS { // bits description + /* Битовое поле I0EN, ширина 1 бит; данные I0EN. */ Uint16 I0EN:1; // 0 Interrupt 0 enable + /* Битовое поле I1EN, ширина 1 бит; данные I1EN. */ Uint16 I1EN:1; // 1 Interrupt 1 enable + /* Битовое поле GIL, ширина 1 бит; данные GIL. */ Uint16 GIL:1; // 2 Global Interrupt Level + /* Битовое поле rsvd1, ширина 5 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:5; // 7:3 reserved + /* Битовое поле WLIM, ширина 1 бит; данные WLIM. */ Uint16 WLIM:1; // 8 Warning level interrupt mask + /* Битовое поле EPIM, ширина 1 бит; данные EPIM. */ Uint16 EPIM:1; // 9 Error-passive interrupt mask + /* Битовое поле BOIM, ширина 1 бит; данные BOIM. */ Uint16 BOIM:1; // 10 Bus-off interrupt mask + /* Битовое поле RMLIM, ширина 1 бит; данные RMLIM. */ Uint16 RMLIM:1; // 11 Received message lost interrupt mask + /* Битовое поле WUIM, ширина 1 бит; данные WUIM. */ Uint16 WUIM:1; // 12 Wakeup interrupt mask + /* Битовое поле WDIM, ширина 1 бит; данные WDIM. */ Uint16 WDIM:1; // 13 Write denied interrupt mask + /* Битовое поле AAIM, ширина 1 бит; данные AAIM. */ Uint16 AAIM:1; // 14 Abort Ack interrupt mask + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 15 reserved + /* Битовое поле TCOM, ширина 1 бит; данные TCOM. */ Uint16 TCOM:1; // 16 TSC overflow interrupt mask + /* Битовое поле MTOM, ширина 1 бит; данные MTOM. */ Uint16 MTOM:1; // 17 MBX Timeout interrupt mask + /* Битовое поле rsvd3, ширина 14 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:14; // 31:18 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANGIM_REG в одной области памяти. */ union CANGIM_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANGIM_BITS bit;; порядок полей определяет расположение данных. */ struct CANGIM_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Global Interrupt Flag 1 (eCANGIF1) bit definitions */ +/* Описывает структуру CANGIF1_BITS; порядок полей определяет расположение данных. */ struct CANGIF1_BITS { // bits description + /* Битовое поле MIV1, ширина 5 бит; данные MIV1. */ Uint16 MIV1:5; // 4:0 Mailbox Interrupt Vector + /* Битовое поле rsvd1, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:3; // 7:5 reserved + /* Битовое поле WLIF1, ширина 1 бит; данные WLIF1. */ Uint16 WLIF1:1; // 8 Warning level interrupt flag + /* Битовое поле EPIF1, ширина 1 бит; данные EPIF1. */ Uint16 EPIF1:1; // 9 Error-passive interrupt flag + /* Битовое поле BOIF1, ширина 1 бит; данные BOIF1. */ Uint16 BOIF1:1; // 10 Bus-off interrupt flag + /* Битовое поле RMLIF1, ширина 1 бит; данные RMLIF1. */ Uint16 RMLIF1:1; // 11 Received message lost interrupt flag + /* Битовое поле WUIF1, ширина 1 бит; данные WUIF1. */ Uint16 WUIF1:1; // 12 Wakeup interrupt flag + /* Битовое поле WDIF1, ширина 1 бит; данные WDIF1. */ Uint16 WDIF1:1; // 13 Write denied interrupt flag + /* Битовое поле AAIF1, ширина 1 бит; данные AAIF1. */ Uint16 AAIF1:1; // 14 Abort Ack interrupt flag + /* Битовое поле GMIF1, ширина 1 бит; данные GMIF1. */ Uint16 GMIF1:1; // 15 Global MBX interrupt flag + /* Битовое поле TCOF1, ширина 1 бит; данные TCOF1. */ Uint16 TCOF1:1; // 16 TSC Overflow flag + /* Битовое поле MTOF1, ширина 1 бит; данные MTOF1. */ Uint16 MTOF1:1; // 17 Mailbox Timeout flag + /* Битовое поле rsvd2, ширина 14 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:14; // 31:18 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANGIF1_REG в одной области памяти. */ union CANGIF1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANGIF1_BITS bit;; порядок полей определяет расположение данных. */ struct CANGIF1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Mailbox Interrupt Mask register (CANMIM) bit definitions */ +/* Описывает структуру CANMIM_BITS; порядок полей определяет расположение данных. */ struct CANMIM_BITS { // bit description + /* Битовое поле MIM0, ширина 1 бит; данные MIM0. */ Uint16 MIM0:1; // 0 MIM for Mailbox 0 + /* Битовое поле MIM1, ширина 1 бит; данные MIM1. */ Uint16 MIM1:1; // 1 MIM for Mailbox 1 + /* Битовое поле MIM2, ширина 1 бит; данные MIM2. */ Uint16 MIM2:1; // 2 MIM for Mailbox 2 + /* Битовое поле MIM3, ширина 1 бит; данные MIM3. */ Uint16 MIM3:1; // 3 MIM for Mailbox 3 + /* Битовое поле MIM4, ширина 1 бит; данные MIM4. */ Uint16 MIM4:1; // 4 MIM for Mailbox 4 + /* Битовое поле MIM5, ширина 1 бит; данные MIM5. */ Uint16 MIM5:1; // 5 MIM for Mailbox 5 + /* Битовое поле MIM6, ширина 1 бит; данные MIM6. */ Uint16 MIM6:1; // 6 MIM for Mailbox 6 + /* Битовое поле MIM7, ширина 1 бит; данные MIM7. */ Uint16 MIM7:1; // 7 MIM for Mailbox 7 + /* Битовое поле MIM8, ширина 1 бит; данные MIM8. */ Uint16 MIM8:1; // 8 MIM for Mailbox 8 + /* Битовое поле MIM9, ширина 1 бит; данные MIM9. */ Uint16 MIM9:1; // 9 MIM for Mailbox 9 + /* Битовое поле MIM10, ширина 1 бит; данные MIM10. */ Uint16 MIM10:1; // 10 MIM for Mailbox 10 + /* Битовое поле MIM11, ширина 1 бит; данные MIM11. */ Uint16 MIM11:1; // 11 MIM for Mailbox 11 + /* Битовое поле MIM12, ширина 1 бит; данные MIM12. */ Uint16 MIM12:1; // 12 MIM for Mailbox 12 + /* Битовое поле MIM13, ширина 1 бит; данные MIM13. */ Uint16 MIM13:1; // 13 MIM for Mailbox 13 + /* Битовое поле MIM14, ширина 1 бит; данные MIM14. */ Uint16 MIM14:1; // 14 MIM for Mailbox 14 + /* Битовое поле MIM15, ширина 1 бит; данные MIM15. */ Uint16 MIM15:1; // 15 MIM for Mailbox 15 + /* Битовое поле MIM16, ширина 1 бит; данные MIM16. */ Uint16 MIM16:1; // 16 MIM for Mailbox 16 + /* Битовое поле MIM17, ширина 1 бит; данные MIM17. */ Uint16 MIM17:1; // 17 MIM for Mailbox 17 + /* Битовое поле MIM18, ширина 1 бит; данные MIM18. */ Uint16 MIM18:1; // 18 MIM for Mailbox 18 + /* Битовое поле MIM19, ширина 1 бит; данные MIM19. */ Uint16 MIM19:1; // 19 MIM for Mailbox 19 + /* Битовое поле MIM20, ширина 1 бит; данные MIM20. */ Uint16 MIM20:1; // 20 MIM for Mailbox 20 + /* Битовое поле MIM21, ширина 1 бит; данные MIM21. */ Uint16 MIM21:1; // 21 MIM for Mailbox 21 + /* Битовое поле MIM22, ширина 1 бит; данные MIM22. */ Uint16 MIM22:1; // 22 MIM for Mailbox 22 + /* Битовое поле MIM23, ширина 1 бит; данные MIM23. */ Uint16 MIM23:1; // 23 MIM for Mailbox 23 + /* Битовое поле MIM24, ширина 1 бит; данные MIM24. */ Uint16 MIM24:1; // 24 MIM for Mailbox 24 + /* Битовое поле MIM25, ширина 1 бит; данные MIM25. */ Uint16 MIM25:1; // 25 MIM for Mailbox 25 + /* Битовое поле MIM26, ширина 1 бит; данные MIM26. */ Uint16 MIM26:1; // 26 MIM for Mailbox 26 + /* Битовое поле MIM27, ширина 1 бит; данные MIM27. */ Uint16 MIM27:1; // 27 MIM for Mailbox 27 + /* Битовое поле MIM28, ширина 1 бит; данные MIM28. */ Uint16 MIM28:1; // 28 MIM for Mailbox 28 + /* Битовое поле MIM29, ширина 1 бит; данные MIM29. */ Uint16 MIM29:1; // 29 MIM for Mailbox 29 + /* Битовое поле MIM30, ширина 1 бит; данные MIM30. */ Uint16 MIM30:1; // 30 MIM for Mailbox 30 + /* Битовое поле MIM31, ширина 1 бит; данные MIM31. */ Uint16 MIM31:1; // 31 MIM for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANMIM_REG в одной области памяти. */ union CANMIM_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANMIM_BITS bit;; порядок полей определяет расположение данных. */ struct CANMIM_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Mailbox Interrupt Level register (CANMIL) bit definitions */ +/* Описывает структуру CANMIL_BITS; порядок полей определяет расположение данных. */ struct CANMIL_BITS { // bit description + /* Битовое поле MIL0, ширина 1 бит; данные MIL0. */ Uint16 MIL0:1; // 0 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL1, ширина 1 бит; данные MIL1. */ Uint16 MIL1:1; // 1 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL2, ширина 1 бит; данные MIL2. */ Uint16 MIL2:1; // 2 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL3, ширина 1 бит; данные MIL3. */ Uint16 MIL3:1; // 3 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL4, ширина 1 бит; данные MIL4. */ Uint16 MIL4:1; // 4 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL5, ширина 1 бит; данные MIL5. */ Uint16 MIL5:1; // 5 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL6, ширина 1 бит; данные MIL6. */ Uint16 MIL6:1; // 6 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL7, ширина 1 бит; данные MIL7. */ Uint16 MIL7:1; // 7 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL8, ширина 1 бит; данные MIL8. */ Uint16 MIL8:1; // 8 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL9, ширина 1 бит; данные MIL9. */ Uint16 MIL9:1; // 9 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL10, ширина 1 бит; данные MIL10. */ Uint16 MIL10:1; // 10 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL11, ширина 1 бит; данные MIL11. */ Uint16 MIL11:1; // 11 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL12, ширина 1 бит; данные MIL12. */ Uint16 MIL12:1; // 12 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL13, ширина 1 бит; данные MIL13. */ Uint16 MIL13:1; // 13 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL14, ширина 1 бит; данные MIL14. */ Uint16 MIL14:1; // 14 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL15, ширина 1 бит; данные MIL15. */ Uint16 MIL15:1; // 15 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL16, ширина 1 бит; данные MIL16. */ Uint16 MIL16:1; // 16 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL17, ширина 1 бит; данные MIL17. */ Uint16 MIL17:1; // 17 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL18, ширина 1 бит; данные MIL18. */ Uint16 MIL18:1; // 18 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL19, ширина 1 бит; данные MIL19. */ Uint16 MIL19:1; // 19 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL20, ширина 1 бит; данные MIL20. */ Uint16 MIL20:1; // 20 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL21, ширина 1 бит; данные MIL21. */ Uint16 MIL21:1; // 21 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL22, ширина 1 бит; данные MIL22. */ Uint16 MIL22:1; // 22 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL23, ширина 1 бит; данные MIL23. */ Uint16 MIL23:1; // 23 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL24, ширина 1 бит; данные MIL24. */ Uint16 MIL24:1; // 24 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL25, ширина 1 бит; данные MIL25. */ Uint16 MIL25:1; // 25 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL26, ширина 1 бит; данные MIL26. */ Uint16 MIL26:1; // 26 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL27, ширина 1 бит; данные MIL27. */ Uint16 MIL27:1; // 27 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL28, ширина 1 бит; данные MIL28. */ Uint16 MIL28:1; // 28 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL29, ширина 1 бит; данные MIL29. */ Uint16 MIL29:1; // 29 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL30, ширина 1 бит; данные MIL30. */ Uint16 MIL30:1; // 30 0 -> Int 9.5 1 -> Int 9.6 + /* Битовое поле MIL31, ширина 1 бит; данные MIL31. */ Uint16 MIL31:1; // 31 0 -> Int 9.5 1 -> Int 9.6 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANMIL_REG в одной области памяти. */ union CANMIL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANMIL_BITS bit;; порядок полей определяет расположение данных. */ struct CANMIL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Overwrite Protection Control register (CANOPC) bit definitions */ +/* Описывает структуру CANOPC_BITS; порядок полей определяет расположение данных. */ struct CANOPC_BITS { // bit description + /* Битовое поле OPC0, ширина 1 бит; данные OPC0. */ Uint16 OPC0:1; // 0 OPC for Mailbox 0 + /* Битовое поле OPC1, ширина 1 бит; данные OPC1. */ Uint16 OPC1:1; // 1 OPC for Mailbox 1 + /* Битовое поле OPC2, ширина 1 бит; данные OPC2. */ Uint16 OPC2:1; // 2 OPC for Mailbox 2 + /* Битовое поле OPC3, ширина 1 бит; данные OPC3. */ Uint16 OPC3:1; // 3 OPC for Mailbox 3 + /* Битовое поле OPC4, ширина 1 бит; данные OPC4. */ Uint16 OPC4:1; // 4 OPC for Mailbox 4 + /* Битовое поле OPC5, ширина 1 бит; данные OPC5. */ Uint16 OPC5:1; // 5 OPC for Mailbox 5 + /* Битовое поле OPC6, ширина 1 бит; данные OPC6. */ Uint16 OPC6:1; // 6 OPC for Mailbox 6 + /* Битовое поле OPC7, ширина 1 бит; данные OPC7. */ Uint16 OPC7:1; // 7 OPC for Mailbox 7 + /* Битовое поле OPC8, ширина 1 бит; данные OPC8. */ Uint16 OPC8:1; // 8 OPC for Mailbox 8 + /* Битовое поле OPC9, ширина 1 бит; данные OPC9. */ Uint16 OPC9:1; // 9 OPC for Mailbox 9 + /* Битовое поле OPC10, ширина 1 бит; данные OPC10. */ Uint16 OPC10:1; // 10 OPC for Mailbox 10 + /* Битовое поле OPC11, ширина 1 бит; данные OPC11. */ Uint16 OPC11:1; // 11 OPC for Mailbox 11 + /* Битовое поле OPC12, ширина 1 бит; данные OPC12. */ Uint16 OPC12:1; // 12 OPC for Mailbox 12 + /* Битовое поле OPC13, ширина 1 бит; данные OPC13. */ Uint16 OPC13:1; // 13 OPC for Mailbox 13 + /* Битовое поле OPC14, ширина 1 бит; данные OPC14. */ Uint16 OPC14:1; // 14 OPC for Mailbox 14 + /* Битовое поле OPC15, ширина 1 бит; данные OPC15. */ Uint16 OPC15:1; // 15 OPC for Mailbox 15 + /* Битовое поле OPC16, ширина 1 бит; данные OPC16. */ Uint16 OPC16:1; // 16 OPC for Mailbox 16 + /* Битовое поле OPC17, ширина 1 бит; данные OPC17. */ Uint16 OPC17:1; // 17 OPC for Mailbox 17 + /* Битовое поле OPC18, ширина 1 бит; данные OPC18. */ Uint16 OPC18:1; // 18 OPC for Mailbox 18 + /* Битовое поле OPC19, ширина 1 бит; данные OPC19. */ Uint16 OPC19:1; // 19 OPC for Mailbox 19 + /* Битовое поле OPC20, ширина 1 бит; данные OPC20. */ Uint16 OPC20:1; // 20 OPC for Mailbox 20 + /* Битовое поле OPC21, ширина 1 бит; данные OPC21. */ Uint16 OPC21:1; // 21 OPC for Mailbox 21 + /* Битовое поле OPC22, ширина 1 бит; данные OPC22. */ Uint16 OPC22:1; // 22 OPC for Mailbox 22 + /* Битовое поле OPC23, ширина 1 бит; данные OPC23. */ Uint16 OPC23:1; // 23 OPC for Mailbox 23 + /* Битовое поле OPC24, ширина 1 бит; данные OPC24. */ Uint16 OPC24:1; // 24 OPC for Mailbox 24 + /* Битовое поле OPC25, ширина 1 бит; данные OPC25. */ Uint16 OPC25:1; // 25 OPC for Mailbox 25 + /* Битовое поле OPC26, ширина 1 бит; данные OPC26. */ Uint16 OPC26:1; // 26 OPC for Mailbox 26 + /* Битовое поле OPC27, ширина 1 бит; данные OPC27. */ Uint16 OPC27:1; // 27 OPC for Mailbox 27 + /* Битовое поле OPC28, ширина 1 бит; данные OPC28. */ Uint16 OPC28:1; // 28 OPC for Mailbox 28 + /* Битовое поле OPC29, ширина 1 бит; данные OPC29. */ Uint16 OPC29:1; // 29 OPC for Mailbox 29 + /* Битовое поле OPC30, ширина 1 бит; данные OPC30. */ Uint16 OPC30:1; // 30 OPC for Mailbox 30 + /* Битовое поле OPC31, ширина 1 бит; данные OPC31. */ Uint16 OPC31:1; // 31 OPC for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANOPC_REG в одной области памяти. */ union CANOPC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANOPC_BITS bit;; порядок полей определяет расположение данных. */ struct CANOPC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN TX I/O Control Register (CANTIOC) bit definitions */ +/* Описывает структуру CANTIOC_BITS; порядок полей определяет расположение данных. */ struct CANTIOC_BITS { // bits description + /* Битовое поле rsvd1, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:3; // 2:0 reserved + /* Битовое поле TXFUNC, ширина 1 бит; данные TXFUNC. */ Uint16 TXFUNC:1; // 3 TXFUNC + /* Битовое поле rsvd2, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:12; // 15:4 reserved + /* Битовое поле rsvd3, ширина 16 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:16; // 31:16 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANTIOC_REG в одной области памяти. */ union CANTIOC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANTIOC_BITS bit;; порядок полей определяет расположение данных. */ struct CANTIOC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN RX I/O Control Register (CANRIOC) bit definitions */ +/* Описывает структуру CANRIOC_BITS; порядок полей определяет расположение данных. */ struct CANRIOC_BITS { // bits description + /* Битовое поле rsvd1, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:3; // 2:0 reserved + /* Битовое поле RXFUNC, ширина 1 бит; данные RXFUNC. */ Uint16 RXFUNC:1; // 3 RXFUNC + /* Битовое поле rsvd2, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:12; // 15:4 reserved + /* Битовое поле rsvd3, ширина 16 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:16; // 31:16 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANRIOC_REG в одной области памяти. */ union CANRIOC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANRIOC_BITS bit;; порядок полей определяет расположение данных. */ struct CANRIOC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Time-out Control register (CANTOC) bit definitions */ +/* Описывает структуру CANTOC_BITS; порядок полей определяет расположение данных. */ struct CANTOC_BITS { // bit description + /* Битовое поле TOC0, ширина 1 бит; данные TOC0. */ Uint16 TOC0:1; // 0 TOC for Mailbox 0 + /* Битовое поле TOC1, ширина 1 бит; данные TOC1. */ Uint16 TOC1:1; // 1 TOC for Mailbox 1 + /* Битовое поле TOC2, ширина 1 бит; данные TOC2. */ Uint16 TOC2:1; // 2 TOC for Mailbox 2 + /* Битовое поле TOC3, ширина 1 бит; данные TOC3. */ Uint16 TOC3:1; // 3 TOC for Mailbox 3 + /* Битовое поле TOC4, ширина 1 бит; данные TOC4. */ Uint16 TOC4:1; // 4 TOC for Mailbox 4 + /* Битовое поле TOC5, ширина 1 бит; данные TOC5. */ Uint16 TOC5:1; // 5 TOC for Mailbox 5 + /* Битовое поле TOC6, ширина 1 бит; данные TOC6. */ Uint16 TOC6:1; // 6 TOC for Mailbox 6 + /* Битовое поле TOC7, ширина 1 бит; данные TOC7. */ Uint16 TOC7:1; // 7 TOC for Mailbox 7 + /* Битовое поле TOC8, ширина 1 бит; данные TOC8. */ Uint16 TOC8:1; // 8 TOC for Mailbox 8 + /* Битовое поле TOC9, ширина 1 бит; данные TOC9. */ Uint16 TOC9:1; // 9 TOC for Mailbox 9 + /* Битовое поле TOC10, ширина 1 бит; данные TOC10. */ Uint16 TOC10:1; // 10 TOC for Mailbox 10 + /* Битовое поле TOC11, ширина 1 бит; данные TOC11. */ Uint16 TOC11:1; // 11 TOC for Mailbox 11 + /* Битовое поле TOC12, ширина 1 бит; данные TOC12. */ Uint16 TOC12:1; // 12 TOC for Mailbox 12 + /* Битовое поле TOC13, ширина 1 бит; данные TOC13. */ Uint16 TOC13:1; // 13 TOC for Mailbox 13 + /* Битовое поле TOC14, ширина 1 бит; данные TOC14. */ Uint16 TOC14:1; // 14 TOC for Mailbox 14 + /* Битовое поле TOC15, ширина 1 бит; данные TOC15. */ Uint16 TOC15:1; // 15 TOC for Mailbox 15 + /* Битовое поле TOC16, ширина 1 бит; данные TOC16. */ Uint16 TOC16:1; // 16 TOC for Mailbox 16 + /* Битовое поле TOC17, ширина 1 бит; данные TOC17. */ Uint16 TOC17:1; // 17 TOC for Mailbox 17 + /* Битовое поле TOC18, ширина 1 бит; данные TOC18. */ Uint16 TOC18:1; // 18 TOC for Mailbox 18 + /* Битовое поле TOC19, ширина 1 бит; данные TOC19. */ Uint16 TOC19:1; // 19 TOC for Mailbox 19 + /* Битовое поле TOC20, ширина 1 бит; данные TOC20. */ Uint16 TOC20:1; // 20 TOC for Mailbox 20 + /* Битовое поле TOC21, ширина 1 бит; данные TOC21. */ Uint16 TOC21:1; // 21 TOC for Mailbox 21 + /* Битовое поле TOC22, ширина 1 бит; данные TOC22. */ Uint16 TOC22:1; // 22 TOC for Mailbox 22 + /* Битовое поле TOC23, ширина 1 бит; данные TOC23. */ Uint16 TOC23:1; // 23 TOC for Mailbox 23 + /* Битовое поле TOC24, ширина 1 бит; данные TOC24. */ Uint16 TOC24:1; // 24 TOC for Mailbox 24 + /* Битовое поле TOC25, ширина 1 бит; данные TOC25. */ Uint16 TOC25:1; // 25 TOC for Mailbox 25 + /* Битовое поле TOC26, ширина 1 бит; данные TOC26. */ Uint16 TOC26:1; // 26 TOC for Mailbox 26 + /* Битовое поле TOC27, ширина 1 бит; данные TOC27. */ Uint16 TOC27:1; // 27 TOC for Mailbox 27 + /* Битовое поле TOC28, ширина 1 бит; данные TOC28. */ Uint16 TOC28:1; // 28 TOC for Mailbox 28 + /* Битовое поле TOC29, ширина 1 бит; данные TOC29. */ Uint16 TOC29:1; // 29 TOC for Mailbox 29 + /* Битовое поле TOC30, ширина 1 бит; данные TOC30. */ Uint16 TOC30:1; // 30 TOC for Mailbox 30 + /* Битовое поле TOC31, ширина 1 бит; данные TOC31. */ Uint16 TOC31:1; // 31 TOC for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANTOC_REG в одной области памяти. */ union CANTOC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANTOC_BITS bit;; порядок полей определяет расположение данных. */ struct CANTOC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Time-out Status register (CANTOS) bit definitions */ +/* Описывает структуру CANTOS_BITS; порядок полей определяет расположение данных. */ struct CANTOS_BITS { // bit description + /* Битовое поле TOS0, ширина 1 бит; данные TOS0. */ Uint16 TOS0:1; // 0 TOS for Mailbox 0 + /* Битовое поле TOS1, ширина 1 бит; данные TOS1. */ Uint16 TOS1:1; // 1 TOS for Mailbox 1 + /* Битовое поле TOS2, ширина 1 бит; данные TOS2. */ Uint16 TOS2:1; // 2 TOS for Mailbox 2 + /* Битовое поле TOS3, ширина 1 бит; данные TOS3. */ Uint16 TOS3:1; // 3 TOS for Mailbox 3 + /* Битовое поле TOS4, ширина 1 бит; данные TOS4. */ Uint16 TOS4:1; // 4 TOS for Mailbox 4 + /* Битовое поле TOS5, ширина 1 бит; данные TOS5. */ Uint16 TOS5:1; // 5 TOS for Mailbox 5 + /* Битовое поле TOS6, ширина 1 бит; данные TOS6. */ Uint16 TOS6:1; // 6 TOS for Mailbox 6 + /* Битовое поле TOS7, ширина 1 бит; данные TOS7. */ Uint16 TOS7:1; // 7 TOS for Mailbox 7 + /* Битовое поле TOS8, ширина 1 бит; данные TOS8. */ Uint16 TOS8:1; // 8 TOS for Mailbox 8 + /* Битовое поле TOS9, ширина 1 бит; данные TOS9. */ Uint16 TOS9:1; // 9 TOS for Mailbox 9 + /* Битовое поле TOS10, ширина 1 бит; данные TOS10. */ Uint16 TOS10:1; // 10 TOS for Mailbox 10 + /* Битовое поле TOS11, ширина 1 бит; данные TOS11. */ Uint16 TOS11:1; // 11 TOS for Mailbox 11 + /* Битовое поле TOS12, ширина 1 бит; данные TOS12. */ Uint16 TOS12:1; // 12 TOS for Mailbox 12 + /* Битовое поле TOS13, ширина 1 бит; данные TOS13. */ Uint16 TOS13:1; // 13 TOS for Mailbox 13 + /* Битовое поле TOS14, ширина 1 бит; данные TOS14. */ Uint16 TOS14:1; // 14 TOS for Mailbox 14 + /* Битовое поле TOS15, ширина 1 бит; данные TOS15. */ Uint16 TOS15:1; // 15 TOS for Mailbox 15 + /* Битовое поле TOS16, ширина 1 бит; данные TOS16. */ Uint16 TOS16:1; // 16 TOS for Mailbox 16 + /* Битовое поле TOS17, ширина 1 бит; данные TOS17. */ Uint16 TOS17:1; // 17 TOS for Mailbox 17 + /* Битовое поле TOS18, ширина 1 бит; данные TOS18. */ Uint16 TOS18:1; // 18 TOS for Mailbox 18 + /* Битовое поле TOS19, ширина 1 бит; данные TOS19. */ Uint16 TOS19:1; // 19 TOS for Mailbox 19 + /* Битовое поле TOS20, ширина 1 бит; данные TOS20. */ Uint16 TOS20:1; // 20 TOS for Mailbox 20 + /* Битовое поле TOS21, ширина 1 бит; данные TOS21. */ Uint16 TOS21:1; // 21 TOS for Mailbox 21 + /* Битовое поле TOS22, ширина 1 бит; данные TOS22. */ Uint16 TOS22:1; // 22 TOS for Mailbox 22 + /* Битовое поле TOS23, ширина 1 бит; данные TOS23. */ Uint16 TOS23:1; // 23 TOS for Mailbox 23 + /* Битовое поле TOS24, ширина 1 бит; данные TOS24. */ Uint16 TOS24:1; // 24 TOS for Mailbox 24 + /* Битовое поле TOS25, ширина 1 бит; данные TOS25. */ Uint16 TOS25:1; // 25 TOS for Mailbox 25 + /* Битовое поле TOS26, ширина 1 бит; данные TOS26. */ Uint16 TOS26:1; // 26 TOS for Mailbox 26 + /* Битовое поле TOS27, ширина 1 бит; данные TOS27. */ Uint16 TOS27:1; // 27 TOS for Mailbox 27 + /* Битовое поле TOS28, ширина 1 бит; данные TOS28. */ Uint16 TOS28:1; // 28 TOS for Mailbox 28 + /* Битовое поле TOS29, ширина 1 бит; данные TOS29. */ Uint16 TOS29:1; // 29 TOS for Mailbox 29 + /* Битовое поле TOS30, ширина 1 бит; данные TOS30. */ Uint16 TOS30:1; // 30 TOS for Mailbox 30 + /* Битовое поле TOS31, ширина 1 бит; данные TOS31. */ Uint16 TOS31:1; // 31 TOS for Mailbox 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANTOS_REG в одной области памяти. */ union CANTOS_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANTOS_BITS bit;; порядок полей определяет расположение данных. */ struct CANTOS_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /**************************************/ /* eCAN Control & Status register file */ /**************************************/ +/* Описывает структуру ECAN_REGS; порядок полей определяет расположение данных. */ struct ECAN_REGS { + /* Объединяет несколько представлений CANME_REG CANME; в одной области памяти. */ union CANME_REG CANME; // Mailbox Enable + /* Объединяет несколько представлений CANMD_REG CANMD; в одной области памяти. */ union CANMD_REG CANMD; // Mailbox Direction + /* Объединяет несколько представлений CANTRS_REG CANTRS; в одной области памяти. */ union CANTRS_REG CANTRS; // Transmit Request Set + /* Объединяет несколько представлений CANTRR_REG CANTRR; в одной области памяти. */ union CANTRR_REG CANTRR; // Transmit Request Reset + /* Объединяет несколько представлений CANTA_REG CANTA; в одной области памяти. */ union CANTA_REG CANTA; // Transmit Acknowledge + /* Объединяет несколько представлений CANAA_REG CANAA; в одной области памяти. */ union CANAA_REG CANAA; // Abort Acknowledge + /* Объединяет несколько представлений CANRMP_REG CANRMP; в одной области памяти. */ union CANRMP_REG CANRMP; // Received Message Pending + /* Объединяет несколько представлений CANRML_REG CANRML; в одной области памяти. */ union CANRML_REG CANRML; // Received Message Lost + /* Объединяет несколько представлений CANRFP_REG CANRFP; в одной области памяти. */ union CANRFP_REG CANRFP; // Remote Frame Pending + /* Объединяет несколько представлений CANGAM_REG CANGAM; в одной области памяти. */ union CANGAM_REG CANGAM; // Global Acceptance Mask + /* Объединяет несколько представлений CANMC_REG CANMC; в одной области памяти. */ union CANMC_REG CANMC; // Master Control + /* Объединяет несколько представлений CANBTC_REG CANBTC; в одной области памяти. */ union CANBTC_REG CANBTC; // Bit Timing + /* Объединяет несколько представлений CANES_REG CANES; в одной области памяти. */ union CANES_REG CANES; // Error Status + /* Объединяет несколько представлений CANTEC_REG CANTEC; в одной области памяти. */ union CANTEC_REG CANTEC; // Transmit Error Counter + /* Объединяет несколько представлений CANREC_REG CANREC; в одной области памяти. */ union CANREC_REG CANREC; // Receive Error Counter + /* Объединяет несколько представлений CANGIF0_REG CANGIF0; в одной области памяти. */ union CANGIF0_REG CANGIF0; // Global Interrupt Flag 0 + /* Объединяет несколько представлений CANGIM_REG CANGIM; в одной области памяти. */ union CANGIM_REG CANGIM; // Global Interrupt Mask 0 + /* Объединяет несколько представлений CANGIF1_REG CANGIF1; в одной области памяти. */ union CANGIF1_REG CANGIF1; // Global Interrupt Flag 1 + /* Объединяет несколько представлений CANMIM_REG CANMIM; в одной области памяти. */ union CANMIM_REG CANMIM; // Mailbox Interrupt Mask + /* Объединяет несколько представлений CANMIL_REG CANMIL; в одной области памяти. */ union CANMIL_REG CANMIL; // Mailbox Interrupt Level + /* Объединяет несколько представлений CANOPC_REG CANOPC; в одной области памяти. */ union CANOPC_REG CANOPC; // Overwrite Protection Control + /* Объединяет несколько представлений CANTIOC_REG CANTIOC; в одной области памяти. */ union CANTIOC_REG CANTIOC; // TX I/O Control + /* Объединяет несколько представлений CANRIOC_REG CANRIOC; в одной области памяти. */ union CANRIOC_REG CANRIOC; // RX I/O Control + /* Объявляет CANTSC — данные CANTSC. */ Uint32 CANTSC; // Time-stamp counter + /* Объединяет несколько представлений CANTOC_REG CANTOC; в одной области памяти. */ union CANTOC_REG CANTOC; // Time-out Control + /* Объединяет несколько представлений CANTOS_REG CANTOS; в одной области памяти. */ union CANTOS_REG CANTOS; // Time-out Status +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* --------------------------------------------------- */ @@ -880,143 +1609,247 @@ struct ECAN_REGS { /* ----------------------------------------------------*/ /* eCAN Message ID (MSGID) bit definitions */ +/* Описывает структуру CANMSGID_BITS; порядок полей определяет расположение данных. */ struct CANMSGID_BITS { // bits description + /* Битовое поле EXTMSGID_L, ширина 16 бит; данные EXTMSGID_L. */ Uint16 EXTMSGID_L:16; // 0:15 + /* Битовое поле EXTMSGID_H, ширина 2 бит; данные EXTMSGID_H. */ Uint16 EXTMSGID_H:2; // 16:17 + /* Битовое поле STDMSGID, ширина 11 бит; данные STDMSGID. */ Uint16 STDMSGID:11; // 18:28 + /* Битовое поле AAM, ширина 1 бит; данные AAM. */ Uint16 AAM:1; // 29 + /* Битовое поле AME, ширина 1 бит; данные AME. */ Uint16 AME:1; // 30 + /* Битовое поле IDE, ширина 1 бит; данные IDE. */ Uint16 IDE:1; // 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANMSGID_REG в одной области памяти. */ union CANMSGID_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANMSGID_BITS bit;; порядок полей определяет расположение данных. */ struct CANMSGID_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Message Control Register (MSGCTRL) bit definitions */ +/* Описывает структуру CANMSGCTRL_BITS; порядок полей определяет расположение данных. */ struct CANMSGCTRL_BITS { // bits description + /* Битовое поле DLC, ширина 4 бит; данные DLC. */ Uint16 DLC:4; // 0:3 + /* Битовое поле RTR, ширина 1 бит; данные RTR. */ Uint16 RTR:1; // 4 + /* Битовое поле rsvd1, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:3; // 7:5 reserved + /* Битовое поле TPL, ширина 5 бит; данные TPL. */ Uint16 TPL:5; // 12:8 + /* Битовое поле rsvd2, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:3; // 15:13 reserved + /* Битовое поле rsvd3, ширина 16 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:16; // 31:16 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANMSGCTRL_REG в одной области памяти. */ union CANMSGCTRL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANMSGCTRL_BITS bit;; порядок полей определяет расположение данных. */ struct CANMSGCTRL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Message Data Register low (MDR_L) word definitions */ +/* Описывает структуру CANMDL_WORDS; порядок полей определяет расположение данных. */ struct CANMDL_WORDS { // bits description + /* Битовое поле LOW_WORD, ширина 16 бит; LOW слово. */ Uint16 LOW_WORD:16; // 0:15 + /* Битовое поле HI_WORD, ширина 16 бит; HI слово. */ Uint16 HI_WORD:16; // 31:16 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Message Data Register low (MDR_L) byte definitions */ +/* Описывает структуру CANMDL_BYTES; порядок полей определяет расположение данных. */ struct CANMDL_BYTES { // bits description + /* Битовое поле BYTE3, ширина 8 бит; данные BYTE3. */ Uint16 BYTE3:8; // 31:24 + /* Битовое поле BYTE2, ширина 8 бит; данные BYTE2. */ Uint16 BYTE2:8; // 23:16 + /* Битовое поле BYTE1, ширина 8 бит; данные BYTE1. */ Uint16 BYTE1:8; // 15:8 + /* Битовое поле BYTE0, ширина 8 бит; данные BYTE0. */ Uint16 BYTE0:8; // 7:0 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANMDL_REG в одной области памяти. */ union CANMDL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANMDL_WORDS word;; порядок полей определяет расположение данных. */ struct CANMDL_WORDS word; + /* Описывает структуру CANMDL_BYTES byte;; порядок полей определяет расположение данных. */ struct CANMDL_BYTES byte; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Message Data Register high (MDR_H) word definitions */ +/* Описывает структуру CANMDH_WORDS; порядок полей определяет расположение данных. */ struct CANMDH_WORDS { // bits description + /* Битовое поле LOW_WORD, ширина 16 бит; LOW слово. */ Uint16 LOW_WORD:16; // 0:15 + /* Битовое поле HI_WORD, ширина 16 бит; HI слово. */ Uint16 HI_WORD:16; // 31:16 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Message Data Register low (MDR_H) byte definitions */ +/* Описывает структуру CANMDH_BYTES; порядок полей определяет расположение данных. */ struct CANMDH_BYTES { // bits description + /* Битовое поле BYTE7, ширина 8 бит; данные BYTE7. */ Uint16 BYTE7:8; // 63:56 + /* Битовое поле BYTE6, ширина 8 бит; данные BYTE6. */ Uint16 BYTE6:8; // 55:48 + /* Битовое поле BYTE5, ширина 8 бит; данные BYTE5. */ Uint16 BYTE5:8; // 47:40 + /* Битовое поле BYTE4, ширина 8 бит; данные BYTE4. */ Uint16 BYTE4:8; // 39:32 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANMDH_REG в одной области памяти. */ union CANMDH_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANMDH_WORDS word;; порядок полей определяет расположение данных. */ struct CANMDH_WORDS word; + /* Описывает структуру CANMDH_BYTES byte;; порядок полей определяет расположение данных. */ struct CANMDH_BYTES byte; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру MBOX; порядок полей определяет расположение данных. */ struct MBOX { + /* Объединяет несколько представлений CANMSGID_REG MSGID; в одной области памяти. */ union CANMSGID_REG MSGID; + /* Объединяет несколько представлений CANMSGCTRL_REG MSGCTRL; в одной области памяти. */ union CANMSGCTRL_REG MSGCTRL; + /* Объединяет несколько представлений CANMDL_REG MDL; в одной области памяти. */ union CANMDL_REG MDL; + /* Объединяет несколько представлений CANMDH_REG MDH; в одной области памяти. */ union CANMDH_REG MDH; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /**************************************/ /* eCAN Mailboxes */ /**************************************/ +/* Описывает структуру ECAN_MBOXES; порядок полей определяет расположение данных. */ struct ECAN_MBOXES { + /* Описывает структуру MBOX MBOX0;; порядок полей определяет расположение данных. */ struct MBOX MBOX0; + /* Описывает структуру MBOX MBOX1;; порядок полей определяет расположение данных. */ struct MBOX MBOX1; + /* Описывает структуру MBOX MBOX2;; порядок полей определяет расположение данных. */ struct MBOX MBOX2; + /* Описывает структуру MBOX MBOX3;; порядок полей определяет расположение данных. */ struct MBOX MBOX3; + /* Описывает структуру MBOX MBOX4;; порядок полей определяет расположение данных. */ struct MBOX MBOX4; + /* Описывает структуру MBOX MBOX5;; порядок полей определяет расположение данных. */ struct MBOX MBOX5; + /* Описывает структуру MBOX MBOX6;; порядок полей определяет расположение данных. */ struct MBOX MBOX6; + /* Описывает структуру MBOX MBOX7;; порядок полей определяет расположение данных. */ struct MBOX MBOX7; + /* Описывает структуру MBOX MBOX8;; порядок полей определяет расположение данных. */ struct MBOX MBOX8; + /* Описывает структуру MBOX MBOX9;; порядок полей определяет расположение данных. */ struct MBOX MBOX9; + /* Описывает структуру MBOX MBOX10;; порядок полей определяет расположение данных. */ struct MBOX MBOX10; + /* Описывает структуру MBOX MBOX11;; порядок полей определяет расположение данных. */ struct MBOX MBOX11; + /* Описывает структуру MBOX MBOX12;; порядок полей определяет расположение данных. */ struct MBOX MBOX12; + /* Описывает структуру MBOX MBOX13;; порядок полей определяет расположение данных. */ struct MBOX MBOX13; + /* Описывает структуру MBOX MBOX14;; порядок полей определяет расположение данных. */ struct MBOX MBOX14; + /* Описывает структуру MBOX MBOX15;; порядок полей определяет расположение данных. */ struct MBOX MBOX15; + /* Описывает структуру MBOX MBOX16;; порядок полей определяет расположение данных. */ struct MBOX MBOX16; + /* Описывает структуру MBOX MBOX17;; порядок полей определяет расположение данных. */ struct MBOX MBOX17; + /* Описывает структуру MBOX MBOX18;; порядок полей определяет расположение данных. */ struct MBOX MBOX18; + /* Описывает структуру MBOX MBOX19;; порядок полей определяет расположение данных. */ struct MBOX MBOX19; + /* Описывает структуру MBOX MBOX20;; порядок полей определяет расположение данных. */ struct MBOX MBOX20; + /* Описывает структуру MBOX MBOX21;; порядок полей определяет расположение данных. */ struct MBOX MBOX21; + /* Описывает структуру MBOX MBOX22;; порядок полей определяет расположение данных. */ struct MBOX MBOX22; + /* Описывает структуру MBOX MBOX23;; порядок полей определяет расположение данных. */ struct MBOX MBOX23; + /* Описывает структуру MBOX MBOX24;; порядок полей определяет расположение данных. */ struct MBOX MBOX24; + /* Описывает структуру MBOX MBOX25;; порядок полей определяет расположение данных. */ struct MBOX MBOX25; + /* Описывает структуру MBOX MBOX26;; порядок полей определяет расположение данных. */ struct MBOX MBOX26; + /* Описывает структуру MBOX MBOX27;; порядок полей определяет расположение данных. */ struct MBOX MBOX27; + /* Описывает структуру MBOX MBOX28;; порядок полей определяет расположение данных. */ struct MBOX MBOX28; + /* Описывает структуру MBOX MBOX29;; порядок полей определяет расположение данных. */ struct MBOX MBOX29; + /* Описывает структуру MBOX MBOX30;; порядок полей определяет расположение данных. */ struct MBOX MBOX30; + /* Описывает структуру MBOX MBOX31;; порядок полей определяет расположение данных. */ struct MBOX MBOX31; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* eCAN Local Acceptance Mask (LAM) bit definitions */ +/* Описывает структуру CANLAM_BITS; порядок полей определяет расположение данных. */ struct CANLAM_BITS { // bits description + /* Битовое поле LAM_L, ширина 16 бит; данные LAM_L. */ Uint16 LAM_L:16; // 0:15 + /* Битовое поле LAM_H, ширина 13 бит; данные LAM_H. */ Uint16 LAM_H:13; // 16:28 + /* Битовое поле rsvd1, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:2; // 29:30 reserved + /* Битовое поле LAMI, ширина 1 бит; данные LAMI. */ Uint16 LAMI:1; // 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CANLAM_REG в одной области памяти. */ union CANLAM_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CANLAM_BITS bit;; порядок полей определяет расположение данных. */ struct CANLAM_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; @@ -1025,135 +1858,250 @@ union CANLAM_REG { /**************************************/ /* eCAN LAM File */ +/* Описывает структуру LAM_REGS; порядок полей определяет расположение данных. */ struct LAM_REGS { + /* Объединяет несколько представлений CANLAM_REG LAM0; в одной области памяти. */ union CANLAM_REG LAM0; + /* Объединяет несколько представлений CANLAM_REG LAM1; в одной области памяти. */ union CANLAM_REG LAM1; + /* Объединяет несколько представлений CANLAM_REG LAM2; в одной области памяти. */ union CANLAM_REG LAM2; + /* Объединяет несколько представлений CANLAM_REG LAM3; в одной области памяти. */ union CANLAM_REG LAM3; + /* Объединяет несколько представлений CANLAM_REG LAM4; в одной области памяти. */ union CANLAM_REG LAM4; + /* Объединяет несколько представлений CANLAM_REG LAM5; в одной области памяти. */ union CANLAM_REG LAM5; + /* Объединяет несколько представлений CANLAM_REG LAM6; в одной области памяти. */ union CANLAM_REG LAM6; + /* Объединяет несколько представлений CANLAM_REG LAM7; в одной области памяти. */ union CANLAM_REG LAM7; + /* Объединяет несколько представлений CANLAM_REG LAM8; в одной области памяти. */ union CANLAM_REG LAM8; + /* Объединяет несколько представлений CANLAM_REG LAM9; в одной области памяти. */ union CANLAM_REG LAM9; + /* Объединяет несколько представлений CANLAM_REG LAM10; в одной области памяти. */ union CANLAM_REG LAM10; + /* Объединяет несколько представлений CANLAM_REG LAM11; в одной области памяти. */ union CANLAM_REG LAM11; + /* Объединяет несколько представлений CANLAM_REG LAM12; в одной области памяти. */ union CANLAM_REG LAM12; + /* Объединяет несколько представлений CANLAM_REG LAM13; в одной области памяти. */ union CANLAM_REG LAM13; + /* Объединяет несколько представлений CANLAM_REG LAM14; в одной области памяти. */ union CANLAM_REG LAM14; + /* Объединяет несколько представлений CANLAM_REG LAM15; в одной области памяти. */ union CANLAM_REG LAM15; + /* Объединяет несколько представлений CANLAM_REG LAM16; в одной области памяти. */ union CANLAM_REG LAM16; + /* Объединяет несколько представлений CANLAM_REG LAM17; в одной области памяти. */ union CANLAM_REG LAM17; + /* Объединяет несколько представлений CANLAM_REG LAM18; в одной области памяти. */ union CANLAM_REG LAM18; + /* Объединяет несколько представлений CANLAM_REG LAM19; в одной области памяти. */ union CANLAM_REG LAM19; + /* Объединяет несколько представлений CANLAM_REG LAM20; в одной области памяти. */ union CANLAM_REG LAM20; + /* Объединяет несколько представлений CANLAM_REG LAM21; в одной области памяти. */ union CANLAM_REG LAM21; + /* Объединяет несколько представлений CANLAM_REG LAM22; в одной области памяти. */ union CANLAM_REG LAM22; + /* Объединяет несколько представлений CANLAM_REG LAM23; в одной области памяти. */ union CANLAM_REG LAM23; + /* Объединяет несколько представлений CANLAM_REG LAM24; в одной области памяти. */ union CANLAM_REG LAM24; + /* Объединяет несколько представлений CANLAM_REG LAM25; в одной области памяти. */ union CANLAM_REG LAM25; + /* Объединяет несколько представлений CANLAM_REG LAM26; в одной области памяти. */ union CANLAM_REG LAM26; + /* Объединяет несколько представлений CANLAM_REG LAM27; в одной области памяти. */ union CANLAM_REG LAM27; + /* Объединяет несколько представлений CANLAM_REG LAM28; в одной области памяти. */ union CANLAM_REG LAM28; + /* Объединяет несколько представлений CANLAM_REG LAM29; в одной области памяти. */ union CANLAM_REG LAM29; + /* Объединяет несколько представлений CANLAM_REG LAM30; в одной области памяти. */ union CANLAM_REG LAM30; + /* Объединяет несколько представлений CANLAM_REG LAM31; в одной области памяти. */ union CANLAM_REG LAM31; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Mailbox MOTS File */ +/* Описывает структуру MOTS_REGS; порядок полей определяет расположение данных. */ struct MOTS_REGS { + /* Объявляет MOTS0 — данные MOTS0. */ Uint32 MOTS0; + /* Объявляет MOTS1 — данные MOTS1. */ Uint32 MOTS1; + /* Объявляет MOTS2 — данные MOTS2. */ Uint32 MOTS2; + /* Объявляет MOTS3 — данные MOTS3. */ Uint32 MOTS3; + /* Объявляет MOTS4 — данные MOTS4. */ Uint32 MOTS4; + /* Объявляет MOTS5 — данные MOTS5. */ Uint32 MOTS5; + /* Объявляет MOTS6 — данные MOTS6. */ Uint32 MOTS6; + /* Объявляет MOTS7 — данные MOTS7. */ Uint32 MOTS7; + /* Объявляет MOTS8 — данные MOTS8. */ Uint32 MOTS8; + /* Объявляет MOTS9 — данные MOTS9. */ Uint32 MOTS9; + /* Объявляет MOTS10 — данные MOTS10. */ Uint32 MOTS10; + /* Объявляет MOTS11 — данные MOTS11. */ Uint32 MOTS11; + /* Объявляет MOTS12 — данные MOTS12. */ Uint32 MOTS12; + /* Объявляет MOTS13 — данные MOTS13. */ Uint32 MOTS13; + /* Объявляет MOTS14 — данные MOTS14. */ Uint32 MOTS14; + /* Объявляет MOTS15 — данные MOTS15. */ Uint32 MOTS15; + /* Объявляет MOTS16 — данные MOTS16. */ Uint32 MOTS16; + /* Объявляет MOTS17 — данные MOTS17. */ Uint32 MOTS17; + /* Объявляет MOTS18 — данные MOTS18. */ Uint32 MOTS18; + /* Объявляет MOTS19 — данные MOTS19. */ Uint32 MOTS19; + /* Объявляет MOTS20 — данные MOTS20. */ Uint32 MOTS20; + /* Объявляет MOTS21 — данные MOTS21. */ Uint32 MOTS21; + /* Объявляет MOTS22 — данные MOTS22. */ Uint32 MOTS22; + /* Объявляет MOTS23 — данные MOTS23. */ Uint32 MOTS23; + /* Объявляет MOTS24 — данные MOTS24. */ Uint32 MOTS24; + /* Объявляет MOTS25 — данные MOTS25. */ Uint32 MOTS25; + /* Объявляет MOTS26 — данные MOTS26. */ Uint32 MOTS26; + /* Объявляет MOTS27 — данные MOTS27. */ Uint32 MOTS27; + /* Объявляет MOTS28 — данные MOTS28. */ Uint32 MOTS28; + /* Объявляет MOTS29 — данные MOTS29. */ Uint32 MOTS29; + /* Объявляет MOTS30 — данные MOTS30. */ Uint32 MOTS30; + /* Объявляет MOTS31 — данные MOTS31. */ Uint32 MOTS31; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Mailbox MOTO File */ +/* Описывает структуру MOTO_REGS; порядок полей определяет расположение данных. */ struct MOTO_REGS { + /* Объявляет MOTO0 — данные MOTO0. */ Uint32 MOTO0; + /* Объявляет MOTO1 — данные MOTO1. */ Uint32 MOTO1; + /* Объявляет MOTO2 — данные MOTO2. */ Uint32 MOTO2; + /* Объявляет MOTO3 — данные MOTO3. */ Uint32 MOTO3; + /* Объявляет MOTO4 — данные MOTO4. */ Uint32 MOTO4; + /* Объявляет MOTO5 — данные MOTO5. */ Uint32 MOTO5; + /* Объявляет MOTO6 — данные MOTO6. */ Uint32 MOTO6; + /* Объявляет MOTO7 — данные MOTO7. */ Uint32 MOTO7; + /* Объявляет MOTO8 — данные MOTO8. */ Uint32 MOTO8; + /* Объявляет MOTO9 — данные MOTO9. */ Uint32 MOTO9; + /* Объявляет MOTO10 — данные MOTO10. */ Uint32 MOTO10; + /* Объявляет MOTO11 — данные MOTO11. */ Uint32 MOTO11; + /* Объявляет MOTO12 — данные MOTO12. */ Uint32 MOTO12; + /* Объявляет MOTO13 — данные MOTO13. */ Uint32 MOTO13; + /* Объявляет MOTO14 — данные MOTO14. */ Uint32 MOTO14; + /* Объявляет MOTO15 — данные MOTO15. */ Uint32 MOTO15; + /* Объявляет MOTO16 — данные MOTO16. */ Uint32 MOTO16; + /* Объявляет MOTO17 — данные MOTO17. */ Uint32 MOTO17; + /* Объявляет MOTO18 — данные MOTO18. */ Uint32 MOTO18; + /* Объявляет MOTO19 — данные MOTO19. */ Uint32 MOTO19; + /* Объявляет MOTO20 — данные MOTO20. */ Uint32 MOTO20; + /* Объявляет MOTO21 — данные MOTO21. */ Uint32 MOTO21; + /* Объявляет MOTO22 — данные MOTO22. */ Uint32 MOTO22; + /* Объявляет MOTO23 — данные MOTO23. */ Uint32 MOTO23; + /* Объявляет MOTO24 — данные MOTO24. */ Uint32 MOTO24; + /* Объявляет MOTO25 — данные MOTO25. */ Uint32 MOTO25; + /* Объявляет MOTO26 — данные MOTO26. */ Uint32 MOTO26; + /* Объявляет MOTO27 — данные MOTO27. */ Uint32 MOTO27; + /* Объявляет MOTO28 — данные MOTO28. */ Uint32 MOTO28; + /* Объявляет MOTO29 — данные MOTO29. */ Uint32 MOTO29; + /* Объявляет MOTO30 — данные MOTO30. */ Uint32 MOTO30; + /* Объявляет MOTO31 — данные MOTO31. */ Uint32 MOTO31; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // eCAN External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAN_REGS ECanaRegs;; порядок элементов сохраняется. */ extern volatile struct ECAN_REGS ECanaRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAN_MBOXES ECanaMboxes;; порядок элементов сохраняется. */ extern volatile struct ECAN_MBOXES ECanaMboxes; +/* Продолжает список аргументов, полей или выражение extern volatile struct LAM_REGS ECanaLAMRegs;; порядок элементов сохраняется. */ extern volatile struct LAM_REGS ECanaLAMRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct MOTO_REGS ECanaMOTORegs;; порядок элементов сохраняется. */ extern volatile struct MOTO_REGS ECanaMOTORegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct MOTS_REGS ECanaMOTSRegs;; порядок элементов сохраняется. */ extern volatile struct MOTS_REGS ECanaMOTSRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAN_REGS ECanbRegs;; порядок элементов сохраняется. */ extern volatile struct ECAN_REGS ECanbRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAN_MBOXES ECanbMboxes;; порядок элементов сохраняется. */ extern volatile struct ECAN_MBOXES ECanbMboxes; +/* Продолжает список аргументов, полей или выражение extern volatile struct LAM_REGS ECanbLAMRegs;; порядок элементов сохраняется. */ extern volatile struct LAM_REGS ECanbLAMRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct MOTO_REGS ECanbMOTORegs;; порядок элементов сохраняется. */ extern volatile struct MOTO_REGS ECanbMOTORegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct MOTS_REGS ECanbMOTSRegs;; порядок элементов сохраняется. */ extern volatile struct MOTS_REGS ECanbMOTSRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_ECAN.H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_ECap.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_ECap.h index b82bd7f..e5b1b2d 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_ECap.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_ECap.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание ECap для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:52:07 $ //########################################################################### @@ -11,139 +12,232 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_ECAP_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_ECAP_H +/* Определяет защитный символ или переключатель DSP2833x_ECAP_H для последующей компиляции. */ #define DSP2833x_ECAP_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //---------------------------------------------------- -// Capture control register 1 bit definitions */ +// Capture control register 1 bit definitions */ +/* Описывает структуру ECCTL1_BITS; порядок полей определяет расположение данных. */ struct ECCTL1_BITS { // bits description + /* Битовое поле CAP1POL, ширина 1 бит; данные CAP1POL. */ Uint16 CAP1POL:1; // 0 Capture Event 1 Polarity select + /* Битовое поле CTRRST1, ширина 1 бит; данные CTRRST1. */ Uint16 CTRRST1:1; // 1 Counter Reset on Capture Event 1 + /* Битовое поле CAP2POL, ширина 1 бит; данные CAP2POL. */ Uint16 CAP2POL:1; // 2 Capture Event 2 Polarity select + /* Битовое поле CTRRST2, ширина 1 бит; данные CTRRST2. */ Uint16 CTRRST2:1; // 3 Counter Reset on Capture Event 2 + /* Битовое поле CAP3POL, ширина 1 бит; данные CAP3POL. */ Uint16 CAP3POL:1; // 4 Capture Event 3 Polarity select + /* Битовое поле CTRRST3, ширина 1 бит; данные CTRRST3. */ Uint16 CTRRST3:1; // 5 Counter Reset on Capture Event 3 + /* Битовое поле CAP4POL, ширина 1 бит; данные CAP4POL. */ Uint16 CAP4POL:1; // 6 Capture Event 4 Polarity select + /* Битовое поле CTRRST4, ширина 1 бит; данные CTRRST4. */ Uint16 CTRRST4:1; // 7 Counter Reset on Capture Event 4 + /* Битовое поле CAPLDEN, ширина 1 бит; данные CAPLDEN. */ Uint16 CAPLDEN:1; // 8 Enable Loading CAP1-4 regs on a Cap Event + /* Битовое поле PRESCALE, ширина 5 бит; предделитель. */ Uint16 PRESCALE:5; // 13:9 Event Filter prescale select + /* Битовое поле FREE_SOFT, ширина 2 бит; данные FREE_SOFT. */ Uint16 FREE_SOFT:2; // 15:14 Emulation mode +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ECCTL1_REG в одной области памяти. */ union ECCTL1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ECCTL1_BITS bit;; порядок полей определяет расположение данных. */ struct ECCTL1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; -// In V1.1 the STOPVALUE bit field was changed to +// In V1.1 the STOPVALUE bit field was changed to // STOP_WRAP. This correlated to a silicon change from -// F2833x Rev 0 to Rev A. +// F2833x Rev 0 to Rev A. //---------------------------------------------------- -// Capture control register 2 bit definitions */ +// Capture control register 2 bit definitions */ +/* Описывает структуру ECCTL2_BITS; порядок полей определяет расположение данных. */ struct ECCTL2_BITS { // bits description + /* Битовое поле CONT_ONESHT, ширина 1 бит; данные CONT_ONESHT. */ Uint16 CONT_ONESHT:1; // 0 Continuous or one-shot + /* Битовое поле STOP_WRAP, ширина 2 бит; данные STOP_WRAP. */ Uint16 STOP_WRAP:2; // 2:1 Stop value for one-shot, Wrap for continuous + /* Битовое поле REARM, ширина 1 бит; данные REARM. */ Uint16 REARM:1; // 3 One-shot re-arm + /* Битовое поле TSCTRSTOP, ширина 1 бит; данные TSCTRSTOP. */ Uint16 TSCTRSTOP:1; // 4 TSCNT counter stop + /* Битовое поле SYNCI_EN, ширина 1 бит; данные SYNCI_EN. */ Uint16 SYNCI_EN:1; // 5 Counter sync-in select + /* Битовое поле SYNCO_SEL, ширина 2 бит; данные SYNCO_SEL. */ Uint16 SYNCO_SEL:2; // 7:6 Sync-out mode + /* Битовое поле SWSYNC, ширина 1 бит; данные SWSYNC. */ Uint16 SWSYNC:1; // 8 SW forced counter sync + /* Битовое поле CAP_APWM, ширина 1 бит; данные CAP_APWM. */ Uint16 CAP_APWM:1; // 9 CAP/APWM operating mode select + /* Битовое поле APWMPOL, ширина 1 бит; данные APWMPOL. */ Uint16 APWMPOL:1; // 10 APWM output polarity select - Uint16 rsvd1:5; // 15:11 + /* Битовое поле rsvd1, ширина 5 бит; зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd1:5; // 15:11 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ECCTL2_REG в одной области памяти. */ union ECCTL2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ECCTL2_BITS bit;; порядок полей определяет расположение данных. */ struct ECCTL2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// ECAP interrupt enable register bit definitions */ +// ECAP interrupt enable register bit definitions */ +/* Описывает структуру ECEINT_BITS; порядок полей определяет расположение данных. */ struct ECEINT_BITS { // bits description + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 0 reserved + /* Битовое поле CEVT1, ширина 1 бит; данные CEVT1. */ Uint16 CEVT1:1; // 1 Capture Event 1 Interrupt Enable + /* Битовое поле CEVT2, ширина 1 бит; данные CEVT2. */ Uint16 CEVT2:1; // 2 Capture Event 2 Interrupt Enable + /* Битовое поле CEVT3, ширина 1 бит; данные CEVT3. */ Uint16 CEVT3:1; // 3 Capture Event 3 Interrupt Enable - Uint16 CEVT4:1; // 4 Capture Event 4 Interrupt Enable + /* Битовое поле CEVT4, ширина 1 бит; данные CEVT4. */ + Uint16 CEVT4:1; // 4 Capture Event 4 Interrupt Enable + /* Битовое поле CTROVF, ширина 1 бит; данные CTROVF. */ Uint16 CTROVF:1; // 5 Counter Overflow Interrupt Enable + /* Битовое поле CTR_EQ_PRD, ширина 1 бит; данные CTR_EQ_PRD. */ Uint16 CTR_EQ_PRD:1; // 6 Period Equal Interrupt Enable + /* Битовое поле CTR_EQ_CMP, ширина 1 бит; данные CTR_EQ_CMP. */ Uint16 CTR_EQ_CMP:1; // 7 Compare Equal Interrupt Enable + /* Битовое поле rsvd2, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ECEINT_REG в одной области памяти. */ union ECEINT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ECEINT_BITS bit;; порядок полей определяет расположение данных. */ struct ECEINT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// ECAP interrupt flag register bit definitions */ +// ECAP interrupt flag register bit definitions */ +/* Описывает структуру ECFLG_BITS; порядок полей определяет расположение данных. */ struct ECFLG_BITS { // bits description + /* Битовое поле INT, ширина 1 бит; данные INT. */ Uint16 INT:1; // 0 Global Flag + /* Битовое поле CEVT1, ширина 1 бит; данные CEVT1. */ Uint16 CEVT1:1; // 1 Capture Event 1 Interrupt Flag + /* Битовое поле CEVT2, ширина 1 бит; данные CEVT2. */ Uint16 CEVT2:1; // 2 Capture Event 2 Interrupt Flag + /* Битовое поле CEVT3, ширина 1 бит; данные CEVT3. */ Uint16 CEVT3:1; // 3 Capture Event 3 Interrupt Flag - Uint16 CEVT4:1; // 4 Capture Event 4 Interrupt Flag + /* Битовое поле CEVT4, ширина 1 бит; данные CEVT4. */ + Uint16 CEVT4:1; // 4 Capture Event 4 Interrupt Flag + /* Битовое поле CTROVF, ширина 1 бит; данные CTROVF. */ Uint16 CTROVF:1; // 5 Counter Overflow Interrupt Flag + /* Битовое поле CTR_EQ_PRD, ширина 1 бит; данные CTR_EQ_PRD. */ Uint16 CTR_EQ_PRD:1; // 6 Period Equal Interrupt Flag + /* Битовое поле CTR_EQ_CMP, ширина 1 бит; данные CTR_EQ_CMP. */ Uint16 CTR_EQ_CMP:1; // 7 Compare Equal Interrupt Flag + /* Битовое поле rsvd2, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ECFLG_REG в одной области памяти. */ union ECFLG_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ECFLG_BITS bit;; порядок полей определяет расположение данных. */ struct ECFLG_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- +/* Описывает структуру ECAP_REGS; порядок полей определяет расположение данных. */ struct ECAP_REGS { - Uint32 TSCTR; // Time stamp counter + /* Объявляет TSCTR — данные TSCTR. */ + Uint32 TSCTR; // Time stamp counter + /* Объявляет CTRPHS — данные CTRPHS. */ Uint32 CTRPHS; // Counter phase - Uint32 CAP1; // Capture 1 - Uint32 CAP2; // Capture 2 - Uint32 CAP3; // Capture 3 - Uint32 CAP4; // Capture 4 + /* Объявляет CAP1 — данные CAP1. */ + Uint32 CAP1; // Capture 1 + /* Объявляет CAP2 — данные CAP2. */ + Uint32 CAP2; // Capture 2 + /* Объявляет CAP3 — данные CAP3. */ + Uint32 CAP3; // Capture 3 + /* Объявляет CAP4 — данные CAP4. */ + Uint32 CAP4; // Capture 4 + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1[8]; // reserved + /* Объединяет несколько представлений ECCTL1_REG ECCTL1; в одной области памяти. */ union ECCTL1_REG ECCTL1; // Capture Control Reg 1 + /* Объединяет несколько представлений ECCTL2_REG ECCTL2; в одной области памяти. */ union ECCTL2_REG ECCTL2; // Capture Control Reg 2 + /* Объединяет несколько представлений ECEINT_REG ECEINT; в одной области памяти. */ union ECEINT_REG ECEINT; // ECAP interrupt enable + /* Объединяет несколько представлений ECFLG_REG ECFLG; в одной области памяти. */ union ECFLG_REG ECFLG; // ECAP interrupt flags + /* Объединяет несколько представлений ECFLG_REG ECCLR; в одной области памяти. */ union ECFLG_REG ECCLR; // ECAP interrupt clear + /* Объединяет несколько представлений ECEINT_REG ECFRC; в одной области памяти. */ union ECEINT_REG ECFRC; // ECAP interrupt force - Uint16 rsvd2[6]; // reserved + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd2[6]; // reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; - - + + //--------------------------------------------------------------------------- // GPI/O External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAP_REGS ECap1Regs;; порядок элементов сохраняется. */ extern volatile struct ECAP_REGS ECap1Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAP_REGS ECap2Regs;; порядок элементов сохраняется. */ extern volatile struct ECAP_REGS ECap2Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAP_REGS ECap3Regs;; порядок элементов сохраняется. */ extern volatile struct ECAP_REGS ECap3Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAP_REGS ECap4Regs;; порядок элементов сохраняется. */ extern volatile struct ECAP_REGS ECap4Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAP_REGS ECap5Regs;; порядок элементов сохраняется. */ extern volatile struct ECAP_REGS ECap5Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct ECAP_REGS ECap6Regs;; порядок элементов сохраняется. */ extern volatile struct ECAP_REGS ECap6Regs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_ECAP_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_EPwm.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_EPwm.h index 9195752..7193a7b 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_EPwm.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_EPwm.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание EPwm для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:52:10 $ //########################################################################### @@ -11,111 +12,190 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_EPWM_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_EPWM_H +/* Определяет защитный символ или переключатель DSP2833x_EPWM_H для последующей компиляции. */ #define DSP2833x_EPWM_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //---------------------------------------------------- -// Time base control register bit definitions */ +// Time base control register bit definitions */ +/* Описывает структуру TBCTL_BITS; порядок полей определяет расположение данных. */ struct TBCTL_BITS { // bits description + /* Битовое поле CTRMODE, ширина 2 бит; данные CTRMODE. */ Uint16 CTRMODE:2; // 1:0 Counter Mode + /* Битовое поле PHSEN, ширина 1 бит; данные PHSEN. */ Uint16 PHSEN:1; // 2 Phase load enable + /* Битовое поле PRDLD, ширина 1 бит; данные PRDLD. */ Uint16 PRDLD:1; // 3 Active period load + /* Битовое поле SYNCOSEL, ширина 2 бит; данные SYNCOSEL. */ Uint16 SYNCOSEL:2; // 5:4 Sync output select + /* Битовое поле SWFSYNC, ширина 1 бит; данные SWFSYNC. */ Uint16 SWFSYNC:1; // 6 Software force sync pulse + /* Битовое поле HSPCLKDIV, ширина 3 бит; данные HSPCLKDIV. */ Uint16 HSPCLKDIV:3; // 9:7 High speed time pre-scale + /* Битовое поле CLKDIV, ширина 3 бит; данные CLKDIV. */ Uint16 CLKDIV:3; // 12:10 Timebase clock pre-scale + /* Битовое поле PHSDIR, ширина 1 бит; данные PHSDIR. */ Uint16 PHSDIR:1; // 13 Phase Direction - Uint16 FREE_SOFT:2; // 15:14 Emulation mode + /* Битовое поле FREE_SOFT, ширина 2 бит; данные FREE_SOFT. */ + Uint16 FREE_SOFT:2; // 15:14 Emulation mode +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TBCTL_REG в одной области памяти. */ union TBCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TBCTL_BITS bit;; порядок полей определяет расположение данных. */ struct TBCTL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Time base status register bit definitions */ +// Time base status register bit definitions */ +/* Описывает структуру TBSTS_BITS; порядок полей определяет расположение данных. */ struct TBSTS_BITS { // bits description + /* Битовое поле CTRDIR, ширина 1 бит; данные CTRDIR. */ Uint16 CTRDIR:1; // 0 Counter direction status + /* Битовое поле SYNCI, ширина 1 бит; данные SYNCI. */ Uint16 SYNCI:1; // 1 External input sync status + /* Битовое поле CTRMAX, ширина 1 бит; данные CTRMAX. */ Uint16 CTRMAX:1; // 2 Counter max latched status + /* Битовое поле rsvd1, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:13; // 15:3 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TBSTS_REG в одной области памяти. */ union TBSTS_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TBSTS_BITS bit;; порядок полей определяет расположение данных. */ struct TBSTS_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Compare control register bit definitions */ +// Compare control register bit definitions */ +/* Описывает структуру CMPCTL_BITS; порядок полей определяет расположение данных. */ struct CMPCTL_BITS { // bits description + /* Битовое поле LOADAMODE, ширина 2 бит; данные LOADAMODE. */ Uint16 LOADAMODE:2; // 0:1 Active compare A + /* Битовое поле LOADBMODE, ширина 2 бит; данные LOADBMODE. */ Uint16 LOADBMODE:2; // 3:2 Active compare B + /* Битовое поле SHDWAMODE, ширина 1 бит; данные SHDWAMODE. */ Uint16 SHDWAMODE:1; // 4 Compare A block operating mode + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 5 reserved + /* Битовое поле SHDWBMODE, ширина 1 бит; данные SHDWBMODE. */ Uint16 SHDWBMODE:1; // 6 Compare B block operating mode + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 7 reserved + /* Битовое поле SHDWAFULL, ширина 1 бит; данные SHDWAFULL. */ Uint16 SHDWAFULL:1; // 8 Compare A Shadow registers full Status + /* Битовое поле SHDWBFULL, ширина 1 бит; данные SHDWBFULL. */ Uint16 SHDWBFULL:1; // 9 Compare B Shadow registers full Status + /* Битовое поле rsvd3, ширина 6 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:6; // 15:10 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений CMPCTL_REG в одной области памяти. */ union CMPCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру CMPCTL_BITS bit;; порядок полей определяет расположение данных. */ struct CMPCTL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Action qualifier register bit definitions */ +// Action qualifier register bit definitions */ +/* Описывает структуру AQCTL_BITS; порядок полей определяет расположение данных. */ struct AQCTL_BITS { // bits description + /* Битовое поле ZRO, ширина 2 бит; данные ZRO. */ Uint16 ZRO:2; // 1:0 Action Counter = Zero + /* Битовое поле PRD, ширина 2 бит; данные PRD. */ Uint16 PRD:2; // 3:2 Action Counter = Period + /* Битовое поле CAU, ширина 2 бит; данные CAU. */ Uint16 CAU:2; // 5:4 Action Counter = Compare A up + /* Битовое поле CAD, ширина 2 бит; данные CAD. */ Uint16 CAD:2; // 7:6 Action Counter = Compare A down + /* Битовое поле CBU, ширина 2 бит; данные CBU. */ Uint16 CBU:2; // 9:8 Action Counter = Compare B up + /* Битовое поле CBD, ширина 2 бит; данные CBD. */ Uint16 CBD:2; // 11:10 Action Counter = Compare B down + /* Битовое поле rsvd, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:4; // 15:12 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений AQCTL_REG в одной области памяти. */ union AQCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру AQCTL_BITS bit;; порядок полей определяет расположение данных. */ struct AQCTL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Action qualifier SW force register bit definitions */ +// Action qualifier SW force register bit definitions */ +/* Описывает структуру AQSFRC_BITS; порядок полей определяет расположение данных. */ struct AQSFRC_BITS { // bits description + /* Битовое поле ACTSFA, ширина 2 бит; данные ACTSFA. */ Uint16 ACTSFA:2; // 1:0 Action when One-time SW Force A invoked + /* Битовое поле OTSFA, ширина 1 бит; данные OTSFA. */ Uint16 OTSFA:1; // 2 One-time SW Force A output + /* Битовое поле ACTSFB, ширина 2 бит; данные ACTSFB. */ Uint16 ACTSFB:2; // 4:3 Action when One-time SW Force B invoked + /* Битовое поле OTSFB, ширина 1 бит; данные OTSFB. */ Uint16 OTSFB:1; // 5 One-time SW Force A output + /* Битовое поле RLDCSF, ширина 2 бит; данные RLDCSF. */ Uint16 RLDCSF:2; // 7:6 Reload from Shadow options + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений AQSFRC_REG в одной области памяти. */ union AQSFRC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру AQSFRC_BITS bit;; порядок полей определяет расположение данных. */ struct AQSFRC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Action qualifier continuous SW force register bit definitions */ +// Action qualifier continuous SW force register bit definitions */ +/* Описывает структуру AQCSFRC_BITS; порядок полей определяет расположение данных. */ struct AQCSFRC_BITS { // bits description + /* Битовое поле CSFA, ширина 2 бит; данные CSFA. */ Uint16 CSFA:2; // 1:0 Continuous Software Force on output A + /* Битовое поле CSFB, ширина 2 бит; данные CSFB. */ Uint16 CSFB:2; // 3:2 Continuous Software Force on output B + /* Битовое поле rsvd1, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:12; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений AQCSFRC_REG в одной области памяти. */ union AQCSFRC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру AQCSFRC_BITS bit;; порядок полей определяет расположение данных. */ struct AQCSFRC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; @@ -125,297 +205,514 @@ union AQCSFRC_REG { // This corresponds to changes in silicon as of F2833x devices // Rev A silicon. //---------------------------------------------------- -// Dead-band generator control register bit definitions +// Dead-band generator control register bit definitions +/* Описывает структуру DBCTL_BITS; порядок полей определяет расположение данных. */ struct DBCTL_BITS { // bits description - Uint16 OUT_MODE:2; // 1:0 Dead Band Output Mode Control - Uint16 POLSEL:2; // 3:2 Polarity Select Control + /* Битовое поле OUT_MODE, ширина 2 бит; OUT режим. */ + Uint16 OUT_MODE:2; // 1:0 Dead Band Output Mode Control + /* Битовое поле POLSEL, ширина 2 бит; данные POLSEL. */ + Uint16 POLSEL:2; // 3:2 Polarity Select Control + /* Битовое поле IN_MODE, ширина 2 бит; IN режим. */ Uint16 IN_MODE:2; // 5:4 Dead Band Input Select Mode Control + /* Битовое поле rsvd1, ширина 10 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:10; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений DBCTL_REG в одной области памяти. */ union DBCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру DBCTL_BITS bit;; порядок полей определяет расположение данных. */ struct DBCTL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Trip zone select register bit definitions +// Trip zone select register bit definitions +/* Описывает структуру TZSEL_BITS; порядок полей определяет расположение данных. */ struct TZSEL_BITS { // bits description + /* Битовое поле CBC1, ширина 1 бит; данные CBC1. */ Uint16 CBC1:1; // 0 TZ1 CBC select + /* Битовое поле CBC2, ширина 1 бит; данные CBC2. */ Uint16 CBC2:1; // 1 TZ2 CBC select + /* Битовое поле CBC3, ширина 1 бит; данные CBC3. */ Uint16 CBC3:1; // 2 TZ3 CBC select + /* Битовое поле CBC4, ширина 1 бит; данные CBC4. */ Uint16 CBC4:1; // 3 TZ4 CBC select + /* Битовое поле CBC5, ширина 1 бит; данные CBC5. */ Uint16 CBC5:1; // 4 TZ5 CBC select + /* Битовое поле CBC6, ширина 1 бит; данные CBC6. */ Uint16 CBC6:1; // 5 TZ6 CBC select + /* Битовое поле rsvd1, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:2; // 7:6 reserved - Uint16 OSHT1:1; // 8 One-shot TZ1 select - Uint16 OSHT2:1; // 9 One-shot TZ2 select - Uint16 OSHT3:1; // 10 One-shot TZ3 select - Uint16 OSHT4:1; // 11 One-shot TZ4 select - Uint16 OSHT5:1; // 12 One-shot TZ5 select - Uint16 OSHT6:1; // 13 One-shot TZ6 select + /* Битовое поле OSHT1, ширина 1 бит; данные OSHT1. */ + Uint16 OSHT1:1; // 8 One-shot TZ1 select + /* Битовое поле OSHT2, ширина 1 бит; данные OSHT2. */ + Uint16 OSHT2:1; // 9 One-shot TZ2 select + /* Битовое поле OSHT3, ширина 1 бит; данные OSHT3. */ + Uint16 OSHT3:1; // 10 One-shot TZ3 select + /* Битовое поле OSHT4, ширина 1 бит; данные OSHT4. */ + Uint16 OSHT4:1; // 11 One-shot TZ4 select + /* Битовое поле OSHT5, ширина 1 бит; данные OSHT5. */ + Uint16 OSHT5:1; // 12 One-shot TZ5 select + /* Битовое поле OSHT6, ширина 1 бит; данные OSHT6. */ + Uint16 OSHT6:1; // 13 One-shot TZ6 select + /* Битовое поле rsvd2, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:2; // 15:14 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TZSEL_REG в одной области памяти. */ union TZSEL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TZSEL_BITS bit;; порядок полей определяет расположение данных. */ struct TZSEL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Trip zone control register bit definitions */ +// Trip zone control register bit definitions */ +/* Описывает структуру TZCTL_BITS; порядок полей определяет расположение данных. */ struct TZCTL_BITS { // bits description + /* Битовое поле TZA, ширина 2 бит; данные TZA. */ Uint16 TZA:2; // 1:0 TZ1 to TZ6 Trip Action On EPWMxA + /* Битовое поле TZB, ширина 2 бит; данные TZB. */ Uint16 TZB:2; // 3:2 TZ1 to TZ6 Trip Action On EPWMxB + /* Битовое поле rsvd, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:12; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TZCTL_REG в одной области памяти. */ union TZCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TZCTL_BITS bit;; порядок полей определяет расположение данных. */ struct TZCTL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Trip zone control register bit definitions */ +// Trip zone control register bit definitions */ +/* Описывает структуру TZEINT_BITS; порядок полей определяет расположение данных. */ struct TZEINT_BITS { // bits description + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 0 reserved + /* Битовое поле CBC, ширина 1 бит; данные CBC. */ Uint16 CBC:1; // 1 Trip Zones Cycle By Cycle Int Enable + /* Битовое поле OST, ширина 1 бит; данные OST. */ Uint16 OST:1; // 2 Trip Zones One Shot Int Enable + /* Битовое поле rsvd2, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:13; // 15:3 reserved -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; +/* Объединяет несколько представлений TZEINT_REG в одной области памяти. */ union TZEINT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TZEINT_BITS bit;; порядок полей определяет расположение данных. */ struct TZEINT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Trip zone flag register bit definitions */ +// Trip zone flag register bit definitions */ +/* Описывает структуру TZFLG_BITS; порядок полей определяет расположение данных. */ struct TZFLG_BITS { // bits description + /* Битовое поле INT, ширина 1 бит; данные INT. */ Uint16 INT:1; // 0 Global status + /* Битовое поле CBC, ширина 1 бит; данные CBC. */ Uint16 CBC:1; // 1 Trip Zones Cycle By Cycle Int + /* Битовое поле OST, ширина 1 бит; данные OST. */ Uint16 OST:1; // 2 Trip Zones One Shot Int + /* Битовое поле rsvd2, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:13; // 15:3 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TZFLG_REG в одной области памяти. */ union TZFLG_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TZFLG_BITS bit;; порядок полей определяет расположение данных. */ struct TZFLG_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Trip zone flag clear register bit definitions */ +// Trip zone flag clear register bit definitions */ +/* Описывает структуру TZCLR_BITS; порядок полей определяет расположение данных. */ struct TZCLR_BITS { // bits description + /* Битовое поле INT, ширина 1 бит; данные INT. */ Uint16 INT:1; // 0 Global status + /* Битовое поле CBC, ширина 1 бит; данные CBC. */ Uint16 CBC:1; // 1 Trip Zones Cycle By Cycle Int + /* Битовое поле OST, ширина 1 бит; данные OST. */ Uint16 OST:1; // 2 Trip Zones One Shot Int + /* Битовое поле rsvd2, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:13; // 15:3 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TZCLR_REG в одной области памяти. */ union TZCLR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TZCLR_BITS bit;; порядок полей определяет расположение данных. */ struct TZCLR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Trip zone flag force register bit definitions */ +// Trip zone flag force register bit definitions */ +/* Описывает структуру TZFRC_BITS; порядок полей определяет расположение данных. */ struct TZFRC_BITS { // bits description + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 0 reserved + /* Битовое поле CBC, ширина 1 бит; данные CBC. */ Uint16 CBC:1; // 1 Trip Zones Cycle By Cycle Int + /* Битовое поле OST, ширина 1 бит; данные OST. */ Uint16 OST:1; // 2 Trip Zones One Shot Int + /* Битовое поле rsvd2, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:13; // 15:3 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TZFRC_REG в одной области памяти. */ union TZFRC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру TZFRC_BITS bit;; порядок полей определяет расположение данных. */ struct TZFRC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Event trigger select register bit definitions */ +// Event trigger select register bit definitions */ +/* Описывает структуру ETSEL_BITS; порядок полей определяет расположение данных. */ struct ETSEL_BITS { // bits description + /* Битовое поле INTSEL, ширина 3 бит; данные INTSEL. */ Uint16 INTSEL:3; // 2:0 EPWMxINTn Select + /* Битовое поле INTEN, ширина 1 бит; данные INTEN. */ Uint16 INTEN:1; // 3 EPWMxINTn Enable + /* Битовое поле rsvd1, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:4; // 7:4 reserved + /* Битовое поле SOCASEL, ширина 3 бит; данные SOCASEL. */ Uint16 SOCASEL:3; // 10:8 Start of conversion A Select + /* Битовое поле SOCAEN, ширина 1 бит; данные SOCAEN. */ Uint16 SOCAEN:1; // 11 Start of conversion A Enable + /* Битовое поле SOCBSEL, ширина 3 бит; данные SOCBSEL. */ Uint16 SOCBSEL:3; // 14:12 Start of conversion B Select + /* Битовое поле SOCBEN, ширина 1 бит; данные SOCBEN. */ Uint16 SOCBEN:1; // 15 Start of conversion B Enable +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ETSEL_REG в одной области памяти. */ union ETSEL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ETSEL_BITS bit;; порядок полей определяет расположение данных. */ struct ETSEL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Event trigger pre-scale register bit definitions */ +// Event trigger pre-scale register bit definitions */ +/* Описывает структуру ETPS_BITS; порядок полей определяет расположение данных. */ struct ETPS_BITS { // bits description + /* Битовое поле INTPRD, ширина 2 бит; данные INTPRD. */ Uint16 INTPRD:2; // 1:0 EPWMxINTn Period Select + /* Битовое поле INTCNT, ширина 2 бит; данные INTCNT. */ Uint16 INTCNT:2; // 3:2 EPWMxINTn Counter Register + /* Битовое поле rsvd1, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:4; // 7:4 reserved + /* Битовое поле SOCAPRD, ширина 2 бит; данные SOCAPRD. */ Uint16 SOCAPRD:2; // 9:8 EPWMxSOCA Period Select + /* Битовое поле SOCACNT, ширина 2 бит; данные SOCACNT. */ Uint16 SOCACNT:2; // 11:10 EPWMxSOCA Counter Register + /* Битовое поле SOCBPRD, ширина 2 бит; данные SOCBPRD. */ Uint16 SOCBPRD:2; // 13:12 EPWMxSOCB Period Select + /* Битовое поле SOCBCNT, ширина 2 бит; данные SOCBCNT. */ Uint16 SOCBCNT:2; // 15:14 EPWMxSOCB Counter Register +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ETPS_REG в одной области памяти. */ union ETPS_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ETPS_BITS bit;; порядок полей определяет расположение данных. */ struct ETPS_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Event trigger Flag register bit definitions */ +// Event trigger Flag register bit definitions */ +/* Описывает структуру ETFLG_BITS; порядок полей определяет расположение данных. */ struct ETFLG_BITS { // bits description + /* Битовое поле INT, ширина 1 бит; данные INT. */ Uint16 INT:1; // 0 EPWMxINTn Flag + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 1 reserved + /* Битовое поле SOCA, ширина 1 бит; данные SOCA. */ Uint16 SOCA:1; // 2 EPWMxSOCA Flag + /* Битовое поле SOCB, ширина 1 бит; данные SOCB. */ Uint16 SOCB:1; // 3 EPWMxSOCB Flag + /* Битовое поле rsvd2, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:12; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ETFLG_REG в одной области памяти. */ union ETFLG_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ETFLG_BITS bit;; порядок полей определяет расположение данных. */ struct ETFLG_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Event trigger Clear register bit definitions */ +// Event trigger Clear register bit definitions */ +/* Описывает структуру ETCLR_BITS; порядок полей определяет расположение данных. */ struct ETCLR_BITS { // bits description + /* Битовое поле INT, ширина 1 бит; данные INT. */ Uint16 INT:1; // 0 EPWMxINTn Clear + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 1 reserved + /* Битовое поле SOCA, ширина 1 бит; данные SOCA. */ Uint16 SOCA:1; // 2 EPWMxSOCA Clear + /* Битовое поле SOCB, ширина 1 бит; данные SOCB. */ Uint16 SOCB:1; // 3 EPWMxSOCB Clear + /* Битовое поле rsvd2, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:12; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ETCLR_REG в одной области памяти. */ union ETCLR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ETCLR_BITS bit;; порядок полей определяет расположение данных. */ struct ETCLR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// Event trigger Force register bit definitions */ +// Event trigger Force register bit definitions */ +/* Описывает структуру ETFRC_BITS; порядок полей определяет расположение данных. */ struct ETFRC_BITS { // bits description + /* Битовое поле INT, ширина 1 бит; данные INT. */ Uint16 INT:1; // 0 EPWMxINTn Force + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 1 reserved + /* Битовое поле SOCA, ширина 1 бит; данные SOCA. */ Uint16 SOCA:1; // 2 EPWMxSOCA Force + /* Битовое поле SOCB, ширина 1 бит; данные SOCB. */ Uint16 SOCB:1; // 3 EPWMxSOCB Force + /* Битовое поле rsvd2, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:12; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений ETFRC_REG в одной области памяти. */ union ETFRC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру ETFRC_BITS bit;; порядок полей определяет расположение данных. */ struct ETFRC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// PWM chopper control register bit definitions */ +// PWM chopper control register bit definitions */ +/* Описывает структуру PCCTL_BITS; порядок полей определяет расположение данных. */ struct PCCTL_BITS { // bits description + /* Битовое поле CHPEN, ширина 1 бит; данные CHPEN. */ Uint16 CHPEN:1; // 0 PWM chopping enable + /* Битовое поле OSHTWTH, ширина 4 бит; данные OSHTWTH. */ Uint16 OSHTWTH:4; // 4:1 One-shot pulse width + /* Битовое поле CHPFREQ, ширина 3 бит; данные CHPFREQ. */ Uint16 CHPFREQ:3; // 7:5 Chopping clock frequency + /* Битовое поле CHPDUTY, ширина 3 бит; данные CHPDUTY. */ Uint16 CHPDUTY:3; // 10:8 Chopping clock Duty cycle + /* Битовое поле rsvd1, ширина 5 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:5; // 15:11 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PCCTL_REG в одной области памяти. */ union PCCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PCCTL_BITS bit;; порядок полей определяет расположение данных. */ struct PCCTL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру HRCNFG_BITS; порядок полей определяет расположение данных. */ struct HRCNFG_BITS { // bits description + /* Битовое поле EDGMODE, ширина 2 бит; данные EDGMODE. */ Uint16 EDGMODE:2; // 1:0 Edge Mode select Bits + /* Битовое поле CTLMODE, ширина 1 бит; данные CTLMODE. */ Uint16 CTLMODE:1; // 2 Control mode Select Bit + /* Битовое поле HRLOAD, ширина 1 бит; данные HRLOAD. */ Uint16 HRLOAD:1; // 3 Shadow mode Select Bit + /* Битовое поле rsvd1, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:12; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений HRCNFG_REG в одной области памяти. */ union HRCNFG_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру HRCNFG_BITS bit;; порядок полей определяет расположение данных. */ struct HRCNFG_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру TBPHS_HRPWM_REG; порядок полей определяет расположение данных. */ struct TBPHS_HRPWM_REG { // bits description + /* Объявляет TBPHSHR — данные TBPHSHR. */ Uint16 TBPHSHR; // 15:0 Extension register for HRPWM Phase (8 bits) + /* Объявляет TBPHS — данные TBPHS. */ Uint16 TBPHS; // 31:16 Phase offset register +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений TBPHS_HRPWM_GROUP в одной области памяти. */ union TBPHS_HRPWM_GROUP { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру TBPHS_HRPWM_REG half;; порядок полей определяет расположение данных. */ struct TBPHS_HRPWM_REG half; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру CMPA_HRPWM_REG; порядок полей определяет расположение данных. */ struct CMPA_HRPWM_REG { // bits description + /* Объявляет CMPAHR — данные CMPAHR. */ Uint16 CMPAHR; // 15:0 Extension register for HRPWM compare (8 bits) + /* Объявляет CMPA — данные CMPA. */ Uint16 CMPA; // 31:16 Compare A reg +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений CMPA_HRPWM_GROUP в одной области памяти. */ union CMPA_HRPWM_GROUP { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру CMPA_HRPWM_REG half;; порядок полей определяет расположение данных. */ struct CMPA_HRPWM_REG half; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру EPWM_REGS; порядок полей определяет расположение данных. */ struct EPWM_REGS { - union TBCTL_REG TBCTL; // - union TBSTS_REG TBSTS; // + /* Объединяет несколько представлений TBCTL_REG TBCTL; в одной области памяти. */ + union TBCTL_REG TBCTL; // + /* Объединяет несколько представлений TBSTS_REG TBSTS; в одной области памяти. */ + union TBSTS_REG TBSTS; // + /* Объединяет несколько представлений TBPHS_HRPWM_GROUP TBPHS; в одной области памяти. */ union TBPHS_HRPWM_GROUP TBPHS; // Union of TBPHS:TBPHSHR + /* Объявляет TBCTR — данные TBCTR. */ Uint16 TBCTR; // Counter - Uint16 TBPRD; // Period register set - Uint16 rsvd1; // + /* Объявляет TBPRD — данные TBPRD. */ + Uint16 TBPRD; // Period register set + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd1; // + /* Объединяет несколько представлений CMPCTL_REG CMPCTL; в одной области памяти. */ union CMPCTL_REG CMPCTL; // Compare control + /* Объединяет несколько представлений CMPA_HRPWM_GROUP CMPA; в одной области памяти. */ union CMPA_HRPWM_GROUP CMPA; // Union of CMPA:CMPAHR + /* Объявляет CMPB — данные CMPB. */ Uint16 CMPB; // Compare B reg + /* Объединяет несколько представлений AQCTL_REG AQCTLA; в одной области памяти. */ union AQCTL_REG AQCTLA; // Action qual output A + /* Объединяет несколько представлений AQCTL_REG AQCTLB; в одной области памяти. */ union AQCTL_REG AQCTLB; // Action qual output B + /* Объединяет несколько представлений AQSFRC_REG AQSFRC; в одной области памяти. */ union AQSFRC_REG AQSFRC; // Action qual SW force - union AQCSFRC_REG AQCSFRC; // Action qualifier continuous SW force + /* Объединяет несколько представлений AQCSFRC_REG AQCSFRC; в одной области памяти. */ + union AQCSFRC_REG AQCSFRC; // Action qualifier continuous SW force + /* Объединяет несколько представлений DBCTL_REG DBCTL; в одной области памяти. */ union DBCTL_REG DBCTL; // Dead-band control + /* Объявляет DBRED — данные DBRED. */ Uint16 DBRED; // Dead-band rising edge delay + /* Объявляет DBFED — данные DBFED. */ Uint16 DBFED; // Dead-band falling edge delay + /* Объединяет несколько представлений TZSEL_REG TZSEL; в одной области памяти. */ union TZSEL_REG TZSEL; // Trip zone select - Uint16 rsvd2; + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd2; + /* Объединяет несколько представлений TZCTL_REG TZCTL; в одной области памяти. */ union TZCTL_REG TZCTL; // Trip zone control + /* Объединяет несколько представлений TZEINT_REG TZEINT; в одной области памяти. */ union TZEINT_REG TZEINT; // Trip zone interrupt enable + /* Объединяет несколько представлений TZFLG_REG TZFLG; в одной области памяти. */ union TZFLG_REG TZFLG; // Trip zone interrupt flags - union TZCLR_REG TZCLR; // Trip zone clear + /* Объединяет несколько представлений TZCLR_REG TZCLR; в одной области памяти. */ + union TZCLR_REG TZCLR; // Trip zone clear + /* Объединяет несколько представлений TZFRC_REG TZFRC; в одной области памяти. */ union TZFRC_REG TZFRC; // Trip zone force interrupt + /* Объединяет несколько представлений ETSEL_REG ETSEL; в одной области памяти. */ union ETSEL_REG ETSEL; // Event trigger selection + /* Объединяет несколько представлений ETPS_REG ETPS; в одной области памяти. */ union ETPS_REG ETPS; // Event trigger pre-scaler + /* Объединяет несколько представлений ETFLG_REG ETFLG; в одной области памяти. */ union ETFLG_REG ETFLG; // Event trigger flags - union ETCLR_REG ETCLR; // Event trigger clear + /* Объединяет несколько представлений ETCLR_REG ETCLR; в одной области памяти. */ + union ETCLR_REG ETCLR; // Event trigger clear + /* Объединяет несколько представлений ETFRC_REG ETFRC; в одной области памяти. */ union ETFRC_REG ETFRC; // Event trigger force + /* Объединяет несколько представлений PCCTL_REG PCCTL; в одной области памяти. */ union PCCTL_REG PCCTL; // PWM chopper control - Uint16 rsvd3; // + /* Объявляет rsvd3 — зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd3; // + /* Объединяет несколько представлений HRCNFG_REG HRCNFG; в одной области памяти. */ union HRCNFG_REG HRCNFG; // HRPWM Config Reg +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; - - + + //--------------------------------------------------------------------------- // External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct EPWM_REGS EPwm1Regs;; порядок элементов сохраняется. */ extern volatile struct EPWM_REGS EPwm1Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct EPWM_REGS EPwm2Regs;; порядок элементов сохраняется. */ extern volatile struct EPWM_REGS EPwm2Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct EPWM_REGS EPwm3Regs;; порядок элементов сохраняется. */ extern volatile struct EPWM_REGS EPwm3Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct EPWM_REGS EPwm4Regs;; порядок элементов сохраняется. */ extern volatile struct EPWM_REGS EPwm4Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct EPWM_REGS EPwm5Regs;; порядок элементов сохраняется. */ extern volatile struct EPWM_REGS EPwm5Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct EPWM_REGS EPwm6Regs;; порядок элементов сохраняется. */ extern volatile struct EPWM_REGS EPwm6Regs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_EPWM_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_EQep.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_EQep.h index c330165..bca8f31 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_EQep.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_EQep.h @@ -1,10 +1,11 @@ +/* Поставляемое TI описание EQep для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:52:13 $ //########################################################################### // // FILE: DSP2833x_EQep.h // -// TITLE: DSP2833x Enhanced Quadrature Encoder Pulse Module +// TITLE: DSP2833x Enhanced Quadrature Encoder Pulse Module // Register Bit Definitions. // //########################################################################### @@ -12,229 +13,393 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_EQEP_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_EQEP_H +/* Определяет защитный символ или переключатель DSP2833x_EQEP_H для последующей компиляции. */ #define DSP2833x_EQEP_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //---------------------------------------------------- -// Capture decoder control register bit definitions */ +// Capture decoder control register bit definitions */ +/* Описывает структуру QDECCTL_BITS; порядок полей определяет расположение данных. */ struct QDECCTL_BITS { // bits description + /* Битовое поле rsvd1, ширина 5 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:5; // 4:0 reserved + /* Битовое поле QSP, ширина 1 бит; данные QSP. */ Uint16 QSP:1; // 5 QEPS input polarity + /* Битовое поле QIP, ширина 1 бит; данные QIP. */ Uint16 QIP:1; // 6 QEPI input polarity + /* Битовое поле QBP, ширина 1 бит; данные QBP. */ Uint16 QBP:1; // 7 QEPB input polarity + /* Битовое поле QAP, ширина 1 бит; данные QAP. */ Uint16 QAP:1; // 8 QEPA input polarity + /* Битовое поле IGATE, ширина 1 бит; данные IGATE. */ Uint16 IGATE:1; // 9 Index pulse gating option + /* Битовое поле SWAP, ширина 1 бит; данные SWAP. */ Uint16 SWAP:1; // 10 CLK/DIR signal source for Position Counter + /* Битовое поле XCR, ширина 1 бит; данные XCR. */ Uint16 XCR:1; // 11 External clock rate + /* Битовое поле SPSEL, ширина 1 бит; данные SPSEL. */ Uint16 SPSEL:1; // 12 Sync output pin select + /* Битовое поле SOEN, ширина 1 бит; данные SOEN. */ Uint16 SOEN:1; // 13 Enable position compare sync + /* Битовое поле QSRC, ширина 2 бит; данные QSRC. */ Uint16 QSRC:2; // 15:14 Position counter source +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений QDECCTL_REG в одной области памяти. */ union QDECCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру QDECCTL_BITS bit;; порядок полей определяет расположение данных. */ struct QDECCTL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// QEP control register bit definitions */ +// QEP control register bit definitions */ +/* Описывает структуру QEPCTL_BITS; порядок полей определяет расположение данных. */ struct QEPCTL_BITS { // bits description + /* Битовое поле WDE, ширина 1 бит; данные WDE. */ Uint16 WDE:1; // 0 QEP watchdog enable + /* Битовое поле UTE, ширина 1 бит; данные UTE. */ Uint16 UTE:1; // 1 QEP unit timer enable + /* Битовое поле QCLM, ширина 1 бит; данные QCLM. */ Uint16 QCLM:1; // 2 QEP capture latch mode + /* Битовое поле QPEN, ширина 1 бит; данные QPEN. */ Uint16 QPEN:1; // 3 Quadrature position counter enable + /* Битовое поле IEL, ширина 2 бит; данные IEL. */ Uint16 IEL:2; // 5:4 Index event latch + /* Битовое поле SEL, ширина 1 бит; данные SEL. */ Uint16 SEL:1; // 6 Strobe event latch + /* Битовое поле SWI, ширина 1 бит; данные SWI. */ Uint16 SWI:1; // 7 Software init position counter + /* Битовое поле IEI, ширина 2 бит; данные IEI. */ Uint16 IEI:2; // 9:8 Index event init of position count + /* Битовое поле SEI, ширина 2 бит; данные SEI. */ Uint16 SEI:2; // 11:10 Strobe event init + /* Битовое поле PCRM, ширина 2 бит; данные PCRM. */ Uint16 PCRM:2; // 13:12 Position counter reset + /* Битовое поле FREE_SOFT, ширина 2 бит; данные FREE_SOFT. */ Uint16 FREE_SOFT:2; // 15:14 Emulation mode +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений QEPCTL_REG в одной области памяти. */ union QEPCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру QEPCTL_BITS bit;; порядок полей определяет расположение данных. */ struct QEPCTL_BITS bit; -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; //---------------------------------------------------- -// Quadrature capture control register bit definitions */ +// Quadrature capture control register bit definitions */ +/* Описывает структуру QCAPCTL_BITS; порядок полей определяет расположение данных. */ struct QCAPCTL_BITS { // bits description - Uint16 UPPS:4; // 3:0 Unit position pre-scale + /* Битовое поле UPPS, ширина 4 бит; данные UPPS. */ + Uint16 UPPS:4; // 3:0 Unit position pre-scale + /* Битовое поле CCPS, ширина 3 бит; данные CCPS. */ Uint16 CCPS:3; // 6:4 QEP capture timer pre-scale + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 14:7 reserved + /* Битовое поле CEN, ширина 1 бит; данные CEN. */ Uint16 CEN:1; // 15 Enable QEP capture +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений QCAPCTL_REG в одной области памяти. */ union QCAPCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру QCAPCTL_BITS bit;; порядок полей определяет расположение данных. */ struct QCAPCTL_BITS bit; -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; //---------------------------------------------------- -// Position compare control register bit definitions */ +// Position compare control register bit definitions */ +/* Описывает структуру QPOSCTL_BITS; порядок полей определяет расположение данных. */ struct QPOSCTL_BITS { // bits description + /* Битовое поле PCSPW, ширина 12 бит; данные PCSPW. */ Uint16 PCSPW:12; // 11:0 Position compare sync pulse width + /* Битовое поле PCE, ширина 1 бит; данные PCE. */ Uint16 PCE:1; // 12 Position compare enable/disable + /* Битовое поле PCPOL, ширина 1 бит; данные PCPOL. */ Uint16 PCPOL:1; // 13 Polarity of sync output + /* Битовое поле PCLOAD, ширина 1 бит; данные PCLOAD. */ Uint16 PCLOAD:1; // 14 Position compare of shadow load + /* Битовое поле PCSHDW, ширина 1 бит; данные PCSHDW. */ Uint16 PCSHDW:1; // 15 Position compare shadow enable +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений QPOSCTL_REG в одной области памяти. */ union QPOSCTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру QPOSCTL_BITS bit;; порядок полей определяет расположение данных. */ struct QPOSCTL_BITS bit; -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; //---------------------------------------------------- -// QEP interrupt control register bit definitions */ +// QEP interrupt control register bit definitions */ +/* Описывает структуру QEINT_BITS; порядок полей определяет расположение данных. */ struct QEINT_BITS { // bits description + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 0 reserved + /* Битовое поле PCE, ширина 1 бит; данные PCE. */ Uint16 PCE:1; // 1 Position counter error + /* Битовое поле QPE, ширина 1 бит; данные QPE. */ Uint16 QPE:1; // 2 Quadrature phase error + /* Битовое поле QDC, ширина 1 бит; данные QDC. */ Uint16 QDC:1; // 3 Quadrature dir change + /* Битовое поле WTO, ширина 1 бит; данные WTO. */ Uint16 WTO:1; // 4 Watchdog timeout + /* Битовое поле PCU, ширина 1 бит; данные PCU. */ Uint16 PCU:1; // 5 Position counter underflow + /* Битовое поле PCO, ширина 1 бит; данные PCO. */ Uint16 PCO:1; // 6 Position counter overflow + /* Битовое поле PCR, ширина 1 бит; данные PCR. */ Uint16 PCR:1; // 7 Position compare ready + /* Битовое поле PCM, ширина 1 бит; данные PCM. */ Uint16 PCM:1; // 8 Position compare match + /* Битовое поле SEL, ширина 1 бит; данные SEL. */ Uint16 SEL:1; // 9 Strobe event latch + /* Битовое поле IEL, ширина 1 бит; данные IEL. */ Uint16 IEL:1; // 10 Event latch + /* Битовое поле UTO, ширина 1 бит; данные UTO. */ Uint16 UTO:1; // 11 Unit timeout + /* Битовое поле rsvd2, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:4; // 15:12 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений QEINT_REG в одной области памяти. */ union QEINT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру QEINT_BITS bit;; порядок полей определяет расположение данных. */ struct QEINT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// QEP interrupt status register bit definitions */ +// QEP interrupt status register bit definitions */ +/* Описывает структуру QFLG_BITS; порядок полей определяет расположение данных. */ struct QFLG_BITS { // bits description - Uint16 INT:1; // 0 Global interrupt + /* Битовое поле INT, ширина 1 бит; данные INT. */ + Uint16 INT:1; // 0 Global interrupt + /* Битовое поле PCE, ширина 1 бит; данные PCE. */ Uint16 PCE:1; // 1 Position counter error + /* Битовое поле PHE, ширина 1 бит; данные PHE. */ Uint16 PHE:1; // 2 Quadrature phase error + /* Битовое поле QDC, ширина 1 бит; данные QDC. */ Uint16 QDC:1; // 3 Quadrature dir change + /* Битовое поле WTO, ширина 1 бит; данные WTO. */ Uint16 WTO:1; // 4 Watchdog timeout + /* Битовое поле PCU, ширина 1 бит; данные PCU. */ Uint16 PCU:1; // 5 Position counter underflow + /* Битовое поле PCO, ширина 1 бит; данные PCO. */ Uint16 PCO:1; // 6 Position counter overflow + /* Битовое поле PCR, ширина 1 бит; данные PCR. */ Uint16 PCR:1; // 7 Position compare ready + /* Битовое поле PCM, ширина 1 бит; данные PCM. */ Uint16 PCM:1; // 8 Position compare match + /* Битовое поле SEL, ширина 1 бит; данные SEL. */ Uint16 SEL:1; // 9 Strobe event latch + /* Битовое поле IEL, ширина 1 бит; данные IEL. */ Uint16 IEL:1; // 10 Event latch + /* Битовое поле UTO, ширина 1 бит; данные UTO. */ Uint16 UTO:1; // 11 Unit timeout + /* Битовое поле rsvd2, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:4; // 15:12 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений QFLG_REG в одной области памяти. */ union QFLG_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру QFLG_BITS bit;; порядок полей определяет расположение данных. */ struct QFLG_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- -// QEP interrupt force register bit definitions */ +// QEP interrupt force register bit definitions */ +/* Описывает структуру QFRC_BITS; порядок полей определяет расположение данных. */ struct QFRC_BITS { // bits description + /* Битовое поле reserved, ширина 1 бит; Зарезервировано; сохраняет положение следующих полей в аппаратном регистре. */ Uint16 reserved:1; // 0 Reserved + /* Битовое поле PCE, ширина 1 бит; данные PCE. */ Uint16 PCE:1; // 1 Position counter error + /* Битовое поле PHE, ширина 1 бит; данные PHE. */ Uint16 PHE:1; // 2 Quadrature phase error + /* Битовое поле QDC, ширина 1 бит; данные QDC. */ Uint16 QDC:1; // 3 Quadrature dir change + /* Битовое поле WTO, ширина 1 бит; данные WTO. */ Uint16 WTO:1; // 4 Watchdog timeout + /* Битовое поле PCU, ширина 1 бит; данные PCU. */ Uint16 PCU:1; // 5 Position counter underflow + /* Битовое поле PCO, ширина 1 бит; данные PCO. */ Uint16 PCO:1; // 6 Position counter overflow + /* Битовое поле PCR, ширина 1 бит; данные PCR. */ Uint16 PCR:1; // 7 Position compare ready + /* Битовое поле PCM, ширина 1 бит; данные PCM. */ Uint16 PCM:1; // 8 Position compare match + /* Битовое поле SEL, ширина 1 бит; данные SEL. */ Uint16 SEL:1; // 9 Strobe event latch + /* Битовое поле IEL, ширина 1 бит; данные IEL. */ Uint16 IEL:1; // 10 Event latch + /* Битовое поле UTO, ширина 1 бит; данные UTO. */ Uint16 UTO:1; // 11 Unit timeout + /* Битовое поле rsvd2, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:4; // 15:12 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений QFRC_REG в одной области памяти. */ union QFRC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру QFRC_BITS bit;; порядок полей определяет расположение данных. */ struct QFRC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; -// V1.1 Added UPEVNT (bit 7) This reflects changes +// V1.1 Added UPEVNT (bit 7) This reflects changes // made as of F2833x Rev A devices //---------------------------------------------------- -// QEP status register bit definitions */ +// QEP status register bit definitions */ +/* Описывает структуру QEPSTS_BITS; порядок полей определяет расположение данных. */ struct QEPSTS_BITS { // bits description + /* Битовое поле PCEF, ширина 1 бит; данные PCEF. */ Uint16 PCEF:1; // 0 Position counter error + /* Битовое поле FIMF, ширина 1 бит; данные FIMF. */ Uint16 FIMF:1; // 1 First index marker + /* Битовое поле CDEF, ширина 1 бит; данные CDEF. */ Uint16 CDEF:1; // 2 Capture direction error + /* Битовое поле COEF, ширина 1 бит; данные COEF. */ Uint16 COEF:1; // 3 Capture overflow error + /* Битовое поле QDLF, ширина 1 бит; данные QDLF. */ Uint16 QDLF:1; // 4 QEP direction latch + /* Битовое поле QDF, ширина 1 бит; данные QDF. */ Uint16 QDF:1; // 5 Quadrature direction + /* Битовое поле FIDF, ширина 1 бит; данные FIDF. */ Uint16 FIDF:1; // 6 Direction on first index marker + /* Битовое поле UPEVNT, ширина 1 бит; данные UPEVNT. */ Uint16 UPEVNT:1; // 7 Unit position event flag + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений QEPSTS_REG в одной области памяти. */ union QEPSTS_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру QEPSTS_BITS bit;; порядок полей определяет расположение данных. */ struct QEPSTS_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- +/* Описывает структуру EQEP_REGS; порядок полей определяет расположение данных. */ struct EQEP_REGS { - Uint32 QPOSCNT; // Position counter + /* Объявляет QPOSCNT — данные QPOSCNT. */ + Uint32 QPOSCNT; // Position counter + /* Объявляет QPOSINIT — данные QPOSINIT. */ Uint32 QPOSINIT; // Position counter init + /* Объявляет QPOSMAX — данные QPOSMAX. */ Uint32 QPOSMAX; // Maximum position count + /* Объявляет QPOSCMP — данные QPOSCMP. */ Uint32 QPOSCMP; // Position compare + /* Объявляет QPOSILAT — данные QPOSILAT. */ Uint32 QPOSILAT; // Index position latch + /* Объявляет QPOSSLAT — данные QPOSSLAT. */ Uint32 QPOSSLAT; // Strobe position latch + /* Объявляет QPOSLAT — данные QPOSLAT. */ Uint32 QPOSLAT; // Position latch + /* Объявляет QUTMR — данные QUTMR. */ Uint32 QUTMR; // Unit timer + /* Объявляет QUPRD — данные QUPRD. */ Uint32 QUPRD; // Unit period + /* Объявляет QWDTMR — данные QWDTMR. */ Uint16 QWDTMR; // QEP watchdog timer + /* Объявляет QWDPRD — данные QWDPRD. */ Uint16 QWDPRD; // QEP watchdog period + /* Объединяет несколько представлений QDECCTL_REG QDECCTL; в одной области памяти. */ union QDECCTL_REG QDECCTL; // Quadrature decoder control - union QEPCTL_REG QEPCTL; // QEP control - union QCAPCTL_REG QCAPCTL; // Quadrature capture control + /* Объединяет несколько представлений QEPCTL_REG QEPCTL; в одной области памяти. */ + union QEPCTL_REG QEPCTL; // QEP control + /* Объединяет несколько представлений QCAPCTL_REG QCAPCTL; в одной области памяти. */ + union QCAPCTL_REG QCAPCTL; // Quadrature capture control + /* Объединяет несколько представлений QPOSCTL_REG QPOSCTL; в одной области памяти. */ union QPOSCTL_REG QPOSCTL; // Position compare control - union QEINT_REG QEINT; // QEP interrupt control + /* Объединяет несколько представлений QEINT_REG QEINT; в одной области памяти. */ + union QEINT_REG QEINT; // QEP interrupt control + /* Объединяет несколько представлений QFLG_REG QFLG; в одной области памяти. */ union QFLG_REG QFLG; // QEP interrupt flag - union QFLG_REG QCLR; // QEP interrupt clear - union QFRC_REG QFRC; // QEP interrupt force + /* Объединяет несколько представлений QFLG_REG QCLR; в одной области памяти. */ + union QFLG_REG QCLR; // QEP interrupt clear + /* Объединяет несколько представлений QFRC_REG QFRC; в одной области памяти. */ + union QFRC_REG QFRC; // QEP interrupt force + /* Объединяет несколько представлений QEPSTS_REG QEPSTS; в одной области памяти. */ union QEPSTS_REG QEPSTS; // QEP status + /* Объявляет QCTMR — данные QCTMR. */ Uint16 QCTMR; // QEP capture timer + /* Объявляет QCPRD — данные QCPRD. */ Uint16 QCPRD; // QEP capture period + /* Объявляет QCTMRLAT — данные QCTMRLAT. */ Uint16 QCTMRLAT; // QEP capture latch + /* Объявляет QCPRDLAT — данные QCPRDLAT. */ Uint16 QCPRDLAT; // QEP capture period latch + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1[30]; // reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; - - + + //--------------------------------------------------------------------------- // GPI/O External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct EQEP_REGS EQep1Regs;; порядок элементов сохраняется. */ extern volatile struct EQEP_REGS EQep1Regs; +/* Продолжает список аргументов, полей или выражение extern volatile struct EQEP_REGS EQep2Regs;; порядок элементов сохраняется. */ extern volatile struct EQEP_REGS EQep2Regs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_EQEP_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Gpio.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Gpio.h index 5759c81..9bb8924 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Gpio.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Gpio.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Gpio для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/4 $ // Checkin $Date: November 15, 2007 09:58:53 $ //########################################################################### @@ -11,298 +12,555 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_GPIO_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_GPIO_H +/* Определяет защитный символ или переключатель DSP2833x_GPIO_H для последующей компиляции. */ #define DSP2833x_GPIO_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //---------------------------------------------------- // GPIO A control register bit definitions */ +/* Описывает структуру GPACTRL_BITS; порядок полей определяет расположение данных. */ struct GPACTRL_BITS { // bits description + /* Битовое поле QUALPRD0, ширина 8 бит; данные QUALPRD0. */ Uint16 QUALPRD0:8; // 7:0 Qual period + /* Битовое поле QUALPRD1, ширина 8 бит; данные QUALPRD1. */ Uint16 QUALPRD1:8; // 15:8 Qual period + /* Битовое поле QUALPRD2, ширина 8 бит; данные QUALPRD2. */ Uint16 QUALPRD2:8; // 23:16 Qual period + /* Битовое поле QUALPRD3, ширина 8 бит; данные QUALPRD3. */ Uint16 QUALPRD3:8; // 31:24 Qual period +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPACTRL_REG в одной области памяти. */ union GPACTRL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPACTRL_BITS bit;; порядок полей определяет расположение данных. */ struct GPACTRL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // GPIO B control register bit definitions */ +/* Описывает структуру GPBCTRL_BITS; порядок полей определяет расположение данных. */ struct GPBCTRL_BITS { // bits description + /* Битовое поле QUALPRD0, ширина 8 бит; данные QUALPRD0. */ Uint16 QUALPRD0:8; // 7:0 Qual period + /* Битовое поле QUALPRD1, ширина 8 бит; данные QUALPRD1. */ Uint16 QUALPRD1:8; // 15:8 Qual period + /* Битовое поле QUALPRD2, ширина 8 бит; данные QUALPRD2. */ Uint16 QUALPRD2:8; // 23:16 Qual period + /* Битовое поле QUALPRD3, ширина 8 бит; данные QUALPRD3. */ Uint16 QUALPRD3:8; // 31:24 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPBCTRL_REG в одной области памяти. */ union GPBCTRL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPBCTRL_BITS bit;; порядок полей определяет расположение данных. */ struct GPBCTRL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // GPIO A Qual/MUX select register bit definitions */ +/* Описывает структуру GPA1_BITS; порядок полей определяет расположение данных. */ struct GPA1_BITS { // bits description + /* Битовое поле GPIO0, ширина 2 бит; аппаратная линия ввода/вывода GPIO0. */ Uint16 GPIO0:2; // 1:0 GPIO0 + /* Битовое поле GPIO1, ширина 2 бит; аппаратная линия ввода/вывода GPIO1. */ Uint16 GPIO1:2; // 3:2 GPIO1 + /* Битовое поле GPIO2, ширина 2 бит; аппаратная линия ввода/вывода GPIO2. */ Uint16 GPIO2:2; // 5:4 GPIO2 + /* Битовое поле GPIO3, ширина 2 бит; аппаратная линия ввода/вывода GPIO3. */ Uint16 GPIO3:2; // 7:6 GPIO3 + /* Битовое поле GPIO4, ширина 2 бит; аппаратная линия ввода/вывода GPIO4. */ Uint16 GPIO4:2; // 9:8 GPIO4 + /* Битовое поле GPIO5, ширина 2 бит; аппаратная линия ввода/вывода GPIO5. */ Uint16 GPIO5:2; // 11:10 GPIO5 + /* Битовое поле GPIO6, ширина 2 бит; аппаратная линия ввода/вывода GPIO6. */ Uint16 GPIO6:2; // 13:12 GPIO6 + /* Битовое поле GPIO7, ширина 2 бит; аппаратная линия ввода/вывода GPIO7. */ Uint16 GPIO7:2; // 15:14 GPIO7 + /* Битовое поле GPIO8, ширина 2 бит; аппаратная линия ввода/вывода GPIO8. */ Uint16 GPIO8:2; // 17:16 GPIO8 + /* Битовое поле GPIO9, ширина 2 бит; аппаратная линия ввода/вывода GPIO9. */ Uint16 GPIO9:2; // 19:18 GPIO9 + /* Битовое поле GPIO10, ширина 2 бит; аппаратная линия ввода/вывода GPIO10. */ Uint16 GPIO10:2; // 21:20 GPIO10 + /* Битовое поле GPIO11, ширина 2 бит; аппаратная линия ввода/вывода GPIO11. */ Uint16 GPIO11:2; // 23:22 GPIO11 + /* Битовое поле GPIO12, ширина 2 бит; аппаратная линия ввода/вывода GPIO12. */ Uint16 GPIO12:2; // 25:24 GPIO12 + /* Битовое поле GPIO13, ширина 2 бит; аппаратная линия ввода/вывода GPIO13. */ Uint16 GPIO13:2; // 27:26 GPIO13 + /* Битовое поле GPIO14, ширина 2 бит; аппаратная линия ввода/вывода GPIO14. */ Uint16 GPIO14:2; // 29:28 GPIO14 + /* Битовое поле GPIO15, ширина 2 бит; аппаратная линия ввода/вывода GPIO15. */ Uint16 GPIO15:2; // 31:30 GPIO15 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPA2_BITS; порядок полей определяет расположение данных. */ struct GPA2_BITS { // bits description + /* Битовое поле GPIO16, ширина 2 бит; аппаратная линия ввода/вывода GPIO16. */ Uint16 GPIO16:2; // 1:0 GPIO16 + /* Битовое поле GPIO17, ширина 2 бит; аппаратная линия ввода/вывода GPIO17. */ Uint16 GPIO17:2; // 3:2 GPIO17 + /* Битовое поле GPIO18, ширина 2 бит; аппаратная линия ввода/вывода GPIO18. */ Uint16 GPIO18:2; // 5:4 GPIO18 + /* Битовое поле GPIO19, ширина 2 бит; аппаратная линия ввода/вывода GPIO19. */ Uint16 GPIO19:2; // 7:6 GPIO19 + /* Битовое поле GPIO20, ширина 2 бит; аппаратная линия ввода/вывода GPIO20. */ Uint16 GPIO20:2; // 9:8 GPIO20 + /* Битовое поле GPIO21, ширина 2 бит; аппаратная линия ввода/вывода GPIO21. */ Uint16 GPIO21:2; // 11:10 GPIO21 + /* Битовое поле GPIO22, ширина 2 бит; аппаратная линия ввода/вывода GPIO22. */ Uint16 GPIO22:2; // 13:12 GPIO22 + /* Битовое поле GPIO23, ширина 2 бит; аппаратная линия ввода/вывода GPIO23. */ Uint16 GPIO23:2; // 15:14 GPIO23 + /* Битовое поле GPIO24, ширина 2 бит; аппаратная линия ввода/вывода GPIO24. */ Uint16 GPIO24:2; // 17:16 GPIO24 + /* Битовое поле GPIO25, ширина 2 бит; аппаратная линия ввода/вывода GPIO25. */ Uint16 GPIO25:2; // 19:18 GPIO25 + /* Битовое поле GPIO26, ширина 2 бит; аппаратная линия ввода/вывода GPIO26. */ Uint16 GPIO26:2; // 21:20 GPIO26 + /* Битовое поле GPIO27, ширина 2 бит; аппаратная линия ввода/вывода GPIO27. */ Uint16 GPIO27:2; // 23:22 GPIO27 + /* Битовое поле GPIO28, ширина 2 бит; аппаратная линия ввода/вывода GPIO28. */ Uint16 GPIO28:2; // 25:24 GPIO28 + /* Битовое поле GPIO29, ширина 2 бит; аппаратная линия ввода/вывода GPIO29. */ Uint16 GPIO29:2; // 27:26 GPIO29 + /* Битовое поле GPIO30, ширина 2 бит; аппаратная линия ввода/вывода GPIO30. */ Uint16 GPIO30:2; // 29:28 GPIO30 + /* Битовое поле GPIO31, ширина 2 бит; аппаратная линия ввода/вывода GPIO31. */ Uint16 GPIO31:2; // 31:30 GPIO31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPB1_BITS; порядок полей определяет расположение данных. */ struct GPB1_BITS { // bits description + /* Битовое поле GPIO32, ширина 2 бит; аппаратная линия ввода/вывода GPIO32. */ Uint16 GPIO32:2; // 1:0 GPIO32 + /* Битовое поле GPIO33, ширина 2 бит; аппаратная линия ввода/вывода GPIO33. */ Uint16 GPIO33:2; // 3:2 GPIO33 + /* Битовое поле GPIO34, ширина 2 бит; аппаратная линия ввода/вывода GPIO34. */ Uint16 GPIO34:2; // 5:4 GPIO34 + /* Битовое поле GPIO35, ширина 2 бит; аппаратная линия ввода/вывода GPIO35. */ Uint16 GPIO35:2; // 7:6 GPIO35 + /* Битовое поле GPIO36, ширина 2 бит; аппаратная линия ввода/вывода GPIO36. */ Uint16 GPIO36:2; // 9:8 GPIO36 + /* Битовое поле GPIO37, ширина 2 бит; аппаратная линия ввода/вывода GPIO37. */ Uint16 GPIO37:2; // 11:10 GPIO37 + /* Битовое поле GPIO38, ширина 2 бит; аппаратная линия ввода/вывода GPIO38. */ Uint16 GPIO38:2; // 13:12 GPIO38 + /* Битовое поле GPIO39, ширина 2 бит; аппаратная линия ввода/вывода GPIO39. */ Uint16 GPIO39:2; // 15:14 GPIO39 + /* Битовое поле GPIO40, ширина 2 бит; аппаратная линия ввода/вывода GPIO40. */ Uint16 GPIO40:2; // 17:16 GPIO40 + /* Битовое поле GPIO41, ширина 2 бит; аппаратная линия ввода/вывода GPIO41. */ Uint16 GPIO41:2; // 19:16 GPIO41 + /* Битовое поле GPIO42, ширина 2 бит; аппаратная линия ввода/вывода GPIO42. */ Uint16 GPIO42:2; // 21:20 GPIO42 + /* Битовое поле GPIO43, ширина 2 бит; аппаратная линия ввода/вывода GPIO43. */ Uint16 GPIO43:2; // 23:22 GPIO43 + /* Битовое поле GPIO44, ширина 2 бит; аппаратная линия ввода/вывода GPIO44. */ Uint16 GPIO44:2; // 25:24 GPIO44 + /* Битовое поле GPIO45, ширина 2 бит; аппаратная линия ввода/вывода GPIO45. */ Uint16 GPIO45:2; // 27:26 GPIO45 + /* Битовое поле GPIO46, ширина 2 бит; аппаратная линия ввода/вывода GPIO46. */ Uint16 GPIO46:2; // 29:28 GPIO46 + /* Битовое поле GPIO47, ширина 2 бит; аппаратная линия ввода/вывода GPIO47. */ Uint16 GPIO47:2; // 31:30 GPIO47 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPB2_BITS; порядок полей определяет расположение данных. */ struct GPB2_BITS { // bits description + /* Битовое поле GPIO48, ширина 2 бит; аппаратная линия ввода/вывода GPIO48. */ Uint16 GPIO48:2; // 1:0 GPIO48 + /* Битовое поле GPIO49, ширина 2 бит; аппаратная линия ввода/вывода GPIO49. */ Uint16 GPIO49:2; // 3:2 GPIO49 + /* Битовое поле GPIO50, ширина 2 бит; аппаратная линия ввода/вывода GPIO50. */ Uint16 GPIO50:2; // 5:4 GPIO50 + /* Битовое поле GPIO51, ширина 2 бит; аппаратная линия ввода/вывода GPIO51. */ Uint16 GPIO51:2; // 7:6 GPIO51 + /* Битовое поле GPIO52, ширина 2 бит; аппаратная линия ввода/вывода GPIO52. */ Uint16 GPIO52:2; // 9:8 GPIO52 + /* Битовое поле GPIO53, ширина 2 бит; аппаратная линия ввода/вывода GPIO53. */ Uint16 GPIO53:2; // 11:10 GPIO53 + /* Битовое поле GPIO54, ширина 2 бит; аппаратная линия ввода/вывода GPIO54. */ Uint16 GPIO54:2; // 13:12 GPIO54 + /* Битовое поле GPIO55, ширина 2 бит; аппаратная линия ввода/вывода GPIO55. */ Uint16 GPIO55:2; // 15:14 GPIO55 + /* Битовое поле GPIO56, ширина 2 бит; аппаратная линия ввода/вывода GPIO56. */ Uint16 GPIO56:2; // 17:16 GPIO56 + /* Битовое поле GPIO57, ширина 2 бит; аппаратная линия ввода/вывода GPIO57. */ Uint16 GPIO57:2; // 19:18 GPIO57 + /* Битовое поле GPIO58, ширина 2 бит; аппаратная линия ввода/вывода GPIO58. */ Uint16 GPIO58:2; // 21:20 GPIO58 + /* Битовое поле GPIO59, ширина 2 бит; аппаратная линия ввода/вывода GPIO59. */ Uint16 GPIO59:2; // 23:22 GPIO59 + /* Битовое поле GPIO60, ширина 2 бит; аппаратная линия ввода/вывода GPIO60. */ Uint16 GPIO60:2; // 25:24 GPIO60 + /* Битовое поле GPIO61, ширина 2 бит; аппаратная линия ввода/вывода GPIO61. */ Uint16 GPIO61:2; // 27:26 GPIO61 + /* Битовое поле GPIO62, ширина 2 бит; аппаратная линия ввода/вывода GPIO62. */ Uint16 GPIO62:2; // 29:28 GPIO62 + /* Битовое поле GPIO63, ширина 2 бит; аппаратная линия ввода/вывода GPIO63. */ Uint16 GPIO63:2; // 31:30 GPIO63 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPC1_BITS; порядок полей определяет расположение данных. */ struct GPC1_BITS { // bits description + /* Битовое поле GPIO64, ширина 2 бит; аппаратная линия ввода/вывода GPIO64. */ Uint16 GPIO64:2; // 1:0 GPIO64 + /* Битовое поле GPIO65, ширина 2 бит; аппаратная линия ввода/вывода GPIO65. */ Uint16 GPIO65:2; // 3:2 GPIO65 + /* Битовое поле GPIO66, ширина 2 бит; аппаратная линия ввода/вывода GPIO66. */ Uint16 GPIO66:2; // 5:4 GPIO66 + /* Битовое поле GPIO67, ширина 2 бит; аппаратная линия ввода/вывода GPIO67. */ Uint16 GPIO67:2; // 7:6 GPIO67 + /* Битовое поле GPIO68, ширина 2 бит; аппаратная линия ввода/вывода GPIO68. */ Uint16 GPIO68:2; // 9:8 GPIO68 + /* Битовое поле GPIO69, ширина 2 бит; аппаратная линия ввода/вывода GPIO69. */ Uint16 GPIO69:2; // 11:10 GPIO69 + /* Битовое поле GPIO70, ширина 2 бит; аппаратная линия ввода/вывода GPIO70. */ Uint16 GPIO70:2; // 13:12 GPIO70 + /* Битовое поле GPIO71, ширина 2 бит; аппаратная линия ввода/вывода GPIO71. */ Uint16 GPIO71:2; // 15:14 GPIO71 + /* Битовое поле GPIO72, ширина 2 бит; аппаратная линия ввода/вывода GPIO72. */ Uint16 GPIO72:2; // 17:16 GPIO72 + /* Битовое поле GPIO73, ширина 2 бит; аппаратная линия ввода/вывода GPIO73. */ Uint16 GPIO73:2; // 19:18 GPIO73 + /* Битовое поле GPIO74, ширина 2 бит; аппаратная линия ввода/вывода GPIO74. */ Uint16 GPIO74:2; // 21:20 GPIO74 + /* Битовое поле GPIO75, ширина 2 бит; аппаратная линия ввода/вывода GPIO75. */ Uint16 GPIO75:2; // 23:22 GPIO75 + /* Битовое поле GPIO76, ширина 2 бит; аппаратная линия ввода/вывода GPIO76. */ Uint16 GPIO76:2; // 25:24 GPIO76 + /* Битовое поле GPIO77, ширина 2 бит; аппаратная линия ввода/вывода GPIO77. */ Uint16 GPIO77:2; // 27:26 GPIO77 + /* Битовое поле GPIO78, ширина 2 бит; аппаратная линия ввода/вывода GPIO78. */ Uint16 GPIO78:2; // 29:28 GPIO78 + /* Битовое поле GPIO79, ширина 2 бит; аппаратная линия ввода/вывода GPIO79. */ Uint16 GPIO79:2; // 31:30 GPIO79 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPC2_BITS; порядок полей определяет расположение данных. */ struct GPC2_BITS { // bits description + /* Битовое поле GPIO80, ширина 2 бит; аппаратная линия ввода/вывода GPIO80. */ Uint16 GPIO80:2; // 1:0 GPIO80 + /* Битовое поле GPIO81, ширина 2 бит; аппаратная линия ввода/вывода GPIO81. */ Uint16 GPIO81:2; // 3:2 GPIO81 + /* Битовое поле GPIO82, ширина 2 бит; аппаратная линия ввода/вывода GPIO82. */ Uint16 GPIO82:2; // 5:4 GPIO82 + /* Битовое поле GPIO83, ширина 2 бит; аппаратная линия ввода/вывода GPIO83. */ Uint16 GPIO83:2; // 7:6 GPIO83 + /* Битовое поле GPIO84, ширина 2 бит; аппаратная линия ввода/вывода GPIO84. */ Uint16 GPIO84:2; // 9:8 GPIO84 + /* Битовое поле GPIO85, ширина 2 бит; аппаратная линия ввода/вывода GPIO85. */ Uint16 GPIO85:2; // 11:10 GPIO85 + /* Битовое поле GPIO86, ширина 2 бит; аппаратная линия ввода/вывода GPIO86. */ Uint16 GPIO86:2; // 13:12 GPIO86 + /* Битовое поле GPIO87, ширина 2 бит; аппаратная линия ввода/вывода GPIO87. */ Uint16 GPIO87:2; // 15:14 GPIO87 + /* Битовое поле rsvd, ширина 16 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:16; // 31:16 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPA1_REG в одной области памяти. */ union GPA1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPA1_BITS bit;; порядок полей определяет расположение данных. */ struct GPA1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPA2_REG в одной области памяти. */ union GPA2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPA2_BITS bit;; порядок полей определяет расположение данных. */ struct GPA2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPB1_REG в одной области памяти. */ union GPB1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPB1_BITS bit;; порядок полей определяет расположение данных. */ struct GPB1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPB2_REG в одной области памяти. */ union GPB2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPB2_BITS bit;; порядок полей определяет расположение данных. */ struct GPB2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPC1_REG в одной области памяти. */ union GPC1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPC1_BITS bit;; порядок полей определяет расположение данных. */ struct GPC1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPC2_REG в одной области памяти. */ union GPC2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPC2_BITS bit;; порядок полей определяет расположение данных. */ struct GPC2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // GPIO A DIR/TOGGLE/SET/CLEAR register bit definitions */ +/* Описывает структуру GPADAT_BITS; порядок полей определяет расположение данных. */ struct GPADAT_BITS { // bits description + /* Битовое поле GPIO0, ширина 1 бит; аппаратная линия ввода/вывода GPIO0. */ Uint16 GPIO0:1; // 0 GPIO0 + /* Битовое поле GPIO1, ширина 1 бит; аппаратная линия ввода/вывода GPIO1. */ Uint16 GPIO1:1; // 1 GPIO1 + /* Битовое поле GPIO2, ширина 1 бит; аппаратная линия ввода/вывода GPIO2. */ Uint16 GPIO2:1; // 2 GPIO2 + /* Битовое поле GPIO3, ширина 1 бит; аппаратная линия ввода/вывода GPIO3. */ Uint16 GPIO3:1; // 3 GPIO3 + /* Битовое поле GPIO4, ширина 1 бит; аппаратная линия ввода/вывода GPIO4. */ Uint16 GPIO4:1; // 4 GPIO4 + /* Битовое поле GPIO5, ширина 1 бит; аппаратная линия ввода/вывода GPIO5. */ Uint16 GPIO5:1; // 5 GPIO5 + /* Битовое поле GPIO6, ширина 1 бит; аппаратная линия ввода/вывода GPIO6. */ Uint16 GPIO6:1; // 6 GPIO6 + /* Битовое поле GPIO7, ширина 1 бит; аппаратная линия ввода/вывода GPIO7. */ Uint16 GPIO7:1; // 7 GPIO7 + /* Битовое поле GPIO8, ширина 1 бит; аппаратная линия ввода/вывода GPIO8. */ Uint16 GPIO8:1; // 8 GPIO8 + /* Битовое поле GPIO9, ширина 1 бит; аппаратная линия ввода/вывода GPIO9. */ Uint16 GPIO9:1; // 9 GPIO9 + /* Битовое поле GPIO10, ширина 1 бит; аппаратная линия ввода/вывода GPIO10. */ Uint16 GPIO10:1; // 10 GPIO10 + /* Битовое поле GPIO11, ширина 1 бит; аппаратная линия ввода/вывода GPIO11. */ Uint16 GPIO11:1; // 11 GPIO11 + /* Битовое поле GPIO12, ширина 1 бит; аппаратная линия ввода/вывода GPIO12. */ Uint16 GPIO12:1; // 12 GPIO12 + /* Битовое поле GPIO13, ширина 1 бит; аппаратная линия ввода/вывода GPIO13. */ Uint16 GPIO13:1; // 13 GPIO13 + /* Битовое поле GPIO14, ширина 1 бит; аппаратная линия ввода/вывода GPIO14. */ Uint16 GPIO14:1; // 14 GPIO14 + /* Битовое поле GPIO15, ширина 1 бит; аппаратная линия ввода/вывода GPIO15. */ Uint16 GPIO15:1; // 15 GPIO15 + /* Битовое поле GPIO16, ширина 1 бит; аппаратная линия ввода/вывода GPIO16. */ Uint16 GPIO16:1; // 16 GPIO16 + /* Битовое поле GPIO17, ширина 1 бит; аппаратная линия ввода/вывода GPIO17. */ Uint16 GPIO17:1; // 17 GPIO17 + /* Битовое поле GPIO18, ширина 1 бит; аппаратная линия ввода/вывода GPIO18. */ Uint16 GPIO18:1; // 18 GPIO18 + /* Битовое поле GPIO19, ширина 1 бит; аппаратная линия ввода/вывода GPIO19. */ Uint16 GPIO19:1; // 19 GPIO19 + /* Битовое поле GPIO20, ширина 1 бит; аппаратная линия ввода/вывода GPIO20. */ Uint16 GPIO20:1; // 20 GPIO20 + /* Битовое поле GPIO21, ширина 1 бит; аппаратная линия ввода/вывода GPIO21. */ Uint16 GPIO21:1; // 21 GPIO21 + /* Битовое поле GPIO22, ширина 1 бит; аппаратная линия ввода/вывода GPIO22. */ Uint16 GPIO22:1; // 22 GPIO22 + /* Битовое поле GPIO23, ширина 1 бит; аппаратная линия ввода/вывода GPIO23. */ Uint16 GPIO23:1; // 23 GPIO23 + /* Битовое поле GPIO24, ширина 1 бит; аппаратная линия ввода/вывода GPIO24. */ Uint16 GPIO24:1; // 24 GPIO24 + /* Битовое поле GPIO25, ширина 1 бит; аппаратная линия ввода/вывода GPIO25. */ Uint16 GPIO25:1; // 25 GPIO25 + /* Битовое поле GPIO26, ширина 1 бит; аппаратная линия ввода/вывода GPIO26. */ Uint16 GPIO26:1; // 26 GPIO26 + /* Битовое поле GPIO27, ширина 1 бит; аппаратная линия ввода/вывода GPIO27. */ Uint16 GPIO27:1; // 27 GPIO27 + /* Битовое поле GPIO28, ширина 1 бит; аппаратная линия ввода/вывода GPIO28. */ Uint16 GPIO28:1; // 28 GPIO28 + /* Битовое поле GPIO29, ширина 1 бит; аппаратная линия ввода/вывода GPIO29. */ Uint16 GPIO29:1; // 29 GPIO29 + /* Битовое поле GPIO30, ширина 1 бит; аппаратная линия ввода/вывода GPIO30. */ Uint16 GPIO30:1; // 30 GPIO30 + /* Битовое поле GPIO31, ширина 1 бит; аппаратная линия ввода/вывода GPIO31. */ Uint16 GPIO31:1; // 31 GPIO31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPBDAT_BITS; порядок полей определяет расположение данных. */ struct GPBDAT_BITS { // bits description + /* Битовое поле GPIO32, ширина 1 бит; аппаратная линия ввода/вывода GPIO32. */ Uint16 GPIO32:1; // 0 GPIO32 + /* Битовое поле GPIO33, ширина 1 бит; аппаратная линия ввода/вывода GPIO33. */ Uint16 GPIO33:1; // 1 GPIO33 + /* Битовое поле GPIO34, ширина 1 бит; аппаратная линия ввода/вывода GPIO34. */ Uint16 GPIO34:1; // 2 GPIO34 + /* Битовое поле GPIO35, ширина 1 бит; аппаратная линия ввода/вывода GPIO35. */ Uint16 GPIO35:1; // 3 GPIO35 + /* Битовое поле GPIO36, ширина 1 бит; аппаратная линия ввода/вывода GPIO36. */ Uint16 GPIO36:1; // 4 GPIO36 + /* Битовое поле GPIO37, ширина 1 бит; аппаратная линия ввода/вывода GPIO37. */ Uint16 GPIO37:1; // 5 GPIO37 + /* Битовое поле GPIO38, ширина 1 бит; аппаратная линия ввода/вывода GPIO38. */ Uint16 GPIO38:1; // 6 GPIO38 + /* Битовое поле GPIO39, ширина 1 бит; аппаратная линия ввода/вывода GPIO39. */ Uint16 GPIO39:1; // 7 GPIO39 + /* Битовое поле GPIO40, ширина 1 бит; аппаратная линия ввода/вывода GPIO40. */ Uint16 GPIO40:1; // 8 GPIO40 + /* Битовое поле GPIO41, ширина 1 бит; аппаратная линия ввода/вывода GPIO41. */ Uint16 GPIO41:1; // 9 GPIO41 + /* Битовое поле GPIO42, ширина 1 бит; аппаратная линия ввода/вывода GPIO42. */ Uint16 GPIO42:1; // 10 GPIO42 + /* Битовое поле GPIO43, ширина 1 бит; аппаратная линия ввода/вывода GPIO43. */ Uint16 GPIO43:1; // 11 GPIO43 + /* Битовое поле GPIO44, ширина 1 бит; аппаратная линия ввода/вывода GPIO44. */ Uint16 GPIO44:1; // 12 GPIO44 + /* Битовое поле GPIO45, ширина 1 бит; аппаратная линия ввода/вывода GPIO45. */ Uint16 GPIO45:1; // 13 GPIO45 + /* Битовое поле GPIO46, ширина 1 бит; аппаратная линия ввода/вывода GPIO46. */ Uint16 GPIO46:1; // 14 GPIO46 + /* Битовое поле GPIO47, ширина 1 бит; аппаратная линия ввода/вывода GPIO47. */ Uint16 GPIO47:1; // 15 GPIO47 + /* Битовое поле GPIO48, ширина 1 бит; аппаратная линия ввода/вывода GPIO48. */ Uint16 GPIO48:1; // 16 GPIO48 + /* Битовое поле GPIO49, ширина 1 бит; аппаратная линия ввода/вывода GPIO49. */ Uint16 GPIO49:1; // 17 GPIO49 + /* Битовое поле GPIO50, ширина 1 бит; аппаратная линия ввода/вывода GPIO50. */ Uint16 GPIO50:1; // 18 GPIO50 + /* Битовое поле GPIO51, ширина 1 бит; аппаратная линия ввода/вывода GPIO51. */ Uint16 GPIO51:1; // 19 GPIO51 + /* Битовое поле GPIO52, ширина 1 бит; аппаратная линия ввода/вывода GPIO52. */ Uint16 GPIO52:1; // 20 GPIO52 + /* Битовое поле GPIO53, ширина 1 бит; аппаратная линия ввода/вывода GPIO53. */ Uint16 GPIO53:1; // 21 GPIO53 + /* Битовое поле GPIO54, ширина 1 бит; аппаратная линия ввода/вывода GPIO54. */ Uint16 GPIO54:1; // 22 GPIO54 + /* Битовое поле GPIO55, ширина 1 бит; аппаратная линия ввода/вывода GPIO55. */ Uint16 GPIO55:1; // 23 GPIO55 + /* Битовое поле GPIO56, ширина 1 бит; аппаратная линия ввода/вывода GPIO56. */ Uint16 GPIO56:1; // 24 GPIO56 + /* Битовое поле GPIO57, ширина 1 бит; аппаратная линия ввода/вывода GPIO57. */ Uint16 GPIO57:1; // 25 GPIO57 + /* Битовое поле GPIO58, ширина 1 бит; аппаратная линия ввода/вывода GPIO58. */ Uint16 GPIO58:1; // 26 GPIO58 + /* Битовое поле GPIO59, ширина 1 бит; аппаратная линия ввода/вывода GPIO59. */ Uint16 GPIO59:1; // 27 GPIO59 + /* Битовое поле GPIO60, ширина 1 бит; аппаратная линия ввода/вывода GPIO60. */ Uint16 GPIO60:1; // 28 GPIO60 + /* Битовое поле GPIO61, ширина 1 бит; аппаратная линия ввода/вывода GPIO61. */ Uint16 GPIO61:1; // 29 GPIO61 + /* Битовое поле GPIO62, ширина 1 бит; аппаратная линия ввода/вывода GPIO62. */ Uint16 GPIO62:1; // 30 GPIO62 + /* Битовое поле GPIO63, ширина 1 бит; аппаратная линия ввода/вывода GPIO63. */ Uint16 GPIO63:1; // 31 GPIO63 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPCDAT_BITS; порядок полей определяет расположение данных. */ struct GPCDAT_BITS { // bits description + /* Битовое поле GPIO64, ширина 1 бит; аппаратная линия ввода/вывода GPIO64. */ Uint16 GPIO64:1; // 0 GPIO64 + /* Битовое поле GPIO65, ширина 1 бит; аппаратная линия ввода/вывода GPIO65. */ Uint16 GPIO65:1; // 1 GPIO65 + /* Битовое поле GPIO66, ширина 1 бит; аппаратная линия ввода/вывода GPIO66. */ Uint16 GPIO66:1; // 2 GPIO66 + /* Битовое поле GPIO67, ширина 1 бит; аппаратная линия ввода/вывода GPIO67. */ Uint16 GPIO67:1; // 3 GPIO67 + /* Битовое поле GPIO68, ширина 1 бит; аппаратная линия ввода/вывода GPIO68. */ Uint16 GPIO68:1; // 4 GPIO68 + /* Битовое поле GPIO69, ширина 1 бит; аппаратная линия ввода/вывода GPIO69. */ Uint16 GPIO69:1; // 5 GPIO69 + /* Битовое поле GPIO70, ширина 1 бит; аппаратная линия ввода/вывода GPIO70. */ Uint16 GPIO70:1; // 6 GPIO70 + /* Битовое поле GPIO71, ширина 1 бит; аппаратная линия ввода/вывода GPIO71. */ Uint16 GPIO71:1; // 7 GPIO71 + /* Битовое поле GPIO72, ширина 1 бит; аппаратная линия ввода/вывода GPIO72. */ Uint16 GPIO72:1; // 8 GPIO72 + /* Битовое поле GPIO73, ширина 1 бит; аппаратная линия ввода/вывода GPIO73. */ Uint16 GPIO73:1; // 9 GPIO73 + /* Битовое поле GPIO74, ширина 1 бит; аппаратная линия ввода/вывода GPIO74. */ Uint16 GPIO74:1; // 10 GPIO74 + /* Битовое поле GPIO75, ширина 1 бит; аппаратная линия ввода/вывода GPIO75. */ Uint16 GPIO75:1; // 11 GPIO75 + /* Битовое поле GPIO76, ширина 1 бит; аппаратная линия ввода/вывода GPIO76. */ Uint16 GPIO76:1; // 12 GPIO76 + /* Битовое поле GPIO77, ширина 1 бит; аппаратная линия ввода/вывода GPIO77. */ Uint16 GPIO77:1; // 13 GPIO77 + /* Битовое поле GPIO78, ширина 1 бит; аппаратная линия ввода/вывода GPIO78. */ Uint16 GPIO78:1; // 14 GPIO78 + /* Битовое поле GPIO79, ширина 1 бит; аппаратная линия ввода/вывода GPIO79. */ Uint16 GPIO79:1; // 15 GPIO79 + /* Битовое поле GPIO80, ширина 1 бит; аппаратная линия ввода/вывода GPIO80. */ Uint16 GPIO80:1; // 16 GPIO80 + /* Битовое поле GPIO81, ширина 1 бит; аппаратная линия ввода/вывода GPIO81. */ Uint16 GPIO81:1; // 17 GPIO81 + /* Битовое поле GPIO82, ширина 1 бит; аппаратная линия ввода/вывода GPIO82. */ Uint16 GPIO82:1; // 18 GPIO82 + /* Битовое поле GPIO83, ширина 1 бит; аппаратная линия ввода/вывода GPIO83. */ Uint16 GPIO83:1; // 19 GPIO83 + /* Битовое поле GPIO84, ширина 1 бит; аппаратная линия ввода/вывода GPIO84. */ Uint16 GPIO84:1; // 20 GPIO84 + /* Битовое поле GPIO85, ширина 1 бит; аппаратная линия ввода/вывода GPIO85. */ Uint16 GPIO85:1; // 21 GPIO85 + /* Битовое поле GPIO86, ширина 1 бит; аппаратная линия ввода/вывода GPIO86. */ Uint16 GPIO86:1; // 22 GPIO86 + /* Битовое поле GPIO87, ширина 1 бит; аппаратная линия ввода/вывода GPIO87. */ Uint16 GPIO87:1; // 23 GPIO87 + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 31:24 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPADAT_REG в одной области памяти. */ union GPADAT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPADAT_BITS bit;; порядок полей определяет расположение данных. */ struct GPADAT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPBDAT_REG в одной области памяти. */ union GPBDAT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPBDAT_BITS bit;; порядок полей определяет расположение данных. */ struct GPBDAT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPCDAT_REG в одной области памяти. */ union GPCDAT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру GPCDAT_BITS bit;; порядок полей определяет расположение данных. */ struct GPCDAT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; @@ -310,80 +568,142 @@ union GPCDAT_REG { //---------------------------------------------------- // GPIO Xint1/XINT2/XNMI select register bit definitions */ +/* Описывает структуру GPIOXINT_BITS; порядок полей определяет расположение данных. */ struct GPIOXINT_BITS { // bits description + /* Битовое поле GPIOSEL, ширина 5 бит; аппаратная линия ввода/вывода GPIOSEL. */ Uint16 GPIOSEL:5; // 4:0 Select GPIO interrupt input source + /* Битовое поле rsvd1, ширина 11 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:11; // 15:5 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений GPIOXINT_REG в одной области памяти. */ union GPIOXINT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру GPIOXINT_BITS bit;; порядок полей определяет расположение данных. */ struct GPIOXINT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPIO_CTRL_REGS; порядок полей определяет расположение данных. */ struct GPIO_CTRL_REGS { + /* Объединяет несколько представлений GPACTRL_REG GPACTRL; в одной области памяти. */ union GPACTRL_REG GPACTRL; // GPIO A Control Register (GPIO0 to 31) + /* Объединяет несколько представлений GPA1_REG GPAQSEL1; в одной области памяти. */ union GPA1_REG GPAQSEL1; // GPIO A Qualifier Select 1 Register (GPIO0 to 15) + /* Объединяет несколько представлений GPA2_REG GPAQSEL2; в одной области памяти. */ union GPA2_REG GPAQSEL2; // GPIO A Qualifier Select 2 Register (GPIO16 to 31) + /* Объединяет несколько представлений GPA1_REG GPAMUX1; в одной области памяти. */ union GPA1_REG GPAMUX1; // GPIO A Mux 1 Register (GPIO0 to 15) + /* Объединяет несколько представлений GPA2_REG GPAMUX2; в одной области памяти. */ union GPA2_REG GPAMUX2; // GPIO A Mux 2 Register (GPIO16 to 31) + /* Объединяет несколько представлений GPADAT_REG GPADIR; в одной области памяти. */ union GPADAT_REG GPADIR; // GPIO A Direction Register (GPIO0 to 31) + /* Объединяет несколько представлений GPADAT_REG GPAPUD; в одной области памяти. */ union GPADAT_REG GPAPUD; // GPIO A Pull Up Disable Register (GPIO0 to 31) + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint32 rsvd1; + /* Объединяет несколько представлений GPBCTRL_REG GPBCTRL; в одной области памяти. */ union GPBCTRL_REG GPBCTRL; // GPIO B Control Register (GPIO32 to 63) + /* Объединяет несколько представлений GPB1_REG GPBQSEL1; в одной области памяти. */ union GPB1_REG GPBQSEL1; // GPIO B Qualifier Select 1 Register (GPIO32 to 47) + /* Объединяет несколько представлений GPB2_REG GPBQSEL2; в одной области памяти. */ union GPB2_REG GPBQSEL2; // GPIO B Qualifier Select 2 Register (GPIO48 to 63) + /* Объединяет несколько представлений GPB1_REG GPBMUX1; в одной области памяти. */ union GPB1_REG GPBMUX1; // GPIO B Mux 1 Register (GPIO32 to 47) + /* Объединяет несколько представлений GPB2_REG GPBMUX2; в одной области памяти. */ union GPB2_REG GPBMUX2; // GPIO B Mux 2 Register (GPIO48 to 63) + /* Объединяет несколько представлений GPBDAT_REG GPBDIR; в одной области памяти. */ union GPBDAT_REG GPBDIR; // GPIO B Direction Register (GPIO32 to 63) + /* Объединяет несколько представлений GPBDAT_REG GPBPUD; в одной области памяти. */ union GPBDAT_REG GPBPUD; // GPIO B Pull Up Disable Register (GPIO32 to 63) + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2[8]; + /* Объединяет несколько представлений GPC1_REG GPCMUX1; в одной области памяти. */ union GPC1_REG GPCMUX1; // GPIO C Mux 1 Register (GPIO64 to 79) + /* Объединяет несколько представлений GPC2_REG GPCMUX2; в одной области памяти. */ union GPC2_REG GPCMUX2; // GPIO C Mux 2 Register (GPIO80 to 95) + /* Объединяет несколько представлений GPCDAT_REG GPCDIR; в одной области памяти. */ union GPCDAT_REG GPCDIR; // GPIO C Direction Register (GPIO64 to 95) + /* Объединяет несколько представлений GPCDAT_REG GPCPUD; в одной области памяти. */ union GPCDAT_REG GPCPUD; // GPIO C Pull Up Disable Register (GPIO64 to 95) +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPIO_DATA_REGS; порядок полей определяет расположение данных. */ struct GPIO_DATA_REGS { + /* Объединяет несколько представлений GPADAT_REG GPADAT; в одной области памяти. */ union GPADAT_REG GPADAT; // GPIO Data Register (GPIO0 to 31) + /* Объединяет несколько представлений GPADAT_REG GPASET; в одной области памяти. */ union GPADAT_REG GPASET; // GPIO Data Set Register (GPIO0 to 31) + /* Объединяет несколько представлений GPADAT_REG GPACLEAR; в одной области памяти. */ union GPADAT_REG GPACLEAR; // GPIO Data Clear Register (GPIO0 to 31) + /* Объединяет несколько представлений GPADAT_REG GPATOGGLE; в одной области памяти. */ union GPADAT_REG GPATOGGLE; // GPIO Data Toggle Register (GPIO0 to 31) + /* Объединяет несколько представлений GPBDAT_REG GPBDAT; в одной области памяти. */ union GPBDAT_REG GPBDAT; // GPIO Data Register (GPIO32 to 63) + /* Объединяет несколько представлений GPBDAT_REG GPBSET; в одной области памяти. */ union GPBDAT_REG GPBSET; // GPIO Data Set Register (GPIO32 to 63) + /* Объединяет несколько представлений GPBDAT_REG GPBCLEAR; в одной области памяти. */ union GPBDAT_REG GPBCLEAR; // GPIO Data Clear Register (GPIO32 to 63) + /* Объединяет несколько представлений GPBDAT_REG GPBTOGGLE; в одной области памяти. */ union GPBDAT_REG GPBTOGGLE; // GPIO Data Toggle Register (GPIO32 to 63) + /* Объединяет несколько представлений GPCDAT_REG GPCDAT; в одной области памяти. */ union GPCDAT_REG GPCDAT; // GPIO Data Register (GPIO64 to 95) + /* Объединяет несколько представлений GPCDAT_REG GPCSET; в одной области памяти. */ union GPCDAT_REG GPCSET; // GPIO Data Set Register (GPIO64 to 95) + /* Объединяет несколько представлений GPCDAT_REG GPCCLEAR; в одной области памяти. */ union GPCDAT_REG GPCCLEAR; // GPIO Data Clear Register (GPIO64 to 95) + /* Объединяет несколько представлений GPCDAT_REG GPCTOGGLE; в одной области памяти. */ union GPCDAT_REG GPCTOGGLE; // GPIO Data Toggle Register (GPIO64 to 95) + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1[8]; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру GPIO_INT_REGS; порядок полей определяет расположение данных. */ struct GPIO_INT_REGS { + /* Объединяет несколько представлений GPIOXINT_REG GPIOXINT1SEL; в одной области памяти. */ union GPIOXINT_REG GPIOXINT1SEL; // XINT1 GPIO Input Selection + /* Объединяет несколько представлений GPIOXINT_REG GPIOXINT2SEL; в одной области памяти. */ union GPIOXINT_REG GPIOXINT2SEL; // XINT2 GPIO Input Selection + /* Объединяет несколько представлений GPIOXINT_REG GPIOXNMISEL; в одной области памяти. */ union GPIOXINT_REG GPIOXNMISEL; // XNMI_Xint13 GPIO Input Selection + /* Объединяет несколько представлений GPIOXINT_REG GPIOXINT3SEL; в одной области памяти. */ union GPIOXINT_REG GPIOXINT3SEL; // XINT3 GPIO Input Selection + /* Объединяет несколько представлений GPIOXINT_REG GPIOXINT4SEL; в одной области памяти. */ union GPIOXINT_REG GPIOXINT4SEL; // XINT4 GPIO Input Selection + /* Объединяет несколько представлений GPIOXINT_REG GPIOXINT5SEL; в одной области памяти. */ union GPIOXINT_REG GPIOXINT5SEL; // XINT5 GPIO Input Selection + /* Объединяет несколько представлений GPIOXINT_REG GPIOXINT6SEL; в одной области памяти. */ union GPIOXINT_REG GPIOXINT6SEL; // XINT6 GPIO Input Selection + /* Объединяет несколько представлений GPIOXINT_REG GPIOXINT7SEL; в одной области памяти. */ union GPIOXINT_REG GPIOXINT7SEL; // XINT7 GPIO Input Selection + /* Объединяет несколько представлений GPADAT_REG GPIOLPMSEL; в одной области памяти. */ union GPADAT_REG GPIOLPMSEL; // Low power modes GP I/O input select +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // GPI/O External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct GPIO_CTRL_REGS GpioCtrlRegs;; порядок элементов сохраняется. */ extern volatile struct GPIO_CTRL_REGS GpioCtrlRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct GPIO_DATA_REGS GpioDataRegs;; порядок элементов сохраняется. */ extern volatile struct GPIO_DATA_REGS GpioDataRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct GPIO_INT_REGS GpioIntRegs;; порядок элементов сохраняется. */ extern volatile struct GPIO_INT_REGS GpioIntRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_GPIO_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_I2c.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_I2c.h index 382c12d..43a0049 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_I2c.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_I2c.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание I2c для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/2 $ // Checkin $Date: March 22, 2007 10:40:22 $ //########################################################################### @@ -12,165 +13,286 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_I2C_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_I2C_H +/* Определяет защитный символ или переключатель DSP2833x_I2C_H для последующей компиляции. */ #define DSP2833x_I2C_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //---------------------------------------------------- // I2C interrupt vector register bit definitions */ +/* Описывает структуру I2CISRC_BITS; порядок полей определяет расположение данных. */ struct I2CISRC_BITS { // bits description + /* Битовое поле INTCODE, ширина 3 бит; данные INTCODE. */ Uint16 INTCODE:3; // 2:0 Interrupt code + /* Битовое поле rsvd1, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:13; // 15:3 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений I2CISRC_REG в одной области памяти. */ union I2CISRC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру I2CISRC_BITS bit;; порядок полей определяет расположение данных. */ struct I2CISRC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // I2C interrupt mask register bit definitions */ +/* Описывает структуру I2CIER_BITS; порядок полей определяет расположение данных. */ struct I2CIER_BITS { // bits description + /* Битовое поле ARBL, ширина 1 бит; данные ARBL. */ Uint16 ARBL:1; // 0 Arbitration lost interrupt + /* Битовое поле NACK, ширина 1 бит; данные NACK. */ Uint16 NACK:1; // 1 No ack interrupt + /* Битовое поле ARDY, ширина 1 бит; данные ARDY. */ Uint16 ARDY:1; // 2 Register access ready interrupt + /* Битовое поле RRDY, ширина 1 бит; данные RRDY. */ Uint16 RRDY:1; // 3 Recieve data ready interrupt + /* Битовое поле XRDY, ширина 1 бит; данные XRDY. */ Uint16 XRDY:1; // 4 Transmit data ready interrupt + /* Битовое поле SCD, ширина 1 бит; данные SCD. */ Uint16 SCD:1; // 5 Stop condition detection + /* Битовое поле AAS, ширина 1 бит; данные AAS. */ Uint16 AAS:1; // 6 Address as slave + /* Битовое поле rsvd, ширина 9 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:9; // 15:7 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений I2CIER_REG в одной области памяти. */ union I2CIER_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру I2CIER_BITS bit;; порядок полей определяет расположение данных. */ struct I2CIER_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // I2C status register bit definitions */ +/* Описывает структуру I2CSTR_BITS; порядок полей определяет расположение данных. */ struct I2CSTR_BITS { // bits description + /* Битовое поле ARBL, ширина 1 бит; данные ARBL. */ Uint16 ARBL:1; // 0 Arbitration lost interrupt + /* Битовое поле NACK, ширина 1 бит; данные NACK. */ Uint16 NACK:1; // 1 No ack interrupt + /* Битовое поле ARDY, ширина 1 бит; данные ARDY. */ Uint16 ARDY:1; // 2 Register access ready interrupt + /* Битовое поле RRDY, ширина 1 бит; данные RRDY. */ Uint16 RRDY:1; // 3 Recieve data ready interrupt + /* Битовое поле XRDY, ширина 1 бит; данные XRDY. */ Uint16 XRDY:1; // 4 Transmit data ready interrupt + /* Битовое поле SCD, ширина 1 бит; данные SCD. */ Uint16 SCD:1; // 5 Stop condition detection + /* Битовое поле rsvd1, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:2; // 7:6 reserved + /* Битовое поле AD0, ширина 1 бит; данные AD0. */ Uint16 AD0:1; // 8 Address Zero + /* Битовое поле AAS, ширина 1 бит; данные AAS. */ Uint16 AAS:1; // 9 Address as slave + /* Битовое поле XSMT, ширина 1 бит; данные XSMT. */ Uint16 XSMT:1; // 10 XMIT shift empty + /* Битовое поле RSFULL, ширина 1 бит; данные RSFULL. */ Uint16 RSFULL:1; // 11 Recieve shift full + /* Битовое поле BB, ширина 1 бит; данные BB. */ Uint16 BB:1; // 12 Bus busy + /* Битовое поле NACKSNT, ширина 1 бит; данные NACKSNT. */ Uint16 NACKSNT:1; // 13 A no ack sent + /* Битовое поле SDIR, ширина 1 бит; данные SDIR. */ Uint16 SDIR:1; // 14 Slave direction + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений I2CSTR_REG в одной области памяти. */ union I2CSTR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру I2CSTR_BITS bit;; порядок полей определяет расположение данных. */ struct I2CSTR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // I2C mode control register bit definitions */ +/* Описывает структуру I2CMDR_BITS; порядок полей определяет расположение данных. */ struct I2CMDR_BITS { // bits description + /* Битовое поле BC, ширина 3 бит; данные BC. */ Uint16 BC:3; // 2:0 Bit count + /* Битовое поле FDF, ширина 1 бит; данные FDF. */ Uint16 FDF:1; // 3 Free data format + /* Битовое поле STB, ширина 1 бит; данные STB. */ Uint16 STB:1; // 4 Start byte + /* Битовое поле IRS, ширина 1 бит; данные IRS. */ Uint16 IRS:1; // 5 I2C Reset not + /* Битовое поле DLB, ширина 1 бит; данные DLB. */ Uint16 DLB:1; // 6 Digital loopback + /* Битовое поле RM, ширина 1 бит; данные RM. */ Uint16 RM:1; // 7 Repeat mode + /* Битовое поле XA, ширина 1 бит; данные XA. */ Uint16 XA:1; // 8 Expand address + /* Битовое поле TRX, ширина 1 бит; данные TRX. */ Uint16 TRX:1; // 9 Transmitter/reciever + /* Битовое поле MST, ширина 1 бит; данные MST. */ Uint16 MST:1; // 10 Master/slave + /* Битовое поле STP, ширина 1 бит; данные STP. */ Uint16 STP:1; // 11 Stop condition + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 12 reserved + /* Битовое поле STT, ширина 1 бит; данные STT. */ Uint16 STT:1; // 13 Start condition + /* Битовое поле FREE, ширина 1 бит; данные FREE. */ Uint16 FREE:1; // 14 Emulation mode + /* Битовое поле NACKMOD, ширина 1 бит; данные NACKMOD. */ Uint16 NACKMOD:1; // 15 No Ack mode +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений I2CMDR_REG в одной области памяти. */ union I2CMDR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру I2CMDR_BITS bit;; порядок полей определяет расположение данных. */ struct I2CMDR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // I2C pre-scaler register bit definitions */ +/* Описывает структуру I2CPSC_BITS; порядок полей определяет расположение данных. */ struct I2CPSC_BITS { // bits description + /* Битовое поле IPSC, ширина 8 бит; данные IPSC. */ Uint16 IPSC:8; // 7:0 pre-scaler + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений I2CPSC_REG в одной области памяти. */ union I2CPSC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру I2CPSC_BITS bit;; порядок полей определяет расположение данных. */ struct I2CPSC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // TX FIFO control register bit definitions */ +/* Описывает структуру I2CFFTX_BITS; порядок полей определяет расположение данных. */ struct I2CFFTX_BITS { // bits description + /* Битовое поле TXFFIL, ширина 5 бит; данные TXFFIL. */ Uint16 TXFFIL:5; // 4:0 FIFO interrupt level + /* Битовое поле TXFFIENA, ширина 1 бит; данные TXFFIENA. */ Uint16 TXFFIENA:1; // 5 FIFO interrupt enable/disable + /* Битовое поле TXFFINTCLR, ширина 1 бит; данные TXFFINTCLR. */ Uint16 TXFFINTCLR:1; // 6 FIFO clear + /* Битовое поле TXFFINT, ширина 1 бит; данные TXFFINT. */ Uint16 TXFFINT:1; // 7 FIFO interrupt flag + /* Битовое поле TXFFST, ширина 5 бит; данные TXFFST. */ Uint16 TXFFST:5; // 12:8 FIFO level status + /* Битовое поле TXFFRST, ширина 1 бит; данные TXFFRST. */ Uint16 TXFFRST:1; // 13 FIFO reset + /* Битовое поле I2CFFEN, ширина 1 бит; данные I2CFFEN. */ Uint16 I2CFFEN:1; // 14 enable/disable TX & RX FIFOs + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений I2CFFTX_REG в одной области памяти. */ union I2CFFTX_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру I2CFFTX_BITS bit;; порядок полей определяет расположение данных. */ struct I2CFFTX_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // RX FIFO control register bit definitions */ +/* Описывает структуру I2CFFRX_BITS; порядок полей определяет расположение данных. */ struct I2CFFRX_BITS { // bits description + /* Битовое поле RXFFIL, ширина 5 бит; данные RXFFIL. */ Uint16 RXFFIL:5; // 4:0 FIFO interrupt level + /* Битовое поле RXFFIENA, ширина 1 бит; данные RXFFIENA. */ Uint16 RXFFIENA:1; // 5 FIFO interrupt enable/disable + /* Битовое поле RXFFINTCLR, ширина 1 бит; данные RXFFINTCLR. */ Uint16 RXFFINTCLR:1; // 6 FIFO clear + /* Битовое поле RXFFINT, ширина 1 бит; данные RXFFINT. */ Uint16 RXFFINT:1; // 7 FIFO interrupt flag + /* Битовое поле RXFFST, ширина 5 бит; данные RXFFST. */ Uint16 RXFFST:5; // 12:8 FIFO level + /* Битовое поле RXFFRST, ширина 1 бит; данные RXFFRST. */ Uint16 RXFFRST:1; // 13 FIFO reset + /* Битовое поле rsvd1, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:2; // 15:14 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений I2CFFRX_REG в одной области памяти. */ union I2CFFRX_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру I2CFFRX_BITS bit;; порядок полей определяет расположение данных. */ struct I2CFFRX_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- +/* Описывает структуру I2C_REGS; порядок полей определяет расположение данных. */ struct I2C_REGS { + /* Объявляет I2COAR — данные I2COAR. */ Uint16 I2COAR; // Own address register + /* Объединяет несколько представлений I2CIER_REG I2CIER; в одной области памяти. */ union I2CIER_REG I2CIER; // Interrupt enable + /* Объединяет несколько представлений I2CSTR_REG I2CSTR; в одной области памяти. */ union I2CSTR_REG I2CSTR; // Interrupt status + /* Объявляет I2CCLKL — данные I2CCLKL. */ Uint16 I2CCLKL; // Clock divider low + /* Объявляет I2CCLKH — данные I2CCLKH. */ Uint16 I2CCLKH; // Clock divider high + /* Объявляет I2CCNT — данные I2CCNT. */ Uint16 I2CCNT; // Data count + /* Объявляет I2CDRR — данные I2CDRR. */ Uint16 I2CDRR; // Data recieve + /* Объявляет I2CSAR — данные I2CSAR. */ Uint16 I2CSAR; // Slave address + /* Объявляет I2CDXR — данные I2CDXR. */ Uint16 I2CDXR; // Data transmit + /* Объединяет несколько представлений I2CMDR_REG I2CMDR; в одной области памяти. */ union I2CMDR_REG I2CMDR; // Mode + /* Объединяет несколько представлений I2CISRC_REG I2CISRC; в одной области памяти. */ union I2CISRC_REG I2CISRC; // Interrupt source + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1; // reserved + /* Объединяет несколько представлений I2CPSC_REG I2CPSC; в одной области памяти. */ union I2CPSC_REG I2CPSC; // Pre-scaler + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2[19]; // reserved + /* Объединяет несколько представлений I2CFFTX_REG I2CFFTX; в одной области памяти. */ union I2CFFTX_REG I2CFFTX; // Transmit FIFO + /* Объединяет несколько представлений I2CFFRX_REG I2CFFRX; в одной области памяти. */ union I2CFFRX_REG I2CFFRX; // Recieve FIFO +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; @@ -179,13 +301,17 @@ struct I2C_REGS { //--------------------------------------------------------------------------- // External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct I2C_REGS I2caRegs;; порядок элементов сохраняется. */ extern volatile struct I2C_REGS I2caRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_I2C_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h index 05e4af9..4bf6d6d 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Mcbsp для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/5 $ // Checkin $Date: May 14, 2008 16:30:31 $ //########################################################################### @@ -11,11 +12,16 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_MCBSP_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_MCBSP_H +/* Определяет защитный символ или переключатель DSP2833x_MCBSP_H для последующей компиляции. */ #define DSP2833x_MCBSP_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -23,691 +29,1269 @@ extern "C" { // McBSP Individual Register Bit Definitions: // // McBSP DRR2 register bit definitions: +/* Описывает структуру DRR2_BITS; порядок полей определяет расположение данных. */ struct DRR2_BITS { // bit description + /* Битовое поле HWLB, ширина 8 бит; данные HWLB. */ Uint16 HWLB:8; // 16:23 High word low byte + /* Битовое поле HWHB, ширина 8 бит; данные HWHB. */ Uint16 HWHB:8; // 24:31 High word high byte +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений DRR2_REG в одной области памяти. */ union DRR2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру DRR2_BITS bit;; порядок полей определяет расположение данных. */ struct DRR2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // McBSP DRR1 register bit definitions: +/* Описывает структуру DRR1_BITS; порядок полей определяет расположение данных. */ struct DRR1_BITS { // bit description + /* Битовое поле LWLB, ширина 8 бит; данные LWLB. */ Uint16 LWLB:8; // 16:23 Low word low byte + /* Битовое поле LWHB, ширина 8 бит; данные LWHB. */ Uint16 LWHB:8; // 24:31 low word high byte +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений DRR1_REG в одной области памяти. */ union DRR1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру DRR1_BITS bit;; порядок полей определяет расположение данных. */ struct DRR1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // McBSP DXR2 register bit definitions: +/* Описывает структуру DXR2_BITS; порядок полей определяет расположение данных. */ struct DXR2_BITS { // bit description + /* Битовое поле HWLB, ширина 8 бит; данные HWLB. */ Uint16 HWLB:8; // 16:23 High word low byte + /* Битовое поле HWHB, ширина 8 бит; данные HWHB. */ Uint16 HWHB:8; // 24:31 High word high byte +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений DXR2_REG в одной области памяти. */ union DXR2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру DXR2_BITS bit;; порядок полей определяет расположение данных. */ struct DXR2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // McBSP DXR1 register bit definitions: +/* Описывает структуру DXR1_BITS; порядок полей определяет расположение данных. */ struct DXR1_BITS { // bit description + /* Битовое поле LWLB, ширина 8 бит; данные LWLB. */ Uint16 LWLB:8; // 16:23 Low word low byte + /* Битовое поле LWHB, ширина 8 бит; данные LWHB. */ Uint16 LWHB:8; // 24:31 low word high byte +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений DXR1_REG в одной области памяти. */ union DXR1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру DXR1_BITS bit;; порядок полей определяет расположение данных. */ struct DXR1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // SPCR2 control register bit definitions: +/* Описывает структуру SPCR2_BITS; порядок полей определяет расположение данных. */ struct SPCR2_BITS { // bit description + /* Битовое поле XRST, ширина 1 бит; данные XRST. */ Uint16 XRST:1; // 0 transmit reset + /* Битовое поле XRDY, ширина 1 бит; данные XRDY. */ Uint16 XRDY:1; // 1 transmit ready + /* Битовое поле XEMPTY, ширина 1 бит; данные XEMPTY. */ Uint16 XEMPTY:1; // 2 Transmit empty + /* Битовое поле XSYNCERR, ширина 1 бит; данные XSYNCERR. */ Uint16 XSYNCERR:1; // 3 Transmit syn errorINT flag + /* Битовое поле XINTM, ширина 2 бит; данные XINTM. */ Uint16 XINTM:2; // 5:4 Transmit interrupt types + /* Битовое поле GRST, ширина 1 бит; данные GRST. */ Uint16 GRST:1; // 6 CLKG reset + /* Битовое поле FRST, ширина 1 бит; данные FRST. */ Uint16 FRST:1; // 7 Frame sync reset + /* Битовое поле SOFT, ширина 1 бит; данные SOFT. */ Uint16 SOFT:1; // 8 SOFT bit + /* Битовое поле FREE, ширина 1 бит; данные FREE. */ Uint16 FREE:1; // 9 FREE bit + /* Битовое поле rsvd, ширина 6 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:6; // 15:10 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SPCR2_REG в одной области памяти. */ union SPCR2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SPCR2_BITS bit;; порядок полей определяет расположение данных. */ struct SPCR2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // SPCR1 control register bit definitions: +/* Описывает структуру SPCR1_BITS; порядок полей определяет расположение данных. */ struct SPCR1_BITS { // bit description + /* Битовое поле RRST, ширина 1 бит; данные RRST. */ Uint16 RRST:1; // 0 Receive reset + /* Битовое поле RRDY, ширина 1 бит; данные RRDY. */ Uint16 RRDY:1; // 1 Receive ready + /* Битовое поле RFULL, ширина 1 бит; данные RFULL. */ Uint16 RFULL:1; // 2 Receive full + /* Битовое поле RSYNCERR, ширина 1 бит; данные RSYNCERR. */ Uint16 RSYNCERR:1; // 7 Receive syn error + /* Битовое поле RINTM, ширина 2 бит; данные RINTM. */ Uint16 RINTM:2; // 5:4 Receive interrupt types + /* Битовое поле ABIS, ширина 1 бит; данные ABIS. */ Uint16 ABIS:1; // 6 ABIS mode select + /* Битовое поле DXENA, ширина 1 бит; данные DXENA. */ Uint16 DXENA:1; // 7 DX hi-z enable + /* Битовое поле rsvd, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:3; // 10:8 reserved + /* Битовое поле CLKSTP, ширина 2 бит; данные CLKSTP. */ Uint16 CLKSTP:2; // 12:11 CLKSTOP mode bit + /* Битовое поле RJUST, ширина 2 бит; данные RJUST. */ Uint16 RJUST:2; // 13:14 Right justified + /* Битовое поле DLB, ширина 1 бит; данные DLB. */ Uint16 DLB:1; // 15 Digital loop back +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SPCR1_REG в одной области памяти. */ union SPCR1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SPCR1_BITS bit;; порядок полей определяет расположение данных. */ struct SPCR1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCR2 control register bit definitions: +/* Описывает структуру RCR2_BITS; порядок полей определяет расположение данных. */ struct RCR2_BITS { // bit description + /* Битовое поле RDATDLY, ширина 2 бит; данные RDATDLY. */ Uint16 RDATDLY:2; // 1:0 Receive data delay + /* Битовое поле RFIG, ширина 1 бит; данные RFIG. */ Uint16 RFIG:1; // 2 Receive frame sync ignore + /* Битовое поле RCOMPAND, ширина 2 бит; данные RCOMPAND. */ Uint16 RCOMPAND:2; // 4:3 Receive Companding Mode selects + /* Битовое поле RWDLEN2, ширина 3 бит; данные RWDLEN2. */ Uint16 RWDLEN2:3; // 7:5 Receive word length + /* Битовое поле RFRLEN2, ширина 7 бит; данные RFRLEN2. */ Uint16 RFRLEN2:7; // 14:8 Receive Frame sync + /* Битовое поле RPHASE, ширина 1 бит; данные RPHASE. */ Uint16 RPHASE:1; // 15 Receive Phase +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCR2_REG в одной области памяти. */ union RCR2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCR2_BITS bit;; порядок полей определяет расположение данных. */ struct RCR2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCR1 control register bit definitions: +/* Описывает структуру RCR1_BITS; порядок полей определяет расположение данных. */ struct RCR1_BITS { // bit description + /* Битовое поле rsvd1, ширина 5 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:5; // 4:0 reserved + /* Битовое поле RWDLEN1, ширина 3 бит; данные RWDLEN1. */ Uint16 RWDLEN1:3; // 7:5 Receive word length + /* Битовое поле RFRLEN1, ширина 7 бит; данные RFRLEN1. */ Uint16 RFRLEN1:7; // 14:8 Receive frame length + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCR1_REG в одной области памяти. */ union RCR1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCR1_BITS bit;; порядок полей определяет расположение данных. */ struct RCR1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCR2 control register bit definitions: +/* Описывает структуру XCR2_BITS; порядок полей определяет расположение данных. */ struct XCR2_BITS { // bit description + /* Битовое поле XDATDLY, ширина 2 бит; данные XDATDLY. */ Uint16 XDATDLY:2; // 1:0 Transmit data delay + /* Битовое поле XFIG, ширина 1 бит; данные XFIG. */ Uint16 XFIG:1; // 2 Transmit frame sync ignore + /* Битовое поле XCOMPAND, ширина 2 бит; данные XCOMPAND. */ Uint16 XCOMPAND:2; // 4:3 Transmit Companding Mode selects + /* Битовое поле XWDLEN2, ширина 3 бит; данные XWDLEN2. */ Uint16 XWDLEN2:3; // 7:5 Transmit word length + /* Битовое поле XFRLEN2, ширина 7 бит; данные XFRLEN2. */ Uint16 XFRLEN2:7; // 14:8 Transmit Frame sync + /* Битовое поле XPHASE, ширина 1 бит; данные XPHASE. */ Uint16 XPHASE:1; // 15 Transmit Phase +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCR2_REG в одной области памяти. */ union XCR2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCR2_BITS bit;; порядок полей определяет расположение данных. */ struct XCR2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCR1 control register bit definitions: +/* Описывает структуру XCR1_BITS; порядок полей определяет расположение данных. */ struct XCR1_BITS { // bit description + /* Битовое поле rsvd1, ширина 5 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:5; // 4:0 reserved + /* Битовое поле XWDLEN1, ширина 3 бит; данные XWDLEN1. */ Uint16 XWDLEN1:3; // 7:5 Transmit word length + /* Битовое поле XFRLEN1, ширина 7 бит; данные XFRLEN1. */ Uint16 XFRLEN1:7; // 14:8 Transmit frame length + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCR1_REG в одной области памяти. */ union XCR1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCR1_BITS bit;; порядок полей определяет расположение данных. */ struct XCR1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // SRGR2 Sample rate generator control register bit definitions: +/* Описывает структуру SRGR2_BITS; порядок полей определяет расположение данных. */ struct SRGR2_BITS { // bit description + /* Битовое поле FPER, ширина 12 бит; данные FPER. */ Uint16 FPER:12; // 11:0 Frame period + /* Битовое поле FSGM, ширина 1 бит; данные FSGM. */ Uint16 FSGM:1; // 12 Frame sync generator mode + /* Битовое поле CLKSM, ширина 1 бит; данные CLKSM. */ Uint16 CLKSM:1; // 13 Sample rate generator mode + /* Битовое поле rsvd, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:1; // 14 reserved + /* Битовое поле GSYNC, ширина 1 бит; данные GSYNC. */ Uint16 GSYNC:1; // 15 CLKG sync +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SRGR2_REG в одной области памяти. */ union SRGR2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SRGR2_BITS bit;; порядок полей определяет расположение данных. */ struct SRGR2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // SRGR1 control register bit definitions: +/* Описывает структуру SRGR1_BITS; порядок полей определяет расположение данных. */ struct SRGR1_BITS { // bit description + /* Битовое поле CLKGDV, ширина 8 бит; данные CLKGDV. */ Uint16 CLKGDV:8; // 7:0 CLKG divider + /* Битовое поле FWID, ширина 8 бит; данные FWID. */ Uint16 FWID:8; // 15:8 Frame width +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SRGR1_REG в одной области памяти. */ union SRGR1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SRGR1_BITS bit;; порядок полей определяет расположение данных. */ struct SRGR1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // MCR2 Multichannel control register bit definitions: +/* Описывает структуру MCR2_BITS; порядок полей определяет расположение данных. */ struct MCR2_BITS { // bit description + /* Битовое поле XMCM, ширина 2 бит; данные XMCM. */ Uint16 XMCM:2; // 1:0 Transmit multichannel mode + /* Битовое поле XCBLK, ширина 3 бит; данные XCBLK. */ Uint16 XCBLK:3; // 2:4 Transmit current block + /* Битовое поле XPABLK, ширина 2 бит; данные XPABLK. */ Uint16 XPABLK:2; // 5:6 Transmit partition A Block + /* Битовое поле XPBBLK, ширина 2 бит; данные XPBBLK. */ Uint16 XPBBLK:2; // 7:8 Transmit partition B Block + /* Битовое поле XMCME, ширина 1 бит; данные XMCME. */ Uint16 XMCME:1; // 9 Transmit multi-channel enhance mode + /* Битовое поле rsvd, ширина 6 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:6; // 15:10 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений MCR2_REG в одной области памяти. */ union MCR2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру MCR2_BITS bit;; порядок полей определяет расположение данных. */ struct MCR2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // MCR1 Multichannel control register bit definitions: +/* Описывает структуру MCR1_BITS; порядок полей определяет расположение данных. */ struct MCR1_BITS { // bit description + /* Битовое поле RMCM, ширина 1 бит; данные RMCM. */ Uint16 RMCM:1; // 0 Receive multichannel mode + /* Битовое поле rsvd, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:1; // 1 reserved + /* Битовое поле RCBLK, ширина 3 бит; данные RCBLK. */ Uint16 RCBLK:3; // 4:2 Receive current block + /* Битовое поле RPABLK, ширина 2 бит; данные RPABLK. */ Uint16 RPABLK:2; // 6:5 Receive partition A Block + /* Битовое поле RPBBLK, ширина 2 бит; данные RPBBLK. */ Uint16 RPBBLK:2; // 7:8 Receive partition B Block + /* Битовое поле RMCME, ширина 1 бит; данные RMCME. */ Uint16 RMCME:1; // 9 Receive multi-channel enhance mode + /* Битовое поле rsvd1, ширина 6 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:6; // 15:10 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений MCR1_REG в одной области памяти. */ union MCR1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру MCR1_BITS bit;; порядок полей определяет расположение данных. */ struct MCR1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCERA control register bit definitions: +/* Описывает структуру RCERA_BITS; порядок полей определяет расположение данных. */ struct RCERA_BITS { // bit description + /* Битовое поле RCEA0, ширина 1 бит; данные RCEA0. */ Uint16 RCEA0:1; // 0 Receive Channel enable bit + /* Битовое поле RCEA1, ширина 1 бит; данные RCEA1. */ Uint16 RCEA1:1; // 1 Receive Channel enable bit + /* Битовое поле RCEA2, ширина 1 бит; данные RCEA2. */ Uint16 RCEA2:1; // 2 Receive Channel enable bit + /* Битовое поле RCEA3, ширина 1 бит; данные RCEA3. */ Uint16 RCEA3:1; // 3 Receive Channel enable bit + /* Битовое поле RCEA4, ширина 1 бит; данные RCEA4. */ Uint16 RCEA4:1; // 4 Receive Channel enable bit + /* Битовое поле RCEA5, ширина 1 бит; данные RCEA5. */ Uint16 RCEA5:1; // 5 Receive Channel enable bit + /* Битовое поле RCEA6, ширина 1 бит; данные RCEA6. */ Uint16 RCEA6:1; // 6 Receive Channel enable bit + /* Битовое поле RCEA7, ширина 1 бит; данные RCEA7. */ Uint16 RCEA7:1; // 7 Receive Channel enable bit + /* Битовое поле RCEA8, ширина 1 бит; данные RCEA8. */ Uint16 RCEA8:1; // 8 Receive Channel enable bit + /* Битовое поле RCEA9, ширина 1 бит; данные RCEA9. */ Uint16 RCEA9:1; // 9 Receive Channel enable bit + /* Битовое поле RCEA10, ширина 1 бит; данные RCEA10. */ Uint16 RCEA10:1; // 10 Receive Channel enable bit + /* Битовое поле RCEA11, ширина 1 бит; данные RCEA11. */ Uint16 RCEA11:1; // 11 Receive Channel enable bit + /* Битовое поле RCEA12, ширина 1 бит; данные RCEA12. */ Uint16 RCEA12:1; // 12 Receive Channel enable bit + /* Битовое поле RCEA13, ширина 1 бит; данные RCEA13. */ Uint16 RCEA13:1; // 13 Receive Channel enable bit + /* Битовое поле RCEA14, ширина 1 бит; данные RCEA14. */ Uint16 RCEA14:1; // 14 Receive Channel enable bit + /* Битовое поле RCEA15, ширина 1 бит; данные RCEA15. */ Uint16 RCEA15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCERA_REG в одной области памяти. */ union RCERA_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCERA_BITS bit;; порядок полей определяет расположение данных. */ struct RCERA_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCERB control register bit definitions: +/* Описывает структуру RCERB_BITS; порядок полей определяет расположение данных. */ struct RCERB_BITS { // bit description + /* Битовое поле RCEB0, ширина 1 бит; данные RCEB0. */ Uint16 RCEB0:1; // 0 Receive Channel enable bit + /* Битовое поле RCEB1, ширина 1 бит; данные RCEB1. */ Uint16 RCEB1:1; // 1 Receive Channel enable bit + /* Битовое поле RCEB2, ширина 1 бит; данные RCEB2. */ Uint16 RCEB2:1; // 2 Receive Channel enable bit + /* Битовое поле RCEB3, ширина 1 бит; данные RCEB3. */ Uint16 RCEB3:1; // 3 Receive Channel enable bit + /* Битовое поле RCEB4, ширина 1 бит; данные RCEB4. */ Uint16 RCEB4:1; // 4 Receive Channel enable bit + /* Битовое поле RCEB5, ширина 1 бит; данные RCEB5. */ Uint16 RCEB5:1; // 5 Receive Channel enable bit + /* Битовое поле RCEB6, ширина 1 бит; данные RCEB6. */ Uint16 RCEB6:1; // 6 Receive Channel enable bit + /* Битовое поле RCEB7, ширина 1 бит; данные RCEB7. */ Uint16 RCEB7:1; // 7 Receive Channel enable bit + /* Битовое поле RCEB8, ширина 1 бит; данные RCEB8. */ Uint16 RCEB8:1; // 8 Receive Channel enable bit + /* Битовое поле RCEB9, ширина 1 бит; данные RCEB9. */ Uint16 RCEB9:1; // 9 Receive Channel enable bit + /* Битовое поле RCEB10, ширина 1 бит; данные RCEB10. */ Uint16 RCEB10:1; // 10 Receive Channel enable bit + /* Битовое поле RCEB11, ширина 1 бит; данные RCEB11. */ Uint16 RCEB11:1; // 11 Receive Channel enable bit + /* Битовое поле RCEB12, ширина 1 бит; данные RCEB12. */ Uint16 RCEB12:1; // 12 Receive Channel enable bit + /* Битовое поле RCEB13, ширина 1 бит; данные RCEB13. */ Uint16 RCEB13:1; // 13 Receive Channel enable bit + /* Битовое поле RCEB14, ширина 1 бит; данные RCEB14. */ Uint16 RCEB14:1; // 14 Receive Channel enable bit + /* Битовое поле RCEB15, ширина 1 бит; данные RCEB15. */ Uint16 RCEB15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCERB_REG в одной области памяти. */ union RCERB_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCERB_BITS bit;; порядок полей определяет расположение данных. */ struct RCERB_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCERA control register bit definitions: +/* Описывает структуру XCERA_BITS; порядок полей определяет расположение данных. */ struct XCERA_BITS { // bit description + /* Битовое поле XCERA0, ширина 1 бит; данные XCERA0. */ Uint16 XCERA0:1; // 0 Receive Channel enable bit + /* Битовое поле XCERA1, ширина 1 бит; данные XCERA1. */ Uint16 XCERA1:1; // 1 Receive Channel enable bit + /* Битовое поле XCERA2, ширина 1 бит; данные XCERA2. */ Uint16 XCERA2:1; // 2 Receive Channel enable bit + /* Битовое поле XCERA3, ширина 1 бит; данные XCERA3. */ Uint16 XCERA3:1; // 3 Receive Channel enable bit + /* Битовое поле XCERA4, ширина 1 бит; данные XCERA4. */ Uint16 XCERA4:1; // 4 Receive Channel enable bit + /* Битовое поле XCERA5, ширина 1 бит; данные XCERA5. */ Uint16 XCERA5:1; // 5 Receive Channel enable bit + /* Битовое поле XCERA6, ширина 1 бит; данные XCERA6. */ Uint16 XCERA6:1; // 6 Receive Channel enable bit + /* Битовое поле XCERA7, ширина 1 бит; данные XCERA7. */ Uint16 XCERA7:1; // 7 Receive Channel enable bit + /* Битовое поле XCERA8, ширина 1 бит; данные XCERA8. */ Uint16 XCERA8:1; // 8 Receive Channel enable bit + /* Битовое поле XCERA9, ширина 1 бит; данные XCERA9. */ Uint16 XCERA9:1; // 9 Receive Channel enable bit + /* Битовое поле XCERA10, ширина 1 бит; данные XCERA10. */ Uint16 XCERA10:1; // 10 Receive Channel enable bit + /* Битовое поле XCERA11, ширина 1 бит; данные XCERA11. */ Uint16 XCERA11:1; // 11 Receive Channel enable bit + /* Битовое поле XCERA12, ширина 1 бит; данные XCERA12. */ Uint16 XCERA12:1; // 12 Receive Channel enable bit + /* Битовое поле XCERA13, ширина 1 бит; данные XCERA13. */ Uint16 XCERA13:1; // 13 Receive Channel enable bit + /* Битовое поле XCERA14, ширина 1 бит; данные XCERA14. */ Uint16 XCERA14:1; // 14 Receive Channel enable bit + /* Битовое поле XCERA15, ширина 1 бит; данные XCERA15. */ Uint16 XCERA15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCERA_REG в одной области памяти. */ union XCERA_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCERA_BITS bit;; порядок полей определяет расположение данных. */ struct XCERA_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCERB control register bit definitions: +/* Описывает структуру XCERB_BITS; порядок полей определяет расположение данных. */ struct XCERB_BITS { // bit description + /* Битовое поле XCERB0, ширина 1 бит; данные XCERB0. */ Uint16 XCERB0:1; // 0 Receive Channel enable bit + /* Битовое поле XCERB1, ширина 1 бит; данные XCERB1. */ Uint16 XCERB1:1; // 1 Receive Channel enable bit + /* Битовое поле XCERB2, ширина 1 бит; данные XCERB2. */ Uint16 XCERB2:1; // 2 Receive Channel enable bit + /* Битовое поле XCERB3, ширина 1 бит; данные XCERB3. */ Uint16 XCERB3:1; // 3 Receive Channel enable bit + /* Битовое поле XCERB4, ширина 1 бит; данные XCERB4. */ Uint16 XCERB4:1; // 4 Receive Channel enable bit + /* Битовое поле XCERB5, ширина 1 бит; данные XCERB5. */ Uint16 XCERB5:1; // 5 Receive Channel enable bit + /* Битовое поле XCERB6, ширина 1 бит; данные XCERB6. */ Uint16 XCERB6:1; // 6 Receive Channel enable bit + /* Битовое поле XCERB7, ширина 1 бит; данные XCERB7. */ Uint16 XCERB7:1; // 7 Receive Channel enable bit + /* Битовое поле XCERB8, ширина 1 бит; данные XCERB8. */ Uint16 XCERB8:1; // 8 Receive Channel enable bit + /* Битовое поле XCERB9, ширина 1 бит; данные XCERB9. */ Uint16 XCERB9:1; // 9 Receive Channel enable bit + /* Битовое поле XCERB10, ширина 1 бит; данные XCERB10. */ Uint16 XCERB10:1; // 10 Receive Channel enable bit + /* Битовое поле XCERB11, ширина 1 бит; данные XCERB11. */ Uint16 XCERB11:1; // 11 Receive Channel enable bit + /* Битовое поле XCERB12, ширина 1 бит; данные XCERB12. */ Uint16 XCERB12:1; // 12 Receive Channel enable bit + /* Битовое поле XCERB13, ширина 1 бит; данные XCERB13. */ Uint16 XCERB13:1; // 13 Receive Channel enable bit + /* Битовое поле XCERB14, ширина 1 бит; данные XCERB14. */ Uint16 XCERB14:1; // 14 Receive Channel enable bit + /* Битовое поле XCERB15, ширина 1 бит; данные XCERB15. */ Uint16 XCERB15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCERB_REG в одной области памяти. */ union XCERB_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCERB_BITS bit;; порядок полей определяет расположение данных. */ struct XCERB_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // PCR control register bit definitions: +/* Описывает структуру PCR_BITS; порядок полей определяет расположение данных. */ struct PCR_BITS { // bit description + /* Битовое поле CLKRP, ширина 1 бит; данные CLKRP. */ Uint16 CLKRP:1; // 0 Receive Clock polarity + /* Битовое поле CLKXP, ширина 1 бит; данные CLKXP. */ Uint16 CLKXP:1; // 1 Transmit clock polarity + /* Битовое поле FSRP, ширина 1 бит; данные FSRP. */ Uint16 FSRP:1; // 2 Receive Frame synchronization polarity + /* Битовое поле FSXP, ширина 1 бит; данные FSXP. */ Uint16 FSXP:1; // 3 Transmit Frame synchronization polarity + /* Битовое поле DR_STAT, ширина 1 бит; данные DR_STAT. */ Uint16 DR_STAT:1; // 4 DR pin status - reserved for this McBSP + /* Битовое поле DX_STAT, ширина 1 бит; данные DX_STAT. */ Uint16 DX_STAT:1; // 5 DX pin status - reserved for this McBSP + /* Битовое поле CLKS_STAT, ширина 1 бит; данные CLKS_STAT. */ Uint16 CLKS_STAT:1; // 6 CLKS pin status - reserved for 28x -McBSP + /* Битовое поле SCLKME, ширина 1 бит; данные SCLKME. */ Uint16 SCLKME:1; // 7 Enhanced sample clock mode selection bit. + /* Битовое поле CLKRM, ширина 1 бит; данные CLKRM. */ Uint16 CLKRM:1; // 8 Receiver Clock Mode + /* Битовое поле CLKXM, ширина 1 бит; данные CLKXM. */ Uint16 CLKXM:1; // 9 Transmitter Clock Mode. + /* Битовое поле FSRM, ширина 1 бит; данные FSRM. */ Uint16 FSRM:1; // 10 Receive Frame Synchronization Mode + /* Битовое поле FSXM, ширина 1 бит; данные FSXM. */ Uint16 FSXM:1; // 11 Transmit Frame Synchronization Mode + /* Битовое поле RIOEN, ширина 1 бит; данные RIOEN. */ Uint16 RIOEN:1; // 12 General Purpose I/O Mode - reserved in this 28x-McBSP + /* Битовое поле XIOEN, ширина 1 бит; данные XIOEN. */ Uint16 XIOEN:1; // 13 General Purpose I/O Mode - reserved in this 28x-McBSP + /* Битовое поле IDEL_EN, ширина 1 бит; данные IDEL_EN. */ Uint16 IDEL_EN:1; // 14 reserved in this 28x-McBSP + /* Битовое поле rsvd, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:1 ; // 15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PCR_REG в одной области памяти. */ union PCR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PCR_BITS bit;; порядок полей определяет расположение данных. */ struct PCR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCERC control register bit definitions: +/* Описывает структуру RCERC_BITS; порядок полей определяет расположение данных. */ struct RCERC_BITS { // bit description + /* Битовое поле RCEC0, ширина 1 бит; данные RCEC0. */ Uint16 RCEC0:1; // 0 Receive Channel enable bit + /* Битовое поле RCEC1, ширина 1 бит; данные RCEC1. */ Uint16 RCEC1:1; // 1 Receive Channel enable bit + /* Битовое поле RCEC2, ширина 1 бит; данные RCEC2. */ Uint16 RCEC2:1; // 2 Receive Channel enable bit + /* Битовое поле RCEC3, ширина 1 бит; данные RCEC3. */ Uint16 RCEC3:1; // 3 Receive Channel enable bit + /* Битовое поле RCEC4, ширина 1 бит; данные RCEC4. */ Uint16 RCEC4:1; // 4 Receive Channel enable bit + /* Битовое поле RCEC5, ширина 1 бит; данные RCEC5. */ Uint16 RCEC5:1; // 5 Receive Channel enable bit + /* Битовое поле RCEC6, ширина 1 бит; данные RCEC6. */ Uint16 RCEC6:1; // 6 Receive Channel enable bit + /* Битовое поле RCEC7, ширина 1 бит; данные RCEC7. */ Uint16 RCEC7:1; // 7 Receive Channel enable bit + /* Битовое поле RCEC8, ширина 1 бит; данные RCEC8. */ Uint16 RCEC8:1; // 8 Receive Channel enable bit + /* Битовое поле RCEC9, ширина 1 бит; данные RCEC9. */ Uint16 RCEC9:1; // 9 Receive Channel enable bit + /* Битовое поле RCEC10, ширина 1 бит; данные RCEC10. */ Uint16 RCEC10:1; // 10 Receive Channel enable bit + /* Битовое поле RCEC11, ширина 1 бит; данные RCEC11. */ Uint16 RCEC11:1; // 11 Receive Channel enable bit + /* Битовое поле RCEC12, ширина 1 бит; данные RCEC12. */ Uint16 RCEC12:1; // 12 Receive Channel enable bit + /* Битовое поле RCEC13, ширина 1 бит; данные RCEC13. */ Uint16 RCEC13:1; // 13 Receive Channel enable bit + /* Битовое поле RCEC14, ширина 1 бит; данные RCEC14. */ Uint16 RCEC14:1; // 14 Receive Channel enable bit + /* Битовое поле RCEC15, ширина 1 бит; данные RCEC15. */ Uint16 RCEC15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCERC_REG в одной области памяти. */ union RCERC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCERC_BITS bit;; порядок полей определяет расположение данных. */ struct RCERC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCERD control register bit definitions: +/* Описывает структуру RCERD_BITS; порядок полей определяет расположение данных. */ struct RCERD_BITS { // bit description + /* Битовое поле RCED0, ширина 1 бит; данные RCED0. */ Uint16 RCED0:1; // 0 Receive Channel enable bit + /* Битовое поле RCED1, ширина 1 бит; данные RCED1. */ Uint16 RCED1:1; // 1 Receive Channel enable bit + /* Битовое поле RCED2, ширина 1 бит; данные RCED2. */ Uint16 RCED2:1; // 2 Receive Channel enable bit + /* Битовое поле RCED3, ширина 1 бит; данные RCED3. */ Uint16 RCED3:1; // 3 Receive Channel enable bit + /* Битовое поле RCED4, ширина 1 бит; данные RCED4. */ Uint16 RCED4:1; // 4 Receive Channel enable bit + /* Битовое поле RCED5, ширина 1 бит; данные RCED5. */ Uint16 RCED5:1; // 5 Receive Channel enable bit + /* Битовое поле RCED6, ширина 1 бит; данные RCED6. */ Uint16 RCED6:1; // 6 Receive Channel enable bit + /* Битовое поле RCED7, ширина 1 бит; данные RCED7. */ Uint16 RCED7:1; // 7 Receive Channel enable bit + /* Битовое поле RCED8, ширина 1 бит; данные RCED8. */ Uint16 RCED8:1; // 8 Receive Channel enable bit + /* Битовое поле RCED9, ширина 1 бит; данные RCED9. */ Uint16 RCED9:1; // 9 Receive Channel enable bit + /* Битовое поле RCED10, ширина 1 бит; данные RCED10. */ Uint16 RCED10:1; // 10 Receive Channel enable bit + /* Битовое поле RCED11, ширина 1 бит; данные RCED11. */ Uint16 RCED11:1; // 11 Receive Channel enable bit + /* Битовое поле RCED12, ширина 1 бит; данные RCED12. */ Uint16 RCED12:1; // 12 Receive Channel enable bit + /* Битовое поле RCED13, ширина 1 бит; данные RCED13. */ Uint16 RCED13:1; // 13 Receive Channel enable bit + /* Битовое поле RCED14, ширина 1 бит; данные RCED14. */ Uint16 RCED14:1; // 14 Receive Channel enable bit + /* Битовое поле RCED15, ширина 1 бит; данные RCED15. */ Uint16 RCED15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCERD_REG в одной области памяти. */ union RCERD_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCERD_BITS bit;; порядок полей определяет расположение данных. */ struct RCERD_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCERC control register bit definitions: +/* Описывает структуру XCERC_BITS; порядок полей определяет расположение данных. */ struct XCERC_BITS { // bit description + /* Битовое поле XCERC0, ширина 1 бит; данные XCERC0. */ Uint16 XCERC0:1; // 0 Receive Channel enable bit + /* Битовое поле XCERC1, ширина 1 бит; данные XCERC1. */ Uint16 XCERC1:1; // 1 Receive Channel enable bit + /* Битовое поле XCERC2, ширина 1 бит; данные XCERC2. */ Uint16 XCERC2:1; // 2 Receive Channel enable bit + /* Битовое поле XCERC3, ширина 1 бит; данные XCERC3. */ Uint16 XCERC3:1; // 3 Receive Channel enable bit + /* Битовое поле XCERC4, ширина 1 бит; данные XCERC4. */ Uint16 XCERC4:1; // 4 Receive Channel enable bit + /* Битовое поле XCERC5, ширина 1 бит; данные XCERC5. */ Uint16 XCERC5:1; // 5 Receive Channel enable bit + /* Битовое поле XCERC6, ширина 1 бит; данные XCERC6. */ Uint16 XCERC6:1; // 6 Receive Channel enable bit + /* Битовое поле XCERC7, ширина 1 бит; данные XCERC7. */ Uint16 XCERC7:1; // 7 Receive Channel enable bit + /* Битовое поле XCERC8, ширина 1 бит; данные XCERC8. */ Uint16 XCERC8:1; // 8 Receive Channel enable bit + /* Битовое поле XCERC9, ширина 1 бит; данные XCERC9. */ Uint16 XCERC9:1; // 9 Receive Channel enable bit + /* Битовое поле XCERC10, ширина 1 бит; данные XCERC10. */ Uint16 XCERC10:1; // 10 Receive Channel enable bit + /* Битовое поле XCERC11, ширина 1 бит; данные XCERC11. */ Uint16 XCERC11:1; // 11 Receive Channel enable bit + /* Битовое поле XCERC12, ширина 1 бит; данные XCERC12. */ Uint16 XCERC12:1; // 12 Receive Channel enable bit + /* Битовое поле XCERC13, ширина 1 бит; данные XCERC13. */ Uint16 XCERC13:1; // 13 Receive Channel enable bit + /* Битовое поле XCERC14, ширина 1 бит; данные XCERC14. */ Uint16 XCERC14:1; // 14 Receive Channel enable bit + /* Битовое поле XCERC15, ширина 1 бит; данные XCERC15. */ Uint16 XCERC15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCERC_REG в одной области памяти. */ union XCERC_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCERC_BITS bit;; порядок полей определяет расположение данных. */ struct XCERC_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCERD control register bit definitions: +/* Описывает структуру XCERD_BITS; порядок полей определяет расположение данных. */ struct XCERD_BITS { // bit description + /* Битовое поле XCERD0, ширина 1 бит; данные XCERD0. */ Uint16 XCERD0:1; // 0 Receive Channel enable bit + /* Битовое поле XCERD1, ширина 1 бит; данные XCERD1. */ Uint16 XCERD1:1; // 1 Receive Channel enable bit + /* Битовое поле XCERD2, ширина 1 бит; данные XCERD2. */ Uint16 XCERD2:1; // 2 Receive Channel enable bit + /* Битовое поле XCERD3, ширина 1 бит; данные XCERD3. */ Uint16 XCERD3:1; // 3 Receive Channel enable bit + /* Битовое поле XCERD4, ширина 1 бит; данные XCERD4. */ Uint16 XCERD4:1; // 4 Receive Channel enable bit + /* Битовое поле XCERD5, ширина 1 бит; данные XCERD5. */ Uint16 XCERD5:1; // 5 Receive Channel enable bit + /* Битовое поле XCERD6, ширина 1 бит; данные XCERD6. */ Uint16 XCERD6:1; // 6 Receive Channel enable bit + /* Битовое поле XCERD7, ширина 1 бит; данные XCERD7. */ Uint16 XCERD7:1; // 7 Receive Channel enable bit + /* Битовое поле XCERD8, ширина 1 бит; данные XCERD8. */ Uint16 XCERD8:1; // 8 Receive Channel enable bit + /* Битовое поле XCERD9, ширина 1 бит; данные XCERD9. */ Uint16 XCERD9:1; // 9 Receive Channel enable bit + /* Битовое поле XCERD10, ширина 1 бит; данные XCERD10. */ Uint16 XCERD10:1; // 10 Receive Channel enable bit + /* Битовое поле XCERD11, ширина 1 бит; данные XCERD11. */ Uint16 XCERD11:1; // 11 Receive Channel enable bit + /* Битовое поле XCERD12, ширина 1 бит; данные XCERD12. */ Uint16 XCERD12:1; // 12 Receive Channel enable bit + /* Битовое поле XCERD13, ширина 1 бит; данные XCERD13. */ Uint16 XCERD13:1; // 13 Receive Channel enable bit + /* Битовое поле XCERD14, ширина 1 бит; данные XCERD14. */ Uint16 XCERD14:1; // 14 Receive Channel enable bit + /* Битовое поле XCERD15, ширина 1 бит; данные XCERD15. */ Uint16 XCERD15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCERD_REG в одной области памяти. */ union XCERD_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCERD_BITS bit;; порядок полей определяет расположение данных. */ struct XCERD_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCERE control register bit definitions: +/* Описывает структуру RCERE_BITS; порядок полей определяет расположение данных. */ struct RCERE_BITS { // bit description + /* Битовое поле RCEE0, ширина 1 бит; данные RCEE0. */ Uint16 RCEE0:1; // 0 Receive Channel enable bit + /* Битовое поле RCEE1, ширина 1 бит; данные RCEE1. */ Uint16 RCEE1:1; // 1 Receive Channel enable bit + /* Битовое поле RCEE2, ширина 1 бит; данные RCEE2. */ Uint16 RCEE2:1; // 2 Receive Channel enable bit + /* Битовое поле RCEE3, ширина 1 бит; данные RCEE3. */ Uint16 RCEE3:1; // 3 Receive Channel enable bit + /* Битовое поле RCEE4, ширина 1 бит; данные RCEE4. */ Uint16 RCEE4:1; // 4 Receive Channel enable bit + /* Битовое поле RCEE5, ширина 1 бит; данные RCEE5. */ Uint16 RCEE5:1; // 5 Receive Channel enable bit + /* Битовое поле RCEE6, ширина 1 бит; данные RCEE6. */ Uint16 RCEE6:1; // 6 Receive Channel enable bit + /* Битовое поле RCEE7, ширина 1 бит; данные RCEE7. */ Uint16 RCEE7:1; // 7 Receive Channel enable bit + /* Битовое поле RCEE8, ширина 1 бит; данные RCEE8. */ Uint16 RCEE8:1; // 8 Receive Channel enable bit + /* Битовое поле RCEE9, ширина 1 бит; данные RCEE9. */ Uint16 RCEE9:1; // 9 Receive Channel enable bit + /* Битовое поле RCEE10, ширина 1 бит; данные RCEE10. */ Uint16 RCEE10:1; // 10 Receive Channel enable bit + /* Битовое поле RCEE11, ширина 1 бит; данные RCEE11. */ Uint16 RCEE11:1; // 11 Receive Channel enable bit + /* Битовое поле RCEE12, ширина 1 бит; данные RCEE12. */ Uint16 RCEE12:1; // 12 Receive Channel enable bit + /* Битовое поле RCEE13, ширина 1 бит; данные RCEE13. */ Uint16 RCEE13:1; // 13 Receive Channel enable bit + /* Битовое поле RCEE14, ширина 1 бит; данные RCEE14. */ Uint16 RCEE14:1; // 14 Receive Channel enable bit + /* Битовое поле RCEE15, ширина 1 бит; данные RCEE15. */ Uint16 RCEE15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCERE_REG в одной области памяти. */ union RCERE_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCERE_BITS bit;; порядок полей определяет расположение данных. */ struct RCERE_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCERF control register bit definitions: +/* Описывает структуру RCERF_BITS; порядок полей определяет расположение данных. */ struct RCERF_BITS { // bit description + /* Битовое поле RCEF0, ширина 1 бит; данные RCEF0. */ Uint16 RCEF0:1; // 0 Receive Channel enable bit + /* Битовое поле RCEF1, ширина 1 бит; данные RCEF1. */ Uint16 RCEF1:1; // 1 Receive Channel enable bit + /* Битовое поле RCEF2, ширина 1 бит; данные RCEF2. */ Uint16 RCEF2:1; // 2 Receive Channel enable bit + /* Битовое поле RCEF3, ширина 1 бит; данные RCEF3. */ Uint16 RCEF3:1; // 3 Receive Channel enable bit + /* Битовое поле RCEF4, ширина 1 бит; данные RCEF4. */ Uint16 RCEF4:1; // 4 Receive Channel enable bit + /* Битовое поле RCEF5, ширина 1 бит; данные RCEF5. */ Uint16 RCEF5:1; // 5 Receive Channel enable bit + /* Битовое поле RCEF6, ширина 1 бит; данные RCEF6. */ Uint16 RCEF6:1; // 6 Receive Channel enable bit + /* Битовое поле RCEF7, ширина 1 бит; данные RCEF7. */ Uint16 RCEF7:1; // 7 Receive Channel enable bit + /* Битовое поле RCEF8, ширина 1 бит; данные RCEF8. */ Uint16 RCEF8:1; // 8 Receive Channel enable bit + /* Битовое поле RCEF9, ширина 1 бит; данные RCEF9. */ Uint16 RCEF9:1; // 9 Receive Channel enable bit + /* Битовое поле RCEF10, ширина 1 бит; данные RCEF10. */ Uint16 RCEF10:1; // 10 Receive Channel enable bit + /* Битовое поле RCEF11, ширина 1 бит; данные RCEF11. */ Uint16 RCEF11:1; // 11 Receive Channel enable bit + /* Битовое поле RCEF12, ширина 1 бит; данные RCEF12. */ Uint16 RCEF12:1; // 12 Receive Channel enable bit + /* Битовое поле RCEF13, ширина 1 бит; данные RCEF13. */ Uint16 RCEF13:1; // 13 Receive Channel enable bit + /* Битовое поле RCEF14, ширина 1 бит; данные RCEF14. */ Uint16 RCEF14:1; // 14 Receive Channel enable bit + /* Битовое поле RCEF15, ширина 1 бит; данные RCEF15. */ Uint16 RCEF15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCERF_REG в одной области памяти. */ union RCERF_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCERF_BITS bit;; порядок полей определяет расположение данных. */ struct RCERF_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCERE control register bit definitions: +/* Описывает структуру XCERE_BITS; порядок полей определяет расположение данных. */ struct XCERE_BITS { // bit description + /* Битовое поле XCERE0, ширина 1 бит; данные XCERE0. */ Uint16 XCERE0:1; // 0 Receive Channel enable bit + /* Битовое поле XCERE1, ширина 1 бит; данные XCERE1. */ Uint16 XCERE1:1; // 1 Receive Channel enable bit + /* Битовое поле XCERE2, ширина 1 бит; данные XCERE2. */ Uint16 XCERE2:1; // 2 Receive Channel enable bit + /* Битовое поле XCERE3, ширина 1 бит; данные XCERE3. */ Uint16 XCERE3:1; // 3 Receive Channel enable bit + /* Битовое поле XCERE4, ширина 1 бит; данные XCERE4. */ Uint16 XCERE4:1; // 4 Receive Channel enable bit + /* Битовое поле XCERE5, ширина 1 бит; данные XCERE5. */ Uint16 XCERE5:1; // 5 Receive Channel enable bit + /* Битовое поле XCERE6, ширина 1 бит; данные XCERE6. */ Uint16 XCERE6:1; // 6 Receive Channel enable bit + /* Битовое поле XCERE7, ширина 1 бит; данные XCERE7. */ Uint16 XCERE7:1; // 7 Receive Channel enable bit + /* Битовое поле XCERE8, ширина 1 бит; данные XCERE8. */ Uint16 XCERE8:1; // 8 Receive Channel enable bit + /* Битовое поле XCERE9, ширина 1 бит; данные XCERE9. */ Uint16 XCERE9:1; // 9 Receive Channel enable bit + /* Битовое поле XCERE10, ширина 1 бит; данные XCERE10. */ Uint16 XCERE10:1; // 10 Receive Channel enable bit + /* Битовое поле XCERE11, ширина 1 бит; данные XCERE11. */ Uint16 XCERE11:1; // 11 Receive Channel enable bit + /* Битовое поле XCERE12, ширина 1 бит; данные XCERE12. */ Uint16 XCERE12:1; // 12 Receive Channel enable bit + /* Битовое поле XCERE13, ширина 1 бит; данные XCERE13. */ Uint16 XCERE13:1; // 13 Receive Channel enable bit + /* Битовое поле XCERE14, ширина 1 бит; данные XCERE14. */ Uint16 XCERE14:1; // 14 Receive Channel enable bit + /* Битовое поле XCERE15, ширина 1 бит; данные XCERE15. */ Uint16 XCERE15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCERE_REG в одной области памяти. */ union XCERE_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCERE_BITS bit;; порядок полей определяет расположение данных. */ struct XCERE_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCERF control register bit definitions: +/* Описывает структуру XCERF_BITS; порядок полей определяет расположение данных. */ struct XCERF_BITS { // bit description + /* Битовое поле XCERF0, ширина 1 бит; данные XCERF0. */ Uint16 XCERF0:1; // 0 Receive Channel enable bit + /* Битовое поле XCERF1, ширина 1 бит; данные XCERF1. */ Uint16 XCERF1:1; // 1 Receive Channel enable bit + /* Битовое поле XCERF2, ширина 1 бит; данные XCERF2. */ Uint16 XCERF2:1; // 2 Receive Channel enable bit + /* Битовое поле XCERF3, ширина 1 бит; данные XCERF3. */ Uint16 XCERF3:1; // 3 Receive Channel enable bit + /* Битовое поле XCERF4, ширина 1 бит; данные XCERF4. */ Uint16 XCERF4:1; // 4 Receive Channel enable bit + /* Битовое поле XCERF5, ширина 1 бит; данные XCERF5. */ Uint16 XCERF5:1; // 5 Receive Channel enable bit + /* Битовое поле XCERF6, ширина 1 бит; данные XCERF6. */ Uint16 XCERF6:1; // 6 Receive Channel enable bit + /* Битовое поле XCERF7, ширина 1 бит; данные XCERF7. */ Uint16 XCERF7:1; // 7 Receive Channel enable bit + /* Битовое поле XCERF8, ширина 1 бит; данные XCERF8. */ Uint16 XCERF8:1; // 8 Receive Channel enable bit + /* Битовое поле XCERF9, ширина 1 бит; данные XCERF9. */ Uint16 XCERF9:1; // 9 Receive Channel enable bit + /* Битовое поле XCERF10, ширина 1 бит; данные XCERF10. */ Uint16 XCERF10:1; // 10 Receive Channel enable bit + /* Битовое поле XCERF11, ширина 1 бит; данные XCERF11. */ Uint16 XCERF11:1; // 11 Receive Channel enable bit + /* Битовое поле XCERF12, ширина 1 бит; данные XCERF12. */ Uint16 XCERF12:1; // 12 Receive Channel enable bit + /* Битовое поле XCERF13, ширина 1 бит; данные XCERF13. */ Uint16 XCERF13:1; // 13 Receive Channel enable bit + /* Битовое поле XCERF14, ширина 1 бит; данные XCERF14. */ Uint16 XCERF14:1; // 14 Receive Channel enable bit + /* Битовое поле XCERF15, ширина 1 бит; данные XCERF15. */ Uint16 XCERF15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCERF_REG в одной области памяти. */ union XCERF_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCERF_BITS bit;; порядок полей определяет расположение данных. */ struct XCERF_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCERG control register bit definitions: +/* Описывает структуру RCERG_BITS; порядок полей определяет расположение данных. */ struct RCERG_BITS { // bit description + /* Битовое поле RCEG0, ширина 1 бит; данные RCEG0. */ Uint16 RCEG0:1; // 0 Receive Channel enable bit + /* Битовое поле RCEG1, ширина 1 бит; данные RCEG1. */ Uint16 RCEG1:1; // 1 Receive Channel enable bit + /* Битовое поле RCEG2, ширина 1 бит; данные RCEG2. */ Uint16 RCEG2:1; // 2 Receive Channel enable bit + /* Битовое поле RCEG3, ширина 1 бит; данные RCEG3. */ Uint16 RCEG3:1; // 3 Receive Channel enable bit + /* Битовое поле RCEG4, ширина 1 бит; данные RCEG4. */ Uint16 RCEG4:1; // 4 Receive Channel enable bit + /* Битовое поле RCEG5, ширина 1 бит; данные RCEG5. */ Uint16 RCEG5:1; // 5 Receive Channel enable bit + /* Битовое поле RCEG6, ширина 1 бит; данные RCEG6. */ Uint16 RCEG6:1; // 6 Receive Channel enable bit + /* Битовое поле RCEG7, ширина 1 бит; данные RCEG7. */ Uint16 RCEG7:1; // 7 Receive Channel enable bit + /* Битовое поле RCEG8, ширина 1 бит; данные RCEG8. */ Uint16 RCEG8:1; // 8 Receive Channel enable bit + /* Битовое поле RCEG9, ширина 1 бит; данные RCEG9. */ Uint16 RCEG9:1; // 9 Receive Channel enable bit + /* Битовое поле RCEG10, ширина 1 бит; данные RCEG10. */ Uint16 RCEG10:1; // 10 Receive Channel enable bit + /* Битовое поле RCEG11, ширина 1 бит; данные RCEG11. */ Uint16 RCEG11:1; // 11 Receive Channel enable bit + /* Битовое поле RCEG12, ширина 1 бит; данные RCEG12. */ Uint16 RCEG12:1; // 12 Receive Channel enable bit + /* Битовое поле RCEG13, ширина 1 бит; данные RCEG13. */ Uint16 RCEG13:1; // 13 Receive Channel enable bit + /* Битовое поле RCEG14, ширина 1 бит; данные RCEG14. */ Uint16 RCEG14:1; // 14 Receive Channel enable bit + /* Битовое поле RCEG15, ширина 1 бит; данные RCEG15. */ Uint16 RCEG15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCERG_REG в одной области памяти. */ union RCERG_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCERG_BITS bit;; порядок полей определяет расположение данных. */ struct RCERG_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // RCERH control register bit definitions: +/* Описывает структуру RCERH_BITS; порядок полей определяет расположение данных. */ struct RCERH_BITS { // bit description + /* Битовое поле RCEH0, ширина 1 бит; данные RCEH0. */ Uint16 RCEH0:1; // 0 Receive Channel enable bit + /* Битовое поле RCEH1, ширина 1 бит; данные RCEH1. */ Uint16 RCEH1:1; // 1 Receive Channel enable bit + /* Битовое поле RCEH2, ширина 1 бит; данные RCEH2. */ Uint16 RCEH2:1; // 2 Receive Channel enable bit + /* Битовое поле RCEH3, ширина 1 бит; данные RCEH3. */ Uint16 RCEH3:1; // 3 Receive Channel enable bit + /* Битовое поле RCEH4, ширина 1 бит; данные RCEH4. */ Uint16 RCEH4:1; // 4 Receive Channel enable bit + /* Битовое поле RCEH5, ширина 1 бит; данные RCEH5. */ Uint16 RCEH5:1; // 5 Receive Channel enable bit + /* Битовое поле RCEH6, ширина 1 бит; данные RCEH6. */ Uint16 RCEH6:1; // 6 Receive Channel enable bit + /* Битовое поле RCEH7, ширина 1 бит; данные RCEH7. */ Uint16 RCEH7:1; // 7 Receive Channel enable bit + /* Битовое поле RCEH8, ширина 1 бит; данные RCEH8. */ Uint16 RCEH8:1; // 8 Receive Channel enable bit + /* Битовое поле RCEH9, ширина 1 бит; данные RCEH9. */ Uint16 RCEH9:1; // 9 Receive Channel enable bit + /* Битовое поле RCEH10, ширина 1 бит; данные RCEH10. */ Uint16 RCEH10:1; // 10 Receive Channel enable bit + /* Битовое поле RCEH11, ширина 1 бит; данные RCEH11. */ Uint16 RCEH11:1; // 11 Receive Channel enable bit + /* Битовое поле RCEH12, ширина 1 бит; данные RCEH12. */ Uint16 RCEH12:1; // 12 Receive Channel enable bit + /* Битовое поле RCEH13, ширина 1 бит; данные RCEH13. */ Uint16 RCEH13:1; // 13 Receive Channel enable bit + /* Битовое поле RCEH14, ширина 1 бит; данные RCEH14. */ Uint16 RCEH14:1; // 14 Receive Channel enable bit + /* Битовое поле RCEH15, ширина 1 бит; данные RCEH15. */ Uint16 RCEH15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений RCERH_REG в одной области памяти. */ union RCERH_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру RCERH_BITS bit;; порядок полей определяет расположение данных. */ struct RCERH_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCERG control register bit definitions: +/* Описывает структуру XCERG_BITS; порядок полей определяет расположение данных. */ struct XCERG_BITS { // bit description + /* Битовое поле XCERG0, ширина 1 бит; данные XCERG0. */ Uint16 XCERG0:1; // 0 Receive Channel enable bit + /* Битовое поле XCERG1, ширина 1 бит; данные XCERG1. */ Uint16 XCERG1:1; // 1 Receive Channel enable bit + /* Битовое поле XCERG2, ширина 1 бит; данные XCERG2. */ Uint16 XCERG2:1; // 2 Receive Channel enable bit + /* Битовое поле XCERG3, ширина 1 бит; данные XCERG3. */ Uint16 XCERG3:1; // 3 Receive Channel enable bit + /* Битовое поле XCERG4, ширина 1 бит; данные XCERG4. */ Uint16 XCERG4:1; // 4 Receive Channel enable bit + /* Битовое поле XCERG5, ширина 1 бит; данные XCERG5. */ Uint16 XCERG5:1; // 5 Receive Channel enable bit + /* Битовое поле XCERG6, ширина 1 бит; данные XCERG6. */ Uint16 XCERG6:1; // 6 Receive Channel enable bit + /* Битовое поле XCERG7, ширина 1 бит; данные XCERG7. */ Uint16 XCERG7:1; // 7 Receive Channel enable bit + /* Битовое поле XCERG8, ширина 1 бит; данные XCERG8. */ Uint16 XCERG8:1; // 8 Receive Channel enable bit + /* Битовое поле XCERG9, ширина 1 бит; данные XCERG9. */ Uint16 XCERG9:1; // 9 Receive Channel enable bit + /* Битовое поле XCERG10, ширина 1 бит; данные XCERG10. */ Uint16 XCERG10:1; // 10 Receive Channel enable bit + /* Битовое поле XCERG11, ширина 1 бит; данные XCERG11. */ Uint16 XCERG11:1; // 11 Receive Channel enable bit + /* Битовое поле XCERG12, ширина 1 бит; данные XCERG12. */ Uint16 XCERG12:1; // 12 Receive Channel enable bit + /* Битовое поле XCERG13, ширина 1 бит; данные XCERG13. */ Uint16 XCERG13:1; // 13 Receive Channel enable bit + /* Битовое поле XCERG14, ширина 1 бит; данные XCERG14. */ Uint16 XCERG14:1; // 14 Receive Channel enable bit + /* Битовое поле XCERG15, ширина 1 бит; данные XCERG15. */ Uint16 XCERG15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCERG_REG в одной области памяти. */ union XCERG_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCERG_BITS bit;; порядок полей определяет расположение данных. */ struct XCERG_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XCERH control register bit definitions: +/* Описывает структуру XCERH_BITS; порядок полей определяет расположение данных. */ struct XCERH_BITS { // bit description + /* Битовое поле XCEH0, ширина 1 бит; данные XCEH0. */ Uint16 XCEH0:1; // 0 Receive Channel enable bit + /* Битовое поле XCEH1, ширина 1 бит; данные XCEH1. */ Uint16 XCEH1:1; // 1 Receive Channel enable bit + /* Битовое поле XCEH2, ширина 1 бит; данные XCEH2. */ Uint16 XCEH2:1; // 2 Receive Channel enable bit + /* Битовое поле XCEH3, ширина 1 бит; данные XCEH3. */ Uint16 XCEH3:1; // 3 Receive Channel enable bit + /* Битовое поле XCEH4, ширина 1 бит; данные XCEH4. */ Uint16 XCEH4:1; // 4 Receive Channel enable bit + /* Битовое поле XCEH5, ширина 1 бит; данные XCEH5. */ Uint16 XCEH5:1; // 5 Receive Channel enable bit + /* Битовое поле XCEH6, ширина 1 бит; данные XCEH6. */ Uint16 XCEH6:1; // 6 Receive Channel enable bit + /* Битовое поле XCEH7, ширина 1 бит; данные XCEH7. */ Uint16 XCEH7:1; // 7 Receive Channel enable bit + /* Битовое поле XCEH8, ширина 1 бит; данные XCEH8. */ Uint16 XCEH8:1; // 8 Receive Channel enable bit + /* Битовое поле XCEH9, ширина 1 бит; данные XCEH9. */ Uint16 XCEH9:1; // 9 Receive Channel enable bit + /* Битовое поле XCEH10, ширина 1 бит; данные XCEH10. */ Uint16 XCEH10:1; // 10 Receive Channel enable bit + /* Битовое поле XCEH11, ширина 1 бит; данные XCEH11. */ Uint16 XCEH11:1; // 11 Receive Channel enable bit + /* Битовое поле XCEH12, ширина 1 бит; данные XCEH12. */ Uint16 XCEH12:1; // 12 Receive Channel enable bit + /* Битовое поле XCEH13, ширина 1 бит; данные XCEH13. */ Uint16 XCEH13:1; // 13 Receive Channel enable bit + /* Битовое поле XCEH14, ширина 1 бит; данные XCEH14. */ Uint16 XCEH14:1; // 14 Receive Channel enable bit + /* Битовое поле XCEH15, ширина 1 бит; данные XCEH15. */ Uint16 XCEH15:1; // 15 Receive Channel enable bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XCERH_REG в одной области памяти. */ union XCERH_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XCERH_BITS bit;; порядок полей определяет расположение данных. */ struct XCERH_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // McBSP Interrupt enable register for RINT/XINT +/* Описывает структуру MFFINT_BITS; порядок полей определяет расположение данных. */ struct MFFINT_BITS { // bits description + /* Битовое поле XINT, ширина 1 бит; данные XINT. */ Uint16 XINT:1; // 0 XINT interrupt enable + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 1 reserved + /* Битовое поле RINT, ширина 1 бит; данные RINT. */ Uint16 RINT:1; // 2 RINT interrupt enable + /* Битовое поле rsvd2, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:13; // 15:3 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений MFFINT_REG в одной области памяти. */ union MFFINT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру MFFINT_BITS bit;; порядок полей определяет расположение данных. */ struct MFFINT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // McBSP Register File: // +/* Описывает структуру MCBSP_REGS; порядок полей определяет расположение данных. */ struct MCBSP_REGS { + /* Объединяет несколько представлений DRR2_REG DRR2; в одной области памяти. */ union DRR2_REG DRR2; // MCBSP Data receive register bits 31-16 + /* Объединяет несколько представлений DRR1_REG DRR1; в одной области памяти. */ union DRR1_REG DRR1; // MCBSP Data receive register bits 15-0 + /* Объединяет несколько представлений DXR2_REG DXR2; в одной области памяти. */ union DXR2_REG DXR2; // MCBSP Data transmit register bits 31-16 + /* Объединяет несколько представлений DXR1_REG DXR1; в одной области памяти. */ union DXR1_REG DXR1; // MCBSP Data transmit register bits 15-0 + /* Объединяет несколько представлений SPCR2_REG SPCR2; в одной области памяти. */ union SPCR2_REG SPCR2; // MCBSP control register bits 31-16 + /* Объединяет несколько представлений SPCR1_REG SPCR1; в одной области памяти. */ union SPCR1_REG SPCR1; // MCBSP control register bits 15-0 + /* Объединяет несколько представлений RCR2_REG RCR2; в одной области памяти. */ union RCR2_REG RCR2; // MCBSP receive control register bits 31-16 + /* Объединяет несколько представлений RCR1_REG RCR1; в одной области памяти. */ union RCR1_REG RCR1; // MCBSP receive control register bits 15-0 + /* Объединяет несколько представлений XCR2_REG XCR2; в одной области памяти. */ union XCR2_REG XCR2; // MCBSP transmit control register bits 31-16 + /* Объединяет несколько представлений XCR1_REG XCR1; в одной области памяти. */ union XCR1_REG XCR1; // MCBSP transmit control register bits 15-0 + /* Объединяет несколько представлений SRGR2_REG SRGR2; в одной области памяти. */ union SRGR2_REG SRGR2; // MCBSP sample rate gen register bits 31-16 + /* Объединяет несколько представлений SRGR1_REG SRGR1; в одной области памяти. */ union SRGR1_REG SRGR1; // MCBSP sample rate gen register bits 15-0 + /* Объединяет несколько представлений MCR2_REG MCR2; в одной области памяти. */ union MCR2_REG MCR2; // MCBSP multichannel register bits 31-16 + /* Объединяет несколько представлений MCR1_REG MCR1; в одной области памяти. */ union MCR1_REG MCR1; // MCBSP multichannel register bits 15-0 + /* Объединяет несколько представлений RCERA_REG RCERA; в одной области памяти. */ union RCERA_REG RCERA; // MCBSP Receive channel enable partition A + /* Объединяет несколько представлений RCERB_REG RCERB; в одной области памяти. */ union RCERB_REG RCERB; // MCBSP Receive channel enable partition B + /* Объединяет несколько представлений XCERA_REG XCERA; в одной области памяти. */ union XCERA_REG XCERA; // MCBSP Transmit channel enable partition A + /* Объединяет несколько представлений XCERB_REG XCERB; в одной области памяти. */ union XCERB_REG XCERB; // MCBSP Transmit channel enable partition B + /* Объединяет несколько представлений PCR_REG PCR; в одной области памяти. */ union PCR_REG PCR; // MCBSP Pin control register bits 15-0 + /* Объединяет несколько представлений RCERC_REG RCERC; в одной области памяти. */ union RCERC_REG RCERC; // MCBSP Receive channel enable partition C + /* Объединяет несколько представлений RCERD_REG RCERD; в одной области памяти. */ union RCERD_REG RCERD; // MCBSP Receive channel enable partition D + /* Объединяет несколько представлений XCERC_REG XCERC; в одной области памяти. */ union XCERC_REG XCERC; // MCBSP Transmit channel enable partition C + /* Объединяет несколько представлений XCERD_REG XCERD; в одной области памяти. */ union XCERD_REG XCERD; // MCBSP Transmit channel enable partition D + /* Объединяет несколько представлений RCERE_REG RCERE; в одной области памяти. */ union RCERE_REG RCERE; // MCBSP Receive channel enable partition E + /* Объединяет несколько представлений RCERF_REG RCERF; в одной области памяти. */ union RCERF_REG RCERF; // MCBSP Receive channel enable partition F + /* Объединяет несколько представлений XCERE_REG XCERE; в одной области памяти. */ union XCERE_REG XCERE; // MCBSP Transmit channel enable partition E + /* Объединяет несколько представлений XCERF_REG XCERF; в одной области памяти. */ union XCERF_REG XCERF; // MCBSP Transmit channel enable partition F + /* Объединяет несколько представлений RCERG_REG RCERG; в одной области памяти. */ union RCERG_REG RCERG; // MCBSP Receive channel enable partition G + /* Объединяет несколько представлений RCERH_REG RCERH; в одной области памяти. */ union RCERH_REG RCERH; // MCBSP Receive channel enable partition H + /* Объединяет несколько представлений XCERG_REG XCERG; в одной области памяти. */ union XCERG_REG XCERG; // MCBSP Transmit channel enable partition G + /* Объединяет несколько представлений XCERH_REG XCERH; в одной области памяти. */ union XCERH_REG XCERH; // MCBSP Transmit channel enable partition H + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1[4]; // reserved + /* Объединяет несколько представлений MFFINT_REG MFFINT; в одной области памяти. */ union MFFINT_REG MFFINT; // MCBSP Interrupt enable register for RINT/XINT + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2; // reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // McBSP External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct MCBSP_REGS McbspaRegs;; порядок элементов сохраняется. */ extern volatile struct MCBSP_REGS McbspaRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct MCBSP_REGS McbspbRegs;; порядок элементов сохраняется. */ extern volatile struct MCBSP_REGS McbspbRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_MCBSP_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h index 1ab6e9d..edd922f 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание PieCtrl для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:52:24 $ //########################################################################### @@ -12,140 +13,246 @@ //########################################################################### +/* Начинает условие: DSP2833x_PIE_CTRL_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_PIE_CTRL_H +/* Определяет защитный символ или переключатель DSP2833x_PIE_CTRL_H для последующей компиляции. */ #define DSP2833x_PIE_CTRL_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //--------------------------------------------------------------------------- // PIE Control Register Bit Definitions: // // PIECTRL: Register bit definitions: +/* Описывает структуру PIECTRL_BITS; порядок полей определяет расположение данных. */ struct PIECTRL_BITS { // bits description + /* Битовое поле ENPIE, ширина 1 бит; данные ENPIE. */ Uint16 ENPIE:1; // 0 Enable PIE block + /* Битовое поле PIEVECT, ширина 15 бит; данные PIEVECT. */ Uint16 PIEVECT:15; // 15:1 Fetched vector address +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PIECTRL_REG в одной области памяти. */ union PIECTRL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PIECTRL_BITS bit;; порядок полей определяет расположение данных. */ struct PIECTRL_BITS bit; -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; // PIEIER: Register bit definitions: +/* Описывает структуру PIEIER_BITS; порядок полей определяет расположение данных. */ struct PIEIER_BITS { // bits description + /* Битовое поле INTx1, ширина 1 бит; данные INTx1. */ Uint16 INTx1:1; // 0 INTx.1 + /* Битовое поле INTx2, ширина 1 бит; данные INTx2. */ Uint16 INTx2:1; // 1 INTx.2 + /* Битовое поле INTx3, ширина 1 бит; данные INTx3. */ Uint16 INTx3:1; // 2 INTx.3 + /* Битовое поле INTx4, ширина 1 бит; данные INTx4. */ Uint16 INTx4:1; // 3 INTx.4 + /* Битовое поле INTx5, ширина 1 бит; данные INTx5. */ Uint16 INTx5:1; // 4 INTx.5 + /* Битовое поле INTx6, ширина 1 бит; данные INTx6. */ Uint16 INTx6:1; // 5 INTx.6 + /* Битовое поле INTx7, ширина 1 бит; данные INTx7. */ Uint16 INTx7:1; // 6 INTx.7 + /* Битовое поле INTx8, ширина 1 бит; данные INTx8. */ Uint16 INTx8:1; // 7 INTx.8 + /* Битовое поле rsvd, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PIEIER_REG в одной области памяти. */ union PIEIER_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PIEIER_BITS bit;; порядок полей определяет расположение данных. */ struct PIEIER_BITS bit; -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; // PIEIFR: Register bit definitions: +/* Описывает структуру PIEIFR_BITS; порядок полей определяет расположение данных. */ struct PIEIFR_BITS { // bits description + /* Битовое поле INTx1, ширина 1 бит; данные INTx1. */ Uint16 INTx1:1; // 0 INTx.1 + /* Битовое поле INTx2, ширина 1 бит; данные INTx2. */ Uint16 INTx2:1; // 1 INTx.2 + /* Битовое поле INTx3, ширина 1 бит; данные INTx3. */ Uint16 INTx3:1; // 2 INTx.3 + /* Битовое поле INTx4, ширина 1 бит; данные INTx4. */ Uint16 INTx4:1; // 3 INTx.4 + /* Битовое поле INTx5, ширина 1 бит; данные INTx5. */ Uint16 INTx5:1; // 4 INTx.5 + /* Битовое поле INTx6, ширина 1 бит; данные INTx6. */ Uint16 INTx6:1; // 5 INTx.6 + /* Битовое поле INTx7, ширина 1 бит; данные INTx7. */ Uint16 INTx7:1; // 6 INTx.7 + /* Битовое поле INTx8, ширина 1 бит; данные INTx8. */ Uint16 INTx8:1; // 7 INTx.8 + /* Битовое поле rsvd, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PIEIFR_REG в одной области памяти. */ union PIEIFR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PIEIFR_BITS bit;; порядок полей определяет расположение данных. */ struct PIEIFR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // PIEACK: Register bit definitions: +/* Описывает структуру PIEACK_BITS; порядок полей определяет расположение данных. */ struct PIEACK_BITS { // bits description + /* Битовое поле ACK1, ширина 1 бит; данные ACK1. */ Uint16 ACK1:1; // 0 Acknowledge PIE interrupt group 1 + /* Битовое поле ACK2, ширина 1 бит; данные ACK2. */ Uint16 ACK2:1; // 1 Acknowledge PIE interrupt group 2 + /* Битовое поле ACK3, ширина 1 бит; данные ACK3. */ Uint16 ACK3:1; // 2 Acknowledge PIE interrupt group 3 + /* Битовое поле ACK4, ширина 1 бит; данные ACK4. */ Uint16 ACK4:1; // 3 Acknowledge PIE interrupt group 4 + /* Битовое поле ACK5, ширина 1 бит; данные ACK5. */ Uint16 ACK5:1; // 4 Acknowledge PIE interrupt group 5 + /* Битовое поле ACK6, ширина 1 бит; данные ACK6. */ Uint16 ACK6:1; // 5 Acknowledge PIE interrupt group 6 + /* Битовое поле ACK7, ширина 1 бит; данные ACK7. */ Uint16 ACK7:1; // 6 Acknowledge PIE interrupt group 7 + /* Битовое поле ACK8, ширина 1 бит; данные ACK8. */ Uint16 ACK8:1; // 7 Acknowledge PIE interrupt group 8 + /* Битовое поле ACK9, ширина 1 бит; данные ACK9. */ Uint16 ACK9:1; // 8 Acknowledge PIE interrupt group 9 + /* Битовое поле ACK10, ширина 1 бит; данные ACK10. */ Uint16 ACK10:1; // 9 Acknowledge PIE interrupt group 10 + /* Битовое поле ACK11, ширина 1 бит; данные ACK11. */ Uint16 ACK11:1; // 10 Acknowledge PIE interrupt group 11 + /* Битовое поле ACK12, ширина 1 бит; данные ACK12. */ Uint16 ACK12:1; // 11 Acknowledge PIE interrupt group 12 + /* Битовое поле rsvd, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:4; // 15:12 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PIEACK_REG в одной области памяти. */ union PIEACK_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PIEACK_BITS bit;; порядок полей определяет расположение данных. */ struct PIEACK_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // PIE Control Register File: // +/* Описывает структуру PIE_CTRL_REGS; порядок полей определяет расположение данных. */ struct PIE_CTRL_REGS { + /* Объединяет несколько представлений PIECTRL_REG PIECTRL; в одной области памяти. */ union PIECTRL_REG PIECTRL; // PIE control register + /* Объединяет несколько представлений PIEACK_REG PIEACK; в одной области памяти. */ union PIEACK_REG PIEACK; // PIE acknowledge - union PIEIER_REG PIEIER1; // PIE int1 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER1; в одной области памяти. */ + union PIEIER_REG PIEIER1; // PIE int1 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR1; в одной области памяти. */ union PIEIFR_REG PIEIFR1; // PIE int1 IFR register - union PIEIER_REG PIEIER2; // PIE INT2 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER2; в одной области памяти. */ + union PIEIER_REG PIEIER2; // PIE INT2 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR2; в одной области памяти. */ union PIEIFR_REG PIEIFR2; // PIE INT2 IFR register - union PIEIER_REG PIEIER3; // PIE INT3 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER3; в одной области памяти. */ + union PIEIER_REG PIEIER3; // PIE INT3 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR3; в одной области памяти. */ union PIEIFR_REG PIEIFR3; // PIE INT3 IFR register - union PIEIER_REG PIEIER4; // PIE INT4 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER4; в одной области памяти. */ + union PIEIER_REG PIEIER4; // PIE INT4 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR4; в одной области памяти. */ union PIEIFR_REG PIEIFR4; // PIE INT4 IFR register - union PIEIER_REG PIEIER5; // PIE INT5 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER5; в одной области памяти. */ + union PIEIER_REG PIEIER5; // PIE INT5 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR5; в одной области памяти. */ union PIEIFR_REG PIEIFR5; // PIE INT5 IFR register - union PIEIER_REG PIEIER6; // PIE INT6 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER6; в одной области памяти. */ + union PIEIER_REG PIEIER6; // PIE INT6 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR6; в одной области памяти. */ union PIEIFR_REG PIEIFR6; // PIE INT6 IFR register - union PIEIER_REG PIEIER7; // PIE INT7 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER7; в одной области памяти. */ + union PIEIER_REG PIEIER7; // PIE INT7 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR7; в одной области памяти. */ union PIEIFR_REG PIEIFR7; // PIE INT7 IFR register + /* Объединяет несколько представлений PIEIER_REG PIEIER8; в одной области памяти. */ union PIEIER_REG PIEIER8; // PIE INT8 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR8; в одной области памяти. */ union PIEIFR_REG PIEIFR8; // PIE INT8 IFR register - union PIEIER_REG PIEIER9; // PIE INT9 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER9; в одной области памяти. */ + union PIEIER_REG PIEIER9; // PIE INT9 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR9; в одной области памяти. */ union PIEIFR_REG PIEIFR9; // PIE INT9 IFR register - union PIEIER_REG PIEIER10; // PIE int10 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER10; в одной области памяти. */ + union PIEIER_REG PIEIER10; // PIE int10 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR10; в одной области памяти. */ union PIEIFR_REG PIEIFR10; // PIE int10 IFR register - union PIEIER_REG PIEIER11; // PIE int11 IER register + /* Объединяет несколько представлений PIEIER_REG PIEIER11; в одной области памяти. */ + union PIEIER_REG PIEIER11; // PIE int11 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR11; в одной области памяти. */ union PIEIFR_REG PIEIFR11; // PIE int11 IFR register + /* Объединяет несколько представлений PIEIER_REG PIEIER12; в одной области памяти. */ union PIEIER_REG PIEIER12; // PIE int12 IER register + /* Объединяет несколько представлений PIEIFR_REG PIEIFR12; в одной области памяти. */ union PIEIFR_REG PIEIFR12; // PIE int12 IFR register -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; +/* Задаёт PIEACK_GROUP1 = 0x0001; данные PIEACK_GROUP1. */ #define PIEACK_GROUP1 0x0001 +/* Задаёт PIEACK_GROUP2 = 0x0002; данные PIEACK_GROUP2. */ #define PIEACK_GROUP2 0x0002 +/* Задаёт PIEACK_GROUP3 = 0x0004; данные PIEACK_GROUP3. */ #define PIEACK_GROUP3 0x0004 +/* Задаёт PIEACK_GROUP4 = 0x0008; данные PIEACK_GROUP4. */ #define PIEACK_GROUP4 0x0008 +/* Задаёт PIEACK_GROUP5 = 0x0010; данные PIEACK_GROUP5. */ #define PIEACK_GROUP5 0x0010 +/* Задаёт PIEACK_GROUP6 = 0x0020; данные PIEACK_GROUP6. */ #define PIEACK_GROUP6 0x0020 +/* Задаёт PIEACK_GROUP7 = 0x0040; данные PIEACK_GROUP7. */ #define PIEACK_GROUP7 0x0040 +/* Задаёт PIEACK_GROUP8 = 0x0080; данные PIEACK_GROUP8. */ #define PIEACK_GROUP8 0x0080 +/* Задаёт PIEACK_GROUP9 = 0x0100; данные PIEACK_GROUP9. */ #define PIEACK_GROUP9 0x0100 +/* Задаёт PIEACK_GROUP10 = 0x0200; данные PIEACK_GROUP10. */ #define PIEACK_GROUP10 0x0200 +/* Задаёт PIEACK_GROUP11 = 0x0400; данные PIEACK_GROUP11. */ #define PIEACK_GROUP11 0x0400 +/* Задаёт PIEACK_GROUP12 = 0x0800; данные PIEACK_GROUP12. */ #define PIEACK_GROUP12 0x0800 //--------------------------------------------------------------------------- // PIE Control Registers External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct PIE_CTRL_REGS PieCtrlRegs;; порядок элементов сохраняется. */ extern volatile struct PIE_CTRL_REGS PieCtrlRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_PIE_CTRL_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_PieVect.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_PieVect.h index acddab7..9513341 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_PieVect.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_PieVect.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание PieVect для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/2 $ // Checkin $Date: March 16, 2007 09:00:21 $ //########################################################################### @@ -11,12 +12,17 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_PIE_VECT_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_PIE_VECT_H +/* Определяет защитный символ или переключатель DSP2833x_PIE_VECT_H для последующей компиляции. */ #define DSP2833x_PIE_VECT_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -25,181 +31,316 @@ extern "C" { // // Create a user type called PINT (pointer to interrupt): +/* Объявляет интерфейс функции void; реализация вызывается через этот прототип. */ typedef interrupt void(*PINT)(void); // Define Vector Table: +/* Описывает структуру PIE_VECT_TABLE; порядок полей определяет расположение данных. */ struct PIE_VECT_TABLE { // Reset is never fetched from this table. // It will always be fetched from 0x3FFFC0 in // boot ROM + /* Продолжает список аргументов, полей или выражение PINT PIE1_RESERVED;; порядок элементов сохраняется. */ PINT PIE1_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE2_RESERVED;; порядок элементов сохраняется. */ PINT PIE2_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE3_RESERVED;; порядок элементов сохраняется. */ PINT PIE3_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE4_RESERVED;; порядок элементов сохраняется. */ PINT PIE4_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE5_RESERVED;; порядок элементов сохраняется. */ PINT PIE5_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE6_RESERVED;; порядок элементов сохраняется. */ PINT PIE6_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE7_RESERVED;; порядок элементов сохраняется. */ PINT PIE7_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE8_RESERVED;; порядок элементов сохраняется. */ PINT PIE8_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE9_RESERVED;; порядок элементов сохраняется. */ PINT PIE9_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE10_RESERVED;; порядок элементов сохраняется. */ PINT PIE10_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE11_RESERVED;; порядок элементов сохраняется. */ PINT PIE11_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE12_RESERVED;; порядок элементов сохраняется. */ PINT PIE12_RESERVED; + /* Продолжает список аргументов, полей или выражение PINT PIE13_RESERVED;; порядок элементов сохраняется. */ PINT PIE13_RESERVED; // Non-Peripheral Interrupts: + /* Продолжает список аргументов, полей или выражение PINT XINT13;; порядок элементов сохраняется. */ PINT XINT13; // XINT13 / CPU-Timer1 + /* Продолжает список аргументов, полей или выражение PINT TINT2;; порядок элементов сохраняется. */ PINT TINT2; // CPU-Timer2 + /* Продолжает список аргументов, полей или выражение PINT DATALOG;; порядок элементов сохраняется. */ PINT DATALOG; // Datalogging interrupt + /* Продолжает список аргументов, полей или выражение PINT RTOSINT;; порядок элементов сохраняется. */ PINT RTOSINT; // RTOS interrupt + /* Продолжает список аргументов, полей или выражение PINT EMUINT;; порядок элементов сохраняется. */ PINT EMUINT; // Emulation interrupt + /* Продолжает список аргументов, полей или выражение PINT XNMI;; порядок элементов сохраняется. */ PINT XNMI; // Non-maskable interrupt + /* Продолжает список аргументов, полей или выражение PINT ILLEGAL;; порядок элементов сохраняется. */ PINT ILLEGAL; // Illegal operation TRAP + /* Продолжает список аргументов, полей или выражение PINT USER1;; порядок элементов сохраняется. */ PINT USER1; // User Defined trap 1 + /* Продолжает список аргументов, полей или выражение PINT USER2;; порядок элементов сохраняется. */ PINT USER2; // User Defined trap 2 + /* Продолжает список аргументов, полей или выражение PINT USER3;; порядок элементов сохраняется. */ PINT USER3; // User Defined trap 3 + /* Продолжает список аргументов, полей или выражение PINT USER4;; порядок элементов сохраняется. */ PINT USER4; // User Defined trap 4 + /* Продолжает список аргументов, полей или выражение PINT USER5;; порядок элементов сохраняется. */ PINT USER5; // User Defined trap 5 + /* Продолжает список аргументов, полей или выражение PINT USER6;; порядок элементов сохраняется. */ PINT USER6; // User Defined trap 6 + /* Продолжает список аргументов, полей или выражение PINT USER7;; порядок элементов сохраняется. */ PINT USER7; // User Defined trap 7 + /* Продолжает список аргументов, полей или выражение PINT USER8;; порядок элементов сохраняется. */ PINT USER8; // User Defined trap 8 + /* Продолжает список аргументов, полей или выражение PINT USER9;; порядок элементов сохраняется. */ PINT USER9; // User Defined trap 9 + /* Продолжает список аргументов, полей или выражение PINT USER10;; порядок элементов сохраняется. */ PINT USER10; // User Defined trap 10 + /* Продолжает список аргументов, полей или выражение PINT USER11;; порядок элементов сохраняется. */ PINT USER11; // User Defined trap 11 + /* Продолжает список аргументов, полей или выражение PINT USER12;; порядок элементов сохраняется. */ PINT USER12; // User Defined trap 12 // Group 1 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT SEQ1INT;; порядок элементов сохраняется. */ PINT SEQ1INT; + /* Продолжает список аргументов, полей или выражение PINT SEQ2INT;; порядок элементов сохраняется. */ PINT SEQ2INT; + /* Продолжает список аргументов, полей или выражение PINT rsvd1_3;; порядок элементов сохраняется. */ PINT rsvd1_3; + /* Продолжает список аргументов, полей или выражение PINT XINT1;; порядок элементов сохраняется. */ PINT XINT1; + /* Продолжает список аргументов, полей или выражение PINT XINT2;; порядок элементов сохраняется. */ PINT XINT2; + /* Продолжает список аргументов, полей или выражение PINT ADCINT;; порядок элементов сохраняется. */ PINT ADCINT; // ADC + /* Продолжает список аргументов, полей или выражение PINT TINT0;; порядок элементов сохраняется. */ PINT TINT0; // Timer 0 + /* Продолжает список аргументов, полей или выражение PINT WAKEINT;; порядок элементов сохраняется. */ PINT WAKEINT; // WD // Group 2 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT EPWM1_TZINT;; порядок элементов сохраняется. */ PINT EPWM1_TZINT; // EPWM-1 + /* Продолжает список аргументов, полей или выражение PINT EPWM2_TZINT;; порядок элементов сохраняется. */ PINT EPWM2_TZINT; // EPWM-2 + /* Продолжает список аргументов, полей или выражение PINT EPWM3_TZINT;; порядок элементов сохраняется. */ PINT EPWM3_TZINT; // EPWM-3 + /* Продолжает список аргументов, полей или выражение PINT EPWM4_TZINT;; порядок элементов сохраняется. */ PINT EPWM4_TZINT; // EPWM-4 + /* Продолжает список аргументов, полей или выражение PINT EPWM5_TZINT;; порядок элементов сохраняется. */ PINT EPWM5_TZINT; // EPWM-5 + /* Продолжает список аргументов, полей или выражение PINT EPWM6_TZINT;; порядок элементов сохраняется. */ PINT EPWM6_TZINT; // EPWM-6 + /* Продолжает список аргументов, полей или выражение PINT rsvd2_7;; порядок элементов сохраняется. */ PINT rsvd2_7; + /* Продолжает список аргументов, полей или выражение PINT rsvd2_8;; порядок элементов сохраняется. */ PINT rsvd2_8; // Group 3 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT EPWM1_INT;; порядок элементов сохраняется. */ PINT EPWM1_INT; // EPWM-1 + /* Продолжает список аргументов, полей или выражение PINT EPWM2_INT;; порядок элементов сохраняется. */ PINT EPWM2_INT; // EPWM-2 + /* Продолжает список аргументов, полей или выражение PINT EPWM3_INT;; порядок элементов сохраняется. */ PINT EPWM3_INT; // EPWM-3 + /* Продолжает список аргументов, полей или выражение PINT EPWM4_INT;; порядок элементов сохраняется. */ PINT EPWM4_INT; // EPWM-4 + /* Продолжает список аргументов, полей или выражение PINT EPWM5_INT;; порядок элементов сохраняется. */ PINT EPWM5_INT; // EPWM-5 + /* Продолжает список аргументов, полей или выражение PINT EPWM6_INT;; порядок элементов сохраняется. */ PINT EPWM6_INT; // EPWM-6 + /* Продолжает список аргументов, полей или выражение PINT rsvd3_7;; порядок элементов сохраняется. */ PINT rsvd3_7; + /* Продолжает список аргументов, полей или выражение PINT rsvd3_8;; порядок элементов сохраняется. */ PINT rsvd3_8; // Group 4 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT ECAP1_INT;; порядок элементов сохраняется. */ PINT ECAP1_INT; // ECAP-1 + /* Продолжает список аргументов, полей или выражение PINT ECAP2_INT;; порядок элементов сохраняется. */ PINT ECAP2_INT; // ECAP-2 + /* Продолжает список аргументов, полей или выражение PINT ECAP3_INT;; порядок элементов сохраняется. */ PINT ECAP3_INT; // ECAP-3 + /* Продолжает список аргументов, полей или выражение PINT ECAP4_INT;; порядок элементов сохраняется. */ PINT ECAP4_INT; // ECAP-4 + /* Продолжает список аргументов, полей или выражение PINT ECAP5_INT;; порядок элементов сохраняется. */ PINT ECAP5_INT; // ECAP-5 + /* Продолжает список аргументов, полей или выражение PINT ECAP6_INT;; порядок элементов сохраняется. */ PINT ECAP6_INT; // ECAP-6 + /* Продолжает список аргументов, полей или выражение PINT rsvd4_7;; порядок элементов сохраняется. */ PINT rsvd4_7; + /* Продолжает список аргументов, полей или выражение PINT rsvd4_8;; порядок элементов сохраняется. */ PINT rsvd4_8; // Group 5 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT EQEP1_INT;; порядок элементов сохраняется. */ PINT EQEP1_INT; // EQEP-1 + /* Продолжает список аргументов, полей или выражение PINT EQEP2_INT;; порядок элементов сохраняется. */ PINT EQEP2_INT; // EQEP-2 + /* Продолжает список аргументов, полей или выражение PINT rsvd5_3;; порядок элементов сохраняется. */ PINT rsvd5_3; + /* Продолжает список аргументов, полей или выражение PINT rsvd5_4;; порядок элементов сохраняется. */ PINT rsvd5_4; + /* Продолжает список аргументов, полей или выражение PINT rsvd5_5;; порядок элементов сохраняется. */ PINT rsvd5_5; + /* Продолжает список аргументов, полей или выражение PINT rsvd5_6;; порядок элементов сохраняется. */ PINT rsvd5_6; + /* Продолжает список аргументов, полей или выражение PINT rsvd5_7;; порядок элементов сохраняется. */ PINT rsvd5_7; + /* Продолжает список аргументов, полей или выражение PINT rsvd5_8;; порядок элементов сохраняется. */ PINT rsvd5_8; // Group 6 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT SPIRXINTA;; порядок элементов сохраняется. */ PINT SPIRXINTA; // SPI-A + /* Продолжает список аргументов, полей или выражение PINT SPITXINTA;; порядок элементов сохраняется. */ PINT SPITXINTA; // SPI-A + /* Продолжает список аргументов, полей или выражение PINT MRINTB;; порядок элементов сохраняется. */ PINT MRINTB; // McBSP-B + /* Продолжает список аргументов, полей или выражение PINT MXINTB;; порядок элементов сохраняется. */ PINT MXINTB; // McBSP-B + /* Продолжает список аргументов, полей или выражение PINT MRINTA;; порядок элементов сохраняется. */ PINT MRINTA; // McBSP-A + /* Продолжает список аргументов, полей или выражение PINT MXINTA;; порядок элементов сохраняется. */ PINT MXINTA; // McBSP-A + /* Продолжает список аргументов, полей или выражение PINT rsvd6_7;; порядок элементов сохраняется. */ PINT rsvd6_7; + /* Продолжает список аргументов, полей или выражение PINT rsvd6_8;; порядок элементов сохраняется. */ PINT rsvd6_8; // Group 7 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT DINTCH1;; порядок элементов сохраняется. */ PINT DINTCH1; // DMA + /* Продолжает список аргументов, полей или выражение PINT DINTCH2;; порядок элементов сохраняется. */ PINT DINTCH2; // DMA + /* Продолжает список аргументов, полей или выражение PINT DINTCH3;; порядок элементов сохраняется. */ PINT DINTCH3; // DMA + /* Продолжает список аргументов, полей или выражение PINT DINTCH4;; порядок элементов сохраняется. */ PINT DINTCH4; // DMA + /* Продолжает список аргументов, полей или выражение PINT DINTCH5;; порядок элементов сохраняется. */ PINT DINTCH5; // DMA + /* Продолжает список аргументов, полей или выражение PINT DINTCH6;; порядок элементов сохраняется. */ PINT DINTCH6; // DMA + /* Продолжает список аргументов, полей или выражение PINT rsvd7_7;; порядок элементов сохраняется. */ PINT rsvd7_7; + /* Продолжает список аргументов, полей или выражение PINT rsvd7_8;; порядок элементов сохраняется. */ PINT rsvd7_8; // Group 8 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT I2CINT1A;; порядок элементов сохраняется. */ PINT I2CINT1A; // I2C-A + /* Продолжает список аргументов, полей или выражение PINT I2CINT2A;; порядок элементов сохраняется. */ PINT I2CINT2A; // I2C-A + /* Продолжает список аргументов, полей или выражение PINT rsvd8_3;; порядок элементов сохраняется. */ PINT rsvd8_3; + /* Продолжает список аргументов, полей или выражение PINT rsvd8_4;; порядок элементов сохраняется. */ PINT rsvd8_4; + /* Продолжает список аргументов, полей или выражение PINT SCIRXINTC;; порядок элементов сохраняется. */ PINT SCIRXINTC; // SCI-C + /* Продолжает список аргументов, полей или выражение PINT SCITXINTC;; порядок элементов сохраняется. */ PINT SCITXINTC; // SCI-C + /* Продолжает список аргументов, полей или выражение PINT rsvd8_7;; порядок элементов сохраняется. */ PINT rsvd8_7; + /* Продолжает список аргументов, полей или выражение PINT rsvd8_8;; порядок элементов сохраняется. */ PINT rsvd8_8; // Group 9 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT SCIRXINTA;; порядок элементов сохраняется. */ PINT SCIRXINTA; // SCI-A + /* Продолжает список аргументов, полей или выражение PINT SCITXINTA;; порядок элементов сохраняется. */ PINT SCITXINTA; // SCI-A + /* Продолжает список аргументов, полей или выражение PINT SCIRXINTB;; порядок элементов сохраняется. */ PINT SCIRXINTB; // SCI-B + /* Продолжает список аргументов, полей или выражение PINT SCITXINTB;; порядок элементов сохраняется. */ PINT SCITXINTB; // SCI-B + /* Продолжает список аргументов, полей или выражение PINT ECAN0INTA;; порядок элементов сохраняется. */ PINT ECAN0INTA; // eCAN-A + /* Продолжает список аргументов, полей или выражение PINT ECAN1INTA;; порядок элементов сохраняется. */ PINT ECAN1INTA; // eCAN-A + /* Продолжает список аргументов, полей или выражение PINT ECAN0INTB;; порядок элементов сохраняется. */ PINT ECAN0INTB; // eCAN-B + /* Продолжает список аргументов, полей или выражение PINT ECAN1INTB;; порядок элементов сохраняется. */ PINT ECAN1INTB; // eCAN-B // Group 10 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT rsvd10_1;; порядок элементов сохраняется. */ PINT rsvd10_1; + /* Продолжает список аргументов, полей или выражение PINT rsvd10_2;; порядок элементов сохраняется. */ PINT rsvd10_2; + /* Продолжает список аргументов, полей или выражение PINT rsvd10_3;; порядок элементов сохраняется. */ PINT rsvd10_3; + /* Продолжает список аргументов, полей или выражение PINT rsvd10_4;; порядок элементов сохраняется. */ PINT rsvd10_4; + /* Продолжает список аргументов, полей или выражение PINT rsvd10_5;; порядок элементов сохраняется. */ PINT rsvd10_5; + /* Продолжает список аргументов, полей или выражение PINT rsvd10_6;; порядок элементов сохраняется. */ PINT rsvd10_6; + /* Продолжает список аргументов, полей или выражение PINT rsvd10_7;; порядок элементов сохраняется. */ PINT rsvd10_7; + /* Продолжает список аргументов, полей или выражение PINT rsvd10_8;; порядок элементов сохраняется. */ PINT rsvd10_8; // Group 11 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT rsvd11_1;; порядок элементов сохраняется. */ PINT rsvd11_1; + /* Продолжает список аргументов, полей или выражение PINT rsvd11_2;; порядок элементов сохраняется. */ PINT rsvd11_2; + /* Продолжает список аргументов, полей или выражение PINT rsvd11_3;; порядок элементов сохраняется. */ PINT rsvd11_3; + /* Продолжает список аргументов, полей или выражение PINT rsvd11_4;; порядок элементов сохраняется. */ PINT rsvd11_4; + /* Продолжает список аргументов, полей или выражение PINT rsvd11_5;; порядок элементов сохраняется. */ PINT rsvd11_5; + /* Продолжает список аргументов, полей или выражение PINT rsvd11_6;; порядок элементов сохраняется. */ PINT rsvd11_6; + /* Продолжает список аргументов, полей или выражение PINT rsvd11_7;; порядок элементов сохраняется. */ PINT rsvd11_7; + /* Продолжает список аргументов, полей или выражение PINT rsvd11_8;; порядок элементов сохраняется. */ PINT rsvd11_8; // Group 12 PIE Peripheral Vectors: + /* Продолжает список аргументов, полей или выражение PINT XINT3;; порядок элементов сохраняется. */ PINT XINT3; // External interrupt + /* Продолжает список аргументов, полей или выражение PINT XINT4;; порядок элементов сохраняется. */ PINT XINT4; + /* Продолжает список аргументов, полей или выражение PINT XINT5;; порядок элементов сохраняется. */ PINT XINT5; + /* Продолжает список аргументов, полей или выражение PINT XINT6;; порядок элементов сохраняется. */ PINT XINT6; + /* Продолжает список аргументов, полей или выражение PINT XINT7;; порядок элементов сохраняется. */ PINT XINT7; + /* Продолжает список аргументов, полей или выражение PINT rsvd12_6;; порядок элементов сохраняется. */ PINT rsvd12_6; + /* Продолжает список аргументов, полей или выражение PINT LVF;; порядок элементов сохраняется. */ PINT LVF; // Latched overflow + /* Продолжает список аргументов, полей или выражение PINT LUF;; порядок элементов сохраняется. */ PINT LUF; // Latched underflow +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // PIE Interrupt Vector Table External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern struct PIE_VECT_TABLE PieVectTable;; порядок элементов сохраняется. */ extern struct PIE_VECT_TABLE PieVectTable; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_PIE_VECT_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Sci.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Sci.h index 7c17822..8b5e141 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Sci.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Sci.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Sci для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/2 $ // Checkin $Date: March 1, 2007 15:57:02 $ //########################################################################### @@ -11,12 +12,17 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_SCI_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_SCI_H +/* Определяет защитный символ или переключатель DSP2833x_SCI_H для последующей компиляции. */ #define DSP2833x_SCI_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //--------------------------------------------------------------------------- @@ -26,207 +32,343 @@ extern "C" { // SCICCR communication control register bit definitions: // +/* Описывает структуру SCICCR_BITS; порядок полей определяет расположение данных. */ struct SCICCR_BITS { // bit description - Uint16 SCICHAR:3; // 2:0 Character length control + /* Битовое поле SCICHAR, ширина 3 бит; данные SCICHAR. */ + Uint16 SCICHAR:3; // 2:0 Character length control + /* Битовое поле ADDRIDLE_MODE, ширина 1 бит; ADDRIDLE режим. */ Uint16 ADDRIDLE_MODE:1; // 3 ADDR/IDLE Mode control + /* Битовое поле LOOPBKENA, ширина 1 бит; данные LOOPBKENA. */ Uint16 LOOPBKENA:1; // 4 Loop Back enable - Uint16 PARITYENA:1; // 5 Parity enable + /* Битовое поле PARITYENA, ширина 1 бит; данные PARITYENA. */ + Uint16 PARITYENA:1; // 5 Parity enable + /* Битовое поле PARITY, ширина 1 бит; чётность. */ Uint16 PARITY:1; // 6 Even or Odd Parity + /* Битовое поле STOPBITS, ширина 1 бит; данные STOPBITS. */ Uint16 STOPBITS:1; // 7 Number of Stop Bits + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 15:8 reserved -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; +/* Объединяет несколько представлений SCICCR_REG в одной области памяти. */ union SCICCR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SCICCR_BITS bit;; порядок полей определяет расположение данных. */ struct SCICCR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //------------------------------------------- // SCICTL1 control register 1 bit definitions: // - + +/* Описывает структуру SCICTL1_BITS; порядок полей определяет расположение данных. */ struct SCICTL1_BITS { // bit description + /* Битовое поле RXENA, ширина 1 бит; данные RXENA. */ Uint16 RXENA:1; // 0 SCI receiver enable + /* Битовое поле TXENA, ширина 1 бит; данные TXENA. */ Uint16 TXENA:1; // 1 SCI transmitter enable - Uint16 SLEEP:1; // 2 SCI sleep + /* Битовое поле SLEEP, ширина 1 бит; данные SLEEP. */ + Uint16 SLEEP:1; // 2 SCI sleep + /* Битовое поле TXWAKE, ширина 1 бит; данные TXWAKE. */ Uint16 TXWAKE:1; // 3 Transmitter wakeup method + /* Битовое поле rsvd, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:1; // 4 reserved - Uint16 SWRESET:1; // 5 Software reset + /* Битовое поле SWRESET, ширина 1 бит; данные SWRESET. */ + Uint16 SWRESET:1; // 5 Software reset + /* Битовое поле RXERRINTENA, ширина 1 бит; данные RXERRINTENA. */ Uint16 RXERRINTENA:1; // 6 Recieve interrupt enable + /* Битовое поле rsvd1, ширина 9 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:9; // 15:7 reserved -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; +/* Объединяет несколько представлений SCICTL1_REG в одной области памяти. */ union SCICTL1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SCICTL1_BITS bit;; порядок полей определяет расположение данных. */ struct SCICTL1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------- // SCICTL2 control register 2 bit definitions: -// +// +/* Описывает структуру SCICTL2_BITS; порядок полей определяет расположение данных. */ struct SCICTL2_BITS { // bit description - Uint16 TXINTENA:1; // 0 Transmit interrupt enable + /* Битовое поле TXINTENA, ширина 1 бит; данные TXINTENA. */ + Uint16 TXINTENA:1; // 0 Transmit interrupt enable + /* Битовое поле RXBKINTENA, ширина 1 бит; данные RXBKINTENA. */ Uint16 RXBKINTENA:1; // 1 Receiver-buffer break enable + /* Битовое поле rsvd, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:4; // 5:2 reserved + /* Битовое поле TXEMPTY, ширина 1 бит; данные TXEMPTY. */ Uint16 TXEMPTY:1; // 6 Transmitter empty flag - Uint16 TXRDY:1; // 7 Transmitter ready flag + /* Битовое поле TXRDY, ширина 1 бит; данные TXRDY. */ + Uint16 TXRDY:1; // 7 Transmitter ready flag + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 15:8 reserved -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; +/* Объединяет несколько представлений SCICTL2_REG в одной области памяти. */ union SCICTL2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SCICTL2_BITS bit;; порядок полей определяет расположение данных. */ struct SCICTL2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------- // SCIRXST Receiver status register bit definitions: // +/* Описывает структуру SCIRXST_BITS; порядок полей определяет расположение данных. */ struct SCIRXST_BITS { // bit description + /* Битовое поле rsvd, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:1; // 0 reserved + /* Битовое поле RXWAKE, ширина 1 бит; данные RXWAKE. */ Uint16 RXWAKE:1; // 1 Receiver wakeup detect flag + /* Битовое поле PE, ширина 1 бит; данные PE. */ Uint16 PE:1; // 2 Parity error flag + /* Битовое поле OE, ширина 1 бит; данные OE. */ Uint16 OE:1; // 3 Overrun error flag + /* Битовое поле FE, ширина 1 бит; данные FE. */ Uint16 FE:1; // 4 Framing error flag - Uint16 BRKDT:1; // 5 Break-detect flag + /* Битовое поле BRKDT, ширина 1 бит; данные BRKDT. */ + Uint16 BRKDT:1; // 5 Break-detect flag + /* Битовое поле RXRDY, ширина 1 бит; данные RXRDY. */ Uint16 RXRDY:1; // 6 Receiver ready flag + /* Битовое поле RXERROR, ширина 1 бит; данные RXERROR. */ Uint16 RXERROR:1; // 7 Receiver error flag -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; +/* Объединяет несколько представлений SCIRXST_REG в одной области памяти. */ union SCIRXST_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SCIRXST_BITS bit;; порядок полей определяет расположение данных. */ struct SCIRXST_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //---------------------------------------------------- // SCIRXBUF Receiver Data Buffer with FIFO bit definitions: -// +// +/* Описывает структуру SCIRXBUF_BITS; порядок полей определяет расположение данных. */ struct SCIRXBUF_BITS { // bits description + /* Битовое поле RXDT, ширина 8 бит; данные RXDT. */ Uint16 RXDT:8; // 7:0 Receive word + /* Битовое поле rsvd, ширина 6 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:6; // 13:8 reserved + /* Битовое поле SCIFFPE, ширина 1 бит; данные SCIFFPE. */ Uint16 SCIFFPE:1; // 14 SCI PE error in FIFO mode + /* Битовое поле SCIFFFE, ширина 1 бит; данные SCIFFFE. */ Uint16 SCIFFFE:1; // 15 SCI FE error in FIFO mode +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SCIRXBUF_REG в одной области памяти. */ union SCIRXBUF_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SCIRXBUF_BITS bit;; порядок полей определяет расположение данных. */ struct SCIRXBUF_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //-------------------------------------------------- // SCIPRI Priority control register bit definitions: -// // - -struct SCIPRI_BITS { // bit description - Uint16 rsvd:3; // 2:0 reserved - Uint16 FREE:1; // 3 Free emulation suspend mode - Uint16 SOFT:1; // 4 Soft emulation suspend mode - Uint16 rsvd1:3; // 7:5 reserved -}; +// +/* Описывает структуру SCIPRI_BITS; порядок полей определяет расположение данных. */ +struct SCIPRI_BITS { // bit description + /* Битовое поле rsvd, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd:3; // 2:0 reserved + /* Битовое поле FREE, ширина 1 бит; данные FREE. */ + Uint16 FREE:1; // 3 Free emulation suspend mode + /* Битовое поле SOFT, ширина 1 бит; данные SOFT. */ + Uint16 SOFT:1; // 4 Soft emulation suspend mode + /* Битовое поле rsvd1, ширина 3 бит; зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd1:3; // 7:5 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; + +/* Объединяет несколько представлений SCIPRI_REG в одной области памяти. */ union SCIPRI_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SCIPRI_BITS bit;; порядок полей определяет расположение данных. */ struct SCIPRI_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //------------------------------------------------- // SCI FIFO Transmit register bit definitions: -// // - +// + +/* Описывает структуру SCIFFTX_BITS; порядок полей определяет расположение данных. */ struct SCIFFTX_BITS { // bit description + /* Битовое поле TXFFIL, ширина 5 бит; данные TXFFIL. */ Uint16 TXFFIL:5; // 4:0 Interrupt level + /* Битовое поле TXFFIENA, ширина 1 бит; данные TXFFIENA. */ Uint16 TXFFIENA:1; // 5 Interrupt enable + /* Битовое поле TXFFINTCLR, ширина 1 бит; данные TXFFINTCLR. */ Uint16 TXFFINTCLR:1; // 6 Clear INT flag + /* Битовое поле TXFFINT, ширина 1 бит; данные TXFFINT. */ Uint16 TXFFINT:1; // 7 INT flag + /* Битовое поле TXFFST, ширина 5 бит; данные TXFFST. */ Uint16 TXFFST:5; // 12:8 FIFO status + /* Битовое поле TXFIFOXRESET, ширина 1 бит; данные TXFIFOXRESET. */ Uint16 TXFIFOXRESET:1; // 13 FIFO reset + /* Битовое поле SCIFFENA, ширина 1 бит; данные SCIFFENA. */ Uint16 SCIFFENA:1; // 14 Enhancement enable - Uint16 SCIRST:1; // 15 SCI reset rx/tx channels + /* Битовое поле SCIRST, ширина 1 бит; данные SCIRST. */ + Uint16 SCIRST:1; // 15 SCI reset rx/tx channels -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; +/* Объединяет несколько представлений SCIFFTX_REG в одной области памяти. */ union SCIFFTX_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SCIFFTX_BITS bit;; порядок полей определяет расположение данных. */ struct SCIFFTX_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //------------------------------------------------ // SCI FIFO recieve register bit definitions: -// // - +// + +/* Описывает структуру SCIFFRX_BITS; порядок полей определяет расположение данных. */ struct SCIFFRX_BITS { // bits description + /* Битовое поле RXFFIL, ширина 5 бит; данные RXFFIL. */ Uint16 RXFFIL:5; // 4:0 Interrupt level + /* Битовое поле RXFFIENA, ширина 1 бит; данные RXFFIENA. */ Uint16 RXFFIENA:1; // 5 Interrupt enable + /* Битовое поле RXFFINTCLR, ширина 1 бит; данные RXFFINTCLR. */ Uint16 RXFFINTCLR:1; // 6 Clear INT flag + /* Битовое поле RXFFINT, ширина 1 бит; данные RXFFINT. */ Uint16 RXFFINT:1; // 7 INT flag + /* Битовое поле RXFFST, ширина 5 бит; данные RXFFST. */ Uint16 RXFFST:5; // 12:8 FIFO status + /* Битовое поле RXFIFORESET, ширина 1 бит; данные RXFIFORESET. */ Uint16 RXFIFORESET:1; // 13 FIFO reset + /* Битовое поле RXFFOVRCLR, ширина 1 бит; данные RXFFOVRCLR. */ Uint16 RXFFOVRCLR:1; // 14 Clear overflow + /* Битовое поле RXFFOVF, ширина 1 бит; данные RXFFOVF. */ Uint16 RXFFOVF:1; // 15 FIFO overflow -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; +/* Объединяет несколько представлений SCIFFRX_REG в одной области памяти. */ union SCIFFRX_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SCIFFRX_BITS bit;; порядок полей определяет расположение данных. */ struct SCIFFRX_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // SCI FIFO control register bit definitions: +/* Описывает структуру SCIFFCT_BITS; порядок полей определяет расположение данных. */ struct SCIFFCT_BITS { // bits description + /* Битовое поле FFTXDLY, ширина 8 бит; данные FFTXDLY. */ Uint16 FFTXDLY:8; // 7:0 FIFO transmit delay + /* Битовое поле rsvd, ширина 5 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:5; // 12:8 reserved + /* Битовое поле CDC, ширина 1 бит; данные CDC. */ Uint16 CDC:1; // 13 Auto baud mode enable + /* Битовое поле ABDCLR, ширина 1 бит; данные ABDCLR. */ Uint16 ABDCLR:1; // 14 Auto baud clear + /* Битовое поле ABD, ширина 1 бит; данные ABD. */ Uint16 ABD:1; // 15 Auto baud detect +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SCIFFCT_REG в одной области памяти. */ union SCIFFCT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SCIFFCT_BITS bit;; порядок полей определяет расположение данных. */ struct SCIFFCT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // SCI Register File: // +/* Описывает структуру SCI_REGS; порядок полей определяет расположение данных. */ struct SCI_REGS { + /* Объединяет несколько представлений SCICCR_REG SCICCR; в одной области памяти. */ union SCICCR_REG SCICCR; // Communications control register + /* Объединяет несколько представлений SCICTL1_REG SCICTL1; в одной области памяти. */ union SCICTL1_REG SCICTL1; // Control register 1 + /* Объявляет SCIHBAUD — данные SCIHBAUD. */ Uint16 SCIHBAUD; // Baud rate (high) register + /* Объявляет SCILBAUD — данные SCILBAUD. */ Uint16 SCILBAUD; // Baud rate (low) register + /* Объединяет несколько представлений SCICTL2_REG SCICTL2; в одной области памяти. */ union SCICTL2_REG SCICTL2; // Control register 2 + /* Объединяет несколько представлений SCIRXST_REG SCIRXST; в одной области памяти. */ union SCIRXST_REG SCIRXST; // Recieve status register + /* Объявляет SCIRXEMU — данные SCIRXEMU. */ Uint16 SCIRXEMU; // Recieve emulation buffer register - union SCIRXBUF_REG SCIRXBUF; // Recieve data buffer + /* Объединяет несколько представлений SCIRXBUF_REG SCIRXBUF; в одной области памяти. */ + union SCIRXBUF_REG SCIRXBUF; // Recieve data buffer + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1; // reserved - Uint16 SCITXBUF; // Transmit data buffer + /* Объявляет SCITXBUF — данные SCITXBUF. */ + Uint16 SCITXBUF; // Transmit data buffer + /* Объединяет несколько представлений SCIFFTX_REG SCIFFTX; в одной области памяти. */ union SCIFFTX_REG SCIFFTX; // FIFO transmit register + /* Объединяет несколько представлений SCIFFRX_REG SCIFFRX; в одной области памяти. */ union SCIFFRX_REG SCIFFRX; // FIFO recieve register + /* Объединяет несколько представлений SCIFFCT_REG SCIFFCT; в одной области памяти. */ union SCIFFCT_REG SCIFFCT; // FIFO control register + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2; // reserved + /* Объявляет rsvd3 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3; // reserved - union SCIPRI_REG SCIPRI; // FIFO Priority control + /* Объединяет несколько представлений SCIPRI_REG SCIPRI; в одной области памяти. */ + union SCIPRI_REG SCIPRI; // FIFO Priority control +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // SCI External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct SCI_REGS SciaRegs;; порядок элементов сохраняется. */ extern volatile struct SCI_REGS SciaRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct SCI_REGS ScibRegs;; порядок элементов сохраняется. */ extern volatile struct SCI_REGS ScibRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct SCI_REGS ScicRegs;; порядок элементов сохраняется. */ extern volatile struct SCI_REGS ScicRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_SCI_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Spi.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Spi.h index 1325c59..317effe 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Spi.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Spi.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Spi для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/3 $ // Checkin $Date: April 17, 2008 11:08:27 $ //########################################################################### @@ -11,12 +12,17 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_SPI_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_SPI_H +/* Определяет защитный символ или переключатель DSP2833x_SPI_H для последующей компиляции. */ #define DSP2833x_SPI_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -24,157 +30,260 @@ extern "C" { // SPI Individual Register Bit Definitions: // // SPI FIFO Transmit register bit definitions: +/* Описывает структуру SPIFFTX_BITS; порядок полей определяет расположение данных. */ struct SPIFFTX_BITS { // bit description + /* Битовое поле TXFFIL, ширина 5 бит; данные TXFFIL. */ Uint16 TXFFIL:5; // 4:0 Interrupt level + /* Битовое поле TXFFIENA, ширина 1 бит; данные TXFFIENA. */ Uint16 TXFFIENA:1; // 5 Interrupt enable + /* Битовое поле TXFFINTCLR, ширина 1 бит; данные TXFFINTCLR. */ Uint16 TXFFINTCLR:1; // 6 Clear INT flag + /* Битовое поле TXFFINT, ширина 1 бит; данные TXFFINT. */ Uint16 TXFFINT:1; // 7 INT flag + /* Битовое поле TXFFST, ширина 5 бит; данные TXFFST. */ Uint16 TXFFST:5; // 12:8 FIFO status + /* Битовое поле TXFIFO, ширина 1 бит; данные TXFIFO. */ Uint16 TXFIFO:1; // 13 FIFO reset + /* Битовое поле SPIFFENA, ширина 1 бит; данные SPIFFENA. */ Uint16 SPIFFENA:1; // 14 Enhancement enable + /* Битовое поле SPIRST, ширина 1 бит; данные SPIRST. */ Uint16 SPIRST:1; // 15 Reset SPI +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SPIFFTX_REG в одной области памяти. */ union SPIFFTX_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SPIFFTX_BITS bit;; порядок полей определяет расположение данных. */ struct SPIFFTX_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //-------------------------------------------- // SPI FIFO recieve register bit definitions: // // +/* Описывает структуру SPIFFRX_BITS; порядок полей определяет расположение данных. */ struct SPIFFRX_BITS { // bits description + /* Битовое поле RXFFIL, ширина 5 бит; данные RXFFIL. */ Uint16 RXFFIL:5; // 4:0 Interrupt level + /* Битовое поле RXFFIENA, ширина 1 бит; данные RXFFIENA. */ Uint16 RXFFIENA:1; // 5 Interrupt enable + /* Битовое поле RXFFINTCLR, ширина 1 бит; данные RXFFINTCLR. */ Uint16 RXFFINTCLR:1; // 6 Clear INT flag + /* Битовое поле RXFFINT, ширина 1 бит; данные RXFFINT. */ Uint16 RXFFINT:1; // 7 INT flag + /* Битовое поле RXFFST, ширина 5 бит; данные RXFFST. */ Uint16 RXFFST:5; // 12:8 FIFO status + /* Битовое поле RXFIFORESET, ширина 1 бит; данные RXFIFORESET. */ Uint16 RXFIFORESET:1; // 13 FIFO reset + /* Битовое поле RXFFOVFCLR, ширина 1 бит; данные RXFFOVFCLR. */ Uint16 RXFFOVFCLR:1; // 14 Clear overflow + /* Битовое поле RXFFOVF, ширина 1 бит; данные RXFFOVF. */ Uint16 RXFFOVF:1; // 15 FIFO overflow +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SPIFFRX_REG в одной области памяти. */ union SPIFFRX_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SPIFFRX_BITS bit;; порядок полей определяет расположение данных. */ struct SPIFFRX_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //-------------------------------------------- // SPI FIFO control register bit definitions: // // +/* Описывает структуру SPIFFCT_BITS; порядок полей определяет расположение данных. */ struct SPIFFCT_BITS { // bits description + /* Битовое поле TXDLY, ширина 8 бит; данные TXDLY. */ Uint16 TXDLY:8; // 7:0 FIFO transmit delay + /* Битовое поле rsvd, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SPIFFCT_REG в одной области памяти. */ union SPIFFCT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SPIFFCT_BITS bit;; порядок полей определяет расположение данных. */ struct SPIFFCT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------- // SPI configuration register bit definitions: // // +/* Описывает структуру SPICCR_BITS; порядок полей определяет расположение данных. */ struct SPICCR_BITS { // bits description + /* Битовое поле SPICHAR, ширина 4 бит; данные SPICHAR. */ Uint16 SPICHAR:4; // 3:0 Character length control + /* Битовое поле SPILBK, ширина 1 бит; данные SPILBK. */ Uint16 SPILBK:1; // 4 Loop-back enable/disable + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 5 reserved + /* Битовое поле CLKPOLARITY, ширина 1 бит; данные CLKPOLARITY. */ Uint16 CLKPOLARITY:1; // 6 Clock polarity + /* Битовое поле SPISWRESET, ширина 1 бит; данные SPISWRESET. */ Uint16 SPISWRESET:1; // 7 SPI SW Reset + /* Битовое поле rsvd2, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SPICCR_REG в одной области памяти. */ union SPICCR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SPICCR_BITS bit;; порядок полей определяет расположение данных. */ struct SPICCR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //------------------------------------------------- // SPI operation control register bit definitions: // // +/* Описывает структуру SPICTL_BITS; порядок полей определяет расположение данных. */ struct SPICTL_BITS { // bits description + /* Битовое поле SPIINTENA, ширина 1 бит; данные SPIINTENA. */ Uint16 SPIINTENA:1; // 0 Interrupt enable + /* Битовое поле TALK, ширина 1 бит; данные TALK. */ Uint16 TALK:1; // 1 Master/Slave transmit enable + /* Битовое поле MASTER_SLAVE, ширина 1 бит; данные MASTER_SLAVE. */ Uint16 MASTER_SLAVE:1; // 2 Network control mode + /* Битовое поле CLK_PHASE, ширина 1 бит; CLK фаза. */ Uint16 CLK_PHASE:1; // 3 Clock phase select + /* Битовое поле OVERRUNINTENA, ширина 1 бит; данные OVERRUNINTENA. */ Uint16 OVERRUNINTENA:1; // 4 Overrun interrupt enable + /* Битовое поле rsvd, ширина 11 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:11; // 15:5 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SPICTL_REG в одной области памяти. */ union SPICTL_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SPICTL_BITS bit;; порядок полей определяет расположение данных. */ struct SPICTL_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //-------------------------------------- // SPI status register bit definitions: // // +/* Описывает структуру SPISTS_BITS; порядок полей определяет расположение данных. */ struct SPISTS_BITS { // bits description + /* Битовое поле rsvd1, ширина 5 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:5; // 4:0 reserved + /* Битовое поле BUFFULL_FLAG, ширина 1 бит; BUFFULL флаг. */ Uint16 BUFFULL_FLAG:1; // 5 SPI transmit buffer full flag + /* Битовое поле INT_FLAG, ширина 1 бит; INT флаг. */ Uint16 INT_FLAG:1; // 6 SPI interrupt flag + /* Битовое поле OVERRUN_FLAG, ширина 1 бит; OVERRUN флаг. */ Uint16 OVERRUN_FLAG:1; // 7 SPI reciever overrun flag + /* Битовое поле rsvd2, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:8; // 15:8 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SPISTS_REG в одной области памяти. */ union SPISTS_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SPISTS_BITS bit;; порядок полей определяет расположение данных. */ struct SPISTS_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //------------------------------------------------ // SPI priority control register bit definitions: // // +/* Описывает структуру SPIPRI_BITS; порядок полей определяет расположение данных. */ struct SPIPRI_BITS { // bits description + /* Битовое поле rsvd1, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:4; // 3:0 reserved + /* Битовое поле FREE, ширина 1 бит; данные FREE. */ Uint16 FREE:1; // 4 Free emulation mode control + /* Битовое поле SOFT, ширина 1 бит; данные SOFT. */ Uint16 SOFT:1; // 5 Soft emulation mode control + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 6 reserved + /* Битовое поле rsvd3, ширина 9 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:9; // 15:7 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений SPIPRI_REG в одной области памяти. */ union SPIPRI_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру SPIPRI_BITS bit;; порядок полей определяет расположение данных. */ struct SPIPRI_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // SPI Register File: // +/* Описывает структуру SPI_REGS; порядок полей определяет расположение данных. */ struct SPI_REGS { + /* Объединяет несколько представлений SPICCR_REG SPICCR; в одной области памяти. */ union SPICCR_REG SPICCR; // Configuration register + /* Объединяет несколько представлений SPICTL_REG SPICTL; в одной области памяти. */ union SPICTL_REG SPICTL; // Operation control register + /* Объединяет несколько представлений SPISTS_REG SPISTS; в одной области памяти. */ union SPISTS_REG SPISTS; // Status register + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1; // reserved + /* Объявляет SPIBRR — данные SPIBRR. */ Uint16 SPIBRR; // Baud Rate + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2; // reserved + /* Объявляет SPIRXEMU — данные SPIRXEMU. */ Uint16 SPIRXEMU; // Emulation buffer + /* Объявляет SPIRXBUF — данные SPIRXBUF. */ Uint16 SPIRXBUF; // Serial input buffer + /* Объявляет SPITXBUF — данные SPITXBUF. */ Uint16 SPITXBUF; // Serial output buffer + /* Объявляет SPIDAT — данные SPIDAT. */ Uint16 SPIDAT; // Serial data + /* Объединяет несколько представлений SPIFFTX_REG SPIFFTX; в одной области памяти. */ union SPIFFTX_REG SPIFFTX; // FIFO transmit register + /* Объединяет несколько представлений SPIFFRX_REG SPIFFRX; в одной области памяти. */ union SPIFFRX_REG SPIFFRX; // FIFO recieve register + /* Объединяет несколько представлений SPIFFCT_REG SPIFFCT; в одной области памяти. */ union SPIFFCT_REG SPIFFCT; // FIFO control register + /* Объявляет rsvd3 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3[2]; // reserved + /* Объединяет несколько представлений SPIPRI_REG SPIPRI; в одной области памяти. */ union SPIPRI_REG SPIPRI; // FIFO Priority control +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // SPI External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct SPI_REGS SpiaRegs;; порядок элементов сохраняется. */ extern volatile struct SPI_REGS SpiaRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_SPI_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h index f8bc343..7d0ea7b 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание SysCtrl для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/5 $ // Checkin $Date: May 12, 2008 09:34:58 $ //########################################################################### @@ -11,12 +12,17 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_SYS_CTRL_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_SYS_CTRL_H +/* Определяет защитный символ или переключатель DSP2833x_SYS_CTRL_H для последующей компиляции. */ #define DSP2833x_SYS_CTRL_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif @@ -26,176 +32,310 @@ extern "C" { // PLL Status Register +/* Описывает структуру PLLSTS_BITS; порядок полей определяет расположение данных. */ struct PLLSTS_BITS { // bits description + /* Битовое поле PLLLOCKS, ширина 1 бит; данные PLLLOCKS. */ Uint16 PLLLOCKS:1; // 0 PLL lock status + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 1 reserved + /* Битовое поле PLLOFF, ширина 1 бит; данные PLLOFF. */ Uint16 PLLOFF:1; // 2 PLL off bit + /* Битовое поле MCLKSTS, ширина 1 бит; данные MCLKSTS. */ Uint16 MCLKSTS:1; // 3 Missing clock status bit + /* Битовое поле MCLKCLR, ширина 1 бит; данные MCLKCLR. */ Uint16 MCLKCLR:1; // 4 Missing clock clear bit + /* Битовое поле OSCOFF, ширина 1 бит; данные OSCOFF. */ Uint16 OSCOFF:1; // 5 Oscillator clock off + /* Битовое поле MCLKOFF, ширина 1 бит; данные MCLKOFF. */ Uint16 MCLKOFF:1; // 6 Missing clock detect + /* Битовое поле DIVSEL, ширина 2 бит; данные DIVSEL. */ Uint16 DIVSEL:2; // 7 Divide Select + /* Битовое поле rsvd2, ширина 7 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:7; // 15:7 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PLLSTS_REG в одной области памяти. */ union PLLSTS_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PLLSTS_BITS bit;; порядок полей определяет расположение данных. */ struct PLLSTS_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // High speed peripheral clock register bit definitions: +/* Описывает структуру HISPCP_BITS; порядок полей определяет расположение данных. */ struct HISPCP_BITS { // bits description + /* Битовое поле HSPCLK, ширина 3 бит; данные HSPCLK. */ Uint16 HSPCLK:3; // 2:0 Rate relative to SYSCLKOUT + /* Битовое поле rsvd1, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:13; // 15:3 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений HISPCP_REG в одной области памяти. */ union HISPCP_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру HISPCP_BITS bit;; порядок полей определяет расположение данных. */ struct HISPCP_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // Low speed peripheral clock register bit definitions: +/* Описывает структуру LOSPCP_BITS; порядок полей определяет расположение данных. */ struct LOSPCP_BITS { // bits description + /* Битовое поле LSPCLK, ширина 3 бит; данные LSPCLK. */ Uint16 LSPCLK:3; // 2:0 Rate relative to SYSCLKOUT + /* Битовое поле rsvd1, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:13; // 15:3 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений LOSPCP_REG в одной области памяти. */ union LOSPCP_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру LOSPCP_BITS bit;; порядок полей определяет расположение данных. */ struct LOSPCP_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // Peripheral clock control register 0 bit definitions: +/* Описывает структуру PCLKCR0_BITS; порядок полей определяет расположение данных. */ struct PCLKCR0_BITS { // bits description + /* Битовое поле rsvd1, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:2; // 1:0 reserved + /* Битовое поле TBCLKSYNC, ширина 1 бит; данные TBCLKSYNC. */ Uint16 TBCLKSYNC:1; // 2 EWPM Module TBCLK enable/sync + /* Битовое поле ADCENCLK, ширина 1 бит; данные ADCENCLK. */ Uint16 ADCENCLK:1; // 3 Enable high speed clk to ADC + /* Битовое поле I2CAENCLK, ширина 1 бит; данные I2CAENCLK. */ Uint16 I2CAENCLK:1; // 4 Enable SYSCLKOUT to I2C-A + /* Битовое поле SCICENCLK, ширина 1 бит; данные SCICENCLK. */ Uint16 SCICENCLK:1; // 5 Enalbe low speed clk to SCI-C + /* Битовое поле rsvd2, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:2; // 7:6 reserved + /* Битовое поле SPIAENCLK, ширина 1 бит; данные SPIAENCLK. */ Uint16 SPIAENCLK:1; // 8 Enable low speed clk to SPI-A + /* Битовое поле rsvd3, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:1; // 9 reserved + /* Битовое поле SCIAENCLK, ширина 1 бит; данные SCIAENCLK. */ Uint16 SCIAENCLK:1; // 10 Enable low speed clk to SCI-A + /* Битовое поле SCIBENCLK, ширина 1 бит; данные SCIBENCLK. */ Uint16 SCIBENCLK:1; // 11 Enable low speed clk to SCI-B + /* Битовое поле MCBSPAENCLK, ширина 1 бит; данные MCBSPAENCLK. */ Uint16 MCBSPAENCLK:1; // 12 Enable low speed clk to McBSP-A + /* Битовое поле MCBSPBENCLK, ширина 1 бит; данные MCBSPBENCLK. */ Uint16 MCBSPBENCLK:1; // 13 Enable low speed clk to McBSP-B + /* Битовое поле ECANAENCLK, ширина 1 бит; данные ECANAENCLK. */ Uint16 ECANAENCLK:1; // 14 Enable system clk to eCAN-A + /* Битовое поле ECANBENCLK, ширина 1 бит; данные ECANBENCLK. */ Uint16 ECANBENCLK:1; // 15 Enable system clk to eCAN-B +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PCLKCR0_REG в одной области памяти. */ union PCLKCR0_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PCLKCR0_BITS bit;; порядок полей определяет расположение данных. */ struct PCLKCR0_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // Peripheral clock control register 1 bit definitions: +/* Описывает структуру PCLKCR1_BITS; порядок полей определяет расположение данных. */ struct PCLKCR1_BITS { // bits description + /* Битовое поле EPWM1ENCLK, ширина 1 бит; данные EPWM1ENCLK. */ Uint16 EPWM1ENCLK:1; // 0 Enable SYSCLKOUT to EPWM1 + /* Битовое поле EPWM2ENCLK, ширина 1 бит; данные EPWM2ENCLK. */ Uint16 EPWM2ENCLK:1; // 1 Enable SYSCLKOUT to EPWM2 + /* Битовое поле EPWM3ENCLK, ширина 1 бит; данные EPWM3ENCLK. */ Uint16 EPWM3ENCLK:1; // 2 Enable SYSCLKOUT to EPWM3 + /* Битовое поле EPWM4ENCLK, ширина 1 бит; данные EPWM4ENCLK. */ Uint16 EPWM4ENCLK:1; // 3 Enable SYSCLKOUT to EPWM4 + /* Битовое поле EPWM5ENCLK, ширина 1 бит; данные EPWM5ENCLK. */ Uint16 EPWM5ENCLK:1; // 4 Enable SYSCLKOUT to EPWM5 + /* Битовое поле EPWM6ENCLK, ширина 1 бит; данные EPWM6ENCLK. */ Uint16 EPWM6ENCLK:1; // 5 Enable SYSCLKOUT to EPWM6 + /* Битовое поле rsvd1, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:2; // 7:6 reserved + /* Битовое поле ECAP1ENCLK, ширина 1 бит; данные ECAP1ENCLK. */ Uint16 ECAP1ENCLK:1; // 8 Enable SYSCLKOUT to ECAP1 + /* Битовое поле ECAP2ENCLK, ширина 1 бит; данные ECAP2ENCLK. */ Uint16 ECAP2ENCLK:1; // 9 Enable SYSCLKOUT to ECAP2 + /* Битовое поле ECAP3ENCLK, ширина 1 бит; данные ECAP3ENCLK. */ Uint16 ECAP3ENCLK:1; // 10 Enable SYSCLKOUT to ECAP3 + /* Битовое поле ECAP4ENCLK, ширина 1 бит; данные ECAP4ENCLK. */ Uint16 ECAP4ENCLK:1; // 11 Enable SYSCLKOUT to ECAP4 + /* Битовое поле ECAP5ENCLK, ширина 1 бит; данные ECAP5ENCLK. */ Uint16 ECAP5ENCLK:1; // 12 Enable SYSCLKOUT to ECAP5 + /* Битовое поле ECAP6ENCLK, ширина 1 бит; данные ECAP6ENCLK. */ Uint16 ECAP6ENCLK:1; // 13 Enable SYSCLKOUT to ECAP6 + /* Битовое поле EQEP1ENCLK, ширина 1 бит; данные EQEP1ENCLK. */ Uint16 EQEP1ENCLK:1; // 14 Enable SYSCLKOUT to EQEP1 + /* Битовое поле EQEP2ENCLK, ширина 1 бит; данные EQEP2ENCLK. */ Uint16 EQEP2ENCLK:1; // 15 Enable SYSCLKOUT to EQEP2 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PCLKCR1_REG в одной области памяти. */ union PCLKCR1_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PCLKCR1_BITS bit;; порядок полей определяет расположение данных. */ struct PCLKCR1_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // Peripheral clock control register 2 bit definitions: +/* Описывает структуру PCLKCR3_BITS; порядок полей определяет расположение данных. */ struct PCLKCR3_BITS { // bits description + /* Битовое поле rsvd1, ширина 8 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:8; // 7:0 reserved + /* Битовое поле CPUTIMER0ENCLK, ширина 1 бит; данные CPUTIMER0ENCLK. */ Uint16 CPUTIMER0ENCLK:1; // 8 Enable SYSCLKOUT to CPU-Timer 0 + /* Битовое поле CPUTIMER1ENCLK, ширина 1 бит; данные CPUTIMER1ENCLK. */ Uint16 CPUTIMER1ENCLK:1; // 9 Enable SYSCLKOUT to CPU-Timer 1 + /* Битовое поле CPUTIMER2ENCLK, ширина 1 бит; данные CPUTIMER2ENCLK. */ Uint16 CPUTIMER2ENCLK:1; // 10 Enable SYSCLKOUT to CPU-Timer 2 + /* Битовое поле DMAENCLK, ширина 1 бит; данные DMAENCLK. */ Uint16 DMAENCLK:1; // 11 Enable the DMA clock + /* Битовое поле XINTFENCLK, ширина 1 бит; данные XINTFENCLK. */ Uint16 XINTFENCLK:1; // 12 Enable SYSCLKOUT to XINTF + /* Битовое поле GPIOINENCLK, ширина 1 бит; аппаратная линия ввода/вывода GPIOINENCLK. */ Uint16 GPIOINENCLK:1; // Enable GPIO input clock + /* Битовое поле rsvd2, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:2; // 15:14 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PCLKCR3_REG в одной области памяти. */ union PCLKCR3_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PCLKCR3_BITS bit;; порядок полей определяет расположение данных. */ struct PCLKCR3_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // PLL control register bit definitions: +/* Описывает структуру PLLCR_BITS; порядок полей определяет расположение данных. */ struct PLLCR_BITS { // bits description + /* Битовое поле DIV, ширина 4 бит; данные DIV. */ Uint16 DIV:4; // 3:0 Set clock ratio for the PLL + /* Битовое поле rsvd1, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:12; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений PLLCR_REG в одной области памяти. */ union PLLCR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру PLLCR_BITS bit;; порядок полей определяет расположение данных. */ struct PLLCR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // Low Power Mode 0 control register bit definitions: +/* Описывает структуру LPMCR0_BITS; порядок полей определяет расположение данных. */ struct LPMCR0_BITS { // bits description + /* Битовое поле LPM, ширина 2 бит; данные LPM. */ Uint16 LPM:2; // 1:0 Set the low power mode + /* Битовое поле QUALSTDBY, ширина 6 бит; данные QUALSTDBY. */ Uint16 QUALSTDBY:6; // 7:2 Qualification + /* Битовое поле rsvd1, ширина 7 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:7; // 14:8 reserved + /* Битовое поле WDINTE, ширина 1 бит; данные WDINTE. */ Uint16 WDINTE:1; // 15 Enables WD to wake the device from STANDBY +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений LPMCR0_REG в одной области памяти. */ union LPMCR0_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру LPMCR0_BITS bit;; порядок полей определяет расположение данных. */ struct LPMCR0_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // Dual-mapping configuration register bit definitions: +/* Описывает структуру MAPCNF_BITS; порядок полей определяет расположение данных. */ struct MAPCNF_BITS { // bits description + /* Битовое поле MAPEPWM, ширина 1 бит; данные MAPEPWM. */ Uint16 MAPEPWM:1; // 0 EPWM dual-map enable + /* Битовое поле rsvd1, ширина 15 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:15; // 15:1 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений MAPCNF_REG в одной области памяти. */ union MAPCNF_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру MAPCNF_BITS bit;; порядок полей определяет расположение данных. */ struct MAPCNF_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // System Control Register File: // +/* Описывает структуру SYS_CTRL_REGS; порядок полей определяет расположение данных. */ struct SYS_CTRL_REGS { + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1; // 0 + /* Объединяет несколько представлений PLLSTS_REG PLLSTS; в одной области памяти. */ union PLLSTS_REG PLLSTS; // 1 + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2[8]; // 2-9 + /* Объединяет несколько представлений HISPCP_REG HISPCP; в одной области памяти. */ union HISPCP_REG HISPCP; // 10: High-speed peripheral clock pre-scaler + /* Объединяет несколько представлений LOSPCP_REG LOSPCP; в одной области памяти. */ union LOSPCP_REG LOSPCP; // 11: Low-speed peripheral clock pre-scaler + /* Объединяет несколько представлений PCLKCR0_REG PCLKCR0; в одной области памяти. */ union PCLKCR0_REG PCLKCR0; // 12: Peripheral clock control register + /* Объединяет несколько представлений PCLKCR1_REG PCLKCR1; в одной области памяти. */ union PCLKCR1_REG PCLKCR1; // 13: Peripheral clock control register + /* Объединяет несколько представлений LPMCR0_REG LPMCR0; в одной области памяти. */ union LPMCR0_REG LPMCR0; // 14: Low-power mode control register 0 + /* Объявляет rsvd3 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3; // 15: reserved + /* Объединяет несколько представлений PCLKCR3_REG PCLKCR3; в одной области памяти. */ union PCLKCR3_REG PCLKCR3; // 16: Peripheral clock control register + /* Объединяет несколько представлений PLLCR_REG PLLCR; в одной области памяти. */ union PLLCR_REG PLLCR; // 17: PLL control register // No bit definitions are defined for SCSR because // a read-modify-write instruction can clear the WDOVERRIDE bit + /* Объявляет SCSR — данные SCSR. */ Uint16 SCSR; // 18: System control and status register + /* Объявляет WDCNTR — данные WDCNTR. */ Uint16 WDCNTR; // 19: WD counter register + /* Объявляет rsvd4 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd4; // 20 + /* Объявляет WDKEY — данные WDKEY. */ Uint16 WDKEY; // 21: WD reset key register + /* Объявляет rsvd5 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd5[3]; // 22-24 // No bit definitions are defined for WDCR because // the proper value must be written to the WDCHK field // whenever writing to this register. + /* Объявляет WDCR — данные WDCR. */ Uint16 WDCR; // 25: WD timer control register + /* Объявляет rsvd6 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd6[4]; // 26-29 + /* Объединяет несколько представлений MAPCNF_REG MAPCNF; в одной области памяти. */ union MAPCNF_REG MAPCNF; // 30: Dual-mapping configuration register + /* Объявляет rsvd7 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd7[1]; // 31 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; @@ -205,176 +345,295 @@ struct SYS_CTRL_REGS { /* ----------------------------------------------------*/ /* CSM Status & Control register bit definitions */ +/* Описывает структуру CSMSCR_BITS; порядок полей определяет расположение данных. */ struct CSMSCR_BITS { // bit description + /* Битовое поле SECURE, ширина 1 бит; данные SECURE. */ Uint16 SECURE:1; // 0 Secure flag + /* Битовое поле rsvd1, ширина 14 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:14; // 14-1 reserved + /* Битовое поле FORCESEC, ширина 1 бит; данные FORCESEC. */ Uint16 FORCESEC:1; // 15 Force Secure control bit +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений CSMSCR_REG в одной области памяти. */ union CSMSCR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру CSMSCR_BITS bit;; порядок полей определяет расположение данных. */ struct CSMSCR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* CSM Register File */ +/* Описывает структуру CSM_REGS; порядок полей определяет расположение данных. */ struct CSM_REGS { + /* Объявляет KEY0 — данные KEY0. */ Uint16 KEY0; // KEY reg bits 15-0 + /* Объявляет KEY1 — данные KEY1. */ Uint16 KEY1; // KEY reg bits 31-16 + /* Объявляет KEY2 — данные KEY2. */ Uint16 KEY2; // KEY reg bits 47-32 + /* Объявляет KEY3 — данные KEY3. */ Uint16 KEY3; // KEY reg bits 63-48 + /* Объявляет KEY4 — данные KEY4. */ Uint16 KEY4; // KEY reg bits 79-64 + /* Объявляет KEY5 — данные KEY5. */ Uint16 KEY5; // KEY reg bits 95-80 + /* Объявляет KEY6 — данные KEY6. */ Uint16 KEY6; // KEY reg bits 111-96 + /* Объявляет KEY7 — данные KEY7. */ Uint16 KEY7; // KEY reg bits 127-112 + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1; // reserved + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2; // reserved + /* Объявляет rsvd3 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3; // reserved + /* Объявляет rsvd4 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd4; // reserved + /* Объявляет rsvd5 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd5; // reserved + /* Объявляет rsvd6 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd6; // reserved + /* Объявляет rsvd7 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd7; // reserved + /* Объединяет несколько представлений CSMSCR_REG CSMSCR; в одной области памяти. */ union CSMSCR_REG CSMSCR; // CSM Status & Control register +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Password locations */ +/* Описывает структуру CSM_PWL; порядок полей определяет расположение данных. */ struct CSM_PWL { + /* Объявляет PSWD0 — данные PSWD0. */ Uint16 PSWD0; // PSWD bits 15-0 + /* Объявляет PSWD1 — данные PSWD1. */ Uint16 PSWD1; // PSWD bits 31-16 + /* Объявляет PSWD2 — данные PSWD2. */ Uint16 PSWD2; // PSWD bits 47-32 + /* Объявляет PSWD3 — данные PSWD3. */ Uint16 PSWD3; // PSWD bits 63-48 + /* Объявляет PSWD4 — данные PSWD4. */ Uint16 PSWD4; // PSWD bits 79-64 + /* Объявляет PSWD5 — данные PSWD5. */ Uint16 PSWD5; // PSWD bits 95-80 + /* Объявляет PSWD6 — данные PSWD6. */ Uint16 PSWD6; // PSWD bits 111-96 + /* Объявляет PSWD7 — данные PSWD7. */ Uint16 PSWD7; // PSWD bits 127-112 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Flash Registers */ +/* Задаёт FLASH_SLEEP = 0x0000;; данные FLASH_SLEEP. */ #define FLASH_SLEEP 0x0000; +/* Задаёт FLASH_STANDBY = 0x0001;; данные FLASH_STANDBY. */ #define FLASH_STANDBY 0x0001; +/* Задаёт FLASH_ACTIVE = 0x0003;; данные FLASH_ACTIVE. */ #define FLASH_ACTIVE 0x0003; /* Flash Option Register bit definitions */ +/* Описывает структуру FOPT_BITS; порядок полей определяет расположение данных. */ struct FOPT_BITS { // bit description + /* Битовое поле ENPIPE, ширина 1 бит; данные ENPIPE. */ Uint16 ENPIPE:1; // 0 Enable Pipeline Mode + /* Битовое поле rsvd, ширина 15 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:15; // 1-15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений FOPT_REG в одной области памяти. */ union FOPT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру FOPT_BITS bit;; порядок полей определяет расположение данных. */ struct FOPT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Flash Power Modes Register bit definitions */ +/* Описывает структуру FPWR_BITS; порядок полей определяет расположение данных. */ struct FPWR_BITS { // bit description + /* Битовое поле PWR, ширина 2 бит; данные PWR. */ Uint16 PWR:2; // 0-1 Power Mode bits + /* Битовое поле rsvd, ширина 14 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:14; // 2-15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений FPWR_REG в одной области памяти. */ union FPWR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру FPWR_BITS bit;; порядок полей определяет расположение данных. */ struct FPWR_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Flash Status Register bit definitions */ +/* Описывает структуру FSTATUS_BITS; порядок полей определяет расположение данных. */ struct FSTATUS_BITS { // bit description + /* Битовое поле PWRS, ширина 2 бит; данные PWRS. */ Uint16 PWRS:2; // 0-1 Power Mode Status bits + /* Битовое поле STDBYWAITS, ширина 1 бит; данные STDBYWAITS. */ Uint16 STDBYWAITS:1; // 2 Bank/Pump Sleep to Standby Wait Counter Status bits + /* Битовое поле ACTIVEWAITS, ширина 1 бит; данные ACTIVEWAITS. */ Uint16 ACTIVEWAITS:1; // 3 Bank/Pump Standby to Active Wait Counter Status bits + /* Битовое поле rsvd1, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:4; // 4-7 reserved + /* Битовое поле V3STAT, ширина 1 бит; данные V3STAT. */ Uint16 V3STAT:1; // 8 VDD3V Status Latch bit + /* Битовое поле rsvd2, ширина 7 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:7; // 9-15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений FSTATUS_REG в одной области памяти. */ union FSTATUS_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру FSTATUS_BITS bit;; порядок полей определяет расположение данных. */ struct FSTATUS_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Flash Sleep to Standby Wait Counter Register bit definitions */ +/* Описывает структуру FSTDBYWAIT_BITS; порядок полей определяет расположение данных. */ struct FSTDBYWAIT_BITS { // bit description + /* Битовое поле STDBYWAIT, ширина 9 бит; данные STDBYWAIT. */ Uint16 STDBYWAIT:9; // 0-8 Bank/Pump Sleep to Standby Wait Count bits + /* Битовое поле rsvd, ширина 7 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:7; // 9-15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений FSTDBYWAIT_REG в одной области памяти. */ union FSTDBYWAIT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру FSTDBYWAIT_BITS bit;; порядок полей определяет расположение данных. */ struct FSTDBYWAIT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Flash Standby to Active Wait Counter Register bit definitions */ +/* Описывает структуру FACTIVEWAIT_BITS; порядок полей определяет расположение данных. */ struct FACTIVEWAIT_BITS { // bit description + /* Битовое поле ACTIVEWAIT, ширина 9 бит; данные ACTIVEWAIT. */ Uint16 ACTIVEWAIT:9; // 0-8 Bank/Pump Standby to Active Wait Count bits + /* Битовое поле rsvd, ширина 7 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:7; // 9-15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений FACTIVEWAIT_REG в одной области памяти. */ union FACTIVEWAIT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру FACTIVEWAIT_BITS bit;; порядок полей определяет расположение данных. */ struct FACTIVEWAIT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Bank Read Access Wait State Register bit definitions */ +/* Описывает структуру FBANKWAIT_BITS; порядок полей определяет расположение данных. */ struct FBANKWAIT_BITS { // bit description + /* Битовое поле RANDWAIT, ширина 4 бит; данные RANDWAIT. */ Uint16 RANDWAIT:4; // 0-3 Flash Random Read Wait State bits + /* Битовое поле rsvd1, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:4; // 4-7 reserved + /* Битовое поле PAGEWAIT, ширина 4 бит; данные PAGEWAIT. */ Uint16 PAGEWAIT:4; // 8-11 Flash Paged Read Wait State bits + /* Битовое поле rsvd2, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:4; // 12-15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений FBANKWAIT_REG в одной области памяти. */ union FBANKWAIT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру FBANKWAIT_BITS bit;; порядок полей определяет расположение данных. */ struct FBANKWAIT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* OTP Read Access Wait State Register bit definitions */ +/* Описывает структуру FOTPWAIT_BITS; порядок полей определяет расположение данных. */ struct FOTPWAIT_BITS { // bit description + /* Битовое поле OTPWAIT, ширина 5 бит; данные OTPWAIT. */ Uint16 OTPWAIT:5; // 0-4 OTP Read Wait State bits + /* Битовое поле rsvd, ширина 11 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:11; // 5-15 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; /* Allow access to the bit fields or entire register */ +/* Объединяет несколько представлений FOTPWAIT_REG в одной области памяти. */ union FOTPWAIT_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру FOTPWAIT_BITS bit;; порядок полей определяет расположение данных. */ struct FOTPWAIT_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру FLASH_REGS; порядок полей определяет расположение данных. */ struct FLASH_REGS { + /* Объединяет несколько представлений FOPT_REG FOPT; в одной области памяти. */ union FOPT_REG FOPT; // Option Register + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1; // reserved + /* Объединяет несколько представлений FPWR_REG FPWR; в одной области памяти. */ union FPWR_REG FPWR; // Power Modes Register + /* Объединяет несколько представлений FSTATUS_REG FSTATUS; в одной области памяти. */ union FSTATUS_REG FSTATUS; // Status Register + /* Объединяет несколько представлений FSTDBYWAIT_REG FSTDBYWAIT; в одной области памяти. */ union FSTDBYWAIT_REG FSTDBYWAIT; // Pump/Bank Sleep to Standby Wait State Register + /* Объединяет несколько представлений FACTIVEWAIT_REG FACTIVEWAIT; в одной области памяти. */ union FACTIVEWAIT_REG FACTIVEWAIT; // Pump/Bank Standby to Active Wait State Register + /* Объединяет несколько представлений FBANKWAIT_REG FBANKWAIT; в одной области памяти. */ union FBANKWAIT_REG FBANKWAIT; // Bank Read Access Wait State Register + /* Объединяет несколько представлений FOTPWAIT_REG FOTPWAIT; в одной области памяти. */ union FOTPWAIT_REG FOTPWAIT; // OTP Read Access Wait State Register +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // System Control External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct SYS_CTRL_REGS SysCtrlRegs;; порядок элементов сохраняется. */ extern volatile struct SYS_CTRL_REGS SysCtrlRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct CSM_REGS CsmRegs;; порядок элементов сохраняется. */ extern volatile struct CSM_REGS CsmRegs; +/* Продолжает список аргументов, полей или выражение extern volatile struct CSM_PWL CsmPwl;; порядок элементов сохраняется. */ extern volatile struct CSM_PWL CsmPwl; +/* Продолжает список аргументов, полей или выражение extern volatile struct FLASH_REGS FlashRegs;; порядок элементов сохраняется. */ extern volatile struct FLASH_REGS FlashRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_SYS_CTRL_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h index 6f860f6..f9a5f85 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание XIntrupt для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/1 $ // Checkin $Date: August 18, 2006 13:52:39 $ //########################################################################### @@ -11,39 +12,64 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_XINTRUPT_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_XINTRUPT_H +/* Определяет защитный символ или переключатель DSP2833x_XINTRUPT_H для последующей компиляции. */ #define DSP2833x_XINTRUPT_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //--------------------------------------------------------------------------- +/* Описывает структуру XINTCR_BITS; порядок полей определяет расположение данных. */ struct XINTCR_BITS { + /* Битовое поле ENABLE, ширина 1 бит; разрешение. */ Uint16 ENABLE:1; // 0 enable/disable + /* Битовое поле rsvd1, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:1; // 1 reserved + /* Битовое поле POLARITY, ширина 2 бит; данные POLARITY. */ Uint16 POLARITY:2; // 3:2 pos/neg, both triggered + /* Битовое поле rsvd2, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:12; //15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XINTCR_REG в одной области памяти. */ union XINTCR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XINTCR_BITS bit;; порядок полей определяет расположение данных. */ struct XINTCR_BITS bit; -}; - -struct XNMICR_BITS { - Uint16 ENABLE:1; // 0 enable/disable - Uint16 SELECT:1; // 1 Timer 1 or XNMI connected to int13 - Uint16 POLARITY:2; // 3:2 pos/neg, or both triggered - Uint16 rsvd2:12; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру XNMICR_BITS; порядок полей определяет расположение данных. */ +struct XNMICR_BITS { + /* Битовое поле ENABLE, ширина 1 бит; разрешение. */ + Uint16 ENABLE:1; // 0 enable/disable + /* Битовое поле SELECT, ширина 1 бит; выбор. */ + Uint16 SELECT:1; // 1 Timer 1 or XNMI connected to int13 + /* Битовое поле POLARITY, ширина 2 бит; данные POLARITY. */ + Uint16 POLARITY:2; // 3:2 pos/neg, or both triggered + /* Битовое поле rsvd2, ширина 12 бит; зарезервированные биты для сохранения аппаратного расположения. */ + Uint16 rsvd2:12; // 15:4 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; + +/* Объединяет несколько представлений XNMICR_REG в одной области памяти. */ union XNMICR_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XNMICR_BITS bit;; порядок полей определяет расположение данных. */ struct XNMICR_BITS bit; -}; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +}; @@ -51,30 +77,48 @@ union XNMICR_REG { //--------------------------------------------------------------------------- // External Interrupt Register File: // +/* Описывает структуру XINTRUPT_REGS; порядок полей определяет расположение данных. */ struct XINTRUPT_REGS { + /* Объединяет несколько представлений XINTCR_REG XINT1CR; в одной области памяти. */ union XINTCR_REG XINT1CR; + /* Объединяет несколько представлений XINTCR_REG XINT2CR; в одной области памяти. */ union XINTCR_REG XINT2CR; + /* Объединяет несколько представлений XINTCR_REG XINT3CR; в одной области памяти. */ union XINTCR_REG XINT3CR; + /* Объединяет несколько представлений XINTCR_REG XINT4CR; в одной области памяти. */ union XINTCR_REG XINT4CR; + /* Объединяет несколько представлений XINTCR_REG XINT5CR; в одной области памяти. */ union XINTCR_REG XINT5CR; + /* Объединяет несколько представлений XINTCR_REG XINT6CR; в одной области памяти. */ union XINTCR_REG XINT6CR; + /* Объединяет несколько представлений XINTCR_REG XINT7CR; в одной области памяти. */ union XINTCR_REG XINT7CR; + /* Объединяет несколько представлений XNMICR_REG XNMICR; в одной области памяти. */ union XNMICR_REG XNMICR; + /* Объявляет XINT1CTR — данные XINT1CTR. */ Uint16 XINT1CTR; + /* Объявляет XINT2CTR — данные XINT2CTR. */ Uint16 XINT2CTR; + /* Объявляет rsvd — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd[5]; + /* Объявляет XNMICTR — данные XNMICTR. */ Uint16 XNMICTR; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // External Interrupt References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct XINTRUPT_REGS XIntruptRegs;; порядок элементов сохраняется. */ extern volatile struct XINTRUPT_REGS XIntruptRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_XINTF_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Xintf.h b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Xintf.h index cb68744..c6f85f0 100644 --- a/Source/External/v120/DSP2833x_headers/include/DSP2833x_Xintf.h +++ b/Source/External/v120/DSP2833x_headers/include/DSP2833x_Xintf.h @@ -1,3 +1,4 @@ +/* Поставляемое TI описание Xintf для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/3 $ // Checkin $Date: March 20, 2007 16:34:08 $ //########################################################################### @@ -11,108 +12,184 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Начинает условие: DSP2833x_XINTF_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef DSP2833x_XINTF_H +/* Определяет защитный символ или переключатель DSP2833x_XINTF_H для последующей компиляции. */ #define DSP2833x_XINTF_H +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */ extern "C" { +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // XINTF timing register bit definitions: +/* Описывает структуру XTIMING_BITS; порядок полей определяет расположение данных. */ struct XTIMING_BITS { // bits description + /* Битовое поле XWRTRAIL, ширина 2 бит; данные XWRTRAIL. */ Uint16 XWRTRAIL:2; // 1:0 Write access trail timing + /* Битовое поле XWRACTIVE, ширина 3 бит; данные XWRACTIVE. */ Uint16 XWRACTIVE:3; // 4:2 Write access active timing + /* Битовое поле XWRLEAD, ширина 2 бит; данные XWRLEAD. */ Uint16 XWRLEAD:2; // 6:5 Write access lead timing + /* Битовое поле XRDTRAIL, ширина 2 бит; данные XRDTRAIL. */ Uint16 XRDTRAIL:2; // 8:7 Read access trail timing + /* Битовое поле XRDACTIVE, ширина 3 бит; данные XRDACTIVE. */ Uint16 XRDACTIVE:3; // 11:9 Read access active timing + /* Битовое поле XRDLEAD, ширина 2 бит; данные XRDLEAD. */ Uint16 XRDLEAD:2; // 13:12 Read access lead timing + /* Битовое поле USEREADY, ширина 1 бит; данные USEREADY. */ Uint16 USEREADY:1; // 14 Extend access using HW waitstates + /* Битовое поле READYMODE, ширина 1 бит; данные READYMODE. */ Uint16 READYMODE:1; // 15 Ready mode + /* Битовое поле XSIZE, ширина 2 бит; данные XSIZE. */ Uint16 XSIZE:2; // 17:16 XINTF bus width - must be written as 11b + /* Битовое поле rsvd1, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:4; // 21:18 reserved + /* Битовое поле X2TIMING, ширина 1 бит; данные X2TIMING. */ Uint16 X2TIMING:1; // 22 Double lead/active/trail timing + /* Битовое поле rsvd3, ширина 9 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:9; // 31:23 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XTIMING_REG в одной области памяти. */ union XTIMING_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру XTIMING_BITS bit;; порядок полей определяет расположение данных. */ struct XTIMING_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XINTF control register bit definitions: +/* Описывает структуру XINTCNF2_BITS; порядок полей определяет расположение данных. */ struct XINTCNF2_BITS { // bits description + /* Битовое поле WRBUFF, ширина 2 бит; данные WRBUFF. */ Uint16 WRBUFF:2; // 1:0 Write buffer depth + /* Битовое поле CLKMODE, ширина 1 бит; данные CLKMODE. */ Uint16 CLKMODE:1; // 2 Ratio for XCLKOUT with respect to XTIMCLK + /* Битовое поле CLKOFF, ширина 1 бит; данные CLKOFF. */ Uint16 CLKOFF:1; // 3 Disable XCLKOUT + /* Битовое поле rsvd1, ширина 2 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:2; // 5:4 reserved + /* Битовое поле WLEVEL, ширина 2 бит; данные WLEVEL. */ Uint16 WLEVEL:2; // 7:6 Current level of the write buffer + /* Битовое поле rsvd2, ширина 1 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd2:1; // 8 reserved + /* Битовое поле HOLD, ширина 1 бит; данные HOLD. */ Uint16 HOLD:1; // 9 Hold enable/disable + /* Битовое поле HOLDS, ширина 1 бит; данные HOLDS. */ Uint16 HOLDS:1; // 10 Current state of HOLDn input + /* Битовое поле HOLDAS, ширина 1 бит; данные HOLDAS. */ Uint16 HOLDAS:1; // 11 Current state of HOLDAn output + /* Битовое поле rsvd3, ширина 4 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd3:4; // 15:12 reserved + /* Битовое поле XTIMCLK, ширина 3 бит; данные XTIMCLK. */ Uint16 XTIMCLK:3; // 18:16 Ratio for XTIMCLK + /* Битовое поле rsvd4, ширина 13 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd4:13; // 31:19 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XINTCNF2_REG в одной области памяти. */ union XINTCNF2_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint32 all; + /* Описывает структуру XINTCNF2_BITS bit;; порядок полей определяет расположение данных. */ struct XINTCNF2_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; // XINTF bank switching register bit definitions: +/* Описывает структуру XBANK_BITS; порядок полей определяет расположение данных. */ struct XBANK_BITS { // bits description + /* Битовое поле BANK, ширина 3 бит; данные BANK. */ Uint16 BANK:3; // 2:0 Zone for which banking is enabled + /* Битовое поле BCYC, ширина 3 бит; данные BCYC. */ Uint16 BCYC:3; // 5:3 XTIMCLK cycles to add + /* Битовое поле rsvd, ширина 10 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd:10; // 15:6 reserved +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XBANK_REG в одной области памяти. */ union XBANK_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XBANK_BITS bit;; порядок полей определяет расположение данных. */ struct XBANK_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Описывает структуру XRESET_BITS; порядок полей определяет расположение данных. */ struct XRESET_BITS { + /* Битовое поле XHARDRESET, ширина 1 бит; данные XHARDRESET. */ Uint16 XHARDRESET:1; + /* Битовое поле rsvd1, ширина 15 бит; зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd1:15; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объединяет несколько представлений XRESET_REG в одной области памяти. */ union XRESET_REG { + /* Объявляет all — представление регистра целым словом без разбиения на битовые поля. */ Uint16 all; + /* Описывает структуру XBANK_BITS bit;; порядок полей определяет расположение данных. */ struct XBANK_BITS bit; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // XINTF Register File: // +/* Описывает структуру XINTF_REGS; порядок полей определяет расположение данных. */ struct XINTF_REGS { + /* Объединяет несколько представлений XTIMING_REG XTIMING0; в одной области памяти. */ union XTIMING_REG XTIMING0; + /* Объявляет rsvd1 — зарезервированные биты для сохранения аппаратного расположения. */ Uint32 rsvd1[5]; + /* Объединяет несколько представлений XTIMING_REG XTIMING6; в одной области памяти. */ union XTIMING_REG XTIMING6; + /* Объединяет несколько представлений XTIMING_REG XTIMING7; в одной области памяти. */ union XTIMING_REG XTIMING7; + /* Объявляет rsvd2 — зарезервированные биты для сохранения аппаратного расположения. */ Uint32 rsvd2[2]; + /* Объединяет несколько представлений XINTCNF2_REG XINTCNF2; в одной области памяти. */ union XINTCNF2_REG XINTCNF2; + /* Объявляет rsvd3 — зарезервированные биты для сохранения аппаратного расположения. */ Uint32 rsvd3; + /* Объединяет несколько представлений XBANK_REG XBANK; в одной области памяти. */ union XBANK_REG XBANK; + /* Объявляет rsvd4 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd4; + /* Объявляет XREVISION — данные XREVISION. */ Uint16 XREVISION; + /* Объявляет rsvd5 — зарезервированные биты для сохранения аппаратного расположения. */ Uint16 rsvd5[2]; + /* Объединяет несколько представлений XRESET_REG XRESET; в одной области памяти. */ union XRESET_REG XRESET; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; //--------------------------------------------------------------------------- // XINTF External References & Function Declarations: // +/* Продолжает список аргументов, полей или выражение extern volatile struct XINTF_REGS XintfRegs;; порядок элементов сохраняется. */ extern volatile struct XINTF_REGS XintfRegs; +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -#endif /* extern "C" */ +#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // end of DSP2833x_XINTF_H definition //=========================================================================== diff --git a/Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c b/Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c index d7cd332..4171497 100644 --- a/Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c +++ b/Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c @@ -1,3 +1,4 @@ +/* Поставляемое TI описание GlobalVariableDefs для семейства C2833x. Русские пояснения сохранены в UTF-8. */ // TI File $Revision: /main/4 $ // Checkin $Date: June 2, 2008 11:12:33 $ //########################################################################### @@ -11,421 +12,722 @@ // $Release Date: August 1, 2008 $ //########################################################################### +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File //--------------------------------------------------------------------------- // Define Global Peripheral Variables: // //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("AdcRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("AdcRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(AdcRegs,"AdcRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(AdcRegs,"AdcRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ADC_REGS AdcRegs;; порядок элементов сохраняется. */ volatile struct ADC_REGS AdcRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("AdcMirrorFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("AdcMirrorFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(AdcMirror,"AdcMirrorFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(AdcMirror,"AdcMirrorFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ADC_RESULT_MIRROR_REGS AdcMirror;; порядок элементов сохраняется. */ volatile struct ADC_RESULT_MIRROR_REGS AdcMirror; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("CpuTimer0RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("CpuTimer0RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(CpuTimer0Regs,"CpuTimer0RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(CpuTimer0Regs,"CpuTimer0RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct CPUTIMER_REGS CpuTimer0Regs;; порядок элементов сохраняется. */ volatile struct CPUTIMER_REGS CpuTimer0Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("CpuTimer1RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("CpuTimer1RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(CpuTimer1Regs,"CpuTimer1RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(CpuTimer1Regs,"CpuTimer1RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct CPUTIMER_REGS CpuTimer1Regs;; порядок элементов сохраняется. */ volatile struct CPUTIMER_REGS CpuTimer1Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("CpuTimer2RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("CpuTimer2RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(CpuTimer2Regs,"CpuTimer2RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(CpuTimer2Regs,"CpuTimer2RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct CPUTIMER_REGS CpuTimer2Regs;; порядок элементов сохраняется. */ volatile struct CPUTIMER_REGS CpuTimer2Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("CsmPwlFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("CsmPwlFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(CsmPwl,"CsmPwlFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(CsmPwl,"CsmPwlFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct CSM_PWL CsmPwl;; порядок элементов сохраняется. */ volatile struct CSM_PWL CsmPwl; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("CsmRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("CsmRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(CsmRegs,"CsmRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(CsmRegs,"CsmRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct CSM_REGS CsmRegs;; порядок элементов сохраняется. */ volatile struct CSM_REGS CsmRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("DevEmuRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("DevEmuRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(DevEmuRegs,"DevEmuRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(DevEmuRegs,"DevEmuRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct DEV_EMU_REGS DevEmuRegs;; порядок элементов сохраняется. */ volatile struct DEV_EMU_REGS DevEmuRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("DmaRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("DmaRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(DmaRegs,"DmaRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(DmaRegs,"DmaRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct DMA_REGS DmaRegs;; порядок элементов сохраняется. */ volatile struct DMA_REGS DmaRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanaRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanaRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanaRegs,"ECanaRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanaRegs,"ECanaRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAN_REGS ECanaRegs;; порядок элементов сохраняется. */ volatile struct ECAN_REGS ECanaRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanaMboxesFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanaMboxesFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanaMboxes,"ECanaMboxesFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanaMboxes,"ECanaMboxesFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAN_MBOXES ECanaMboxes;; порядок элементов сохраняется. */ volatile struct ECAN_MBOXES ECanaMboxes; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanaLAMRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanaLAMRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanaLAMRegs,"ECanaLAMRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanaLAMRegs,"ECanaLAMRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct LAM_REGS ECanaLAMRegs;; порядок элементов сохраняется. */ volatile struct LAM_REGS ECanaLAMRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanaMOTSRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanaMOTSRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanaMOTSRegs,"ECanaMOTSRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanaMOTSRegs,"ECanaMOTSRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct MOTS_REGS ECanaMOTSRegs;; порядок элементов сохраняется. */ volatile struct MOTS_REGS ECanaMOTSRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanaMOTORegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanaMOTORegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanaMOTORegs,"ECanaMOTORegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanaMOTORegs,"ECanaMOTORegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct MOTO_REGS ECanaMOTORegs;; порядок элементов сохраняется. */ volatile struct MOTO_REGS ECanaMOTORegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanbRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanbRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanbRegs,"ECanbRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanbRegs,"ECanbRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAN_REGS ECanbRegs;; порядок элементов сохраняется. */ volatile struct ECAN_REGS ECanbRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanbMboxesFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanbMboxesFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanbMboxes,"ECanbMboxesFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanbMboxes,"ECanbMboxesFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAN_MBOXES ECanbMboxes;; порядок элементов сохраняется. */ volatile struct ECAN_MBOXES ECanbMboxes; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanbLAMRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanbLAMRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanbLAMRegs,"ECanbLAMRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanbLAMRegs,"ECanbLAMRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct LAM_REGS ECanbLAMRegs;; порядок элементов сохраняется. */ volatile struct LAM_REGS ECanbLAMRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanbMOTSRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanbMOTSRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanbMOTSRegs,"ECanbMOTSRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanbMOTSRegs,"ECanbMOTSRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct MOTS_REGS ECanbMOTSRegs;; порядок элементов сохраняется. */ volatile struct MOTS_REGS ECanbMOTSRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECanbMOTORegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECanbMOTORegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECanbMOTORegs,"ECanbMOTORegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECanbMOTORegs,"ECanbMOTORegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct MOTO_REGS ECanbMOTORegs;; порядок элементов сохраняется. */ volatile struct MOTO_REGS ECanbMOTORegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("EPwm1RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("EPwm1RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(EPwm1Regs,"EPwm1RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(EPwm1Regs,"EPwm1RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct EPWM_REGS EPwm1Regs;; порядок элементов сохраняется. */ volatile struct EPWM_REGS EPwm1Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("EPwm2RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("EPwm2RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(EPwm2Regs,"EPwm2RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(EPwm2Regs,"EPwm2RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct EPWM_REGS EPwm2Regs;; порядок элементов сохраняется. */ volatile struct EPWM_REGS EPwm2Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("EPwm3RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("EPwm3RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(EPwm3Regs,"EPwm3RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(EPwm3Regs,"EPwm3RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct EPWM_REGS EPwm3Regs;; порядок элементов сохраняется. */ volatile struct EPWM_REGS EPwm3Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("EPwm4RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("EPwm4RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(EPwm4Regs,"EPwm4RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(EPwm4Regs,"EPwm4RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct EPWM_REGS EPwm4Regs;; порядок элементов сохраняется. */ volatile struct EPWM_REGS EPwm4Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("EPwm5RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("EPwm5RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(EPwm5Regs,"EPwm5RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(EPwm5Regs,"EPwm5RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct EPWM_REGS EPwm5Regs;; порядок элементов сохраняется. */ volatile struct EPWM_REGS EPwm5Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("EPwm6RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("EPwm6RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(EPwm6Regs,"EPwm6RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(EPwm6Regs,"EPwm6RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct EPWM_REGS EPwm6Regs;; порядок элементов сохраняется. */ volatile struct EPWM_REGS EPwm6Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECap1RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECap1RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECap1Regs,"ECap1RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECap1Regs,"ECap1RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAP_REGS ECap1Regs;; порядок элементов сохраняется. */ volatile struct ECAP_REGS ECap1Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECap2RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECap2RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECap2Regs,"ECap2RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECap2Regs,"ECap2RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAP_REGS ECap2Regs;; порядок элементов сохраняется. */ volatile struct ECAP_REGS ECap2Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECap3RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECap3RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECap3Regs,"ECap3RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECap3Regs,"ECap3RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAP_REGS ECap3Regs;; порядок элементов сохраняется. */ volatile struct ECAP_REGS ECap3Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECap4RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECap4RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECap4Regs,"ECap4RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECap4Regs,"ECap4RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAP_REGS ECap4Regs;; порядок элементов сохраняется. */ volatile struct ECAP_REGS ECap4Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECap5RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECap5RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECap5Regs,"ECap5RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECap5Regs,"ECap5RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAP_REGS ECap5Regs;; порядок элементов сохраняется. */ volatile struct ECAP_REGS ECap5Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ECap6RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ECap6RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ECap6Regs,"ECap6RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ECap6Regs,"ECap6RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct ECAP_REGS ECap6Regs;; порядок элементов сохраняется. */ volatile struct ECAP_REGS ECap6Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("EQep1RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("EQep1RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(EQep1Regs,"EQep1RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(EQep1Regs,"EQep1RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct EQEP_REGS EQep1Regs;; порядок элементов сохраняется. */ volatile struct EQEP_REGS EQep1Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("EQep2RegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("EQep2RegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(EQep2Regs,"EQep2RegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(EQep2Regs,"EQep2RegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct EQEP_REGS EQep2Regs;; порядок элементов сохраняется. */ volatile struct EQEP_REGS EQep2Regs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("GpioCtrlRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("GpioCtrlRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(GpioCtrlRegs,"GpioCtrlRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(GpioCtrlRegs,"GpioCtrlRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct GPIO_CTRL_REGS GpioCtrlRegs;; порядок элементов сохраняется. */ volatile struct GPIO_CTRL_REGS GpioCtrlRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("GpioDataRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("GpioDataRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(GpioDataRegs,"GpioDataRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(GpioDataRegs,"GpioDataRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct GPIO_DATA_REGS GpioDataRegs;; порядок элементов сохраняется. */ volatile struct GPIO_DATA_REGS GpioDataRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("GpioIntRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("GpioIntRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(GpioIntRegs,"GpioIntRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(GpioIntRegs,"GpioIntRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct GPIO_INT_REGS GpioIntRegs;; порядок элементов сохраняется. */ volatile struct GPIO_INT_REGS GpioIntRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("I2caRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("I2caRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(I2caRegs,"I2caRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(I2caRegs,"I2caRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct I2C_REGS I2caRegs;; порядок элементов сохраняется. */ volatile struct I2C_REGS I2caRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("McbspaRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("McbspaRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(McbspaRegs,"McbspaRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(McbspaRegs,"McbspaRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct MCBSP_REGS McbspaRegs;; порядок элементов сохраняется. */ volatile struct MCBSP_REGS McbspaRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("McbspbRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("McbspbRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(McbspbRegs,"McbspbRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(McbspbRegs,"McbspbRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct MCBSP_REGS McbspbRegs;; порядок элементов сохраняется. */ volatile struct MCBSP_REGS McbspbRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("PartIdRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("PartIdRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(PartIdRegs,"PartIdRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(PartIdRegs,"PartIdRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct PARTID_REGS PartIdRegs;; порядок элементов сохраняется. */ volatile struct PARTID_REGS PartIdRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("PieCtrlRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("PieCtrlRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(PieCtrlRegs,"PieCtrlRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(PieCtrlRegs,"PieCtrlRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct PIE_CTRL_REGS PieCtrlRegs;; порядок элементов сохраняется. */ volatile struct PIE_CTRL_REGS PieCtrlRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("PieVectTableFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("PieVectTableFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(PieVectTable,"PieVectTableFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(PieVectTable,"PieVectTableFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Описывает структуру PIE_VECT_TABLE PieVectTable;; порядок полей определяет расположение данных. */ struct PIE_VECT_TABLE PieVectTable; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("SciaRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("SciaRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(SciaRegs,"SciaRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(SciaRegs,"SciaRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct SCI_REGS SciaRegs;; порядок элементов сохраняется. */ volatile struct SCI_REGS SciaRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ScibRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ScibRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ScibRegs,"ScibRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ScibRegs,"ScibRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct SCI_REGS ScibRegs;; порядок элементов сохраняется. */ volatile struct SCI_REGS ScibRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("ScicRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("ScicRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(ScicRegs,"ScicRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(ScicRegs,"ScicRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct SCI_REGS ScicRegs;; порядок элементов сохраняется. */ volatile struct SCI_REGS ScicRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("SpiaRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("SpiaRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(SpiaRegs,"SpiaRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(SpiaRegs,"SpiaRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct SPI_REGS SpiaRegs;; порядок элементов сохраняется. */ volatile struct SPI_REGS SpiaRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("SysCtrlRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("SysCtrlRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(SysCtrlRegs,"SysCtrlRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(SysCtrlRegs,"SysCtrlRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct SYS_CTRL_REGS SysCtrlRegs;; порядок элементов сохраняется. */ volatile struct SYS_CTRL_REGS SysCtrlRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("FlashRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("FlashRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(FlashRegs,"FlashRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(FlashRegs,"FlashRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct FLASH_REGS FlashRegs;; порядок элементов сохраняется. */ volatile struct FLASH_REGS FlashRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("XIntruptRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("XIntruptRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(XIntruptRegs,"XIntruptRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(XIntruptRegs,"XIntruptRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct XINTRUPT_REGS XIntruptRegs;; порядок элементов сохраняется. */ volatile struct XINTRUPT_REGS XIntruptRegs; //---------------------------------------- +/* Включает следующий блок только при определённом символе __cplusplus. */ #ifdef __cplusplus +/* Указание компилятору DATA_SECTION("XintfRegsFile"): размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION("XintfRegsFile") +/* Выбирает альтернативный блок текущего условия компиляции. */ #else +/* Указание компилятору DATA_SECTION(XintfRegs,"XintfRegsFile");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(XintfRegs,"XintfRegsFile"); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение volatile struct XINTF_REGS XintfRegs;; порядок элементов сохраняется. */ volatile struct XINTF_REGS XintfRegs; diff --git a/Source/Internal/ADC.c b/Source/Internal/ADC.c index 57ac07b..089acf0 100644 --- a/Source/Internal/ADC.c +++ b/Source/Internal/ADC.c @@ -1,43 +1,74 @@ +/* Настройка АЦП, обработка преобразований и первичная фильтрация измерений. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP281x Headerfile Include File +/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */ #include "DSP2833x_Examples.h" // DSP281x Examples Include File +/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */ #include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "ADC.h": настройка АЦП, обработка преобразований и первичная фильтрация измерений. */ #include "ADC.h" +/* Подключает "log_to_mem.h": двухбанковый регистратор событий нагрузки во внешней RAM. */ #include "log_to_mem.h" +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */ #include "message.h" +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" +/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */ #include "peripher.h" +/* Объявляет adc_table_lem — АЦП table lem. */ Uint16 adc_table_lem[4]; -Uint16 ADC_table[28]; // Ïîòîìó ÷òî +4 êàëèáð +/* Объявляет ADC_table — АЦП table. */ +Uint16 ADC_table[28]; // Потому что +4 калибр +/* Объявляет prev_ok — данные prev_ok. */ Uint16 prev_ok[28]; +/* Объявляет COUNT_ONE_CANAL — число ONE CANAL. */ unsigned int COUNT_ONE_CANAL; +/* Объявляет COUNT_DISCHARGE — число DISCHARGE. */ unsigned int COUNT_DISCHARGE; +/* Объявляет COUNT_TRANSICIA — число TRANSICIA. */ unsigned int COUNT_TRANSICIA; +/* Объявляет FILTER_CLIP — данные FILTER_CLIP. */ unsigned int FILTER_CLIP; +/* Объявляет WAKE — данные WAKE; WAKE_TIME — данные WAKE_TIME. */ long WAKE, WAKE_TIME; // Prototype statements for functions found within this file. +/* Принимает результаты последовательности АЦП и обновляет измерительные фильтры в прерывании. */ interrupt void adc_isr(void); +/* Настраивает каналы, последовательность преобразований и запуск АЦП. */ void setup_adc() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет CLKdiv — данные CLKdiv; HSPCLKdiv — данные HSPCLKdiv; Rate — данные Rate. */ long CLKdiv,HSPCLKdiv,Rate; + /* Объявляет i — данные i. */ int i; + /* Условие компиляции (CPU_FRQ_150MHZ): выбранный блок включается в текущий вариант прошивки. */ #if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT + /* Задаёт ADC_MODCLK = 0x3; АЦП MODCLK. */ #define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (CPU_FRQ_100MHZ): выбранный блок включается в текущий вариант прошивки. */ #if (CPU_FRQ_100MHZ) + /* Задаёт ADC_MODCLK = 0x2; АЦП MODCLK. */ #define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif // Specific clock setting for this example: @@ -47,247 +78,438 @@ void setup_adc() // Interrupts that are used in this example are re-mapped to // ISR functions found within this file. + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; // This is needed to write to EALLOW protected register + /* Записывает PieVectTable.ADCINT значением &adc_isr; данные ADCINT. */ PieVectTable.ADCINT = &adc_isr; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; // This is needed to disable write to EALLOW protected registers + /* Инициализирует модуль вызовом InitAdc(); перед его дальнейшим использованием. */ InitAdc(); // For this example, init the ADC // Enable ADCINT in PIE + /* Записывает PieCtrlRegs.PIEIER1.bit.INTx6 значением 1; данные INTx6. */ PieCtrlRegs.PIEIER1.bit.INTx6 = 1; + /* Устанавливает биты IER значением M_INT1; регистр разрешения прерываний ядра C28x. */ IER |= M_INT1; // Enable CPU Interrupt 1 // EINT; // Enable Global interrupt INTM // ERTM; // Enable Global realtime interrupt DBGM + /* Цикл for(i=0;i<28;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<28;i++) + /* Записывает ADC_table[i] значением ; АЦП table. */ ADC_table[i]= + /* Записывает prev_ok[i] значением 0; данные prev_ok. */ prev_ok[i] = 0; // Configure ADC - if(Desk==dsk_LOAD) + /* Проверяет if(Desk==dsk_LOAD); последующий оператор выполняется только при истинном условии. */ + if(Desk==dsk_LOAD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x0005; данные MAX_CONV1. */ AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0005; // Setup 2 conv's on SEQ1 - AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // òåìïåðàòóðà (êîòîðîé íåò) - AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // îìåãà - AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x5; // íàïðóãà 1 - AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x4; // íàïðóãà 2 - AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x7; // òîê 1 - AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x2; // òîê 2 + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV00 значением 0x3; данные CONV00. */ + AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // температура (которой нет) + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV01 значением 0x1; данные CONV01. */ + AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // омега + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV02 значением 0x5; данные CONV02. */ + AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x5; // напруга 1 + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV03 значением 0x4; данные CONV03. */ + AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x4; // напруга 2 + /* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV04 значением 0x7; данные CONV04. */ + AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x7; // ток 1 + /* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV05 значением 0x2; данные CONV05. */ + AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x2; // ток 2 + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_BKST); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_BKST) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x0002; данные MAX_CONV1. */ AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0002; // Setup 2 conv's on SEQ1 + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV00 значением 0x0; данные CONV00. */ AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //0x5;//0x7; // Setup ADCINA3 as 1st SEQ1 conv. + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV01 значением 0x1; данные CONV01. */ AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; //0x4;// Setup ADCINA2 as 2nd SEQ1 conv. + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV02 значением 0x2; данные CONV02. */ AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; //0x4;// Setup ADCINA2 as 2nd SEQ1 conv. + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_COMM); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_COMM) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x0006; данные MAX_CONV1. */ AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0006; // Setup 2 conv's on SEQ1 - AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x5; // ñíà÷àëà òîæå áóäóò òåìïåðàòóðû + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV00 значением 0x5; данные CONV00. */ + AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x5; // сначала тоже будут температуры + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV01 значением 0x4; данные CONV01. */ AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x4; // Setup ADCINA2 as 2nd SEQ1 conv. + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV02 значением 0x7; данные CONV02. */ AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x7; // Setup ADCINA2 as 2nd SEQ1 conv. + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV03 значением 0x2; данные CONV03. */ AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x2; // Setup ADCINA2 as 2nd SEQ1 conv. + /* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV04 значением 0x3; данные CONV04. */ AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x3; // Setup ADCINA2 as 2nd SEQ1 conv. + /* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV05 значением 0x6; данные CONV05. */ AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x6; // Setup ADCINA2 as 2nd SEQ1 conv. + /* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV06 значением 0x1; данные CONV06. */ AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x1; // Setup ADCINA2 as 2nd SEQ1 conv. + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - if(Desk==dsk_BKSD) + /* Проверяет if(Desk==dsk_BKSD); последующий оператор выполняется только при истинном условии. */ + if(Desk==dsk_BKSD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x0000; данные MAX_CONV1. */ AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0000; // Setup 2 conv's on SEQ1 + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV00 значением 0x0; данные CONV00. */ AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA3 as 1st SEQ1 conv. + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - if(Desk==dsk_SHKF) + /* Проверяет if(Desk==dsk_SHKF); последующий оператор выполняется только при истинном условии. */ + if(Desk==dsk_SHKF) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x000F; данные MAX_CONV1. */ AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x000F; // Setup 2 conv's on SEQ1 - AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x2; // 380 Ô1 - AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x3; // 380 Ô2 - AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x6; // 31 Ô1 - AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0xC; // 31 Ô2 ? - AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0xA; // 31 UC1 - AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0xB; // 31 UC2 - AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x7; // 24 ÏÓ - AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x4; // 24 ÏÓ + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV00 значением 0x2; данные CONV00. */ + AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x2; // 380В Ф1 + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV01 значением 0x3; данные CONV01. */ + AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x3; // 380В Ф2 + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV02 значением 0x6; данные CONV02. */ + AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x6; // 31В Ф1 + /* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV03 значением 0xC; данные CONV03. */ + AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0xC; // 31В Ф2 ? + /* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV04 значением 0xA; данные CONV04. */ + AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0xA; // 31В UC1 + /* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV05 значением 0xB; данные CONV05. */ + AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0xB; // 31В UC2 + /* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV06 значением 0x7; данные CONV06. */ + AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x7; // 24В ПУ + /* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV07 значением 0x4; данные CONV07. */ + AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x4; // 24В ПУ - AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x5; // 24 ÏÊ áûëî 5 - AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x1; // 15 Äð - AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0xE; // +24 Äò - AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0; // +24 Äò - AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x8; // -24 Äò áûëî 8 + /* Записывает AdcRegs.ADCCHSELSEQ3.bit.CONV08 значением 0x5; данные CONV08. */ + AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x5; // 24В ПК было 5 + /* Записывает AdcRegs.ADCCHSELSEQ3.bit.CONV09 значением 0x1; данные CONV09. */ + AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x1; // 15В Др + /* Записывает AdcRegs.ADCCHSELSEQ3.bit.CONV10 значением 0xE; данные CONV10. */ + AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0xE; // +24В Дт + /* Записывает AdcRegs.ADCCHSELSEQ3.bit.CONV11 значением 0x0; данные CONV11. */ + AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0; // +24В Дт + /* Записывает AdcRegs.ADCCHSELSEQ4.bit.CONV12 значением 0x8; данные CONV12. */ + AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x8; // -24В Дт было 8 - AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0xF;//0xF; // ÄҰ 1 - AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0xD;//0xD; // ÄҰ 2 + /* Записывает AdcRegs.ADCCHSELSEQ4.bit.CONV13 значением 0xF; данные CONV13. */ + AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0xF;//0xF; // ДТ° 1 + /* Записывает AdcRegs.ADCCHSELSEQ4.bit.CONV14 значением 0xD; данные CONV14. */ + AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0xD;//0xD; // ДТ° 2 + /* Записывает AdcRegs.ADCCHSELSEQ4.bit.CONV15 значением 0x9; данные CONV15. */ AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0x9;//0x9; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 значением 1; данные EPWM_SOCA_SEQ1. */ AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1 + /* Записывает AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 значением 1; данные INT_ENA_SEQ1. */ AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS) + /* Записывает AdcRegs.ADCST.bit.INT_SEQ1_CLR значением 1; данные INT_SEQ1_CLR. */ AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit - + + /* Записывает AdcRegs.ADCTRL1.bit.SEQ_CASC значением 1; данные SEQ_CASC. */ AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode + /* Записывает AdcRegs.ADCTRL1.bit.CONT_RUN значением 0; данные CONT_RUN. */ AdcRegs.ADCTRL1.bit.CONT_RUN=0; + /* Записывает AdcRegs.ADCTRL1.bit.ACQ_PS значением 15; данные ACQ_PS. */ AdcRegs.ADCTRL1.bit.ACQ_PS = 15; //AdcRegs.ADCTRL1.bit.CPS=1; + /* Записывает AdcRegs.ADCTRL2.bit.RST_SEQ1 значением 1; данные RST_SEQ1. */ AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1 + /* Записывает PieCtrlRegs.PIEACK.all значением PIEACK_GROUP1; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE - + // Assumes ePWM1 clock is already enabled in InitSysCtrl(); + /* Записывает EPwm1Regs.ETSEL.bit.SOCAEN значением 1; данные SOCAEN. */ EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group + /* Записывает EPwm1Regs.ETSEL.bit.SOCASEL значением 4; данные SOCASEL. */ EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount + /* Записывает EPwm1Regs.ETPS.bit.SOCAPRD значением 1; данные SOCAPRD. */ EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event + /* Записывает EPwm1Regs.CMPA.half.CMPA значением 0x0080; данные CMPA. */ EPwm1Regs.CMPA.half.CMPA = 0x0080; // Set compare A value + /* Записывает EPwm1Regs.TBCTL.bit.HSPCLKDIV значением CLKMULT; данные HSPCLKDIV. */ EPwm1Regs.TBCTL.bit.HSPCLKDIV = CLKMULT; + /* Записывает EPwm1Regs.TBCTL.bit.CLKDIV значением 2; данные CLKDIV. */ EPwm1Regs.TBCTL.bit.CLKDIV=2; + /* Записывает CLKdiv значением 1<>4; Current_count(i); АЦП table lem. */ adc_table_lem[i] = *((&AdcRegs.ADCRESULT0)+i+2) >>4; Current_count(i); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } - if(Desk==dsk_LOAD) + /* Проверяет if(Desk==dsk_LOAD); последующий оператор выполняется только при истинном условии. */ + if(Desk==dsk_LOAD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает Temper значением AdcRegs.ADCRESULT1 >> 4; данные Temper. */ Temper = AdcRegs.ADCRESULT1 >> 4; + /* Записывает modbus[0x63] значением Temper; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[0x63] = Temper; + /* Записывает Temper значением filterbat(&adc_filter[0],Temper); данные Temper. */ Temper = filterbat(&adc_filter[0],Temper); + /* Записывает modbus[0x1D] значением (Temper-DAC_04)/(DAC_20-DAC_04)*(200-40)+40; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[0x1D] = (Temper-DAC_04)/(DAC_20-DAC_04)*(200-40)+40; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_SHKF); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_SHKF) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Цикл for(i=0;i=tpl_cans) cownt_cans=0; последующий оператор выполняется только при истинном условии. */ if (++cownt_cans>=tpl_cans) cownt_cans=0; -// Èìåííî çäåñü íåò äûð +// Именно здесь нет дыр // if(sens_type[cownt_cans]) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Изменяет счётчик в выражении i++; на один для следующего шага. */ i++; + /* Записывает Temper значением *(&AdcRegs.ADCRESULT0 + cownt_cans) >>4; данные Temper. */ Temper= *(&AdcRegs.ADCRESULT0 + cownt_cans) >>4; + /* Записывает ADC_table[cownt_cans] значением filterbat(&adc_filter[cownt_cans],Temper); АЦП table. */ ADC_table[cownt_cans]=filterbat(&adc_filter[cownt_cans],Temper); + /* Проверяет if(sens_type[cownt_cans]==TERMO_AD) Temper_count(cownt_cans,0); последующий оператор выполняется только при истинном условии. */ if(sens_type[cownt_cans]==TERMO_AD) Temper_count(cownt_cans,0); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else Power_count(cownt_cans); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } } + /* Проверяет if(TermoSW); последующий оператор выполняется только при истинном условии. */ if(TermoSW) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(cownt_one_canal==COUNT_DISCHARGE); последующий оператор выполняется только при истинном условии. */ if(cownt_one_canal==COUNT_DISCHARGE) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает code_tpl_canal значением cownt_cans; данные code_tpl_canal. */ code_tpl_canal = cownt_cans; + /* Проверяет if(TermoAD); последующий оператор выполняется только при истинном условии. */ if(TermoAD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(cownt_cans == TPL_CANS ) code_tpl_canal = TERMOPAIR-1; последующий оператор выполняется только при истинном условии. */ if(cownt_cans == TPL_CANS ) code_tpl_canal = TERMOPAIR-1; - if(cownt_cans == TPL_CANS+1) code_tpl_canal = TERMOPAIR-2; // ïîòîìó ÷òî 300 è 400 íàîáîðîò + /* Проверяет if(cownt_cans == TPL_CANS+1) code_tpl_canal = TERMOPAIR-2; последующий оператор выполняется только при истинном условии. */ + if(cownt_cans == TPL_CANS+1) code_tpl_canal = TERMOPAIR-2; // потому что 300 и 400 наоборот + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает select_tpl_canal с аргументами (code_tpl_canal) в текущей последовательности операций. */ select_tpl_canal(code_tpl_canal); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(cownt_one_canal > COUNT_TRANSICIA); последующий оператор выполняется только при истинном условии. */ if(cownt_one_canal > COUNT_TRANSICIA) + /* Цикл for(i=0;i>4; данные Temper. */ Temper = *(&AdcRegs.ADCRESULT0 + i) >>4; + /* Записывает ok значением abs(ADC_table[n]-Temper) < FILTER_CLIP; данные ok. */ ok = abs(ADC_table[n]-Temper) < FILTER_CLIP; + /* Проверяет if(ok) cwnt_ok[i]++; последующий оператор выполняется только при истинном условии. */ if(ok) cwnt_ok[i]++; + /* Проверяет if(ok|!prev_ok[n]); последующий оператор выполняется только при истинном условии. */ if(ok|!prev_ok[n]) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает Filter значением filterbat(&adc_filter[n],Temper); данные Filter. */ Filter = filterbat(&adc_filter[n],Temper); - + + /* Проверяет if(WAKE)ADC_table[n] = Temper; последующий оператор выполняется только при истинном условии. */ if(WAKE)ADC_table[n] = Temper; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else ADC_table[n] = Filter; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } /* if(cownt_cans == TPL_CANS) @@ -303,36 +525,59 @@ for(i=0;i<1;i++) } } */ + /* Проверяет if(++cownt_one_canal>=COUNT_ONE_CANAL); последующий оператор выполняется только при истинном условии. */ if(++cownt_one_canal>=COUNT_ONE_CANAL) + /* Записывает cownt_one_canal значением 0; данные cownt_one_canal. */ { cownt_one_canal=0; + /* Вызывает select_tpl_255 с аргументами () в текущей последовательности операций. */ select_tpl_255(); + /* Цикл for(i=0;i= TPL_CANS+2); последующий оператор выполняется только при истинном условии. */ if(++cownt_cans >= TPL_CANS+2) + /* Записывает cownt_cans значением 0; данные cownt_cans. */ { cownt_cans=0; + /* Цикл for(i=0;i>= 1) ; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 3; i++, address++, mask >>= 1) { + /* Проверяет if ((header & mask) и address == selected); последующий оператор выполняется только при истинном условии. */ if ((header & mask) && address == selected) { + /* Записывает load_voltage значением data[i]; последнее выбранное напряжение CAN, масштаб 1 В на слово. */ load_voltage = data[i]; + /* Записывает load_voltage_age значением 0; возраст последнего достоверного выбранного напряжения CAN в миллисекундах. */ load_voltage_age = 0; + /* Записывает load_voltage_seen значением 1; признак получения выбранного измерения напряжения CAN. */ load_voltage_seen = 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* STOP óäåðæèâàåòñÿ âåñü ñáðîñ, âêëþ÷àÿ îòïðàâêó êîäà 4 ìÀ â ÖÀÏ. - * Ïîâòîðíûé ïóñê ðàçðåø¸í òîëüêî ïîñëå ýòîé îòïðàâêè è 1000 ìñ STOP. - * Ýòî ïîäòâåðæäåíèå ïðîãðàììíîé îòïðàâêè, íå èçìåðåíèå ôèçè÷åñêîãî òîêà. */ +/* STOP удерживается весь сброс, включая отправку кода 4 мА в ЦАП. + * Повторный пуск разрешён только после этой отправки и 1000 мс STOP. + * Это подтверждение программной отправки, не измерение физического тока. */ +/* Снимает START и разрешение нагрузки, удерживает STOP 1000 мс и сбрасывает состояние нарастания тока. */ static void load_stop(unsigned int state) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Сбрасывает аппаратный сигнал через clear_START_DPTB();. */ clear_START_DPTB(); + /* Устанавливает аппаратный сигнал через set_STOP_DPTB();. */ set_STOP_DPTB(); + /* Сбрасывает аппаратный сигнал через clear_RES_OUT_2();. */ clear_RES_OUT_2(); + /* Записывает load_stop_asserted значением 1; признак установленного выхода STOP. */ load_stop_asserted = 1; + /* Записывает load_state значением state; текущее состояние автомата нагрузки. */ load_state = state; + /* Записывает load_count_ramp значением 0; load число ramp. */ load_count_ramp = 0; + /* Записывает load_zero_sent значением 0; данные load_zero_sent. */ load_zero_sent = 0; + /* Записывает IMPowse значением LOAD_PULSE_MS; данные IMPowse. */ IMPowse = LOAD_PULSE_MS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Ограничивает начальный и конечный ток, снимает STOP, выдаёт START и считает новую попытку пуска. */ static void load_start(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - /* Óñòàâêè ôèêñèðóþòñÿ äëÿ êàæäîé ïîïûòêè. Âíóòðåííèé íîëü = 4 ìÀ. - * Èñïðàâëåíà îïå÷àòêà ñòàðîãî îãðàíè÷åíèÿ: îãðàíè÷èâàåì êîíåö ðàìïû, - * à íå çàìåíÿåì íà÷àëüíóþ óñòàâêó íà 16 (÷òî äàâàëî ñêà÷îê äî 20 ìÀ). */ + /* Уставки фиксируются для каждой попытки. Внутренний ноль = 4 мА. + * Исправлена опечатка старого ограничения: ограничиваем конец рампы, + * а не заменяем начальную уставку на 16 (что давало скачок до 20 мА). */ + /* Записывает load_go значением (float)DAC_go - 4.0; начальный ток за вычетом базовых 4 мА, ограниченный диапазоном 0..5. */ load_go = (float)DAC_go - 4.0; + /* Записывает load_end значением (float)DAC_stop - 4.0; конечный ток за вычетом 4 мА, ограниченный сверху значением 16. */ load_end = (float)DAC_stop - 4.0; + /* Проверяет if (load_go < 0) load_go = 0; последующий оператор выполняется только при истинном условии. */ if (load_go < 0) load_go = 0; + /* Проверяет if (load_go > 5) load_go = 5; последующий оператор выполняется только при истинном условии. */ if (load_go > 5) load_go = 5; + /* Проверяет if (load_end > 16) load_end = 16; последующий оператор выполняется только при истинном условии. */ if (load_end > 16) load_end = 16; + /* Проверяет if (load_end <= load_go) load_end = load_go + 1; последующий оператор выполняется только при истинном условии. */ if (load_end <= load_go) load_end = load_go + 1; + /* Записывает ump_dac_go10 значением (unsigned int)((load_go + 4.0) * 10.0); ump ЦАП go 10. */ ump_dac_go10 = (unsigned int)((load_go + 4.0) * 10.0); + /* Записывает ump_dac_stop10 значением (unsigned int)((load_end + 4.0) * 10.0); ump ЦАП stop 10. */ ump_dac_stop10 = (unsigned int)((load_end + 4.0) * 10.0); + /* Записывает load_count_ramp значением 0; load число ramp. */ load_count_ramp = 0; + /* Изменяет счётчик в выражении load_attempts++; на один для следующего шага. */ load_attempts++; - /* STOP îòïóñêàåì íåïîñðåäñòâåííî ïåðåä START, ðàçðåøåíèå — ïîñëå íåãî. - * Çàäàíèå îñòà¸òñÿ 4 ìÀ äî ïåðâîãî øàãà íîâîé ðàìïû. */ + /* STOP отпускаем непосредственно перед START, разрешение — после него. + * Задание остаётся 4 мА до первого шага новой рампы. */ + /* Сбрасывает аппаратный сигнал через clear_STOP_DPTB();. */ clear_STOP_DPTB(); + /* Записывает load_stop_asserted значением 0; признак установленного выхода STOP. */ load_stop_asserted = 0; + /* Устанавливает аппаратный сигнал через set_START_DPTB();. */ set_START_DPTB(); + /* Устанавливает аппаратный сигнал через set_RES_OUT_2();. */ set_RES_OUT_2(); + /* Записывает IMPowse значением LOAD_PULSE_MS; данные IMPowse. */ IMPowse = LOAD_PULSE_MS; + /* Записывает load_state значением LOAD_RUN; текущее состояние автомата нагрузки. */ load_state = LOAD_RUN; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Вычисляет такты ЦАП; для недопустимого сохранённого тайм-аута CAN возвращает 600 мс. */ void Setup_DAC_time(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает WAKEpowse значением 3L * DAC_FREQ +1; данные WAKEpowse. */ WAKEpowse = 3L * DAC_FREQ +1; + /* Записывает period_dac значением READY_FREQ / DAC_FREQ; период ЦАП. */ period_dac = READY_FREQ / DAC_FREQ; + /* Записывает time_dac значением LOAD_TIME * DAC_FREQ; time ЦАП. */ time_dac = LOAD_TIME * DAC_FREQ; - /* Ñòàðûå EEPROM èìåþò íîëü â íîâîì ïàðàìåòðå: èñïîëüçóåì 600 ìñ. - * 1..60000 ìñ ìîæíî ìåíÿòü ÷åðåç ðåãèñòð 0x52 è ñîõðàíÿòü øòàòíî. */ + /* Старые EEPROM имеют ноль в новом параметре: используем 600 мс. + * 1..60000 мс можно менять через регистр 0x52 и сохранять штатно. */ + /* Проверяет if ((unsigned int)LOAD_CAN_TIMEOUT == 0U или; последующий оператор выполняется только при истинном условии. */ if ((unsigned int)LOAD_CAN_TIMEOUT == 0U || + /* Записывает LOAD_CAN_TIMEOUT значением 600; сохраняемый тайм-аут свежести напряжения CAN в миллисекундах, регистр 0x52. */ (unsigned int)LOAD_CAN_TIMEOUT > 60000U) LOAD_CAN_TIMEOUT = 600; + /* Записывает LOAD_STATUS значением 0; LOAD_ATTEMPTS = 0; слово состояния защиты нагрузки для чтения, регистр 0x7C. */ LOAD_STATUS = 0; LOAD_ATTEMPTS = 0; + /* Записывает load_initialized значением 1; данные load_initialized. */ load_initialized = 1; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию dOUT; назначение модуля — выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ void dOUT(int x) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(x) GpioDataRegs.GPBSET.bit.GPIO60=1; последующий оператор выполняется только при истинном условии. */ if(x) GpioDataRegs.GPBSET.bit.GPIO60=1; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else GpioDataRegs.GPBCLEAR.bit.GPIO60=1; -} +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} +/* Начинает функцию wast; назначение модуля — выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ void wast() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i. */ int i; + /* Цикл for(i=0;i<25;i++);; задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<25;i++); -} +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} +/* Начинает функцию dSEND; назначение модуля — выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ void dSEND(unsigned int word) -{ +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Объявляет i — данные i. */ int i; + /* Вызывает dCS_0 с аргументами (); DSP28x_usDelay(1L) в текущей последовательности операций. */ dCS_0(); DSP28x_usDelay(1L); + /* Цикл for(i=0;i<16;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<16;i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает dCLK_1 с аргументами () в текущей последовательности операций. */ dCLK_1(); + /* Записывает word значением word<<1; DSP28x_usDelay(1L); слово. */ dOUT((word & 0x8000)?1:0); word = word<<1; DSP28x_usDelay(1L); + /* Вызывает dCLK_0 с аргументами (); DSP28x_usDelay(1L) в текущей последовательности операций. */ dCLK_0(); DSP28x_usDelay(1L); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает dCS_1 с аргументами () в текущей последовательности операций. */ dCS_1(); -} +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} +/* Начинает функцию Init_DAC; назначение модуля — выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ void Init_DAC(void) -{ - dSEND(0x9002|0x0000); - toggle_RES_OUT_1(); -} - -static void anal_output(long vrot, long maxx, int calibration) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает dSEND с аргументами (0x9002|0x0000) в текущей последовательности операций. */ + dSEND(0x9002|0x0000); + /* Переключает аппаратный сигнал через toggle_RES_OUT_1();. */ + toggle_RES_OUT_1(); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} + +/* Начинает функцию anal_output; назначение модуля — выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ +static void anal_output(long vrot, long maxx, int calibration) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Объявляет out — данные out. */ long out; + /* Объявляет x — данные x. */ static int x; + /* Записывает out значением DAC_min() + vrot * DAC_max() / maxx - vrot * DAC_min() / maxx ; данные out. */ out = DAC_min() + vrot * DAC_max() / maxx - vrot * DAC_min() / maxx ; - x=0;// !x; òùåòíî áûòèå + /* Записывает x значением 0; данные x. */ + x=0;// !x; тщетно бытие + /* Проверяет if(calibration и cCalibrDac) out=DAC_cal(); последующий оператор выполняется только при истинном условии. */ if(calibration && cCalibrDac) out=DAC_cal(); + /* Записывает out значением out & 0xFFF; данные out. */ out = out & 0xFFF; - if(x) dSEND(out|0x0000|0x0000); + /* Проверяет if(x) dSEND(out|0x0000|0x0000); последующий оператор выполняется только при истинном условии. */ + if(x) dSEND(out|0x0000|0x0000); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else dSEND(out|0x8000|0x0000); - modbus[123] = out; + /* Записывает modbus[123] значением out; массив технологических регистров; слово int на C28x занимает 16 бит. */ + modbus[123] = out; - modbus[0x1C] = 40L + vrot * 200 / maxx - vrot * 40 / maxx ; + /* Записывает modbus[0x1C] значением 40L + vrot * 200 / maxx - vrot * 40 / maxx ; массив технологических регистров; слово int на C28x занимает 16 бит. */ + modbus[0x1C] = 40L + vrot * 200 / maxx - vrot * 40 / maxx ; /* if(!no_write) @@ -195,117 +334,197 @@ Log_to_mem(modbus[0x1D]); */ +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* Ñîõðàí¸í ïóáëè÷íûé èíòåðôåéñ; çàùèòíûé ñáðîñ âûçûâàåò âíóòðåííþþ - * ôóíêöèþ ñ calibration=0, ÷òîáû ðó÷íàÿ êàëèáðîâêà íå ïîäìåíèëà 4 ìÀ. */ +/* Сохранён публичный интерфейс; защитный сброс вызывает внутреннюю + * функцию с calibration=0, чтобы ручная калибровка не подменила 4 мА. */ +/* Начинает функцию Anal_output; назначение модуля — выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ void Anal_output(long vrot, long maxx) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if (maxx > 0) anal_output(vrot, maxx, 1); последующий оператор выполняется только при истинном условии. */ if (maxx > 0) anal_output(vrot, maxx, 1); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* В такте Timer1 проверяет команды, напряжение и давность CAN; управляет STOP, повторным пуском и током ЦАП. */ void Load_runner(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved; commands — данные commands; voltage — данные voltage; fresh — данные fresh; timeout — данные timeout. */ unsigned int saved, commands, voltage, fresh, timeout; + /* Объявляет start — данные start; reset — сброс; active — данные active. Начальное значение задаётся справа от знака равенства. */ unsigned int start, reset, active = 0; + /* Объявляет sinus — данные sinus. Начальное значение задаётся справа от знака равенства. */ float sinus = 0; - /* ISR ðàáîòàåò 1 êÃö, íî GPIO/ÖÀÏ íåëüçÿ îáñëóæèâàòü äî çàãðóçêè - * ïàðàìåòðîâ. Ýòî òàêæå èñêëþ÷àåò ïðåæíåå äåëåíèå íà time_dac=0. */ + /* ISR работает 1 кГц, но GPIO/ЦАП нельзя обслуживать до загрузки + * параметров. Это также исключает прежнее деление на time_dac=0. */ + /* Проверяет if (!load_initialized или !READY или !period_dac или !time_dac) return; последующий оператор выполняется только при истинном условии. */ if (!load_initialized || !READY || !period_dac || !time_dac) return; + /* Записывает saved значением __disable_interrupts(); данные saved. */ saved = __disable_interrupts(); + /* Записывает commands значением (unsigned int)Commands; данные commands. */ commands = (unsigned int)Commands; + /* Записывает voltage значением (load_simulation & 2U) ? 0U : load_voltage; данные voltage. */ voltage = (load_simulation & 2U) ? 0U : load_voltage; + /* Записывает timeout значением (unsigned int)LOAD_CAN_TIMEOUT; данные timeout. */ timeout = (unsigned int)LOAD_CAN_TIMEOUT; + /* Проверяет if (!timeout или timeout > 60000U) timeout = 600U; последующий оператор выполняется только при истинном условии. */ if (!timeout || timeout > 60000U) timeout = 600U; - /* Äî ïåðâîãî ïàêåòà çíà÷åíèå 0 íå ñ÷èòàåòñÿ ñâåæèì èçìåðåíèåì. - * Íàñûùåíèå âîçðàñòà èñêëþ÷àåò ëîæíîå âîññòàíîâëåíèå ïîñëå ïåðåïîëíåíèÿ. */ + /* До первого пакета значение 0 не считается свежим измерением. + * Насыщение возраста исключает ложное восстановление после переполнения. */ + /* Записывает fresh значением load_voltage_seen && load_voltage_age < timeout; данные fresh. */ fresh = load_voltage_seen && load_voltage_age < timeout; + /* Проверяет if (load_voltage_age < 65535U) load_voltage_age++; последующий оператор выполняется только при истинном условии. */ if (load_voltage_age < 65535U) load_voltage_age++; + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); + /* Записывает start значением commands & 0x80U; reset = commands & 0x40U; данные start. */ start = commands & 0x80U; reset = commands & 0x40U; + /* Проверяет if (IMPowse) IMPowse--; последующий оператор выполняется только при истинном условии. */ if (IMPowse) IMPowse--; - /* Îòñóòñòâèå êîìàíäû ïóñêà — íà÷àëî íîâîãî ñåàíñà, ñáðàñûâàåò îøèáêó. - * RESET âñåãäà ñòàðøå START; îòïóñêàíèå RESET ïðè îñòàâøåìñÿ START - * íå äà¸ò íåîæèäàííîãî ïîâòîðíîãî ïóñêà: ñíà÷àëà òðåáóåòñÿ START=0. */ + /* Отсутствие команды пуска — начало нового сеанса, сбрасывает ошибку. + * RESET всегда старше START; отпускание RESET при оставшемся START + * не даёт неожиданного повторного пуска: сначала требуется START=0. */ + /* Проверяет if (!start); последующий оператор выполняется только при истинном условии. */ if (!start) { + /* Проверяет if (load_state != LOAD_IDLE) load_stop(LOAD_IDLE); последующий оператор выполняется только при истинном условии. */ if (load_state != LOAD_IDLE) load_stop(LOAD_IDLE); + /* Записывает load_attempts значением 0; load_inhibit = 0; накопленное число пусков в текущем цикле, максимум пять. */ load_attempts = 0; load_inhibit = 0; + /* Проверяет else if (reset); последующий оператор выполняется только при истинном условии. */ } else if (reset) { + /* Проверяет if (load_state != LOAD_FAULT и load_state != LOAD_IDLE); последующий оператор выполняется только при истинном условии. */ if (load_state != LOAD_FAULT && load_state != LOAD_IDLE) + /* Вызывает load_stop. Снимает START и разрешение нагрузки, удерживает STOP 1000 мс и сбрасывает состояние нарастания тока. */ load_stop(LOAD_IDLE); + /* Записывает load_inhibit значением 1; признак запрета повторного запуска до требуемого перехода входов. */ load_inhibit = 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (reset и !load_stop_asserted) load_stop(LOAD_IDLE); последующий оператор выполняется только при истинном условии. */ if (reset && !load_stop_asserted) load_stop(LOAD_IDLE); - /* Ïîâòîðíûé START äîïóñêàåòñÿ ïîñëå ñáðîñà ÖÀÏ, îêîí÷àíèÿ STOP è - * âîññòàíîâëåíèÿ íóæíîãî CAN-íàïðÿæåíèÿ. Òàéìàóò ñàì íå òðàòèò ïîïûòêó. */ + /* Повторный START допускается после сброса ЦАП, окончания STOP и + * восстановления нужного CAN-напряжения. Таймаут сам не тратит попытку. */ + /* Проверяет if (start и !reset и !load_inhibit и !WAKEpowse и fresh и; последующий оператор выполняется только при истинном условии. */ if (start && !reset && !load_inhibit && !WAKEpowse && fresh && + /* Продолжает список аргументов, полей или выражение load_zero_sent && !IMPowse &&; порядок элементов сохраняется. */ load_zero_sent && !IMPowse && + /* Продолжает список аргументов, полей или выражение (load_state == LOAD_IDLE || load_state == LOAD_RELOAD)) load_start();; порядок элементов сохраняется. */ (load_state == LOAD_IDLE || load_state == LOAD_RELOAD)) load_start(); + /* Проверяет if (load_state == LOAD_RUN и !IMPowse) clear_START_DPTB(); последующий оператор выполняется только при истинном условии. */ if (load_state == LOAD_RUN && !IMPowse) clear_START_DPTB(); + /* Проверяет if (++load_count_dac >= period_dac); последующий оператор выполняется только при истинном условии. */ if (++load_count_dac >= period_dac) { + /* Записывает load_count_dac значением 0; load число ЦАП. */ load_count_dac = 0; + /* Проверяет if (WAKEpowse); последующий оператор выполняется только при истинном условии. */ if (WAKEpowse) { + /* Элемент постоянной таблицы --WAKEpowse;; порядок значений совпадает с порядком индексов потребителя. */ --WAKEpowse; + /* Проверяет if (WAKEpowse и !(WAKEpowse % (DAC_FREQ / 2))); последующий оператор выполняется только при истинном условии. */ if (WAKEpowse && !(WAKEpowse % (DAC_FREQ / 2))) { + /* Записывает load_init_count значением 1; load init число. */ Init_DAC(); load_init_count = 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ } else { + /* Записывает active значением load_state == LOAD_RUN; данные active. */ active = load_state == LOAD_RUN; + /* Проверяет if (active); последующий оператор выполняется только при истинном условии. */ if (active) { - /* Ïðè òàéìàóòå ñîõðàíÿåì ïîëîæåíèå È îòïðàâëåííîå çàäàíèå, - * íå äåëàåì STOP è íå ïðîäîëæàåì ðàçãîí áåç îáðàòíîé ñâÿçè. */ + /* При таймауте сохраняем положение И отправленное задание, + * не делаем STOP и не продолжаем разгон без обратной связи. */ + /* Проверяет if (fresh); последующий оператор выполняется только при истинном условии. */ if (fresh) { + /* Проверяет if (load_count_ramp > time_dac / 2) load_count_ramp++; последующий оператор выполняется только при истинном условии. */ if (load_count_ramp > time_dac / 2) load_count_ramp++; + /* Проверяет if (++load_count_ramp > time_dac) load_count_ramp = time_dac; последующий оператор выполняется только при истинном условии. */ if (++load_count_ramp > time_dac) load_count_ramp = time_dac; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает sinus значением ((load_end - load_go) / 16.0 * load_count_ramp) +; данные sinus. */ sinus = ((load_end - load_go) / 16.0 * load_count_ramp) + + /* Продолжает список аргументов, полей или выражение (load_go / 16.0 * time_dac);; порядок элементов сохраняется. */ (load_go / 16.0 * time_dac); - /* Ïðîâåðÿåì ñëåäóþùèé øàã ÄÎ ïåðåäà÷è ÖÀÏ. 6 ìÀ äîïóñòèìû, - * ñòðîãî >6 ìÀ è <30  òðåáóþò íåìåäëåííîãî STOP. - * Ïåðâàÿ ïîïûòêà âõîäèò â ëèìèò 5; øåñòîãî START íå áóäåò. */ + /* Проверяем следующий шаг ДО передачи ЦАП. 6 мА допустимы, + * строго >6 мА и <30 В требуют немедленного STOP. + * Первая попытка входит в лимит 5; шестого START не будет. */ + /* Проверяет if (fresh и voltage < LOAD_VOLTAGE_MIN и; последующий оператор выполняется только при истинном условии. */ if (fresh && voltage < LOAD_VOLTAGE_MIN && + /* Продолжает список аргументов, полей или выражение sinus * 16.0 > 2.0 * time_dac) {; порядок элементов сохраняется. */ sinus * 16.0 > 2.0 * time_dac) { + /* Вызывает load_stop. Снимает START и разрешение нагрузки, удерживает STOP 1000 мс и сбрасывает состояние нарастания тока. */ load_stop(load_attempts >= LOAD_MAX_ATTEMPTS ? + /* Продолжает список аргументов, полей или выражение LOAD_FAULT : LOAD_RELOAD);; порядок элементов сохраняется. */ LOAD_FAULT : LOAD_RELOAD); + /* Записывает active значением 0; sinus = 0; данные active. */ active = 0; sinus = 0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ } else { + /* Записывает load_count_ramp значением 0; load число ramp. */ load_count_ramp = 0; + /* Записывает load_init_count значением (load_init_count + 1) & 0x3FFU; load init число. */ load_init_count = (load_init_count + 1) & 0x3FFU; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - /* Âî âðåìÿ çàùèòû è ïóñêà ðó÷íîé êîä êàëèáðîâêè çàïðåù¸í. - * Êàëèáðîâêà ñîõðàíåíà òîëüêî ïðè ñíÿòîì START è ñâîáîäíîì STOP. - * Íóëåâîé êîä çàäàíèÿ çäåñü îçíà÷àåò òîê 4 ìÀ ïî DAC_min(). */ + /* Во время защиты и пуска ручной код калибровки запрещён. + * Калибровка сохранена только при снятом START и свободном STOP. + * Нулевой код задания здесь означает ток 4 мА по DAC_min(). */ + /* Записывает ump_dac_ramp значением load_count_ramp; ump ЦАП ramp. */ ump_dac_ramp = load_count_ramp; + /* Записывает ump_dac_duration значением time_dac; ump ЦАП duration. */ ump_dac_duration = time_dac; + /* Записывает ump_dac_position значением (unsigned int)sinus; ump ЦАП position. */ ump_dac_position = (unsigned int)sinus; + /* Проверяет if (active и !fresh); последующий оператор выполняется только при истинном условии. */ if (active && !fresh) { - /* Óäåðæèâàåì ÖÀÏ. Äàæå cInitDac íå ìåíÿåò òîê â ïàóçå CAN. */ + /* Удерживаем ЦАП. Даже cInitDac не меняет ток в паузе CAN. */ + /* Проверяет else if ((!load_init_count или cInitDac) и !load_stop_asserted); последующий оператор выполняется только при истинном условии. */ } else if ((!load_init_count || cInitDac) && !load_stop_asserted) { + /* Записывает load_init_count значением 1; cInitDac = 0; load init число. */ Init_DAC(); load_init_count = 1; cInitDac = 0; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ } else { + /* Вызывает anal_output с аргументами ((int)sinus, time_dac, в текущей последовательности операций. */ anal_output((int)sinus, time_dac, + /* Продолжает список аргументов, полей или выражение !start && !load_stop_asserted);; порядок элементов сохраняется. */ !start && !load_stop_asserted); /* A manual calibration frame is not a confirmed 4 mA reload. * START must wait for a forced baseline frame after it. */ + /* Проверяет if (!active) load_zero_sent = !(!start и !load_stop_asserted и cCalibrDac); последующий оператор выполняется только при истинном условии. */ if (!active) load_zero_sent = !(!start && !load_stop_asserted && cCalibrDac); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - /* Äèàãíîñòèêà äîñòóïíà îáû÷íûì Modbus/CAN, íåçàâèñèìî îò ëîããåðà: - * áèò 0 — îøèáêà ïÿòè ïóñêîâ; áèò 1 — íåò ñâåæåãî íàïðÿæåíèÿ; - * áèò 2 — ñáðîñ ïåðåä ïîâòîðîì; áèò 3 — ðàáîòà ðàìïû. - * Îøèáêà óäåðæèâàåòñÿ ñî STOP, ïîêà îïåðàòîð íå ñíèìåò START. */ + /* Диагностика доступна обычным Modbus/CAN, независимо от логгера: + * бит 0 — ошибка пяти пусков; бит 1 — нет свежего напряжения; + * бит 2 — сброс перед повтором; бит 3 — работа рампы. + * Ошибка удерживается со STOP, пока оператор не снимет START. */ + /* Записывает LOAD_STATUS значением (load_state == LOAD_FAULT ? 1U : 0U) |; слово состояния защиты нагрузки для чтения, регистр 0x7C. */ LOAD_STATUS = (load_state == LOAD_FAULT ? 1U : 0U) | + /* Продолжает список аргументов, полей или выражение (!fresh ? 2U : 0U) |; порядок элементов сохраняется. */ (!fresh ? 2U : 0U) | + /* Продолжает список аргументов, полей или выражение (load_state == LOAD_RELOAD ? 4U : 0U) |; порядок элементов сохраняется. */ (load_state == LOAD_RELOAD ? 4U : 0U) | + /* Продолжает список аргументов, полей или выражение (load_state == LOAD_RUN ? 8U : 0U) |; порядок элементов сохраняется. */ (load_state == LOAD_RUN ? 8U : 0U) | + /* Продолжает список аргументов, полей или выражение (load_simulation << 4);; порядок элементов сохраняется. */ (load_simulation << 4); + /* Записывает LOAD_ATTEMPTS значением load_attempts; число попыток пуска для чтения, регистр 0x7D. */ LOAD_ATTEMPTS = load_attempts; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } /* Local versioned block, shared by RTU and service CAN. Probe its signature @@ -313,29 +532,55 @@ void Load_runner(void) * Simulation is RAM-only, zeroed at boot, and never copied into EEPROM. * bit 0 ignores ZPT reception (age reaches the configured timeout); * bit 1 substitutes 0 V only for protection, leaving real logged CAN intact. */ +/* Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */ unsigned int Load_protection_prepare(unsigned int function, unsigned int address, + /* Объявляет value — данные value; out — данные out. Хранит указатель на данные. */ unsigned int value, unsigned int *out, unsigned int *error) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved. Начальное значение задаётся справа от знака равенства. */ unsigned int saved = __disable_interrupts(); + /* Записывает error значением 2; ошибка. */ *error = 2; + /* Проверяет if (Desk == dsk_LOAD и address == 0x1300U и function == 3 и value == 8); последующий оператор выполняется только при истинном условии. */ if (Desk == dsk_LOAD && address == 0x1300U && function == 3 && value == 8) { + /* Записывает out[0] значением 0x5550U; out[1] = 1; данные out. */ out[0] = 0x5550U; out[1] = 1; + /* Записывает out[2] значением load_simulation; out[3] = (unsigned int)LOAD_CAN_TIMEOUT; данные out. */ out[2] = load_simulation; out[3] = (unsigned int)LOAD_CAN_TIMEOUT; + /* Записывает out[4] значением (unsigned int)LOAD_STATUS; out[5] = load_attempts; данные out. */ out[4] = (unsigned int)LOAD_STATUS; out[5] = load_attempts; + /* Записывает out[6] значением load_voltage; out[7] = load_voltage_seen ? load_voltage_age : 65535U; данные out. */ out[6] = load_voltage; out[7] = load_voltage_seen ? load_voltage_age : 65535U; + /* Записывает error значением 0; ошибка. */ *error = 0; + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); + /* Завершает Load_protection_prepare и возвращает 8. */ return 8; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (Desk == dsk_LOAD и function == 6); последующий оператор выполняется только при истинном условии. */ if (Desk == dsk_LOAD && function == 6) { + /* Проверяет if (address == 0x1302U и value <= 3U); последующий оператор выполняется только при истинном условии. */ if (address == 0x1302U && value <= 3U) { + /* Записывает load_simulation значением value; данные load_simulation. */ load_simulation = value; + /* Записывает error значением 0; ошибка. */ *error = 0; + /* Проверяет else if (address == 0x1303U и value >= 1U и value <= 60000U); последующий оператор выполняется только при истинном условии. */ } else if (address == 0x1303U && value >= 1U && value <= 60000U) { + /* Записывает LOAD_CAN_TIMEOUT значением value; *error = 0; сохраняемый тайм-аут свежести напряжения CAN в миллисекундах, регистр 0x52. */ LOAD_CAN_TIMEOUT = value; *error = 0; + /* Проверяет else if (address == 0x1302U или address == 0x1303U) *error = 3; последующий оператор выполняется только при истинном условии. */ } else if (address == 0x1302U || address == 0x1303U) *error = 3; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает out[0] значением address; out[1] = value; данные out. */ out[0] = address; out[1] = value; + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); + /* Завершает Load_protection_prepare и возвращает 2. */ return 2; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/Include/ADC.h b/Source/Internal/Include/ADC.h index ff176ab..581bf2e 100644 --- a/Source/Internal/Include/ADC.h +++ b/Source/Internal/Include/ADC.h @@ -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; diff --git a/Source/Internal/Include/DAC.h b/Source/Internal/Include/DAC.h index 8139737..ea35170 100644 --- a/Source/Internal/Include/DAC.h +++ b/Source/Internal/Include/DAC.h @@ -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); diff --git a/Source/Internal/Include/GPIO_table.h b/Source/Internal/Include/GPIO_table.h index 1c8079b..f459cfb 100644 --- a/Source/Internal/Include/GPIO_table.h +++ b/Source/Internal/Include/GPIO_table.h @@ -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. diff --git a/Source/Internal/Include/RS485.h b/Source/Internal/Include/RS485.h index 89bb137..883fcb8 100644 --- a/Source/Internal/Include/RS485.h +++ b/Source/Internal/Include/RS485.h @@ -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 */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ diff --git a/Source/Internal/Include/bios_dsp.h b/Source/Internal/Include/bios_dsp.h index 20b5ccb..c3e4107 100644 --- a/Source/Internal/Include/bios_dsp.h +++ b/Source/Internal/Include/bios_dsp.h @@ -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 */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ diff --git a/Source/Internal/Include/caliber.h b/Source/Internal/Include/caliber.h index dcaf6af..2f8d754 100644 --- a/Source/Internal/Include/caliber.h +++ b/Source/Internal/Include/caliber.h @@ -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 //--------------------------------------------------------------------- */ diff --git a/Source/Internal/Include/cntrl_adr.h b/Source/Internal/Include/cntrl_adr.h index 2a8567c..8a87b76 100644 --- a/Source/Internal/Include/cntrl_adr.h +++ b/Source/Internal/Include/cntrl_adr.h @@ -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 */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ diff --git a/Source/Internal/Include/crc16.h b/Source/Internal/Include/crc16.h index a1787cc..6282199 100644 --- a/Source/Internal/Include/crc16.h +++ b/Source/Internal/Include/crc16.h @@ -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 ); diff --git a/Source/Internal/Include/ecan.h b/Source/Internal/Include/ecan.h index 36cf526..aed1b83 100644 --- a/Source/Internal/Include/ecan.h +++ b/Source/Internal/Include/ecan.h @@ -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); diff --git a/Source/Internal/Include/eeprom_config.h b/Source/Internal/Include/eeprom_config.h index f3c3eaa..f44f213 100644 --- a/Source/Internal/Include/eeprom_config.h +++ b/Source/Internal/Include/eeprom_config.h @@ -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 diff --git a/Source/Internal/Include/filter_bat2.h b/Source/Internal/Include/filter_bat2.h index a002e9b..aa9d9dd 100644 --- a/Source/Internal/Include/filter_bat2.h +++ b/Source/Internal/Include/filter_bat2.h @@ -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 */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ diff --git a/Source/Internal/Include/gas167.h b/Source/Internal/Include/gas167.h index 444a5f2..392dd8e 100644 --- a/Source/Internal/Include/gas167.h +++ b/Source/Internal/Include/gas167.h @@ -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. */ #include -/* 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 diff --git a/Source/Internal/Include/kanal.h b/Source/Internal/Include/kanal.h index fce5473..ef7b690 100644 --- a/Source/Internal/Include/kanal.h +++ b/Source/Internal/Include/kanal.h @@ -1 +1,3 @@ +/* Последовательный вывод данных канала индикации. Русские пояснения сохранены в UTF-8. */ +/* Объявляет интерфейс функции kanal_Send; реализация вызывается через этот прототип. */ void kanal_Send(int adr, long dat, int dot); diff --git a/Source/Internal/Include/log_to_mem.h b/Source/Internal/Include/log_to_mem.h index 383ff49..8afd526 100644 --- a/Source/Internal/Include/log_to_mem.h +++ b/Source/Internal/Include/log_to_mem.h @@ -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 */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ diff --git a/Source/Internal/Include/measure.h b/Source/Internal/Include/measure.h index 30a8b79..229b9fc 100644 --- a/Source/Internal/Include/measure.h +++ b/Source/Internal/Include/measure.h @@ -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 diff --git a/Source/Internal/Include/message.h b/Source/Internal/Include/message.h index 350e495..3a16c27 100644 --- a/Source/Internal/Include/message.h +++ b/Source/Internal/Include/message.h @@ -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 diff --git a/Source/Internal/Include/package.h b/Source/Internal/Include/package.h index e90cf33..01ec6f3 100644 --- a/Source/Internal/Include/package.h +++ b/Source/Internal/Include/package.h @@ -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 diff --git a/Source/Internal/Include/peripher.h b/Source/Internal/Include/peripher.h index 3d1eecf..a5baef7 100644 --- a/Source/Internal/Include/peripher.h +++ b/Source/Internal/Include/peripher.h @@ -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); diff --git a/Source/Internal/Include/pulto.h b/Source/Internal/Include/pulto.h index fb41363..26c94b9 100644 --- a/Source/Internal/Include/pulto.h +++ b/Source/Internal/Include/pulto.h @@ -1,3 +1,5 @@ +/* Обмен и индикация пульта. Русские пояснения сохранены в UTF-8. */ //void what_is(void); +/* Обслуживает периодический обмен и индикацию пульта вместо измерительной платы. */ interrupt void cpu_timer1_isr_PULT(void); diff --git a/Source/Internal/Include/spise2p.h b/Source/Internal/Include/spise2p.h index c94bba8..07c3380 100644 --- a/Source/Internal/Include/spise2p.h +++ b/Source/Internal/Include/spise2p.h @@ -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 - + diff --git a/Source/Internal/Include/tools.h b/Source/Internal/Include/tools.h index 27df89b..4a882b5 100644 --- a/Source/Internal/Include/tools.h +++ b/Source/Internal/Include/tools.h @@ -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 diff --git a/Source/Internal/Include/ump_can_protocol.h b/Source/Internal/Include/ump_can_protocol.h index ef2aaf6..6ef6122 100644 --- a/Source/Internal/Include/ump_can_protocol.h +++ b/Source/Internal/Include/ump_can_protocol.h @@ -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 diff --git a/Source/Internal/RS485.c b/Source/Internal/RS485.c index 17686b7..58944c3 100644 --- a/Source/Internal/RS485.c +++ b/Source/Internal/RS485.c @@ -1,554 +1,929 @@ +/* Приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. Русские пояснения сохранены в UTF-8. */ //#include "big_dsp_module.h" +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" +/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */ #include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "bios_dsp.h": коды и объявления команд последовательного загрузчика. */ #include "bios_dsp.h" +/* Подключает "cntrl_adr.h": собственный и универсальный адрес устройства. */ #include "cntrl_adr.h" +/* Подключает "tools.h": настройка внешней памяти и служебные задержки. */ #include "tools.h" //#include "flash_tools.h" +/* Объявляет rs_a — данные rs_a; rs_b — данные rs_b. */ RS_DATA rs_a,rs_b; +/* Объявляет RS_Len — таблица ожидаемых длин команд последовательного протокола. Начальное значение задаётся справа от знака равенства. */ unsigned int RS_Len[70]={0}; -static char size_cmd15=1; +/* Объявляет size_cmd15 — размер cmd 15. Начальное значение задаётся справа от знака равенства. */ +static char size_cmd15=1; +/* Разбирает приём SCI; для COM_1 читает FIFO и проверяет ошибки, для COM_2 сохраняет штатный обмен RS485. */ void RS_RX_Handler(RS_DATA *rs_arr); +/* Продвигает передачу текущего пакета SCI по состоянию UART и счётчику оставшихся данных. */ void RS_TX_Handler(RS_DATA *rs_arr); +/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */ #if RS232_USE_FIFO +/* Запускает передачу через FIFO COM_1 после проверки буфера и состояния текущего обмена. */ static int RS_FifoStart(RS_DATA *, unsigned int *, unsigned long, int); +/* Заполняет TX FIFO доступными байтами, сохраняя длину и положение в передаваемом пакете. */ static void RS_FifoTx(RS_DATA *); +/* Прерывает ошибочный приём FIFO, очищает аппаратное состояние и включает защитную паузу. */ static void RS_FifoAbort(RS_DATA *); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif -/** Îáðàáîò÷èê ïðåðûâàíèé UART - ïðèíàòî */ +/** Обработчик прерываний UART - принато */ +/* Объявляет обработчик RSA_RX_Handler; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void RSA_RX_Handler(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority - PieCtrlRegs.PIEIER9.all &= MG91; // Set "group" priority - PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG91; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEIER9.all &= MG91; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; + /* Сбрасывает аппаратный сигнал через clear_timer_rs_live(&rs_a);. */ clear_timer_rs_live(&rs_a); + /* Вызывает RS_RX_Handler. Разбирает приём SCI; для COM_1 читает FIFO и проверяет ошибки, для COM_2 сохраняет штатный обмен RS485. */ RS_RX_Handler(&rs_a); // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик RSB_RX_Handler; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void RSB_RX_Handler(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority - PieCtrlRegs.PIEIER9.all &= MG93; // Set "group" priority - PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG93; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEIER9.all &= MG93; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; + /* Сбрасывает аппаратный сигнал через clear_timer_rs_live(&rs_b);. */ clear_timer_rs_live(&rs_b); + /* Вызывает RS_RX_Handler. Разбирает приём SCI; для COM_1 читает FIFO и проверяет ошибки, для COM_2 сохраняет штатный обмен RS485. */ RS_RX_Handler(&rs_b); - + // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик RSA_TX_Handler; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void RSA_TX_Handler(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority - PieCtrlRegs.PIEIER9.all &= MG92; // Set "group" priority - PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG92; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEIER9.all &= MG92; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; + /* Сбрасывает аппаратный сигнал через clear_timer_rs_live(&rs_a);. */ clear_timer_rs_live(&rs_a); + /* Вызывает RS_TX_Handler. Продвигает передачу текущего пакета SCI по состоянию UART и счётчику оставшихся данных. */ RS_TX_Handler(&rs_a); // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Объявляет обработчик RSB_TX_Handler; обслуживает источник прерывания и его аппаратные флаги. */ interrupt void RSB_TX_Handler(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority - PieCtrlRegs.PIEIER9.all &= MG94; // Set "group" priority - PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG94; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEIER9.all &= MG94; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ + PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; + /* Сбрасывает аппаратный сигнал через clear_timer_rs_live(&rs_b);. */ clear_timer_rs_live(&rs_b); + /* Вызывает RS_TX_Handler. Продвигает передачу текущего пакета SCI по состоянию UART и счётчику оставшихся данных. */ RS_TX_Handler(&rs_b); // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Îáðàáîò÷èê ïðåðûâàíèé UART - ïðèíàòî */ +/** Обработчик прерываний UART - принато */ +/* Разбирает приём SCI; для COM_1 читает FIFO и проверяет ошибки, для COM_2 сохраняет штатный обмен RS485. */ void RS_RX_Handler(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Rc — данные Rc. */ char Rc; + /* Объявляет RS_BytePtr — данные RS_BytePtr. */ char RS_BytePtr; // led1_on(); - for(;;) // 'goto' ýòî íå îïåðàòîð àçûêà Ñ - { + /* Цикл for(;;); задаёт начальное значение, условие продолжения и шаг перебора. */ + for(;;) // 'goto' это не оператор азыка С + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { +/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */ #if RS232_USE_FIFO + /* Проверяет if (rs_arr->commnumber == COM_1); последующий оператор выполняется только при истинном условии. */ if (rs_arr->commnumber == COM_1) { + /* Объявляет received — данные received. */ unsigned int received; + /* Проверяет if (rs_arr->SciRegs->SCIFFRX.bit.RXFFOVF или rs_arr->SciRegs->SCIRXST.bit.RXERROR); последующий оператор выполняется только при истинном условии. */ if (rs_arr->SciRegs->SCIFFRX.bit.RXFFOVF || rs_arr->SciRegs->SCIRXST.bit.RXERROR) { + /* Вызывает RS_FifoAbort. Прерывает ошибочный приём FIFO, очищает аппаратное состояние и включает защитную паузу. */ RS_FifoAbort(rs_arr); return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (!rs_arr->SciRegs->SCIFFRX.bit.RXFFST); последующий оператор выполняется только при истинном условии. */ if (!rs_arr->SciRegs->SCIFFRX.bit.RXFFST) { + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR значением 1; данные RXFFINTCLR. */ rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR=1; + /* Устанавливает биты PieCtrlRegs.PIEACK.bit.ACK9 значением 1; данные ACK9. */ PieCtrlRegs.PIEACK.bit.ACK9 |= 1; + /* Завершает RS_RX_Handler без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - received=rs_arr->SciRegs->SCIRXBUF.all; /* one pop, data + FE/PE */ + received=rs_arr->SciRegs->SCIRXBUF.all; /* one pop, data + FE/PE */ /* Записывает received значением rs_arr->SciRegs->SCIRXBUF.all; данные received. */ + /* Проверяет if (received & 0xC000U); последующий оператор выполняется только при истинном условии. */ if (received & 0xC000U) { RS_FifoAbort(rs_arr); return; } + /* Проверяет if (rs_arr->fifo_rx_guard); последующий оператор выполняется только при истинном условии. */ if (rs_arr->fifo_rx_guard) { rs_arr->fifo_rx_guard=4; continue; } + /* Записывает Rc значением received & 255U; данные Rc. */ Rc=received & 255U; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ } else +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(!rs_arr->SciRegs->SCIRXST.bit.RXRDY); последующий оператор выполняется только при истинном условии. */ if(!rs_arr->SciRegs->SCIRXST.bit.RXRDY) // Receiver ready flag + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Устанавливает биты PieCtrlRegs.PIEACK.bit.ACK9 значением 1; данные ACK9. */ PieCtrlRegs.PIEACK.bit.ACK9 |= 1; + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR значением 1; данные RXFFINTCLR. */ rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR=1; // Clear INT flag - return; // êñòàòè ýòî åäèíñòâåííûé âûõîä èç ïðåðûâàíèà + /* Завершает RS_RX_Handler без возвращаемого значения. */ + return; // кстати это единственный выход из прерываниа + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - Rc = rs_arr->SciRegs->SCIRXBUF.bit.RXDT; // ×èòàåì ñèìâîë â ëþáîì ñëó÷àå + /* Записывает Rc значением rs_arr->SciRegs->SCIRXBUF.bit.RXDT; данные Rc. */ + Rc = rs_arr->SciRegs->SCIRXBUF.bit.RXDT; // Читаем символ в любом случае + /* Проверяет if(rs_arr->SciRegs->SCIRXST.bit.RXERROR); последующий оператор выполняется только при истинном условии. */ if(rs_arr->SciRegs->SCIRXST.bit.RXERROR) // Receiver error flag + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает rs_arr->SciRegs->SCICTL1.bit.SWRESET значением 0; данные SWRESET. */ rs_arr->SciRegs->SCICTL1.bit.SWRESET=0; // Reset SCI + /* Записывает rs_arr->SciRegs->SCICTL1.bit.SWRESET значением 1; данные SWRESET. */ rs_arr->SciRegs->SCICTL1.bit.SWRESET=1; // Relinquish SCI from Reset + /* Переходит к следующей итерации ближайшего цикла. */ continue; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - if(rs_arr->RS_DataReady) continue; // Íå çàáðàëè äàííûå + /* Проверяет if(rs_arr->RS_DataReady) continue; последующий оператор выполняется только при истинном условии. */ + if(rs_arr->RS_DataReady) continue; // Не забрали данные - if (rs_arr->RS_Flag9bit==1) // äëà RS485???????? + /* Проверяет if (rs_arr->RS_Flag9bit==1); последующий оператор выполняется только при истинном условии. */ + if (rs_arr->RS_Flag9bit==1) // дла RS485???????? + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - // Èíèöèàëèçèðóåì ïåðåìåííûå è ôëàãè - rs_arr->RS_FlagBegin = true; // Æäåì çàãîëîâîê + // Инициализируем переменные и флаги + /* Записывает rs_arr->RS_FlagBegin значением true; rs arr RS флаг Begin. */ + rs_arr->RS_FlagBegin = true; // Ждем заголовок + /* Записывает rs_arr->RS_RecvLen значением 0; данные rs_arr->RS_RecvLen. */ rs_arr->RS_RecvLen = 0; + /* Записывает rs_arr->RS_FlagSkiping значением false; rs arr RS флаг Skiping. */ rs_arr->RS_FlagSkiping = false; + /* Записывает rs_arr->RS_HeaderCnt значением 0; данные rs_arr->RS_HeaderCnt. */ rs_arr->RS_HeaderCnt = 0; - rs_arr->RS_Cmd = 0; + /* Записывает rs_arr->RS_Cmd значением 0; данные rs_arr->RS_Cmd. */ + rs_arr->RS_Cmd = 0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - - if(rs_arr->RS_FlagSkiping) continue; // Íå íàì - - if (rs_arr->RS_FlagBegin) // Çàãîëîâîê + + /* Проверяет if(rs_arr->RS_FlagSkiping) continue; последующий оператор выполняется только при истинном условии. */ + if(rs_arr->RS_FlagSkiping) continue; // Не нам + + /* Проверяет if (rs_arr->RS_FlagBegin); последующий оператор выполняется только при истинном условии. */ + if (rs_arr->RS_FlagBegin) // Заголовок + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - if (rs_arr->RS_HeaderCnt==0) // Àäðåñ êîíòðîëëåðà èëè ñòàíäàðòíàà êîìàíäà - { - if( (Rc == CNTRL_ADDR_UNIVERSAL) || (Rc == CNTRL_ADDR && CNTRL_ADDR!=0) || ((Rc == rs_arr->addr_answer) && rs_arr->flag_LEADING) + /* Проверяет if (rs_arr->RS_HeaderCnt==0); последующий оператор выполняется только при истинном условии. */ + if (rs_arr->RS_HeaderCnt==0) // Адрес контроллера или стандартнаа команда + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Проверяет if( (Rc == CNTRL_ADDR_UNIVERSAL) или (Rc == CNTRL_ADDR и CNTRL_ADDR!=0) или ((Rc == rs_arr->addr_answer) и rs_arr->flag_LEADING); последующий оператор выполняется только при истинном условии. */ + if( (Rc == CNTRL_ADDR_UNIVERSAL) || (Rc == CNTRL_ADDR && CNTRL_ADDR!=0) || ((Rc == rs_arr->addr_answer) && rs_arr->flag_LEADING) + /* Продолжает список аргументов, полей или выражение || ((Rc == ADDR_FOR_ALL && ADDR_FOR_ALL!=0) && !rs_arr->flag_LEADING)); порядок элементов сохраняется. */ || ((Rc == ADDR_FOR_ALL && ADDR_FOR_ALL!=0) && !rs_arr->flag_LEADING)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - rs_arr->addr_recive=Rc; // çàïîìíèëè àäðåñ ïî êîòîðîìó íàñ çàïðîñèëè - rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // Ïåðâûé áàéò - RS_SetBitMode(rs_arr,8); // ïåðåñòðîèëèñü â 8-áèò ðåæèì + /* Записывает rs_arr->addr_recive значением Rc; данные rs_arr->addr_recive. */ + rs_arr->addr_recive=Rc; // запомнили адрес по которому нас запросили + /* Записывает rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] значением Rc; данные rs_arr->RS_Header. */ + rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // Первый байт + /* Вызывает RS_SetBitMode с аргументами (rs_arr,8) в текущей последовательности операций. */ + RS_SetBitMode(rs_arr,8); // перестроились в 8-бит режим + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - else + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - rs_arr->RS_FlagSkiping = true; // Íå íàøåìó êîíòðîëëåðó - rs_arr->RS_FlagBegin = false; // îñòàëèñü â 9-áèò ðåæèìå + /* Записывает rs_arr->RS_FlagSkiping значением true; rs arr RS флаг Skiping. */ + rs_arr->RS_FlagSkiping = true; // Не нашему контроллеру + /* Записывает rs_arr->RS_FlagBegin значением false; rs arr RS флаг Begin. */ + rs_arr->RS_FlagBegin = false; // остались в 9-бит режиме // led1_off(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - else - { - rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // Âòîðîé áàéò è ò.ä. + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Записывает rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] значением Rc; данные rs_arr->RS_Header. */ + rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // Второй байт и т.д. + /* Проверяет if (rs_arr->RS_HeaderCnt == 7 и rs_arr->RS_Cmd==CMD_MODBUS_16 и !rs_arr->flag_LEADING); последующий оператор выполняется только при истинном условии. */ if (rs_arr->RS_HeaderCnt == 7 && rs_arr->RS_Cmd==CMD_MODBUS_16 && !rs_arr->flag_LEADING) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает RS_Len[CMD_MODBUS_16] значением (10+Rc); таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_MODBUS_16] = (10+Rc); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (rs_arr->RS_HeaderCnt == 3); последующий оператор выполняется только при истинном условии. */ if (rs_arr->RS_HeaderCnt == 3) + /* Проверяет if (rs_arr->RS_Cmd == ANS_MODBUS_4); последующий оператор выполняется только при истинном условии. */ if (rs_arr->RS_Cmd == ANS_MODBUS_4) - { + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Записывает RS_Len[rs_arr->RS_Cmd] значением Rc + 5; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[rs_arr->RS_Cmd] = Rc + 5; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - // åñëè âòîðîé áàéò - ýòî êîìàíäà + // если второй байт - это команда + /* Проверяет if (rs_arr->RS_HeaderCnt == 2); последующий оператор выполняется только при истинном условии. */ if (rs_arr->RS_HeaderCnt == 2) - { + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Записывает rs_arr->RS_Cmd значением Rc; данные rs_arr->RS_Cmd. */ rs_arr->RS_Cmd = Rc; - // Ïðîâåðêà äëèíû ïîñûëêè - // CMD_LOAD - ìëàäøàà íà äàííûé ìîìåíò - // CMD_STD_ANS - ñòàðøàà íà äàííûé ìîìåíò + // Проверка длины посылки + // CMD_LOAD - младшаа на данный момент + // CMD_STD_ANS - старшаа на данный момент + /* Проверяет if ((rs_arr->RS_Cmd < CMD_MODBUS_3) или (rs_arr->RS_Cmd > CMD_STD_ANS) или (RS_Len[rs_arr->RS_Cmd]<3); последующий оператор выполняется только при истинном условии. */ if ((rs_arr->RS_Cmd < CMD_MODBUS_3) || (rs_arr->RS_Cmd > CMD_STD_ANS) || (RS_Len[rs_arr->RS_Cmd]<3) + /* Продолжает список аргументов, полей или выражение || ((rs_arr->RS_Cmd == CMD_LOAD)&&(rs_arr->RS_PrevCmd != CMD_INITLOAD)); порядок элементов сохраняется. */ || ((rs_arr->RS_Cmd == CMD_LOAD)&&(rs_arr->RS_PrevCmd != CMD_INITLOAD)) + /* Продолжает список аргументов, полей или выражение ); порядок элементов сохраняется. */ ) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - RS_SetBitMode(rs_arr,9); // Ïîëó÷èëè âñå ïåðåñòðîèëèñü â 9-áèò äëà RS485? - rs_arr->RS_HeaderCnt = 0; // Ïîòîìó ÷òî êîìàíäà íå òà + /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ + RS_SetBitMode(rs_arr,9); // Получили все перестроились в 9-бит дла RS485? + /* Записывает rs_arr->RS_HeaderCnt значением 0; данные rs_arr->RS_HeaderCnt. */ + rs_arr->RS_HeaderCnt = 0; // Потому что команда не та + /* Записывает rs_arr->RS_FlagBegin значением true; rs arr RS флаг Begin. */ rs_arr->RS_FlagBegin = true; + /* Записывает rs_arr->RS_FlagSkiping значением false; rs arr RS флаг Skiping. */ rs_arr->RS_FlagSkiping = false; - rs_arr->RS_Cmd=0; + /* Записывает rs_arr->RS_Cmd значением 0; данные rs_arr->RS_Cmd. */ + rs_arr->RS_Cmd=0; // led1_off(); - continue; + /* Переходит к следующей итерации ближайшего цикла. */ + continue; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - if (rs_arr->RS_Cmd == CMD_LOAD) // Äëà ýòîé êîìàíäû çàãîëîâîê î÷åíü êîðîòêèé - rs_arr->RS_FlagBegin = false;// äàëüøå èäóò äàííûå + /* Проверяет if (rs_arr->RS_Cmd == CMD_LOAD); последующий оператор выполняется только при истинном условии. */ + if (rs_arr->RS_Cmd == CMD_LOAD) // Дла этой команды заголовок очень короткий + /* Записывает rs_arr->RS_FlagBegin значением false; rs arr RS флаг Begin. */ + rs_arr->RS_FlagBegin = false;// дальше идут данные + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if( (rs_arr->RS_HeaderCnt >= RS_Len[rs_arr->RS_Cmd]) или; последующий оператор выполняется только при истинном условии. */ if( (rs_arr->RS_HeaderCnt >= RS_Len[rs_arr->RS_Cmd]) || + /* Продолжает список аргументов, полей или выражение (rs_arr->RS_HeaderCnt >= sizeof(rs_arr->RS_Header))); порядок элементов сохраняется. */ (rs_arr->RS_HeaderCnt >= sizeof(rs_arr->RS_Header))) - { // Ïîëó÷èëè çàãîëîâîê - RS_SetBitMode(rs_arr,9); // Ïîëó÷èëè âñå ïåðåñòðîèëèñü â 9-áèò äëà RS485? + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { // Получили заголовок + /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ + RS_SetBitMode(rs_arr,9); // Получили все перестроились в 9-бит дла RS485? + /* Записывает rs_arr->RS_FlagBegin значением false; rs arr RS флаг Begin. */ rs_arr->RS_FlagBegin = false; + /* Записывает rs_arr->RS_FlagSkiping значением true; rs arr RS флаг Skiping. */ rs_arr->RS_FlagSkiping = true; + /* Записывает rs_arr->RS_DataReady значением true; rs arr RS данные Ready. */ rs_arr->RS_DataReady = true; + /* Записывает rs_arr->RS_Cmd значением 0; данные rs_arr->RS_Cmd. */ rs_arr->RS_Cmd=0; // led1_off(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } } - else // Ïîòîê äàííûõ - { + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else // Поток данных + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Проверяет if(rs_arr->pRS_RecvPtr<(unsigned int *)Rec_Bloc_Begin или rs_arr->pRS_RecvPtr>(unsigned int *)Rec_Bloc_End); последующий оператор выполняется только при истинном условии. */ if(rs_arr->pRS_RecvPtr<(unsigned int *)Rec_Bloc_Begin || rs_arr->pRS_RecvPtr>(unsigned int *)Rec_Bloc_End) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - rs_arr->pRS_RecvPtr = (unsigned int *)Rec_Bloc_Begin; // Íà ïðîãðàììó íàäåéñà, à ñàì íå ïëîøàé - rs_arr->pRecvPtr = (unsigned int *)Rec_Bloc_Begin; // Íà ïðîãðàììó íàäåéñà, à ñàì íå ïëîøàé - } - if(rs_arr->RS_PrevCmd != CMD_INITLOAD) continue; // Ìû çäåñü îêàçàëèñü ïî êàêîé-òî ÷óäîâèùíîé îøèáêå - - if(rs_arr->RS_DataReady) // Åñëè äàííûå â îñíîâíîì öèêëå íå çàáðàíû, - { // òî ïðîïóñêàåì ñëåäóþùóþ ïîñûëêó - rs_arr->RS_FlagSkiping = true; // Èãíîðèðóåì äî ñëåäóþùåãî çàãîëîâêà -// led1_off(); - continue; + /* Записывает rs_arr->pRS_RecvPtr значением (unsigned int *)Rec_Bloc_Begin; данные rs_arr->pRS_RecvPtr. */ + rs_arr->pRS_RecvPtr = (unsigned int *)Rec_Bloc_Begin; // На программу надейса, а сам не плошай + /* Записывает rs_arr->pRecvPtr значением (unsigned int *)Rec_Bloc_Begin; данные rs_arr->pRecvPtr. */ + rs_arr->pRecvPtr = (unsigned int *)Rec_Bloc_Begin; // На программу надейса, а сам не плошай + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(rs_arr->RS_PrevCmd != CMD_INITLOAD) continue; последующий оператор выполняется только при истинном условии. */ + if(rs_arr->RS_PrevCmd != CMD_INITLOAD) continue; // Мы здесь оказались по какой-то чудовищной ошибке + + /* Проверяет if(rs_arr->RS_DataReady); последующий оператор выполняется только при истинном условии. */ + if(rs_arr->RS_DataReady) // Если данные в основном цикле не забраны, + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { // то пропускаем следующую посылку + /* Записывает rs_arr->RS_FlagSkiping значением true; rs arr RS флаг Skiping. */ + rs_arr->RS_FlagSkiping = true; // Игнорируем до следующего заголовка +// led1_off(); + /* Переходит к следующей итерации ближайшего цикла. */ + continue; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Записывает RS_BytePtr значением rs_arr->RS_RecvLen++ % 2; данные RS_BytePtr. */ RS_BytePtr = rs_arr->RS_RecvLen++ % 2; - if(RS_BytePtr) *rs_arr->pRS_RecvPtr++ |= Rc; // Ïîëó÷èëè ñëîâî + /* Проверяет if(RS_BytePtr) *rs_arr->pRS_RecvPtr++ |= Rc; последующий оператор выполняется только при истинном условии. */ + if(RS_BytePtr) *rs_arr->pRS_RecvPtr++ |= Rc; // Получили слово + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else *rs_arr->pRS_RecvPtr = Rc<<8; - if(rs_arr->RS_Length <= rs_arr->RS_RecvLen) // Êîíåö ïîñûëêè + /* Проверяет if(rs_arr->RS_Length <= rs_arr->RS_RecvLen); последующий оператор выполняется только при истинном условии. */ + if(rs_arr->RS_Length <= rs_arr->RS_RecvLen) // Конец посылки + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает rs_arr->RS_PrevCmd значением rs_arr->RS_Header[1] = CMD_LOAD; данные rs_arr->RS_PrevCmd. */ rs_arr->RS_PrevCmd = rs_arr->RS_Header[1] = CMD_LOAD; - RS_SetBitMode(rs_arr,9); // Ïîëó÷èëè âñå äàííûå ïåðåñòðîèëèñü â 9-áèò äëà RS485? - rs_arr->RS_FlagSkiping = true; // Èãíîðèðóåì äî ñëåäóþùåãî çàãîëîâêà - rs_arr->RS_DataReady = true; // Ôëàã â îñíîâíîé öèêë - äàííûå ïîëó÷åíû + /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ + RS_SetBitMode(rs_arr,9); // Получили все данные перестроились в 9-бит дла RS485? + /* Записывает rs_arr->RS_FlagSkiping значением true; rs arr RS флаг Skiping. */ + rs_arr->RS_FlagSkiping = true; // Игнорируем до следующего заголовка + /* Записывает rs_arr->RS_DataReady значением true; rs arr RS данные Ready. */ + rs_arr->RS_DataReady = true; // Флаг в основной цикл - данные получены // led1_off(); -} } } } +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} } } } -/** Îáðàáîò÷èê ïðåðûâàíèé UART - ïîñëàíî */ +/** Обработчик прерываний UART - послано */ +/* Продвигает передачу текущего пакета SCI по состоянию UART и счётчику оставшихся данных. */ void RS_TX_Handler(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */ #if RS232_USE_FIFO + /* Проверяет if (rs_arr->commnumber == COM_1); последующий оператор выполняется только при истинном условии. */ if (rs_arr->commnumber == COM_1) { RS_FifoTx(rs_arr); return; } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Объявляет RS_BytePtr — данные RS_BytePtr. */ char RS_BytePtr; // unsigned int i; + /* Проверяет if(rs_arr->RS_SendBlockMode == BM_CHAR32); последующий оператор выполняется только при истинном условии. */ if(rs_arr->RS_SendBlockMode == BM_CHAR32) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(++rs_arr->RS_SendLen >= rs_arr->RS_SLength); последующий оператор выполняется только при истинном условии. */ if(++rs_arr->RS_SendLen >= rs_arr->RS_SLength) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - enableUARTInt(rs_arr); /* Çàïðåùàåì ïðåðûâàíèà ïî ïåðåäà÷å */ + enableUARTInt(rs_arr); /* Запрещаем прерываниа по передаче */ /* Вызывает enableUARTInt с аргументами (rs_arr) в текущей последовательности операций. */ + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает SCI_send с аргументами (rs_arr,*(rs_arr->pRS_SendPtr++)) в текущей последовательности операций. */ SCI_send(rs_arr,*(rs_arr->pRS_SendPtr++)); - + + /* Проверяет if(rs_arr->RS_SendLen >= rs_arr->RS_SLength); последующий оператор выполняется только при истинном условии. */ if(rs_arr->RS_SendLen >= rs_arr->RS_SLength) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает RS_Wait4OK с аргументами (rs_arr) в текущей последовательности операций. */ RS_Wait4OK(rs_arr); -// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Ïàóçà äëà PC */ - RS_SetBitMode(rs_arr,9); /* Ïåðåäàëè âñå ïåðåñòðîèëèñü â 9-áèò äëà RS485?*/ - RS_Line_to_receive(rs_arr); /* ðåæèì ïðèåìà RS485 */ - - rs_arr->flag_TIMEOUT_to_Send=false; /* ñáðîñèëè ôëàã îæèäàíèà òàéìàóòà */ +// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Пауза дла PC */ + RS_SetBitMode(rs_arr,9); /* Передали все перестроились в 9-бит дла RS485?*/ /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ + RS_Line_to_receive(rs_arr); /* режим приема RS485 */ /* Вызывает RS_Line_to_receive с аргументами (rs_arr) в текущей последовательности операций. */ + + rs_arr->flag_TIMEOUT_to_Send=false; /* сбросили флаг ожиданиа таймаута */ /* Записывает rs_arr->flag_TIMEOUT_to_Send значением false; rs arr флаг TIMEOUT to Send. */ + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - else /* BM_PACKED */ + else /* BM_PACKED */ /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает RS_BytePtr значением (rs_arr->RS_SendLen++) % 2; данные RS_BytePtr. */ RS_BytePtr = (rs_arr->RS_SendLen++) % 2; + /* Проверяет if(rs_arr->RS_SendLen >= rs_arr->RS_SLength); последующий оператор выполняется только при истинном условии. */ if(rs_arr->RS_SendLen >= rs_arr->RS_SLength) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - enableUARTInt(rs_arr); /* Çàïðåùàåì ïðåðûâàíèà ïî ïåðåäà÷å */ + enableUARTInt(rs_arr); /* Запрещаем прерываниа по передаче */ /* Вызывает enableUARTInt с аргументами (rs_arr) в текущей последовательности операций. */ + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(RS_BytePtr) SCI_send(rs_arr, LOBYTE( *(rs_arr->pRS_SendPtr++) )); последующий оператор выполняется только при истинном условии. */ if(RS_BytePtr) SCI_send(rs_arr, LOBYTE( *(rs_arr->pRS_SendPtr++) )); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else SCI_send(rs_arr, HIBYTE( *rs_arr->pRS_SendPtr )); + /* Проверяет if(rs_arr->RS_SendLen >= rs_arr->RS_SLength); последующий оператор выполняется только при истинном условии. */ if(rs_arr->RS_SendLen >= rs_arr->RS_SLength) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает RS_Wait4OK с аргументами (rs_arr) в текущей последовательности операций. */ RS_Wait4OK(rs_arr); -// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Ïàóçà äëà PC */ -// RS_SetBitMode(rs_arr,9); /* Ïåðåäàëè âñå ïåðåñòðîèëèñü â 9-áèò äëà RS485?*/ -// RS_Line_to_receive(); /* ðåæèì ïðèåìà RS485 */ - - } - } +// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Пауза дла PC */ +// RS_SetBitMode(rs_arr,9); /* Передали все перестроились в 9-бит дла RS485?*/ +// RS_Line_to_receive(); /* режим приема RS485 */ + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + + /* Устанавливает биты PieCtrlRegs.PIEACK.bit.ACK9 значением 1; данные ACK9. */ PieCtrlRegs.PIEACK.bit.ACK9 |= 1; // rs_arr->SciRegs->SCIFFTX.bit.TXINTCLR=1; // Clear INT flag +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Èíèöèàëèçàöèà ìàññèâà äëèí êîìàíä */ +/** Инициализациа массива длин команд */ +/* Начинает функцию setup_arr_cmd_length; назначение модуля — приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ void setup_arr_cmd_length() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i. */ int i; - + + /* Цикл for (i=0;i<70;i++) RS_Len[i]=i;; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i=0;i<70;i++) RS_Len[i]=i; + /* Записывает RS_Len[CMD_LOAD] значением 12; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_LOAD] = 12; + /* Записывает RS_Len[CMD_UPLOAD] значением 12; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_UPLOAD] = 12; + /* Записывает RS_Len[CMD_RUN] значением 8; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_RUN] = 8; + /* Записывает RS_Len[CMD_XFLASH] значением 9; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_XFLASH] = 9; + /* Записывает RS_Len[CMD_TFLASH] значением 16; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_TFLASH] = 16; + /* Записывает RS_Len[CMD_PEEK] значением 8; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_PEEK] = 8; + /* Записывает RS_Len[CMD_POKE] значением 12; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_POKE] = 12; + /* Записывает RS_Len[CMD_INITLOAD] значением 12; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_INITLOAD] = 12; - RS_Len[CMD_INIT] = 5; + /* Записывает RS_Len[CMD_INIT] значением 5; таблица ожидаемых длин команд последовательного протокола. */ + RS_Len[CMD_INIT] = 5; + /* Записывает RS_Len[CMD_VECTOR] значением size_cmd15-2; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_VECTOR] = size_cmd15-2; //sizeof(CMD_TO_TMS)-2; - RS_Len[CMD_STD] = size_cmd15-1; //sizeof(CMD_TO_TMS)-1; + /* Записывает RS_Len[CMD_STD] значением size_cmd15-1; таблица ожидаемых длин команд последовательного протокола. */ + RS_Len[CMD_STD] = size_cmd15-1; //sizeof(CMD_TO_TMS)-1; + /* Записывает RS_Len[CMD_IMPULSE] значением 8; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_IMPULSE] = 8; + /* Записывает RS_Len[CMD_MODBUS_3] значением 8; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_MODBUS_3] = 8; + /* Записывает RS_Len[ANS_MODBUS_4] значением 3+48*2+2; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[ANS_MODBUS_4] = 3+48*2+2; + /* Записывает RS_Len[CMD_MODBUS_6] значением 8; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_MODBUS_6] = 8; + /* Записывает RS_Len[CMD_MODBUS_16] значением 13; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_MODBUS_16] = 13; + /* Записывает RS_Len[CMD_MODBUS_15] значением 27; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_MODBUS_15] = 27; + /* Записывает RS_Len[CMD_EXTEND] значением 18; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[CMD_EXTEND] = 18; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - -/** Íàñòðîéêà ðåæèìà ïðèåìà/ïåðåäà÷è */ + +/** Настройка режима приема/передачи */ +/* Начинает функцию RS_SetBitMode; назначение модуля — приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ void RS_SetBitMode(RS_DATA *rs_arr,int n) -{ - if(n == 8) - { - RS_SetLineMode(rs_arr,8,'N',1); /* ðåæèì ëèíèè */ - rs_arr->RS_Flag9bit=0; - } - if(n == 9) - { - RS_SetLineMode(rs_arr,8,'N',1); /* ðåæèì ëèíèè */ - rs_arr->RS_Flag9bit=1; -} } - -/** Ïîñûëêà áëîêà áàéòîâ. - Ïîñûëàåò ìàññèâà 32-áèòíûõ öåëûõ ÷èñåë ñòàðøèå áèòû äîëæíû áûòü 0. - @precondition Ðàáîòà ô-öèè çàâèñèò îò ìàêðî RS_TRANSMIT_INTR - @param buf àäðåñ ìàññèâà - @param len êîëè÷åñòâî áàéò - @see RS_BSend, RS_TRANSMIT_INTR */ -int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf,unsigned long len) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(n == 8); последующий оператор выполняется только при истинном условии. */ + if(n == 8) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + RS_SetLineMode(rs_arr,8,'N',1); /* режим линии */ /* Вызывает RS_SetLineMode с аргументами (rs_arr,8,'N',1) в текущей последовательности операций. */ + /* Записывает rs_arr->RS_Flag9bit значением 0; rs arr RS флаг 9 бит. */ + rs_arr->RS_Flag9bit=0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Проверяет if(n == 9); последующий оператор выполняется только при истинном условии. */ + if(n == 9) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + RS_SetLineMode(rs_arr,8,'N',1); /* режим линии */ /* Вызывает RS_SetLineMode с аргументами (rs_arr,8,'N',1) в текущей последовательности операций. */ + /* Записывает rs_arr->RS_Flag9bit значением 1; rs arr RS флаг 9 бит. */ + rs_arr->RS_Flag9bit=1; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} } + +/** Посылка блока байтов. + Посылает массива 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) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ +/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */ #if RS232_USE_FIFO + /* Проверяет if (rs_arr->commnumber == COM_1) return RS_FifoStart(rs_arr,pBuf,len,BM_CHAR32); последующий оператор выполняется только при истинном условии. */ if (rs_arr->commnumber == COM_1) return RS_FifoStart(rs_arr,pBuf,len,BM_CHAR32); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Объявляет i — данные i. */ unsigned int i; - for (i=0; i <= 30000; i++){} /* Ïàóçà äëà PC */ + for (i=0; i <= 30000; i++){} /* Пауза дла PC */ /* Цикл for (i=0; i <= 30000; i++); задаёт начальное значение, условие продолжения и шаг перебора. */ - RS_Line_to_send(rs_arr); /* ðåæèì ïåðåäà÷è RS485 */ + RS_Line_to_send(rs_arr); /* режим передачи RS485 */ /* Вызывает RS_Line_to_send с аргументами (rs_arr) в текущей последовательности операций. */ - for (i=0; i <= 10000; i++){} /* Ïàóçà äëà PC */ - - rs_arr->RS_SLength = len; /* Íàñòðàèâàåì ïåðåìåííûå */ + for (i=0; i <= 10000; i++){} /* Пауза дла PC */ /* Цикл for (i=0; i <= 10000; i++); задаёт начальное значение, условие продолжения и шаг перебора. */ + + rs_arr->RS_SLength = len; /* Настраиваем переменные */ /* Записывает rs_arr->RS_SLength значением len; rs arr RS S длина. */ + /* Записывает rs_arr->pRS_SendPtr значением pBuf + 1; данные rs_arr->pRS_SendPtr. */ rs_arr->pRS_SendPtr = pBuf + 1; + /* Записывает rs_arr->RS_SendBlockMode значением BM_CHAR32; rs arr RS Send Block режим. */ rs_arr->RS_SendBlockMode = BM_CHAR32; - RS_Wait4OK(rs_arr); /* Äîæèäàåìñà óõîäà */ - RS_SetBitMode(rs_arr,8); /* Îñòàëüíûå â 8-áèò ðåæèìå */ - - rs_arr->RS_SendLen = 1; /* Äâà áàéòà óæå ïåðåäàëè */ + RS_Wait4OK(rs_arr); /* Дожидаемса ухода */ /* Вызывает RS_Wait4OK с аргументами (rs_arr) в текущей последовательности операций. */ + RS_SetBitMode(rs_arr,8); /* Остальные в 8-бит режиме */ /* Вызывает RS_SetBitMode с аргументами (rs_arr,8) в текущей последовательности операций. */ + + rs_arr->RS_SendLen = 1; /* Два байта уже передали */ /* Записывает rs_arr->RS_SendLen значением 1; данные rs_arr->RS_SendLen. */ + /* Проверяет if(len > 1); последующий оператор выполняется только при истинном условии. */ if(len > 1) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - enableUARTIntW(rs_arr); /* Ðàçðåøàåì ïðåðûâàíèà ïî ïåðåäà÷å */ - SCI_send(rs_arr, *pBuf); // Ïåðåäàåì âòîðîé áàéò ïî ïðåðûâàíèþ + enableUARTIntW(rs_arr); /* Разрешаем прерываниа по передаче */ /* Вызывает enableUARTIntW с аргументами (rs_arr) в текущей последовательности операций. */ + /* Вызывает SCI_send с аргументами (rs_arr, *pBuf) в текущей последовательности операций. */ + SCI_send(rs_arr, *pBuf); // Передаем второй байт по прерыванию + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - SCI_send(rs_arr, *pBuf); // Ïåðåäàåì âòîðîé áàéò ïî ïðåðûâàíèþ - RS_Wait4OK(rs_arr); /* Äîæèäàåìñà óõîäà áåç ïðåðûâàíèà */ - for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Ïàóçà äëà PC */ - RS_SetBitMode(rs_arr,9); /* Îáðàòíî â 9-áèò ðåæèì */ - RS_Line_to_receive(rs_arr); /* ðåæèì ïðèåìà RS485 */ + /* Вызывает SCI_send с аргументами (rs_arr, *pBuf) в текущей последовательности операций. */ + SCI_send(rs_arr, *pBuf); // Передаем второй байт по прерыванию + RS_Wait4OK(rs_arr); /* Дожидаемса ухода без прерываниа */ /* Вызывает RS_Wait4OK с аргументами (rs_arr) в текущей последовательности операций. */ + for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Пауза дла PC */ /* Цикл for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++); задаёт начальное значение, условие продолжения и шаг перебора. */ + RS_SetBitMode(rs_arr,9); /* Обратно в 9-бит режим */ /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ + RS_Line_to_receive(rs_arr); /* режим приема RS485 */ /* Вызывает RS_Line_to_receive с аргументами (rs_arr) в текущей последовательности операций. */ + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Завершает RS_Send и возвращает 0. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -// Ïîñûëêà áëîêà óïàêîâàííûõ áàéòîâ +// Посылка блока упакованных байтов +/* Передаёт последовательность 8-битных октетов, упакованных в слова C28x. */ int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */ #if RS232_USE_FIFO + /* Проверяет if (rs_arr->commnumber == COM_1) return RS_FifoStart(rs_arr,pBuf,len,BM_PACKED); последующий оператор выполняется только при истинном условии. */ if (rs_arr->commnumber == COM_1) return RS_FifoStart(rs_arr,pBuf,len,BM_PACKED); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - RS_Line_to_send(rs_arr); // ðåæèì ïåðåäà÷è RS485 + /* Вызывает RS_Line_to_send с аргументами (rs_arr) в текущей последовательности операций. */ + RS_Line_to_send(rs_arr); // режим передачи RS485 - rs_arr->RS_SLength = len; // Íàñòðàèâàåì ïåðåìåííûå - rs_arr->pRS_SendPtr = pBuf; + /* Записывает rs_arr->RS_SLength значением len; rs arr RS S длина. */ + rs_arr->RS_SLength = len; // Настраиваем переменные + /* Записывает rs_arr->pRS_SendPtr значением pBuf; данные rs_arr->pRS_SendPtr. */ + rs_arr->pRS_SendPtr = pBuf; + /* Записывает rs_arr->RS_SendBlockMode значением BM_PACKED; rs arr RS Send Block режим. */ rs_arr->RS_SendBlockMode = BM_PACKED; - RS_Wait4OK(rs_arr); // Îæèäàåì î÷èñòêè è óõîäà ïîñëåäíåãî áàéòà - RS_SetBitMode(rs_arr,8); /* Îñòàëüíûå â 8-áèò ðåæèìå */ + /* Вызывает RS_Wait4OK с аргументами (rs_arr) в текущей последовательности операций. */ + RS_Wait4OK(rs_arr); // Ожидаем очистки и ухода последнего байта + RS_SetBitMode(rs_arr,8); /* Остальные в 8-бит режиме */ /* Вызывает RS_SetBitMode с аргументами (rs_arr,8) в текущей последовательности операций. */ - rs_arr->RS_SendLen = 1; // Îäèí áàéò óæå ïåðåäàëè + /* Записывает rs_arr->RS_SendLen значением 1; данные rs_arr->RS_SendLen. */ + rs_arr->RS_SendLen = 1; // Один байт уже передали - enableUARTIntW(rs_arr); /* Ðàçðåøàåì ïðåðûâàíèà ïî ïåðåäà÷å */ + enableUARTIntW(rs_arr); /* Разрешаем прерываниа по передаче */ /* Вызывает enableUARTIntW с аргументами (rs_arr) в текущей последовательности операций. */ - SCI_send(rs_arr,HIBYTE(*pBuf));// Ïåðåäàåì ïåðâûé áàéò + /* Вызывает SCI_send с аргументами (rs_arr,HIBYTE(*pBuf)) в текущей последовательности операций. */ + SCI_send(rs_arr,HIBYTE(*pBuf));// Передаем первый байт + /* Завершает RS_BSend и возвращает 0. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Óñòàíàâëèâàåò ñêîðîñòü îáìåíà. - @param speed ñêîðîñòü RS â áîä */ -/** Óñòàíàâëèâàåò ñêîðîñòü îáìåíà. - @param speed ñêîðîñòü RS â áîä */ +/** Устанавливает скорость обмена. + @param speed скорость RS в бод */ +/** Устанавливает скорость обмена. + @param speed скорость RS в бод */ +/* Начинает функцию RS_SetLineSpeed; назначение модуля — приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ void RS_SetLineSpeed(RS_DATA *rs_arr,unsigned long speed) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет SciBaud — SCI скорость передачи. */ long SciBaud; + /* Записывает SciBaud значением LSPCLK/(speed*8.0); SCI скорость передачи. */ SciBaud = LSPCLK/(speed*8.0); // if((SciBaud-(unsigned int)SciBaud)>0.5) SciBaud++; + /* Записывает rs_arr->SciRegs->SCIHBAUD значением HIBYTE((int)SciBaud); rs arr SCI Regs SCIHBAUD. */ rs_arr->SciRegs->SCIHBAUD = HIBYTE((int)SciBaud); + /* Записывает rs_arr->SciRegs->SCILBAUD значением LOBYTE((int)SciBaud); rs arr SCI Regs SCILBAUD. */ rs_arr->SciRegs->SCILBAUD = LOBYTE((int)SciBaud); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Èíèöèàëèçàöèà ïîñëåäîâàòåëüíîãî ïîðòà */ +/** Инициализациа последовательного порта */ +/* Инициализирует структуры обоих SCI и таблицу длин команд. */ void create_uart_vars(char size_cmd15_set) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает size_cmd15 значением size_cmd15_set; размер cmd 15. */ size_cmd15=size_cmd15_set; + /* Записывает rs_a.commnumber значением COM_1; данные commnumber. */ rs_a.commnumber=COM_1; + /* Записывает rs_b.commnumber значением COM_2; данные commnumber. */ rs_b.commnumber=COM_2; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Èíèöèàëèçàöèà ïîñëåäîâàòåëüíîãî ïîðòà */ +/** Инициализациа последовательного порта */ +/* Настраивает выбранный SCI, скорость и обработчики прерываний. */ void setup_uart(char commnumber, unsigned long speed_baud) -{ +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Продолжает список аргументов, полей или выражение volatile struct SCI_REGS *SciRegs;; порядок элементов сохраняется. */ volatile struct SCI_REGS *SciRegs; + /* Объявляет rs_arr — данные rs_arr. Хранит указатель на данные. */ RS_DATA *rs_arr; + /* Проверяет if(commnumber==COM_1); последующий оператор выполняется только при истинном условии. */ if(commnumber==COM_1) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает rs_a.SciRegs значением &SciaRegs; SCI Regs. */ rs_a.SciRegs = &SciaRegs; + /* Записывает rs_arr значением &rs_a; данные rs_arr. */ rs_arr = &rs_a; + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO29 значением 1; аппаратная линия ввода/вывода GPIO29. */ GpioCtrlRegs.GPAMUX2.bit.GPIO29 = 1; // SCITXDA - SCI-A transmit(O) + /* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO28 значением 1; аппаратная линия ввода/вывода GPIO28. */ GpioCtrlRegs.GPAMUX2.bit.GPIO28 = 1; // SCIRXDA - SCI-A receive (I) - + + /* Записывает PieVectTable.SCIRXINTA значением &RSA_RX_Handler; данные SCIRXINTA. */ PieVectTable.SCIRXINTA = &RSA_RX_Handler; + /* Записывает PieVectTable.SCITXINTA значением &RSA_TX_Handler; данные SCITXINTA. */ PieVectTable.SCITXINTA = &RSA_TX_Handler; + /* Записывает PieCtrlRegs.PIEIER9.bit.INTx1 значением 1; данные INTx1. */ PieCtrlRegs.PIEIER9.bit.INTx1=1; // PIE Group 9, INT1 + /* Записывает PieCtrlRegs.PIEIER9.bit.INTx2 значением 1; данные INTx2. */ PieCtrlRegs.PIEIER9.bit.INTx2=1; // PIE Group 9, INT2 + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; // Enable CPU INT + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(commnumber==COM_2); последующий оператор выполняется только при истинном условии. */ if(commnumber==COM_2) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает rs_b.SciRegs значением &ScibRegs; SCI Regs. */ rs_b.SciRegs = &ScibRegs; + /* Записывает rs_arr значением &rs_b; данные rs_arr. */ rs_arr = &rs_b; + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает GpioCtrlRegs.GPAMUX1.bit.GPIO14 значением 2; аппаратная линия ввода/вывода GPIO14. */ GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 2; // SCITXDB - SCI-B transmit(O) + /* Записывает GpioCtrlRegs.GPAMUX1.bit.GPIO15 значением 2; аппаратная линия ввода/вывода GPIO15. */ GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 2; // SCIRXDB - SCI-B receive (I) + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO34 значением 0; аппаратная линия ввода/вывода GPIO34. */ GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 0; // GPIO 34 - general purpose I/O 34 (default) + /* Записывает GpioCtrlRegs.GPBDIR.bit.GPIO34 значением 1; аппаратная линия ввода/вывода GPIO34. */ GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // Configures the GPIO pin as an output + /* Записывает PieVectTable.SCIRXINTB значением &RSB_RX_Handler; данные SCIRXINTB. */ PieVectTable.SCIRXINTB = &RSB_RX_Handler; + /* Записывает PieVectTable.SCITXINTB значением &RSB_TX_Handler; данные SCITXINTB. */ PieVectTable.SCITXINTB = &RSB_TX_Handler; + /* Записывает PieCtrlRegs.PIEIER9.bit.INTx3 значением 1; данные INTx3. */ PieCtrlRegs.PIEIER9.bit.INTx3=1; // PIE Group 9, INT3 + /* Записывает PieCtrlRegs.PIEIER9.bit.INTx4 значением 1; данные INTx4. */ PieCtrlRegs.PIEIER9.bit.INTx4=1; // PIE Group 9, INT4 + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; // Enable CPU INT + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает rs_arr->commnumber значением commnumber; данные rs_arr->commnumber. */ rs_arr->commnumber = commnumber; + /* Записывает SciRegs значением rs_arr->SciRegs; SCI Regs. */ SciRegs = rs_arr->SciRegs; + /* Вызывает RS_SetLineMode с аргументами (rs_arr,8,'N',1) в текущей последовательности операций. */ RS_SetLineMode(rs_arr,8,'N',1); - -// enable TX, RX, internal SCICLK, + +// enable TX, RX, internal SCICLK, // Disable RX ERR, SLEEP, TXWAKE + /* Записывает SciRegs->SCIFFCT.bit.ABDCLR значением 1; данные ABDCLR. */ SciRegs->SCIFFCT.bit.ABDCLR=1; + /* Записывает SciRegs->SCIFFCT.bit.CDC значением 0; данные CDC. */ SciRegs->SCIFFCT.bit.CDC=0; + /* Записывает SciRegs->SCICTL1.bit.RXERRINTENA значением 0; данные RXERRINTENA. */ SciRegs->SCICTL1.bit.RXERRINTENA=0; + /* Записывает SciRegs->SCICTL1.bit.SWRESET значением 0; данные SWRESET. */ SciRegs->SCICTL1.bit.SWRESET=0; + /* Записывает SciRegs->SCICTL1.bit.TXWAKE значением 0; данные TXWAKE. */ SciRegs->SCICTL1.bit.TXWAKE=0; + /* Записывает SciRegs->SCICTL1.bit.SLEEP значением 0; данные SLEEP. */ SciRegs->SCICTL1.bit.SLEEP=0; + /* Записывает SciRegs->SCICTL1.bit.TXENA значением 1; данные TXENA. */ SciRegs->SCICTL1.bit.TXENA=1; + /* Записывает SciRegs->SCICTL1.bit.RXENA значением 1; данные RXENA. */ SciRegs->SCICTL1.bit.RXENA=1; +/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */ #if RS232_USE_FIFO + /* Проверяет if (commnumber == COM_1); последующий оператор выполняется только при истинном условии. */ if (commnumber == COM_1) { - SciRegs->SCIFFTX.all=0xC008U; /* enhancement, reset held, TX level 8, IRQ off */ - SciRegs->SCIFFRX.all=0x0061U; /* reset held, RX level 1, IRQ on */ + SciRegs->SCIFFTX.all=0xC008U; /* enhancement, reset held, TX level 8, IRQ off */ /* Записывает SciRegs->SCIFFTX.all значением 0xC008U; представление регистра целым словом без разбиения на битовые поля. */ + SciRegs->SCIFFRX.all=0x0061U; /* reset held, RX level 1, IRQ on */ /* Записывает SciRegs->SCIFFRX.all значением 0x0061U; представление регистра целым словом без разбиения на битовые поля. */ + /* Записывает SciRegs->SCIFFCT.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ SciRegs->SCIFFCT.all=0; + /* Записывает SciRegs->SCIFFRX.bit.RXFFOVRCLR значением 1; данные RXFFOVRCLR. */ SciRegs->SCIFFRX.bit.RXFFOVRCLR=1; + /* Записывает SciRegs->SCIFFTX.bit.TXFFINTCLR значением 1; данные TXFFINTCLR. */ SciRegs->SCIFFTX.bit.TXFFINTCLR=1; + /* Записывает SciRegs->SCIFFTX.bit.TXFIFOXRESET значением 1; данные TXFIFOXRESET. */ SciRegs->SCIFFTX.bit.TXFIFOXRESET=1; + /* Записывает SciRegs->SCIFFRX.bit.RXFIFORESET значением 1; данные RXFIFORESET. */ SciRegs->SCIFFRX.bit.RXFIFORESET=1; + /* Записывает rs_arr->fifo_tx_active значением rs_arr->fifo_rx_guard=0; данные rs_arr->fifo_tx_active. */ rs_arr->fifo_tx_active=rs_arr->fifo_rx_guard=0; + /* Записывает rs_arr->fifo_rx_errors значением rs_arr->fifo_overflows=0; данные rs_arr->fifo_rx_errors. */ rs_arr->fifo_rx_errors=rs_arr->fifo_overflows=0; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ } else +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Записывает SciRegs->SCIFFTX.bit.SCIFFENA значением 0; данные SCIFFENA. */ SciRegs->SCIFFTX.bit.SCIFFENA=0; // fifo off - SciRegs->SCIFFRX.bit.RXFFIL=1; // Äëèíà íàèìåíüøåé êîìàíäû + /* Записывает SciRegs->SCIFFRX.bit.RXFFIL значением 1; данные RXFFIL. */ + SciRegs->SCIFFRX.bit.RXFFIL=1; // Длина наименьшей команды + /* Вызывает setup_arr_cmd_length с аргументами () в текущей последовательности операций. */ setup_arr_cmd_length(); - RS_SetLineSpeed(rs_arr,speed_baud); // ñêîðîñòü ëèíèè - RS_Line_to_receive(rs_arr); // ðåæèì ïðèåìà RS485 - enableUARTInt(rs_arr); // ðàçðåøåíèå ïðåðûâàíèé UART + /* Вызывает RS_SetLineSpeed с аргументами (rs_arr,speed_baud) в текущей последовательности операций. */ + RS_SetLineSpeed(rs_arr,speed_baud); // скорость линии + /* Вызывает RS_Line_to_receive с аргументами (rs_arr) в текущей последовательности операций. */ + RS_Line_to_receive(rs_arr); // режим приема RS485 + /* Вызывает enableUARTInt с аргументами (rs_arr) в текущей последовательности операций. */ + enableUARTInt(rs_arr); // разрешение прерываний UART + /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ RS_SetBitMode(rs_arr,9); - rs_arr->RS_PrevCmd = 0; // íå áûëî íèêàêèõ êîìàíä + /* Записывает rs_arr->RS_PrevCmd значением 0; данные rs_arr->RS_PrevCmd. */ + rs_arr->RS_PrevCmd = 0; // не было никаких команд + /* Записывает rs_arr->flag_TIMEOUT_to_Send значением 0; rs arr флаг TIMEOUT to Send. */ rs_arr->flag_TIMEOUT_to_Send = 0; + /* Записывает rs_arr->flag_LEADING значением 0; rs arr флаг LEADING. */ rs_arr->flag_LEADING = 0; + /* Записывает SciRegs->SCIFFRX.bit.RXFFINTCLR значением 1; данные RXFFINTCLR. */ SciRegs->SCIFFRX.bit.RXFFINTCLR=1; // Clear INT flag + /* Записывает SciRegs->SCICTL1.bit.SWRESET значением 1; данные SWRESET. */ SciRegs->SCICTL1.bit.SWRESET=1; // Relinquish SCI from Reset +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Íàñòðîéêà ðåæèìà ëèíèè. - @param bit êîëè÷åñòâî áèò äàííûõ - @param parity ðåæèì ÷åòíîñòè (N,O,E,M,S) - @param stop êîëè÷åñòâî ñòîïîâûõ áèò */ +/** Настройка режима линии. + @param bit количество бит данных + @param parity режим четности (N,O,E,M,S) + @param stop количество стоповых бит */ +/* Начинает функцию RS_SetLineMode; назначение модуля — приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ void RS_SetLineMode(RS_DATA *rs_arr, int bit, char parity, int stop) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Продолжает список аргументов, полей или выражение volatile struct SCI_REGS *SciRegs;; порядок элементов сохраняется. */ volatile struct SCI_REGS *SciRegs; /* -SCICCR - SCI Communication Control Register +SCICCR - SCI Communication Control Register Bit Bit Name Designation Functions 2-0 SCI CHAR2-0 SCICHAR Select the character (data) length (one to eight bits). 3 ADDR/IDLE MODE ADDRIDLE_MODE The idle-line mode (0) is usually used for normal communications because the address-bit mode adds an extra bit to the frame. The idle-line mode does not add this extra bit and is compatible with RS-232 type communications. @@ -556,158 +931,285 @@ Bit Bit Name Designation Functions 5 PARITY ENABLE PARITYENA Enables the parity function if set to 1, or disables the parity function if cleared to 0. 6 EVEN/ODD PARITY PARITY If parity is enabled, selects odd parity if cleared to 0 or even parity if set to 1. 7 STOP BITS STOPBITS Determines the number of stop bits transmitted-one stop bit if cleared to 0 or two stop bits if set to 1. -*/ +*/ + /* Записывает SciRegs значением rs_arr->SciRegs; SCI Regs. */ SciRegs = rs_arr->SciRegs; + /* Проверяет if(bit>0 и bit<9) SciRegs->SCICCR.bit.SCICHAR = bit-1; последующий оператор выполняется только при истинном условии. */ if(bit>0 && bit<9) SciRegs->SCICCR.bit.SCICHAR = bit-1; + /* Вызывает switch с аргументами (parity) в текущей последовательности операций. */ switch(parity) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Ветвь выбора для 'N'; выполняется при совпадении селектора switch. */ case 'N': SciRegs->SCICCR.bit.PARITYENA = 0; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; + /* Ветвь выбора для 'O'; выполняется при совпадении селектора switch. */ case 'O': SciRegs->SCICCR.bit.PARITYENA = 1; + /* Записывает SciRegs->SCICCR.bit.PARITY значением 0; чётность. */ SciRegs->SCICCR.bit.PARITY = 0; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; + /* Ветвь выбора для 'E'; выполняется при совпадении селектора switch. */ case 'E': SciRegs->SCICCR.bit.PARITYENA = 1; + /* Записывает SciRegs->SCICCR.bit.PARITY значением 1; чётность. */ SciRegs->SCICCR.bit.PARITY = 1; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (stop==1) SciRegs->SCICCR.bit.STOPBITS = 0; последующий оператор выполняется только при истинном условии. */ if (stop==1) SciRegs->SCICCR.bit.STOPBITS = 0; + /* Проверяет if (stop==2) SciRegs->SCICCR.bit.STOPBITS = 1; последующий оператор выполняется только при истинном условии. */ if (stop==2) SciRegs->SCICCR.bit.STOPBITS = 1; + /* Записывает SciRegs->SCICCR.bit.LOOPBKENA значением 0; данные LOOPBKENA. */ SciRegs->SCICCR.bit.LOOPBKENA = 0; //0 + /* Записывает SciRegs->SCICCR.bit.ADDRIDLE_MODE значением 0; ADDRIDLE режим. */ SciRegs->SCICCR.bit.ADDRIDLE_MODE = 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию clear_timer_rs_live; назначение модуля — приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ void clear_timer_rs_live(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает rs_arr->time_wait_rs_out значением 0; данные rs_arr->time_wait_rs_out. */ rs_arr->time_wait_rs_out=0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* ïðîâåðêà íà æèâó÷åñòü RS */ +/* проверка на живучесть RS */ +/* Начинает функцию test_rs_live; назначение модуля — приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ void test_rs_live(RS_DATA *rs_arr) -{ +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ /* if (rs_arr->time_wait_rs_out < RS_TIME_OUT) rs_arr->time_wait_rs_out++; else { rs_arr->time_wait_rs_out=0; - RS_Line_to_receive(rs_arr); // ðåæèì ïðèåìà RS485 + RS_Line_to_receive(rs_arr); // режим приема RS485 RS_SetBitMode(rs_arr,9); -}*/ } +}*/ } /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */ #if RS232_USE_FIFO /* FIFO is exclusively SCI-A / RS232. SCI-B keeps the legacy path. */ +/* Ожидает завершения аппаратной передачи FIFO и сдвигового регистра SCI. */ void RS_FifoWait(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if (rs_arr->commnumber != COM_1); последующий оператор выполняется только при истинном условии. */ if (rs_arr->commnumber != COM_1) { + /* Повторяет или ожидает, пока выполняется while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY). */ while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { } + /* Завершает RS_FifoWait без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Повторяет или ожидает, пока выполняется while (rs_arr->fifo_tx_active или rs_arr->SciRegs->SCIFFTX.bit.TXFFST или. */ while (rs_arr->fifo_tx_active || rs_arr->SciRegs->SCIFFTX.bit.TXFFST || + /* Продолжает список аргументов, полей или выражение !rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }; порядок элементов сохраняется. */ !rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { } +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Заполняет TX FIFO доступными байтами, сохраняя длину и положение в передаваемом пакете. */ static void RS_FifoTx(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет data — данные. */ unsigned int data; + /* Проверяет if (!rs_arr->fifo_tx_active); последующий оператор выполняется только при истинном условии. */ if (!rs_arr->fifo_tx_active) { + /* Записывает rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA значением 0; данные TXFFIENA. */ rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA=0; + /* Проверяет else if (rs_arr->RS_SendLen == rs_arr->RS_SLength); последующий оператор выполняется только при истинном условии. */ } else if (rs_arr->RS_SendLen == rs_arr->RS_SLength) { /* Level 0 interrupt: FIFO drained, last symbol may still be shifting. * Do not finish on TXFFST alone. At most one symbol remains. */ + /* Проверяет if (rs_arr->SciRegs->SCIFFTX.bit.TXFFST); последующий оператор выполняется только при истинном условии. */ if (rs_arr->SciRegs->SCIFFTX.bit.TXFFST) { + /* Записывает rs_arr->SciRegs->SCIFFTX.bit.TXFFINTCLR значением 1; данные TXFFINTCLR. */ rs_arr->SciRegs->SCIFFTX.bit.TXFFINTCLR=1; + /* Устанавливает биты PieCtrlRegs.PIEACK.bit.ACK9 значением 1; данные ACK9. */ PieCtrlRegs.PIEACK.bit.ACK9 |= 1; + /* Завершает RS_FifoTx без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA значением 0; данные TXFFIENA. */ rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA=0; + /* Повторяет или ожидает, пока выполняется while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY). */ while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { } + /* Проверяет if (rs_arr->RS_SendBlockMode == BM_CHAR32); последующий оператор выполняется только при истинном условии. */ if (rs_arr->RS_SendBlockMode == BM_CHAR32) { + /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ RS_SetBitMode(rs_arr,9); + /* Записывает rs_arr->flag_TIMEOUT_to_Send значением false; rs arr флаг TIMEOUT to Send. */ rs_arr->flag_TIMEOUT_to_Send=false; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET значением 0; данные RXFIFORESET. */ rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=0; + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFFOVRCLR значением 1; данные RXFFOVRCLR. */ rs_arr->SciRegs->SCIFFRX.bit.RXFFOVRCLR=1; + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR значением 1; данные RXFFINTCLR. */ rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR=1; + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET значением 1; данные RXFIFORESET. */ rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=1; + /* Вызывает enableUARTInt с аргументами (rs_arr) в текущей последовательности операций. */ enableUARTInt(rs_arr); + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFFIENA значением 1; данные RXFFIENA. */ rs_arr->SciRegs->SCIFFRX.bit.RXFFIENA=1; + /* Записывает rs_arr->fifo_tx_active значением 0; данные rs_arr->fifo_tx_active. */ rs_arr->fifo_tx_active=0; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ } else { + /* Повторяет или ожидает, пока выполняется while (rs_arr->RS_SendLen < rs_arr->RS_SLength и. */ while (rs_arr->RS_SendLen < rs_arr->RS_SLength && + /* Продолжает список аргументов, полей или выражение rs_arr->SciRegs->SCIFFTX.bit.TXFFST < 16) {; порядок элементов сохраняется. */ rs_arr->SciRegs->SCIFFTX.bit.TXFFST < 16) { + /* Проверяет if (rs_arr->RS_SendBlockMode == BM_CHAR32); последующий оператор выполняется только при истинном условии. */ if (rs_arr->RS_SendBlockMode == BM_CHAR32) + /* Записывает data значением *rs_arr->pRS_SendPtr++; данные. */ data=*rs_arr->pRS_SendPtr++; + /* Проверяет else if (rs_arr->RS_SendLen & 1U); последующий оператор выполняется только при истинном условии. */ else if (rs_arr->RS_SendLen & 1U) + /* Записывает data значением LOBYTE(*rs_arr->pRS_SendPtr++); данные. */ data=LOBYTE(*rs_arr->pRS_SendPtr++); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else data=HIBYTE(*rs_arr->pRS_SendPtr); + /* Вызывает SCI_send с аргументами (rs_arr,data) в текущей последовательности операций. */ SCI_send(rs_arr,data); + /* Изменяет счётчик в выражении rs_arr->RS_SendLen++; на один для следующего шага. */ rs_arr->RS_SendLen++; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает rs_arr->SciRegs->SCIFFTX.bit.TXFFIL значением ; данные TXFFIL. */ rs_arr->SciRegs->SCIFFTX.bit.TXFFIL= + /* Продолжает список аргументов, полей или выражение rs_arr->RS_SendLen == rs_arr->RS_SLength ? 0 : 8;; порядок элементов сохраняется. */ rs_arr->RS_SendLen == rs_arr->RS_SLength ? 0 : 8; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает rs_arr->SciRegs->SCIFFTX.bit.TXFFINTCLR значением 1; данные TXFFINTCLR. */ rs_arr->SciRegs->SCIFFTX.bit.TXFFINTCLR=1; + /* Устанавливает биты PieCtrlRegs.PIEACK.bit.ACK9 значением 1; данные ACK9. */ PieCtrlRegs.PIEACK.bit.ACK9 |= 1; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Запускает передачу через FIFO COM_1 после проверки буфера и состояния текущего обмена. */ static int RS_FifoStart(RS_DATA *rs_arr,unsigned int *buffer,unsigned long count,int mode) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved. */ unsigned int saved; + /* Проверяет if (!count) return 0; последующий оператор выполняется только при истинном условии. */ if (!count) return 0; + /* Проверяет if (!buffer) return -1; последующий оператор выполняется только при истинном условии. */ if (!buffer) return -1; - RS_FifoWait(rs_arr); /* before replacing the previous transfer's counters */ + RS_FifoWait(rs_arr); /* before replacing the previous transfer's counters */ /* Вызывает RS_FifoWait. Ожидает завершения аппаратной передачи FIFO и сдвигового регистра SCI. */ + /* Записывает saved значением __disable_interrupts(); данные saved. */ saved=__disable_interrupts(); + /* Записывает rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA значением 0; данные TXFFIENA. */ rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA=0; + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFFIENA значением 0; данные RXFFIENA. */ rs_arr->SciRegs->SCIFFRX.bit.RXFFIENA=0; + /* Вызывает enableUARTIntW с аргументами (rs_arr) в текущей последовательности операций. */ enableUARTIntW(rs_arr); + /* Вызывает RS_SetBitMode с аргументами (rs_arr,8) в текущей последовательности операций. */ RS_SetBitMode(rs_arr,8); + /* Записывает rs_arr->pRS_SendPtr значением buffer; данные rs_arr->pRS_SendPtr. */ rs_arr->pRS_SendPtr=buffer; + /* Записывает rs_arr->RS_SLength значением count; rs arr RS S длина. */ rs_arr->RS_SLength=count; + /* Записывает rs_arr->RS_SendLen значением 0; данные rs_arr->RS_SendLen. */ rs_arr->RS_SendLen=0; + /* Записывает rs_arr->RS_SendBlockMode значением mode; rs arr RS Send Block режим. */ rs_arr->RS_SendBlockMode=mode; + /* Записывает rs_arr->fifo_tx_active значением 1; данные rs_arr->fifo_tx_active. */ rs_arr->fifo_tx_active=1; - RS_FifoTx(rs_arr); /* prime before enabling a possibly immediate TX IRQ */ + RS_FifoTx(rs_arr); /* prime before enabling a possibly immediate TX IRQ */ /* Вызывает RS_FifoTx. Заполняет TX FIFO доступными байтами, сохраняя длину и положение в передаваемом пакете. */ + /* Записывает rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA значением 1; данные TXFFIENA. */ rs_arr->SciRegs->SCIFFTX.bit.TXFFIENA=1; + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); + /* Проверяет if (count == 1 и mode == BM_CHAR32) RS_FifoWait(rs_arr); последующий оператор выполняется только при истинном условии. */ if (count == 1 && mode == BM_CHAR32) RS_FifoWait(rs_arr); + /* Завершает RS_FifoStart и возвращает 0. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Прерывает ошибочный приём FIFO, очищает аппаратное состояние и включает защитную паузу. */ static void RS_FifoAbort(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Изменяет счётчик в выражении rs_arr->fifo_rx_errors++; на один для следующего шага. */ rs_arr->fifo_rx_errors++; + /* Проверяет if (rs_arr->SciRegs->SCIFFRX.bit.RXFFOVF) rs_arr->fifo_overflows++; последующий оператор выполняется только при истинном условии. */ if (rs_arr->SciRegs->SCIFFRX.bit.RXFFOVF) rs_arr->fifo_overflows++; + /* Записывает rs_arr->RS_DataReady значением 0; rs_arr->BS_LoadOK=0; rs arr RS данные Ready. */ rs_arr->RS_DataReady=0; rs_arr->BS_LoadOK=0; + /* Записывает rs_arr->RS_PrevCmd значением 0; rs_arr->RS_Cmd=0; данные rs_arr->RS_PrevCmd. */ rs_arr->RS_PrevCmd=0; rs_arr->RS_Cmd=0; + /* Записывает rs_arr->RS_Flag9bit значением 0; rs_arr->RS_FlagSkiping=1; rs arr RS флаг 9 бит. */ rs_arr->RS_Flag9bit=0; rs_arr->RS_FlagSkiping=1; + /* Записывает rs_arr->fifo_rx_guard значением 4; данные rs_arr->fifo_rx_guard. */ rs_arr->fifo_rx_guard=4; + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET значением 0; данные RXFIFORESET. */ rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=0; + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFFOVRCLR значением 1; данные RXFFOVRCLR. */ rs_arr->SciRegs->SCIFFRX.bit.RXFFOVRCLR=1; + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR значением 1; данные RXFFINTCLR. */ rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR=1; + /* Проверяет if (rs_arr->SciRegs->SCIRXST.bit.RXERROR); последующий оператор выполняется только при истинном условии. */ if (rs_arr->SciRegs->SCIRXST.bit.RXERROR) { + /* Записывает rs_arr->SciRegs->SCICTL1.bit.SWRESET значением 0; данные SWRESET. */ rs_arr->SciRegs->SCICTL1.bit.SWRESET=0; + /* Записывает rs_arr->SciRegs->SCICTL1.bit.SWRESET значением 1; данные SWRESET. */ rs_arr->SciRegs->SCICTL1.bit.SWRESET=1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET значением 1; данные RXFIFORESET. */ rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=1; + /* Устанавливает биты PieCtrlRegs.PIEACK.bit.ACK9 значением 1; данные ACK9. */ PieCtrlRegs.PIEACK.bit.ACK9 |= 1; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Уменьшает защитную паузу RX FIFO по миллисекундному такту. */ void RS_FifoTick1ms(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved. Начальное значение задаётся справа от знака равенства. */ unsigned int saved=__disable_interrupts(); + /* Объявляет p — данные p; rs_a — данные rs_a. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */ RS_DATA *p=&rs_a; + /* Проверяет if (p->SciRegs и p->fifo_rx_guard); последующий оператор выполняется только при истинном условии. */ if (p->SciRegs && p->fifo_rx_guard) { + /* Проверяет if (p->SciRegs->SCIFFRX.bit.RXFFST) p->fifo_rx_guard=4; последующий оператор выполняется только при истинном условии. */ if (p->SciRegs->SCIFFRX.bit.RXFFST) p->fifo_rx_guard=4; + /* Проверяет else if (--p->fifo_rx_guard == 0); последующий оператор выполняется только при истинном условии. */ else if (--p->fifo_rx_guard == 0) { + /* Записывает p->RS_HeaderCnt значением 0;p->RS_RecvLen=0; данные p->RS_HeaderCnt. */ p->RS_HeaderCnt=0;p->RS_RecvLen=0; + /* Записывает p->RS_FlagBegin значением 1;p->RS_FlagSkiping=0; p RS флаг Begin. */ p->RS_FlagBegin=1;p->RS_FlagSkiping=0; - RS_SetBitMode(p,9); /* fresh address after 3..4 ms of idle */ + RS_SetBitMode(p,9); /* fresh address after 3..4 ms of idle */ /* Вызывает RS_SetBitMode с аргументами (p,9) в текущей последовательности операций. */ + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif diff --git a/Source/Internal/bios.c b/Source/Internal/bios.c index eb632d3..89eacd5 100644 --- a/Source/Internal/bios.c +++ b/Source/Internal/bios.c @@ -1,119 +1,197 @@ +/* Команды обмена, загрузчика, чтения памяти и EEPROM. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" -#include "bios_dsp.h" +/* Подключает "bios_dsp.h": коды и объявления команд последовательного загрузчика. */ +#include "bios_dsp.h" +/* Подключает "crc16.h": таблицы и функции вычисления контрольных сумм CRC. */ #include "crc16.h" +/* Подключает "spise2p.h": драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */ #include "spise2p.h" +/* Подключает "log_to_mem.h": двухбанковый регистратор событий нагрузки во внешней RAM. */ #include "log_to_mem.h" //#include "flash_tools.h" //#include "spartan_tools.h" //#include "big_dsp_module.h" - -int flag_DEBUG = false; /* Ôëàã îòëàäî÷íîãî ðåæèìà */ + +int flag_DEBUG = false; /* Флаг отладочного режима */ /* Объявляет flag_DEBUG — флаг DEBUG; false — данные false. Начальное значение задаётся справа от знака равенства. */ //static unsigned int *RecvPtr; -//static int BS_LoadOK = false; /** Ôëàã óñïåøíîñòè ïðèåìà áëîêà */ +//static int BS_LoadOK = false; /** Флаг успешности приема блока */ /**********************************************************/ -/* Ïðîòîòèïû ôóíêöèé, èñïîëüçóåìûõ è îïðåäåëåííûõ â ôàéëå */ +/* Прототипы функций, используемых и определенных в файле */ /**********************************************************/ //static int _getbyte(int *addr, int offs); +/* Начинает функцию read_memory; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ unsigned int read_memory(unsigned long addr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Завершает read_memory и возвращает (*(volatile int *)(addr)). */ return (*(volatile int *)(addr)); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию write_memory; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ void write_memory(unsigned long addr, unsigned int data) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Продолжает список аргументов, полей или выражение (*(volatile int *)( addr )) = data;; порядок элементов сохраняется. */ (*(volatile int *)( addr )) = data; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Âîçâðàùàåò íîìåð êîììàíäû, åñëè åñòü èëè -1 åñëè òðàíçàêöèé íå áûëî */ +/** Возвращает номер комманды, если есть или -1 если транзакций не было */ +/* Начинает функцию get_command; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ int get_command(RS_DATA *rs_arr) -{ +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Объявляет cmd — данные cmd. */ int cmd; + /* Объявляет crc — данные crc; rcrc — данные rcrc. */ unsigned int crc, rcrc; - if(rs_arr->RS_DataReady) // Äàííûå ïî RS ïðèøëè - { + /* Проверяет if(rs_arr->RS_DataReady); последующий оператор выполняется только при истинном условии. */ + if(rs_arr->RS_DataReady) // Данные по RS пришли + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Записывает rs_arr->RS_DataReady значением false; rs arr RS данные Ready. */ rs_arr->RS_DataReady = false; - cmd = rs_arr->RS_Header[1]; // Ïðî÷èòàëè íîìåð êîìàíäû - - // Ïðîâåðàåì äëèíó êîìàíäû äëà ñ÷èòûâàíèà CRC + /* Записывает cmd значением rs_arr->RS_Header[1]; данные cmd. */ + cmd = rs_arr->RS_Header[1]; // Прочитали номер команды + + // Провераем длину команды дла считываниа CRC + /* Проверяет if((RS_Len[cmd]<3) или (RS_Len[cmd]>MAX_RECEIVE_LENGTH)); последующий оператор выполняется только при истинном условии. */ if((RS_Len[cmd]<3) || (RS_Len[cmd]>MAX_RECEIVE_LENGTH)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - RS_Line_to_receive(rs_arr); // ðåæèì ïðèåìà RS485 + /* Вызывает RS_Line_to_receive с аргументами (rs_arr) в текущей последовательности операций. */ + RS_Line_to_receive(rs_arr); // режим приема RS485 + /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ RS_SetBitMode(rs_arr,9); + /* Завершает get_command и возвращает -1. */ return -1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - if(cmd == CMD_LOAD) // Åñëè êîìàíäà çàãðóçêè + /* Проверяет if(cmd == CMD_LOAD); последующий оператор выполняется только при истинном условии. */ + if(cmd == CMD_LOAD) // Если команда загрузки + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает rs_arr->RS_PrevCmd значением cmd; данные rs_arr->RS_PrevCmd. */ rs_arr->RS_PrevCmd = cmd; - return cmd; // Íåò ïðîâåðêè crc + /* Завершает get_command и возвращает cmd. */ + return cmd; // Нет проверки crc + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - else // Âñå îñòàëüíûå êîìàíäû + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else // Все остальные команды + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - // Ñ÷èòûâàåì crc èç ïîñûëêè - crc = (rs_arr->RS_Header[RS_Len[cmd]-1] << 8) | + // Считываем crc из посылки + /* Записывает crc значением (rs_arr->RS_Header[RS_Len[cmd]-1] << 8) |; данные crc. */ + crc = (rs_arr->RS_Header[RS_Len[cmd]-1] << 8) | + /* Продолжает список аргументов, полей или выражение (rs_arr->RS_Header[RS_Len[cmd]-2]) ;; порядок элементов сохраняется. */ (rs_arr->RS_Header[RS_Len[cmd]-2]) ; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - // Ðàññ÷èòûâàåì crc èç ïîñûëêè + // Рассчитываем crc из посылки + /* Записывает rcrc значением 0xffff; данные rcrc. */ rcrc = 0xffff; + /* Записывает rcrc значением get_crc_16( rcrc, rs_arr->RS_Header, (RS_Len[cmd]-2) ); данные rcrc. */ rcrc = get_crc_16( rcrc, rs_arr->RS_Header, (RS_Len[cmd]-2) ); - if(crc == rcrc) // Ïðîâåðàåì crc + /* Проверяет if(crc == rcrc); последующий оператор выполняется только при истинном условии. */ + if(crc == rcrc) // Провераем crc + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает rs_arr->RS_PrevCmd значением cmd; данные rs_arr->RS_PrevCmd. */ rs_arr->RS_PrevCmd = cmd; + /* Завершает get_command и возвращает cmd. */ return cmd; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - RS_Line_to_receive(rs_arr); // ðåæèì ïðèåìà RS485 + /* Вызывает RS_Line_to_receive с аргументами (rs_arr) в текущей последовательности операций. */ + RS_Line_to_receive(rs_arr); // режим приема RS485 + /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ RS_SetBitMode(rs_arr,9); - } } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } } + /* Завершает get_command и возвращает -1. */ return -1; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Ñòàíäàðòíûé îòâåò, áåç ïàðàìåòðîâ */ +/** Стандартный ответ, без параметров */ +/* Начинает функцию Answer; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ void Answer(RS_DATA *rs_arr,int n) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет crc — данные crc. */ int crc; - flag_DEBUG = true; // Ôëàã îòëàäî÷íîãî ðåæèìà + /* Записывает flag_DEBUG значением true; флаг DEBUG. */ + flag_DEBUG = true; // Флаг отладочного режима + /* Записывает rs_arr->buffer[0] значением rs_arr->addr_recive; rs arr буфер. */ rs_arr->buffer[0] = rs_arr->addr_recive; //CNTRL_ADDR; + /* Записывает rs_arr->buffer[1] значением n; rs arr буфер. */ rs_arr->buffer[1] = n; + /* Записывает crc значением 0xffff; данные crc. */ crc = 0xffff; + /* Записывает crc значением get_crc_16( crc, rs_arr->buffer, 2); данные crc. */ crc = get_crc_16( crc, rs_arr->buffer, 2); + /* Записывает rs_arr->buffer[2] значением LOBYTE(crc); rs arr буфер. */ rs_arr->buffer[2] = LOBYTE(crc); + /* Записывает rs_arr->buffer[3] значением HIBYTE(crc); rs arr буфер. */ rs_arr->buffer[3] = HIBYTE(crc); - + + /* Записывает rs_arr->buffer[4] значением 0; rs arr буфер. */ rs_arr->buffer[4] = 0; + /* Записывает rs_arr->buffer[5] значением 0; rs arr буфер. */ rs_arr->buffer[5] = 0; + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ RS_Send(rs_arr,rs_arr->buffer, 6); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* Âíóòðåííàà ô-öèà */ +/* Внутреннаа ф-циа */ +/* Начинает функцию _getbyte; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ static char _getbyte(unsigned int *addr, int32 offs) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет address — адрес. Хранит указатель на данные. */ unsigned int *address; + /* Объявляет byte — данные byte. */ unsigned int byte; + /* Записывает address значением addr + offs/2; адрес. */ address = addr + offs/2; + /* Записывает byte значением *address; данные byte. */ byte = *address; + /* Проверяет if(offs%2) return LOBYTE(byte); последующий оператор выполняется только при истинном условии. */ if(offs%2) return LOBYTE(byte); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else return HIBYTE(byte); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* íà÷àëüíûå óñòàíîâêè (íå ðàáîòàåò)*/ -void init(RS_DATA *rs_arr) +/* начальные установки (не работает)*/ +/* Начинает функцию init; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ +void init(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { /* if(rs_arr->RS_Header[2]==3) @@ -121,8 +199,8 @@ void init(RS_DATA *rs_arr) if (rs_arr->curr_baud!=57600) { RS_SetLineSpeed(rs_arr,57600); rs_arr->curr_baud= 57600; - } } - + } } + if(rs_arr->RS_Header[2]==4) { if (rs_arr->curr_baud!=115200) @@ -133,205 +211,325 @@ void init(RS_DATA *rs_arr) Answer(rs_arr,CMD_INIT); rs_arr->BS_LoadOK = false; */ +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/**@name Êîììàíäû -* Êîììàíäû, âûçûâàåìûå ÷åðåç ïîñëåäîâàòåëüíûé êàíàë +/**@name Комманды +* Комманды, вызываемые через последовательный канал */ //@{ -/** Èíèöèèðîâàòü çàãðóçêó áëîêà. - Íàñòðàèâàåò ïðèåì áëîêà äàííûõ */ -void initload(RS_DATA *rs_arr) +/** Инициировать загрузку блока. + Настраивает прием блока данных */ +/* Начинает функцию initload; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ +void initload(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Address — адрес. */ unsigned long Address; + /* Записывает Address значением rs_arr->RS_Header[5] & 0xFF; адрес. */ Address = rs_arr->RS_Header[5] & 0xFF; + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[4] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[4] & 0xFF); + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[3] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[3] & 0xFF); + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[2] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[2] & 0xFF); + /* Записывает rs_arr->RS_Length значением rs_arr->RS_Header[9] & 0xFF; rs arr RS длина. */ rs_arr->RS_Length = rs_arr->RS_Header[9] & 0xFF; + /* Записывает rs_arr->RS_Length значением (rs_arr->RS_Length<<8) | (rs_arr->RS_Header[8] & 0xFF); rs arr RS длина. */ rs_arr->RS_Length = (rs_arr->RS_Length<<8) | (rs_arr->RS_Header[8] & 0xFF); + /* Записывает rs_arr->RS_Length значением (rs_arr->RS_Length<<8) | (rs_arr->RS_Header[7] & 0xFF); rs arr RS длина. */ rs_arr->RS_Length = (rs_arr->RS_Length<<8) | (rs_arr->RS_Header[7] & 0xFF); + /* Записывает rs_arr->RS_Length значением (rs_arr->RS_Length<<8) | (rs_arr->RS_Header[6] & 0xFF); rs arr RS длина. */ rs_arr->RS_Length = (rs_arr->RS_Length<<8) | (rs_arr->RS_Header[6] & 0xFF); + /* Увеличивает rs_arr->RS_Length значением 2; rs arr RS длина. */ rs_arr->RS_Length += 2; - rs_arr->pRS_RecvPtr = (unsigned int *)Address; //(unsigned int *)Address; + /* Записывает rs_arr->pRS_RecvPtr значением (unsigned int *)Address; данные rs_arr->pRS_RecvPtr. */ + rs_arr->pRS_RecvPtr = (unsigned int *)Address; //(unsigned int *)Address; + /* Записывает rs_arr->pRecvPtr значением (unsigned int *)Address; данные rs_arr->pRecvPtr. */ rs_arr->pRecvPtr = (unsigned int *)Address; //(unsigned int *)Address; + /* Записывает no_write значением 1; no запись. */ no_write = 1; + /* Вызывает Answer с аргументами (rs_arr,CMD_INITLOAD) в текущей последовательности операций. */ Answer(rs_arr,CMD_INITLOAD); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Çàãðóçêà áëîêà. - Âûçûâàåòñà ïîñëå çàãðóçêè áëîêà ÷åðåç RS */ +/** Загрузка блока. + Вызываетса после загрузки блока через RS */ +/* Начинает функцию load; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ void load(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет rcrc — данные rcrc; crc — данные crc. */ unsigned int rcrc, crc; - crc = (_getbyte(rs_arr->pRecvPtr, rs_arr->RS_Length-1) << 8) + + /* Записывает crc значением (_getbyte(rs_arr->pRecvPtr, rs_arr->RS_Length-1) << 8) +; данные crc. */ + crc = (_getbyte(rs_arr->pRecvPtr, rs_arr->RS_Length-1) << 8) + + /* Вызывает _getbyte с аргументами (rs_arr->pRecvPtr, rs_arr->RS_Length-2) в текущей последовательности операций. */ _getbyte(rs_arr->pRecvPtr, rs_arr->RS_Length-2); + /* Записывает rs_arr->RS_Header[0] значением rs_arr->addr_recive; данные rs_arr->RS_Header. */ rs_arr->RS_Header[0] = rs_arr->addr_recive; - -// CNTRL_ADDR; + +// CNTRL_ADDR; + /* Записывает rs_arr->RS_Header[1] значением CMD_LOAD; данные rs_arr->RS_Header. */ rs_arr->RS_Header[1]=CMD_LOAD; + /* Записывает rcrc значением 0xffff; данные rcrc. */ rcrc = 0xffff; + /* Записывает rcrc значением get_crc_16( rcrc, rs_arr->RS_Header, 2); данные rcrc. */ rcrc = get_crc_16( rcrc, rs_arr->RS_Header, 2); + /* Записывает rcrc значением get_crc_16b( rcrc, rs_arr->pRecvPtr, rs_arr->RS_Length-2); данные rcrc. */ rcrc = get_crc_16b( rcrc, rs_arr->pRecvPtr, rs_arr->RS_Length-2); + /* Проверяет if(rcrc == crc); последующий оператор выполняется только при истинном условии. */ if(rcrc == crc) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает Answer с аргументами (rs_arr,CMD_LOAD) в текущей последовательности операций. */ Answer(rs_arr,CMD_LOAD); + /* Записывает rs_arr->BS_LoadOK значением true; данные rs_arr->BS_LoadOK. */ rs_arr->BS_LoadOK = true; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - else + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает rs_arr->BS_LoadOK значением false; данные rs_arr->BS_LoadOK. */ rs_arr->BS_LoadOK = false; - RS_Line_to_receive(rs_arr); // ðåæèì ïðèåìà RS485 + /* Вызывает RS_Line_to_receive с аргументами (rs_arr) в текущей последовательности операций. */ + RS_Line_to_receive(rs_arr); // режим приема RS485 + /* Вызывает RS_SetBitMode с аргументами (rs_arr,9) в текущей последовательности операций. */ RS_SetBitMode(rs_arr,9); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } -/** Âûïîëíèòü ïðîãðàììó â ôîðìàòå Serial Boot. - @precondition Äîëæíà áûòü ïðîèçâåäåíà çàãðóçêà áëîêà - Àäðåñ ïðîãðàììû áåðåòñà èç çàãîëîâêà è - ñðàâíèâàåòñà ñ ïåðåìåííîé RecvPtr, çàïîëíàåìîé â ô-öèè load +/** Выполнить программу в формате Serial Boot. + @precondition Должна быть произведена загрузка блока + Адрес программы беретса из заголовка и + сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load @see load */ -void run (RS_DATA *rs_arr) -{ - return; +/* Начинает функцию run; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ +void run (RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Завершает run без возвращаемого значения. */ + return; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Ïðî÷èòàòü à÷åéêó ïàìàòè */ +/** Прочитать ачейку памати */ +/* Начинает функцию peek; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ void peek(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Address — адрес. */ unsigned long Address; + /* Объявляет Data — данные; crc — данные crc. */ unsigned int Data, crc; - - flag_DEBUG = true; // Ôëàã îòëàäî÷íîãî ðåæèìà - + + /* Записывает flag_DEBUG значением true; флаг DEBUG. */ + flag_DEBUG = true; // Флаг отладочного режима + + /* Записывает Address значением rs_arr->RS_Header[5] & 0xFF; адрес. */ Address = rs_arr->RS_Header[5] & 0xFF; + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[4] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[4] & 0xFF); + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[3] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[3] & 0xFF); + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[2] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[2] & 0xFF); + /* Проверяет if(Addressbuffer[0] значением rs_arr->addr_recive; rs arr буфер. */ rs_arr->buffer[0] = rs_arr->addr_recive; //CNTRL_ADDR; + /* Записывает rs_arr->buffer[1] значением CMD_PEEK; rs arr буфер. */ rs_arr->buffer[1] = CMD_PEEK; + /* Записывает rs_arr->buffer[2] значением LOBYTE(Data); rs arr буфер. */ rs_arr->buffer[2] = LOBYTE(Data); + /* Записывает rs_arr->buffer[3] значением HIBYTE(Data); rs arr буфер. */ rs_arr->buffer[3] = HIBYTE(Data); + /* Записывает rs_arr->buffer[4] значением LOBYTE(CpuTimer2.InterruptCount); rs arr буфер. */ rs_arr->buffer[4] = LOBYTE(CpuTimer2.InterruptCount); + /* Записывает rs_arr->buffer[5] значением HIBYTE(CpuTimer2.InterruptCount); rs arr буфер. */ rs_arr->buffer[5] = HIBYTE(CpuTimer2.InterruptCount); + /* Записывает crc значением 0xffff; данные crc. */ crc = 0xffff; + /* Записывает crc значением get_crc_16(crc, rs_arr->buffer, 6); данные crc. */ crc = get_crc_16(crc, rs_arr->buffer, 6); + /* Записывает rs_arr->buffer[6] значением LOBYTE(crc); rs arr буфер. */ rs_arr->buffer[6] = LOBYTE(crc); + /* Записывает rs_arr->buffer[7] значением HIBYTE(crc); rs arr буфер. */ rs_arr->buffer[7] = HIBYTE(crc); - rs_arr->buffer[8] = 0; - rs_arr->buffer[9] = 0; - + /* Записывает rs_arr->buffer[8] значением 0; rs arr буфер. */ + rs_arr->buffer[8] = 0; + /* Записывает rs_arr->buffer[9] значением 0; rs arr буфер. */ + rs_arr->buffer[9] = 0; + + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ RS_Send(rs_arr,rs_arr->buffer, 10); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Çàïèñàòü â à÷åéêó ïàìàòè */ -void poke(RS_DATA *rs_arr) +/** Записать в ачейку памати */ +/* Начинает функцию poke; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ +void poke(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Address — адрес. */ unsigned long Address; + /* Объявляет Data — данные. */ unsigned int Data; + /* Записывает Address значением rs_arr->RS_Header[5] & 0xFF; адрес. */ Address = rs_arr->RS_Header[5] & 0xFF; + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[4] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[4] & 0xFF); + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[3] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[3] & 0xFF); + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[2] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[2] & 0xFF); + /* Записывает Data значением 0; данные. */ Data = 0; + /* Записывает Data значением (Data<<8) | (rs_arr->RS_Header[7] & 0xFF); данные. */ Data = (Data<<8) | (rs_arr->RS_Header[7] & 0xFF); + /* Записывает Data значением (Data<<8) | (rs_arr->RS_Header[6] & 0xFF); данные. */ Data = (Data<<8) | (rs_arr->RS_Header[6] & 0xFF); + /* Проверяет if(AddressRS_Header[5] & 0xFF; адрес. */ Address = rs_arr->RS_Header[5] & 0xFF; + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[4] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[4] & 0xFF); + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[3] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[3] & 0xFF); + /* Записывает Address значением (Address<<8) | (rs_arr->RS_Header[2] & 0xFF); адрес. */ Address = (Address<<8) | (rs_arr->RS_Header[2] & 0xFF); + /* Записывает Length значением rs_arr->RS_Header[9] & 0xFF; длина. */ Length = rs_arr->RS_Header[9] & 0xFF; + /* Записывает Length значением (Length<<8) | (rs_arr->RS_Header[8] & 0xFF); длина. */ Length = (Length<<8) | (rs_arr->RS_Header[8] & 0xFF); + /* Записывает Length значением (Length<<8) | (rs_arr->RS_Header[7] & 0xFF); длина. */ Length = (Length<<8) | (rs_arr->RS_Header[7] & 0xFF); + /* Записывает Length значением (Length<<8) | (rs_arr->RS_Header[6] & 0xFF); длина. */ Length = (Length<<8) | (rs_arr->RS_Header[6] & 0xFF); + /* Записывает rs_arr->buffer[0] значением rs_arr->addr_recive; rs arr буфер. */ rs_arr->buffer[0] = rs_arr->addr_recive; //CNTRL_ADDR; + /* Записывает rs_arr->buffer[1] значением CMD_UPLOAD; rs arr буфер. */ rs_arr->buffer[1] = CMD_UPLOAD; + /* Записывает crc значением 0xffff; данные crc. */ crc = 0xffff; - crc = get_crc_16( crc, rs_arr->buffer, 2); + /* Записывает crc значением get_crc_16( crc, rs_arr->buffer, 2); данные crc. */ + crc = get_crc_16( crc, rs_arr->buffer, 2); + /* Записывает crc значением get_crc_16b( crc, (unsigned int *)Address, Length); данные crc. */ crc = get_crc_16b( crc, (unsigned int *)Address, Length); - RS_Send(rs_arr,rs_arr->buffer, 1); // <=2 áàéò ïî ôëàãó - - rs_arr->buffer[0] = CMD_UPLOAD; - RS_Send(rs_arr,rs_arr->buffer, 1); // <=2 áàéò ïî ôëàãó - + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ + RS_Send(rs_arr,rs_arr->buffer, 1); // <=2 байт по флагу + + /* Записывает rs_arr->buffer[0] значением CMD_UPLOAD; rs arr буфер. */ + rs_arr->buffer[0] = CMD_UPLOAD; + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ + RS_Send(rs_arr,rs_arr->buffer, 1); // <=2 байт по флагу + + /* Вызывает RS_Wait4OK с аргументами (rs_arr) в текущей последовательности операций. */ RS_Wait4OK(rs_arr); + /* Вызывает RS_BSend. Передаёт последовательность 8-битных октетов, упакованных в слова C28x. */ RS_BSend(rs_arr,(unsigned int*)Address, Length); + /* Вызывает RS_Wait4OK с аргументами (rs_arr) в текущей последовательности операций. */ RS_Wait4OK(rs_arr); + /* Записывает rs_arr->buffer[0] значением LOBYTE(crc); rs arr буфер. */ rs_arr->buffer[0] = LOBYTE(crc); + /* Записывает rs_arr->buffer[1] значением HIBYTE(crc); rs arr буфер. */ rs_arr->buffer[1] = HIBYTE(crc); + /* Записывает rs_arr->buffer[2] значением 0; rs arr буфер. */ rs_arr->buffer[2] = 0; + /* Записывает rs_arr->buffer[3] значением 0; rs arr буфер. */ rs_arr->buffer[3] = 0; + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ RS_Send(rs_arr,rs_arr->buffer, 4+2); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Ïðîøèòü XILINX. - @precondition Äîëæíà áûòü ïðîèçâåäåíà çàãðóçêà áëîêà - Àäðåñ è äëèíà ïðîøèâêè áåðåòñà èç çàãîëîâêà è - ñðàâíèâàåòñà ñ ïåðåìåííûìè RecvPtr è Length, çàïîëíàåìûìè â ô-öèè load, - òàê æå ñìîòðèò ìàãè÷åñêîå ñëîâî â íà÷àëå ïðîøèâêè +/** Прошить XILINX. + @precondition Должна быть произведена загрузка блока + Адрес и длина прошивки беретса из заголовка и + сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load, + так же смотрит магическое слово в начале прошивки @see load */ -void xflash(RS_DATA *rs_arr) +/* Начинает функцию xflash; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ +void xflash(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Завершает xflash без возвращаемого значения. */ return; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Ïðîøèòü TMS. - @precondition Äîëæíà áûòü ïðîèçâåäåíà çàãðóçêà áëîêà - Àäðåñ è äëèíà ïðîøèâêè áåðåòñà èç çàãîëîâêà è - ñðàâíèâàåòñà ñ ïåðåìåííûìè RecvPtr è Length, çàïîëíàåìûìè â ô-öèè load +/** Прошить TMS. + @precondition Должна быть произведена загрузка блока + Адрес и длина прошивки беретса из заголовка и + сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load @see load */ -void tflash(RS_DATA *rs_arr) +/* Начинает функцию tflash; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ +void tflash(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // volatile unsigned long Address1,Address2; // volatile unsigned long Length, LengthW; /* - if(!rs_arr->BS_LoadOK) + if(!rs_arr->BS_LoadOK) { - RS_Line_to_receive(rs_arr); // ðåæèì ïðèåìà RS485 + RS_Line_to_receive(rs_arr); // режим приема RS485 RS_SetBitMode(rs_arr,9); return; } @@ -354,9 +552,9 @@ void tflash(RS_DATA *rs_arr) LengthW = Length/2; if (LengthW*2 0x180000) || ((Address2+LengthW) > 0x180000) ) + if( (Address2 < 0x100000) || (Address2 > 0x180000) || ((Address2+LengthW) > 0x180000) ) { - RS_Line_to_receive(rs_arr); // ðåæèì ïðèåìà RS485 + RS_Line_to_receive(rs_arr); // режим приема RS485 RS_SetBitMode(rs_arr,9); return; } @@ -364,61 +562,99 @@ void tflash(RS_DATA *rs_arr) run_flash_data(Address1,Address2, LengthW ); Answer(rs_arr,CMD_TFLASH); -*/ +*/ + /* Завершает tflash без возвращаемого значения. */ return; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/** Ïðîøèòü TMS. - @precondition Äîëæíà áûòü ïðîèçâåäåíà çàãðóçêà áëîêà - Àäðåñ è äëèíà ïðîøèâêè áåðåòñà èç çàãîëîâêà è - ñðàâíèâàåòñà ñ ïåðåìåííûìè RecvPtr è Length, çàïîëíàåìûìè â ô-öèè load +/** Прошить TMS. + @precondition Должна быть произведена загрузка блока + Адрес и длина прошивки беретса из заголовка и + сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load @see load */ -void extendbios(RS_DATA *rs_arr) +/* Начинает функцию extendbios; назначение модуля — команды обмена, загрузчика, чтения памяти и EEPROM. */ +void extendbios(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Address1 — адрес 1; Address2 — адрес 2; Length — длина. volatile требует фактического чтения или записи при каждом доступе. */ volatile unsigned long Address1,Address2,Length; + /* Объявляет code — данные code. */ unsigned int code; + /* Записывает Address1 значением rs_arr->RS_Header[5] & 0xFF; адрес 1. */ Address1 = rs_arr->RS_Header[5] & 0xFF; + /* Записывает Address1 значением (Address1<<8) | (rs_arr->RS_Header[4] & 0xFF); адрес 1. */ Address1 = (Address1<<8) | (rs_arr->RS_Header[4] & 0xFF); + /* Записывает Address1 значением (Address1<<8) | (rs_arr->RS_Header[3] & 0xFF); адрес 1. */ Address1 = (Address1<<8) | (rs_arr->RS_Header[3] & 0xFF); + /* Записывает Address1 значением (Address1<<8) | (rs_arr->RS_Header[2] & 0xFF); адрес 1. */ Address1 = (Address1<<8) | (rs_arr->RS_Header[2] & 0xFF); + /* Записывает Address2 значением rs_arr->RS_Header[9] & 0xFF; адрес 2. */ Address2 = rs_arr->RS_Header[9] & 0xFF; + /* Записывает Address2 значением (Address2<<8) | (rs_arr->RS_Header[8] & 0xFF); адрес 2. */ Address2 = (Address2<<8) | (rs_arr->RS_Header[8] & 0xFF); + /* Записывает Address2 значением (Address2<<8) | (rs_arr->RS_Header[7] & 0xFF); адрес 2. */ Address2 = (Address2<<8) | (rs_arr->RS_Header[7] & 0xFF); + /* Записывает Address2 значением (Address2<<8) | (rs_arr->RS_Header[6] & 0xFF); адрес 2. */ Address2 = (Address2<<8) | (rs_arr->RS_Header[6] & 0xFF); + /* Записывает Length значением rs_arr->RS_Header[13] & 0xFF; длина. */ Length = rs_arr->RS_Header[13] & 0xFF; + /* Записывает Length значением (Length<<8) | (rs_arr->RS_Header[12] & 0xFF); длина. */ Length = (Length<<8) | (rs_arr->RS_Header[12] & 0xFF); + /* Записывает Length значением (Length<<8) | (rs_arr->RS_Header[11] & 0xFF); длина. */ Length = (Length<<8) | (rs_arr->RS_Header[11] & 0xFF); + /* Записывает Length значением (Length<<8) | (rs_arr->RS_Header[10] & 0xFF); длина. */ Length = (Length<<8) | (rs_arr->RS_Header[10] & 0xFF); + /* Записывает code значением rs_arr->RS_Header[14] & 0xFF; данные code. */ code=rs_arr->RS_Header[14] & 0xFF; - + + /* Вызывает switch с аргументами ( code ) в текущей последовательности операций. */ switch ( code ) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - // Ïðîøèâàåì EPROM Èç RAM + // Прошиваем EPROM Из RAM + /* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 /* 0x44 is intentionally rejected by old firmware. Conversely this build * rejects legacy code 4, preventing writes with the wrong GUI profile. */ + /* Ветвь выбора для 0x44; выполняется при совпадении селектора switch. */ case 0x44: +/* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Ветвь выбора для 4; выполняется при совпадении селектора switch. */ case 4: +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Проверяет if (!Length или Address1 >= BALSAM167_EEPROM_FIRMWARE_BYTES/2UL или; последующий оператор выполняется только при истинном условии. */ if (!Length || Address1 >= BALSAM167_EEPROM_FIRMWARE_BYTES/2UL || + /* Продолжает список аргументов, полей или выражение Length > BALSAM167_EEPROM_FIRMWARE_BYTES-Address1*2UL) return;; порядок элементов сохраняется. */ Length > BALSAM167_EEPROM_FIRMWARE_BYTES-Address1*2UL) return; + /* Вызывает Seeprom_write. Пишет EEPROM с разделением по физическим страницам; область параметров не пересекает образ прошивки. */ Seeprom_write(Address1,(unsigned int*)Address2,Length); - break; - // ×èòàåì èç EPROM â RAM + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ + break; + // Читаем из EPROM в RAM + /* Ветвь выбора для 5; выполняется при совпадении селектора switch. */ case 5: Seeprom_read(Address1,(unsigned int*)Address2,Length); - break; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ + break; + /* Обрабатывает значения селектора, для которых нет отдельной ветви case. */ default: + /* Завершает extendbios без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает Answer с аргументами (rs_arr,CMD_EXTEND) в текущей последовательности операций. */ Answer(rs_arr,CMD_EXTEND); + /* Завершает extendbios без возвращаемого значения. */ return; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //@} diff --git a/Source/Internal/cntrl_adr.c b/Source/Internal/cntrl_adr.c index c7c7a96..e124b52 100644 --- a/Source/Internal/cntrl_adr.c +++ b/Source/Internal/cntrl_adr.c @@ -1,33 +1,51 @@ +/* Собственный и универсальный адрес устройства. Русские пояснения сохранены в UTF-8. */ +/* Подключает "cntrl_adr.h": собственный и универсальный адрес устройства. */ #include "cntrl_adr.h" +/* Задаёт ADDR_FOR_ALL_DEF = 10; данные ADDR_FOR_ALL_DEF. */ #define ADDR_FOR_ALL_DEF 10 +/* Задаёт ADDR_ANSWER_DEF = 0x33; данные ADDR_ANSWER_DEF. */ #define ADDR_ANSWER_DEF 0x33 +/* Задаёт ADDR_TERMINAL_DEF = 11; данные ADDR_TERMINAL_DEF. */ #define ADDR_TERMINAL_DEF 11 +/* Задаёт ADDR_UNIVERSAL_DEF = 10; данные ADDR_UNIVERSAL_DEF. */ #define ADDR_UNIVERSAL_DEF 10 - -/** Óñòàíîâêà àäðåñà êîíòðîëëåðà äëà ïîñûëêè âñåì ÀÈÍàì */ -int ADDR_FOR_ALL = ADDR_FOR_ALL_DEF; -/** Óñòàíîâêà àäðåñà êîíòðîëëåðà äëà ïîñûëêè îòâåòà */ -const int ADDR_ANSWER = ADDR_ANSWER_DEF; +/** Установка адреса контроллера дла посылки всем АИНам */ +/* Объявляет ADDR_FOR_ALL — данные ADDR_FOR_ALL; ADDR_FOR_ALL_DEF — данные ADDR_FOR_ALL_DEF. Начальное значение задаётся справа от знака равенства. */ +int ADDR_FOR_ALL = ADDR_FOR_ALL_DEF; -/** Óñòàíîâêà àäðåñà òåðìèíàëà äëà ïîñûëêè îòâåòà */ -const int ADDR_TERMINAL = ADDR_TERMINAL_DEF; +/** Установка адреса контроллера дла посылки ответа */ +/* Объявляет ADDR_ANSWER — данные ADDR_ANSWER; ADDR_ANSWER_DEF — данные ADDR_ANSWER_DEF. Начальное значение задаётся справа от знака равенства. */ +const int ADDR_ANSWER = ADDR_ANSWER_DEF; -/* Óíèâåðñàëüíûé àäðåñ êîíòðîëëåðà */ +/** Установка адреса терминала дла посылки ответа */ +/* Объявляет ADDR_TERMINAL — данные ADDR_TERMINAL; ADDR_TERMINAL_DEF — данные ADDR_TERMINAL_DEF. Начальное значение задаётся справа от знака равенства. */ +const int ADDR_TERMINAL = ADDR_TERMINAL_DEF; + +/* Универсальный адрес контроллера */ +/* Объявляет CNTRL_ADDR_UNIVERSAL — данные CNTRL_ADDR_UNIVERSAL; ADDR_UNIVERSAL_DEF — данные ADDR_UNIVERSAL_DEF. Начальное значение задаётся справа от знака равенства. */ const int CNTRL_ADDR_UNIVERSAL=ADDR_UNIVERSAL_DEF; - -/* Àäðåñ êîíòðîëëåðà */ + +/* Адрес контроллера */ +/* Объявляет CNTRL_ADDR — данные CNTRL_ADDR. Начальное значение задаётся справа от знака равенства. */ int CNTRL_ADDR=1; - + +/* Объявляет cntr_addr_c — данные cntr_addr_c. */ int cntr_addr_c; -int cntr_addr_c_all; - -/** Óñòàíîâêà àäðåñà êîíòðîëëåðà äëà ïðîøèâêè */ +/* Объявляет cntr_addr_c_all — данные cntr_addr_c_all. */ +int cntr_addr_c_all; + +/** Установка адреса контроллера дла прошивки */ +/* Устанавливает собственный и универсальный адрес для проверки адресованных команд. */ void set_cntrl_addr (int cntrl_addr,int cntrl_addr_for_all) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает CNTRL_ADDR значением cntrl_addr; данные CNTRL_ADDR. */ CNTRL_ADDR = cntrl_addr; + /* Записывает ADDR_FOR_ALL значением cntrl_addr_for_all; данные ADDR_FOR_ALL. */ ADDR_FOR_ALL = cntrl_addr_for_all; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/crc16.c b/Source/Internal/crc16.c index 756fa01..2916619 100644 --- a/Source/Internal/crc16.c +++ b/Source/Internal/crc16.c @@ -1,196 +1,353 @@ +/* Таблицы и функции вычисления контрольных сумм CRC. Русские пояснения сохранены в UTF-8. */ +/* Подключает "crc16.h": таблицы и функции вычисления контрольных сумм CRC. */ #include "crc16.h" -#define MAKE_TABS 0 /* Builds tables below */ -#define FAST_CRC 1 /* If fast CRC should be used */ +#define MAKE_TABS 0 /* Builds tables below */ /* Задаёт MAKE_TABS = 0; данные MAKE_TABS. */ +#define FAST_CRC 1 /* If fast CRC should be used */ /* Задаёт FAST_CRC = 1; данные FAST_CRC. */ +/* Задаёт ONLY_CRC16 = 1; данные ONLY_CRC16. */ #define ONLY_CRC16 1 +/* Задаёт Poln = 0xA001; данные Poln. */ #define Poln 0xA001 +/* Условие компиляции FAST_CRC & !MAKE_TABS: выбранный блок включается в текущий вариант прошивки. */ #if FAST_CRC & !MAKE_TABS +/* Условие компиляции !ONLY_CRC16: выбранный блок включается в текущий вариант прошивки. */ #if !ONLY_CRC16 +/* Продолжает список аргументов, полей или выражение static WORD crc_ccitt_tab[] = {; порядок элементов сохраняется. */ static WORD crc_ccitt_tab[] = { + /* Элемент постоянной таблицы 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,; порядок значений совпадает с порядком индексов потребителя. */ 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + /* Элемент постоянной таблицы 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,; порядок значений совпадает с порядком индексов потребителя. */ 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + /* Элемент постоянной таблицы 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,; порядок значений совпадает с порядком индексов потребителя. */ 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + /* Элемент постоянной таблицы 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,; порядок значений совпадает с порядком индексов потребителя. */ 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + /* Элемент постоянной таблицы 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,; порядок значений совпадает с порядком индексов потребителя. */ 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + /* Элемент постоянной таблицы 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,; порядок значений совпадает с порядком индексов потребителя. */ 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + /* Элемент постоянной таблицы 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,; порядок значений совпадает с порядком индексов потребителя. */ 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + /* Элемент постоянной таблицы 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,; порядок значений совпадает с порядком индексов потребителя. */ 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + /* Элемент постоянной таблицы 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,; порядок значений совпадает с порядком индексов потребителя. */ 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + /* Элемент постоянной таблицы 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,; порядок значений совпадает с порядком индексов потребителя. */ 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + /* Элемент постоянной таблицы 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,; порядок значений совпадает с порядком индексов потребителя. */ 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + /* Элемент постоянной таблицы 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,; порядок значений совпадает с порядком индексов потребителя. */ 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + /* Элемент постоянной таблицы 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,; порядок значений совпадает с порядком индексов потребителя. */ 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + /* Элемент постоянной таблицы 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,; порядок значений совпадает с порядком индексов потребителя. */ 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + /* Элемент постоянной таблицы 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,; порядок значений совпадает с порядком индексов потребителя. */ 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + /* Элемент постоянной таблицы 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,; порядок значений совпадает с порядком индексов потребителя. */ 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + /* Элемент постоянной таблицы 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,; порядок значений совпадает с порядком индексов потребителя. */ 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + /* Элемент постоянной таблицы 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,; порядок значений совпадает с порядком индексов потребителя. */ 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + /* Элемент постоянной таблицы 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,; порядок значений совпадает с порядком индексов потребителя. */ 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + /* Элемент постоянной таблицы 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,; порядок значений совпадает с порядком индексов потребителя. */ 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + /* Элемент постоянной таблицы 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,; порядок значений совпадает с порядком индексов потребителя. */ 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + /* Элемент постоянной таблицы 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,; порядок значений совпадает с порядком индексов потребителя. */ 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + /* Элемент постоянной таблицы 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,; порядок значений совпадает с порядком индексов потребителя. */ 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + /* Элемент постоянной таблицы 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,; порядок значений совпадает с порядком индексов потребителя. */ 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + /* Элемент постоянной таблицы 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,; порядок значений совпадает с порядком индексов потребителя. */ 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + /* Элемент постоянной таблицы 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,; порядок значений совпадает с порядком индексов потребителя. */ 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + /* Элемент постоянной таблицы 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,; порядок значений совпадает с порядком индексов потребителя. */ 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + /* Элемент постоянной таблицы 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,; порядок значений совпадает с порядком индексов потребителя. */ 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + /* Элемент постоянной таблицы 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,; порядок значений совпадает с порядком индексов потребителя. */ 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + /* Элемент постоянной таблицы 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,; порядок значений совпадает с порядком индексов потребителя. */ 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + /* Элемент постоянной таблицы 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,; порядок значений совпадает с порядком индексов потребителя. */ 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + /* Элемент постоянной таблицы 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0; порядок значений совпадает с порядком индексов потребителя. */ 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Продолжает список аргументов, полей или выражение WORD crc_16_tab[] = {; порядок элементов сохраняется. */ WORD crc_16_tab[] = { + /* Элемент постоянной таблицы 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241,; порядок значений совпадает с порядком индексов потребителя. */ 0x0000, 0xc0c1, 0xc181, 0x0140, 0xc301, 0x03c0, 0x0280, 0xc241, + /* Элемент постоянной таблицы 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440,; порядок значений совпадает с порядком индексов потребителя. */ 0xc601, 0x06c0, 0x0780, 0xc741, 0x0500, 0xc5c1, 0xc481, 0x0440, + /* Элемент постоянной таблицы 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40,; порядок значений совпадает с порядком индексов потребителя. */ 0xcc01, 0x0cc0, 0x0d80, 0xcd41, 0x0f00, 0xcfc1, 0xce81, 0x0e40, + /* Элемент постоянной таблицы 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841,; порядок значений совпадает с порядком индексов потребителя. */ 0x0a00, 0xcac1, 0xcb81, 0x0b40, 0xc901, 0x09c0, 0x0880, 0xc841, + /* Элемент постоянной таблицы 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40,; порядок значений совпадает с порядком индексов потребителя. */ 0xd801, 0x18c0, 0x1980, 0xd941, 0x1b00, 0xdbc1, 0xda81, 0x1a40, + /* Элемент постоянной таблицы 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41,; порядок значений совпадает с порядком индексов потребителя. */ 0x1e00, 0xdec1, 0xdf81, 0x1f40, 0xdd01, 0x1dc0, 0x1c80, 0xdc41, + /* Элемент постоянной таблицы 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641,; порядок значений совпадает с порядком индексов потребителя. */ 0x1400, 0xd4c1, 0xd581, 0x1540, 0xd701, 0x17c0, 0x1680, 0xd641, + /* Элемент постоянной таблицы 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040,; порядок значений совпадает с порядком индексов потребителя. */ 0xd201, 0x12c0, 0x1380, 0xd341, 0x1100, 0xd1c1, 0xd081, 0x1040, + /* Элемент постоянной таблицы 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240,; порядок значений совпадает с порядком индексов потребителя. */ 0xf001, 0x30c0, 0x3180, 0xf141, 0x3300, 0xf3c1, 0xf281, 0x3240, + /* Элемент постоянной таблицы 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441,; порядок значений совпадает с порядком индексов потребителя. */ 0x3600, 0xf6c1, 0xf781, 0x3740, 0xf501, 0x35c0, 0x3480, 0xf441, + /* Элемент постоянной таблицы 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41,; порядок значений совпадает с порядком индексов потребителя. */ 0x3c00, 0xfcc1, 0xfd81, 0x3d40, 0xff01, 0x3fc0, 0x3e80, 0xfe41, + /* Элемент постоянной таблицы 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840,; порядок значений совпадает с порядком индексов потребителя. */ 0xfa01, 0x3ac0, 0x3b80, 0xfb41, 0x3900, 0xf9c1, 0xf881, 0x3840, + /* Элемент постоянной таблицы 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41,; порядок значений совпадает с порядком индексов потребителя. */ 0x2800, 0xe8c1, 0xe981, 0x2940, 0xeb01, 0x2bc0, 0x2a80, 0xea41, + /* Элемент постоянной таблицы 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40,; порядок значений совпадает с порядком индексов потребителя. */ 0xee01, 0x2ec0, 0x2f80, 0xef41, 0x2d00, 0xedc1, 0xec81, 0x2c40, + /* Элемент постоянной таблицы 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640,; порядок значений совпадает с порядком индексов потребителя. */ 0xe401, 0x24c0, 0x2580, 0xe541, 0x2700, 0xe7c1, 0xe681, 0x2640, + /* Элемент постоянной таблицы 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041,; порядок значений совпадает с порядком индексов потребителя. */ 0x2200, 0xe2c1, 0xe381, 0x2340, 0xe101, 0x21c0, 0x2080, 0xe041, + /* Элемент постоянной таблицы 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240,; порядок значений совпадает с порядком индексов потребителя. */ 0xa001, 0x60c0, 0x6180, 0xa141, 0x6300, 0xa3c1, 0xa281, 0x6240, + /* Элемент постоянной таблицы 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441,; порядок значений совпадает с порядком индексов потребителя. */ 0x6600, 0xa6c1, 0xa781, 0x6740, 0xa501, 0x65c0, 0x6480, 0xa441, + /* Элемент постоянной таблицы 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41,; порядок значений совпадает с порядком индексов потребителя. */ 0x6c00, 0xacc1, 0xad81, 0x6d40, 0xaf01, 0x6fc0, 0x6e80, 0xae41, + /* Элемент постоянной таблицы 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840,; порядок значений совпадает с порядком индексов потребителя. */ 0xaa01, 0x6ac0, 0x6b80, 0xab41, 0x6900, 0xa9c1, 0xa881, 0x6840, + /* Элемент постоянной таблицы 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41,; порядок значений совпадает с порядком индексов потребителя. */ 0x7800, 0xb8c1, 0xb981, 0x7940, 0xbb01, 0x7bc0, 0x7a80, 0xba41, + /* Элемент постоянной таблицы 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40,; порядок значений совпадает с порядком индексов потребителя. */ 0xbe01, 0x7ec0, 0x7f80, 0xbf41, 0x7d00, 0xbdc1, 0xbc81, 0x7c40, + /* Элемент постоянной таблицы 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640,; порядок значений совпадает с порядком индексов потребителя. */ 0xb401, 0x74c0, 0x7580, 0xb541, 0x7700, 0xb7c1, 0xb681, 0x7640, + /* Элемент постоянной таблицы 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041,; порядок значений совпадает с порядком индексов потребителя. */ 0x7200, 0xb2c1, 0xb381, 0x7340, 0xb101, 0x71c0, 0x7080, 0xb041, + /* Элемент постоянной таблицы 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241,; порядок значений совпадает с порядком индексов потребителя. */ 0x5000, 0x90c1, 0x9181, 0x5140, 0x9301, 0x53c0, 0x5280, 0x9241, + /* Элемент постоянной таблицы 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440,; порядок значений совпадает с порядком индексов потребителя. */ 0x9601, 0x56c0, 0x5780, 0x9741, 0x5500, 0x95c1, 0x9481, 0x5440, + /* Элемент постоянной таблицы 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40,; порядок значений совпадает с порядком индексов потребителя. */ 0x9c01, 0x5cc0, 0x5d80, 0x9d41, 0x5f00, 0x9fc1, 0x9e81, 0x5e40, + /* Элемент постоянной таблицы 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841,; порядок значений совпадает с порядком индексов потребителя. */ 0x5a00, 0x9ac1, 0x9b81, 0x5b40, 0x9901, 0x59c0, 0x5880, 0x9841, + /* Элемент постоянной таблицы 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40,; порядок значений совпадает с порядком индексов потребителя. */ 0x8801, 0x48c0, 0x4980, 0x8941, 0x4b00, 0x8bc1, 0x8a81, 0x4a40, + /* Элемент постоянной таблицы 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41,; порядок значений совпадает с порядком индексов потребителя. */ 0x4e00, 0x8ec1, 0x8f81, 0x4f40, 0x8d01, 0x4dc0, 0x4c80, 0x8c41, + /* Элемент постоянной таблицы 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641,; порядок значений совпадает с порядком индексов потребителя. */ 0x4400, 0x84c1, 0x8581, 0x4540, 0x8701, 0x47c0, 0x4680, 0x8641, + /* Элемент постоянной таблицы 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040; порядок значений совпадает с порядком индексов потребителя. */ 0x8201, 0x42c0, 0x4380, 0x8341, 0x4100, 0x81c1, 0x8081, 0x4040 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции !ONLY_CRC16: выбранный блок включается в текущий вариант прошивки. */ #if !ONLY_CRC16 /* CRC-CCITT is based on the polynomial x^16 + x^12 + x^5 + 1. Bits */ /* are sent MSB to LSB. */ +/* Начинает функцию get_crc_ccitt; назначение модуля — таблицы и функции вычисления контрольных сумм CRC. */ unsigned int get_crc_ccitt(unsigned int crc,unsigned int *buf,unsigned long size ) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Условие компиляции !(FAST_CRC & !MAKE_TABS): выбранный блок включается в текущий вариант прошивки. */ #if !(FAST_CRC & !MAKE_TABS) + /* Продолжает список аргументов, полей или выражение register int i;; порядок элементов сохраняется. */ register int i; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Повторяет или ожидает, пока выполняется while (size--). */ while (size--) { +/* Условие компиляции FAST_CRC & !MAKE_TABS: выбранный блок включается в текущий вариант прошивки. */ #if FAST_CRC & !MAKE_TABS + /* Записывает crc значением (crc << 8) ^ crc_ccitt_tab[ (crc >> 8) ^ *buf++ ]; данные crc. */ crc = (crc << 8) ^ crc_ccitt_tab[ (crc >> 8) ^ *buf++ ]; +/* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Инвертирует биты crc значением (WORD)(*buf++) << 8; данные crc. */ crc ^= (WORD)(*buf++) << 8; + /* Цикл for (i = 0; i < 8; i++) ; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 8; i++) { + /* Проверяет if (crc & 0x8000); последующий оператор выполняется только при истинном условии. */ if (crc & 0x8000) + /* Записывает crc значением (crc << 1) ^ 0x1021; данные crc. */ crc = (crc << 1) ^ 0x1021; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Продолжает список аргументов, полей или выражение crc <<= 1;; порядок элементов сохраняется. */ crc <<= 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение } return crc;; порядок элементов сохраняется. */ } return crc; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif /* CRC-16 is based on the polynomial x^16 + x^15 + x^2 + 1. Bits are */ /* sent LSB to MSB. */ +/* Начинает функцию get_crc_16; назначение модуля — таблицы и функции вычисления контрольных сумм CRC. */ unsigned int get_crc_16(unsigned int crc,unsigned int *buf,unsigned long size ) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Условие компиляции !(FAST_CRC & !MAKE_TABS): выбранный блок включается в текущий вариант прошивки. */ #if !(FAST_CRC & !MAKE_TABS) + /* Продолжает список аргументов, полей или выражение register unsigned int i;; порядок элементов сохраняется. */ register unsigned int i; + /* Продолжает список аргументов, полей или выражение register unsigned int ch;; порядок элементов сохраняется. */ register unsigned int ch; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Повторяет или ожидает, пока выполняется while (size--). */ while (size--) { +/* Условие компиляции FAST_CRC & !MAKE_TABS: выбранный блок включается в текущий вариант прошивки. */ #if FAST_CRC & !MAKE_TABS + /* Записывает crc значением (crc >> 8) ^ crc_16_tab[ (crc ^ *buf++) & 0xff ]; данные crc. */ crc = (crc >> 8) ^ crc_16_tab[ (crc ^ *buf++) & 0xff ]; + /* Записывает crc значением crc & 0xffff; данные crc. */ crc = crc & 0xffff; +/* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Записывает ch значением *buf++; данные ch. */ ch = *buf++; + /* Цикл for (i = 0; i < 8; i++) ; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 8; i++) { + /* Проверяет if ((crc ^ ch) & 1); последующий оператор выполняется только при истинном условии. */ if ((crc ^ ch) & 1) + /* Записывает crc значением (crc >> 1) ^ 0xa001; данные crc. */ crc = (crc >> 1) ^ 0xa001; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Продолжает список аргументов, полей или выражение crc >>= 1;; порядок элементов сохраняется. */ crc >>= 1; + /* Продолжает список аргументов, полей или выражение ch >>= 1;; порядок элементов сохраняется. */ ch >>= 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Продолжает список аргументов, полей или выражение } return (crc & 0xffff);; порядок элементов сохраняется. */ } return (crc & 0xffff); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию get_crc_16b; назначение модуля — таблицы и функции вычисления контрольных сумм CRC. */ unsigned int get_crc_16b(unsigned int crc,unsigned int *buf,unsigned long size ) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - + +/* Объявляет x — данные x; dword — данные dword; byte — данные byte. */ unsigned int x, dword, byte; +/* Объявляет i — данные i. */ unsigned long i; - for (i = 0; i < size; i++) + /* Цикл for (i = 0; i < size; i++); задаёт начальное значение, условие продолжения и шаг перебора. */ + for (i = 0; i < size; i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает x значением i % 2; данные x. */ x = i % 2; - - dword = buf[i/2]; -// dword = *buf; - - if (x == 0) + /* Записывает dword значением buf[i/2]; данные dword. */ + dword = buf[i/2]; +// dword = *buf; + + + /* Проверяет if (x == 0); последующий оператор выполняется только при истинном условии. */ + if (x == 0) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает byte значением ((dword >> 8)&0xFF); данные byte. */ byte = ((dword >> 8)&0xFF); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - if (x == 1) + /* Проверяет if (x == 1); последующий оператор выполняется только при истинном условии. */ + if (x == 1) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает byte значением (dword & 0xFF); данные byte. */ byte = (dword & 0xFF); - } - + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + + /* Записывает crc значением (crc >> 8) ^ crc_16_tab[ (crc ^ (byte) ) & 0xff ]; данные crc. */ crc = (crc >> 8) ^ crc_16_tab[ (crc ^ (byte) ) & 0xff ]; + /* Записывает crc значением crc & 0xffff; данные crc. */ crc = crc & 0xffff; - + // crc = crc + ((byte) & 0xff); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - + + /* Завершает get_crc_16b и возвращает (crc & 0xffff). */ return (crc & 0xffff); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию get_crc16; назначение модуля — таблицы и функции вычисления контрольных сумм CRC. */ int get_crc16(unsigned int *buf, int size ) -{ +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Объявляет crc16 — данные crc16; i — данные i; j — данные j. */ int crc16,i,j; - + + /* Записывает crc16 значением 0xFFFF; данные crc16. */ crc16=0xFFFF; + /* Цикл for(i=0;i>1)^Poln; последующий оператор выполняется только при истинном условии. */ if(crc16&1) crc16=(crc16>>1)^Poln; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else crc16=crc16>>1; + /* Записывает crc16 значением crc16^((buf[i]>>8)&0xFF); данные crc16. */ crc16=crc16^((buf[i]>>8)&0xFF); + /* Цикл for (j=0;j<8;j++); задаёт начальное значение, условие продолжения и шаг перебора. */ for (j=0;j<8;j++) + /* Проверяет if(crc16&1) crc16=(crc16>>1)^Poln; последующий оператор выполняется только при истинном условии. */ if(crc16&1) crc16=(crc16>>1)^Poln; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else crc16=crc16>>1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Завершает get_crc16 и возвращает crc16. */ return crc16; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/ecan.c b/Source/Internal/ecan.c index 8fe4a4e..f61ba4f 100644 --- a/Source/Internal/ecan.c +++ b/Source/Internal/ecan.c @@ -1,294 +1,490 @@ +/* Штатный eCAN и отдельный служебный обмен УМП/GAS. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */ #include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" // DSP281x Headerfile Include File +/* Подключает "ecan.h": штатный eCAN и отдельный служебный обмен УМП/GAS. */ #include "ecan.h" // DSP281x Headerfile Include File +/* Подключает "tools.h": настройка внешней памяти и служебные задержки. */ #include "tools.h" // DSP281x Headerfile Include File +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */ #include "message.h" +/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */ #include "peripher.h" +/* Подключает "log_to_mem.h": двухбанковый регистратор событий нагрузки во внешней RAM. */ #include "log_to_mem.h" +/* Подключает "DAC.h": выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ #include "DAC.h" +/* Подключает "ump_can_protocol.h": настройки и интерфейс ump_can_protocol. */ #include "ump_can_protocol.h" +/* Подключает "gas167.h": дополнительная карта GAS 167/v1 только для новой EEPROM M95M02. */ #include "gas167.h" // Prototype statements for functions found within this file. +/* Принимает CAN в прерывании, разбирает служебный запрос или передаёт данные штатному протоколу. */ interrupt void CANa_handler(void); +/* Объявляет интерфейс функции CANa_reset_err; реализация вызывается через этот прототип. */ interrupt void CANa_reset_err(void); // Global variable for this example +/* Объявляет ErrorCount — ошибка число. */ Uint32 ErrorCount; +/* Объявляет MessageReceivedCount — Message Received число. */ Uint32 MessageReceivedCount; +/* Объявляет MessageTransivedCount — Message Transived число. Начальное значение задаётся справа от знака равенства. */ Uint32 MessageTransivedCount=0; +/* Объявляет TestMbox1 — данные TestMbox1. Начальное значение задаётся справа от знака равенства. */ Uint32 TestMbox1 = 0; +/* Объявляет TestMbox2 — данные TestMbox2. Начальное значение задаётся справа от знака равенства. */ Uint32 TestMbox2 = 0; +/* Объявляет TestMbox3 — данные TestMbox3. Начальное значение задаётся справа от знака равенства. */ Uint32 TestMbox3 = 0; +/* Объявляет CanTimeOutErrorTR — CAN Time Out ошибка TR. Начальное значение задаётся справа от знака равенства. */ int CanTimeOutErrorTR = 0; +/* Объявляет wait — данные wait. Начальное значение задаётся справа от знака равенства. */ int wait=0; -/* MBOX2 âûäåëåí ïîä îòâåòû ðåãèñòðàòîðà; øòàòíûé MBOX0 ïðîäîëæàåò - * ïåðåäàâàòü òåõíîëîãè÷åñêèå äàííûå íåçàâèñèìî. ISR òîëüêî ñòàâèò çàïðîñ, - * à ñíèìîê è îòïðàâêà êîðîòêèìè øàãàìè âûïîëíÿþòñÿ â îñíîâíîì öèêëå. */ +/* MBOX2 выделен под ответы регистратора; штатный MBOX0 продолжает + * передавать технологические данные независимо. ISR только ставит запрос, + * а снимок и отправка короткими шагами выполняются в основном цикле. */ +/* Объявляет ump_can_pending — флаг ожидающего запроса служебного CAN между ISR и главным циклом. volatile требует фактического чтения или записи при каждом доступе. */ static volatile unsigned int ump_can_pending; +/* Объявляет ump_can_tag — ump CAN tag; ump_can_address — ump CAN адрес; ump_can_value — ump CAN value. volatile требует фактического чтения или записи при каждом доступе. */ static volatile unsigned int ump_can_tag, ump_can_address, ump_can_value; +/* Объявляет ump_can_reply — замороженные слова ответа служебного CAN. */ static unsigned int ump_can_reply[UMP_CAN_MAX_WORDS]; +/* Объявляет ump_can_length — ump CAN длина; ump_can_index — ump CAN index; ump_can_reply_tag — ump CAN reply tag. */ static unsigned int ump_can_length, ump_can_index, ump_can_reply_tag; +/* Объявляет ump_can_waiting — ump CAN waiting. */ static unsigned int ump_can_waiting; +/* Объявляет ump_can_sent_at — время последней передачи фрагмента ответа CAN. */ static unsigned long ump_can_sent_at; +/* Настраивает eCAN, скорость, почтовые ящики и маршрутизацию прерываний для выбранного режима платы. */ void InitCan(int Port, int DevNum) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - struct ECAN_REGS ECanShadow; + /* Описывает структуру ECAN_REGS ECanShadow;; порядок полей определяет расположение данных. */ + struct ECAN_REGS ECanShadow; + /* Продолжает список аргументов, полей или выражение volatile struct ECAN_REGS * ECanRegs;; порядок элементов сохраняется. */ volatile struct ECAN_REGS * ECanRegs; + /* Продолжает список аргументов, полей или выражение volatile struct ECAN_MBOXES * ECanMboxes;; порядок элементов сохраняется. */ volatile struct ECAN_MBOXES * ECanMboxes; + /* Продолжает список аргументов, полей или выражение volatile struct MOTO_REGS * ECanMOTORegs;; порядок элементов сохраняется. */ volatile struct MOTO_REGS * ECanMOTORegs; + /* Объявляет id — данные id. Начальное значение задаётся справа от знака равенства. */ long id = 0x80BA0000; + /* Изменяет счётчик в выражении DevNum--; на один для следующего шага. */ DevNum--; + /* Проверяет if(DevNum<0)DevNum=0; последующий оператор выполняется только при истинном условии. */ if(DevNum<0)DevNum=0; + /* Проверяет if(DevNum>15)DevNum=15; последующий оператор выполняется только при истинном условии. */ if(DevNum>15)DevNum=15; - + // Configure CAN pins using GPIO regs here + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает ECanRegs значением &ECanaRegs; E CAN Regs. */ ECanRegs = &ECanaRegs; + /* Записывает ECanMboxes значением &ECanaMboxes; E CAN Mboxes. */ ECanMboxes = &ECanaMboxes; + /* Записывает ECanMOTORegs значением &ECanaMOTORegs; E CAN MOTO Regs. */ ECanMOTORegs = &ECanaMOTORegs; + /* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO30 значением 1; аппаратная линия ввода/вывода GPIO30. */ GpioCtrlRegs.GPAMUX2.bit.GPIO30 = 1; + /* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO31 значением 1; аппаратная линия ввода/вывода GPIO31. */ GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 1; // Configure the eCAN RX and TX pins for eCAN transmissions + /* Записывает ECanRegs->CANTIOC.all значением 8; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANTIOC.all = 8; // only 3rd bit, TXFUNC, is significant + /* Записывает ECanRegs->CANRIOC.all значением 8; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANRIOC.all = 8; // only 3rd bit, RXFUNC, is significant // Specify that 8 bits will be sent/received + /* Записывает ECanMboxes->MBOX0.MSGCTRL.all значением 0x00000008; представление регистра целым словом без разбиения на битовые поля. */ ECanMboxes->MBOX0.MSGCTRL.all = 0x00000008; + /* Записывает ECanMboxes->MBOX1.MSGCTRL.all значением 0x00000008; представление регистра целым словом без разбиения на битовые поля. */ ECanMboxes->MBOX1.MSGCTRL.all = 0x00000008; + /* Записывает ECanMboxes->MBOX2.MSGCTRL.all значением 0x00000008; представление регистра целым словом без разбиения на битовые поля. */ ECanMboxes->MBOX2.MSGCTRL.all = 0x00000008; - + // Disable all Mailboxes // Required before writing the MSGIDs + /* Записывает ECanRegs->CANME.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANME.all = 0; -// çàäàåì àäðåñ 0 àùèêa íà ïåðåäà÷ó - ECanMboxes->MBOX0.MSGID.all = id + 0x10 + DevNum; +// задаем адрес 0 ащикa на передачу + /* Записывает ECanMboxes->MBOX0.MSGID.all значением id + 0x10 + DevNum; представление регистра целым словом без разбиения на битовые поля. */ + ECanMboxes->MBOX0.MSGID.all = id + 0x10 + DevNum; -// çàäàåì àäðåñ 1 àùèêa íà ïðèåì - ECanMboxes->MBOX1.MSGID.all = id + DevNum; //ïîìåíàòü!!!! 1 è 0!!! +// задаем адрес 1 ащикa на прием + /* Записывает ECanMboxes->MBOX1.MSGID.all значением id + DevNum; представление регистра целым словом без разбиения на битовые поля. */ + ECanMboxes->MBOX1.MSGID.all = id + DevNum; //поменать!!!! 1 и 0!!! -// MBOX0 è MBOX2 ïåðåäàþò äàííûå; MBOX1 ïðèíèìàåò êîìàíäû. +// MBOX0 и MBOX2 передают данные; MBOX1 принимает команды. + /* Записывает ECanMboxes->MBOX2.MSGID.all значением id + 0x20 + DevNum; представление регистра целым словом без разбиения на битовые поля. */ ECanMboxes->MBOX2.MSGID.all = id + 0x20 + DevNum; + /* Записывает ECanRegs->CANMD.all значением 0xFFFFFFFA; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANMD.all = 0xFFFFFFFA; - -// Âêëþ÷àåì òðè mailbox: òåëåìåòðèÿ, êîìàíäû è îòâåòû ëîããåðà. + +// Включаем три mailbox: телеметрия, команды и ответы логгера. + /* Записывает ECanRegs->CANME.all значением 0x00000007; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANME.all = 0x00000007; // Clear all TAn bits + /* Записывает ECanRegs->CANTA.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANTA.all = 0xFFFFFFFF; // Clear all RMPn bits + /* Записывает ECanRegs->CANRMP.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANRMP.all = 0xFFFFFFFF; // Clear all interrupt flag bits + /* Записывает ECanRegs->CANGIF0.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANGIF0.all = 0xFFFFFFFF; + /* Записывает ECanRegs->CANGIF1.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANGIF1.all = 0xFFFFFFFF; // Clear all error and status bits + /* Записывает ECanRegs->CANES.all значением 0xffffffff; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANES.all=0xffffffff; // Request permission to change the configuration registers + /* Записывает ECanShadow.CANMC.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ ECanShadow.CANMC.all = 0; + /* Записывает ECanShadow.CANMC.bit.MBCC значением 1; данные MBCC. */ ECanShadow.CANMC.bit.MBCC = 1; // Mailbox timestamp counter clear bit + /* Записывает ECanShadow.CANMC.bit.TCC значением 1; данные TCC. */ ECanShadow.CANMC.bit.TCC = 1; // Time stamp counter MSB clear bit + /* Записывает ECanShadow.CANMC.bit.SCB значением 1; данные SCB. */ ECanShadow.CANMC.bit.SCB = 1; // eCAN mode (reqd to access 32 mailboxes) + /* Записывает ECanShadow.CANMC.bit.WUBA значением 1; данные WUBA. */ ECanShadow.CANMC.bit.WUBA = 1; // Wake up on bus activity + /* Записывает ECanShadow.CANMC.bit.ABO значением 1; данные ABO. */ ECanShadow.CANMC.bit.ABO = 1; // Auto bus on - ECanShadow.CANMC.bit.CCR = 1; + /* Записывает ECanShadow.CANMC.bit.CCR значением 1; данные CCR. */ + ECanShadow.CANMC.bit.CCR = 1; // ECanShadow.CANMC.bit.STM = 1; // self-test loop-back + /* Записывает ECanRegs->CANMC.all значением ECanShadow.CANMC.all; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANMC.all = ECanShadow.CANMC.all; + /* Повторяет или ожидает, пока выполняется while(!ECanRegs->CANES.bit.CCE);. */ while(!ECanRegs->CANES.bit.CCE); // Wait for CCE bit to be set.. - -// íàñòðèâàåì ñêîðîñòü CAN + +// настриваем скорость CAN + /* Записывает ECanShadow.CANBTC.all значением ECanRegs->CANBTC.all; представление регистра целым словом без разбиения на битовые поля. */ ECanShadow.CANBTC.all = ECanRegs->CANBTC.all; + /* Записывает ECanShadow.CANBTC.bit.SJWREG значением 1; данные SJWREG. */ ECanShadow.CANBTC.bit.SJWREG=1; + /* Записывает ECanShadow.CANBTC.bit.BRPREG значением (CLKMULT * 3) - 1; данные BRPREG. */ ECanShadow.CANBTC.bit.BRPREG = (CLKMULT * 3) - 1; + /* Записывает ECanShadow.CANBTC.bit.TSEG1REG значением 15; данные TSEG1REG. */ ECanShadow.CANBTC.bit.TSEG1REG = 15; + /* Записывает ECanShadow.CANBTC.bit.TSEG2REG значением 2; данные TSEG2REG. */ ECanShadow.CANBTC.bit.TSEG2REG = 2; + /* Записывает ECanRegs->CANBTC.all значением ECanShadow.CANBTC.all; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANBTC.all = ECanShadow.CANBTC.all; + /* Записывает ECanShadow.CANMC.bit.CCR значением 0; данные CCR. */ ECanShadow.CANMC.bit.CCR = 0; // Set CCR = 0 + /* Записывает ECanRegs->CANMC.all значением ECanShadow.CANMC.all; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANMC.all = ECanShadow.CANMC.all; + /* Повторяет или ожидает, пока выполняется while(ECanRegs->CANES.bit.CCE);. */ while(ECanRegs->CANES.bit.CCE); // Wait for CCE bit to be cleared.. -// çàäàåì òàéìàóòû äëà îæèäàíèà îòïðàâêè ïîëó÷åíèà ïîñûëêè +// задаем таймауты дла ожиданиа отправки получениа посылки + /* Записывает ECanMOTORegs->MOTO0 значением 550000; E CAN MOTO Regs 0. */ ECanMOTORegs->MOTO0 = 550000; + /* Записывает ECanMOTORegs->MOTO1 значением 550000; E CAN MOTO Regs 1. */ ECanMOTORegs->MOTO1 = 550000; + /* Записывает ECanRegs->CANTOC.all значением 1; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANTOC.all = 1; + /* Записывает ECanRegs->CANTOS.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANTOS.all = 0; // clear all time-out flags + /* Записывает ECanRegs->CANTSC значением 0; E CAN Regs CANTSC. */ ECanRegs->CANTSC = 0; // clear time-out counter + /* Записывает ECanShadow.CANGIM.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ ECanShadow.CANGIM.all = 0; + /* Записывает ECanRegs->CANMIM.all значением 2; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANMIM.all = 2; // Enable interrupts of box 1 + /* Записывает ECanRegs->CANMIL.all значением 0x00000000; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANMIL.all = 0x00000000; // All mailbox interrupts are generated on interrupt line 0. + /* Записывает ECanShadow.CANGIM.bit.I0EN значением 1; данные I0EN. */ ECanShadow.CANGIM.bit.I0EN = 1; + /* Записывает ECanShadow.CANGIM.bit.MTOM значением 1; данные MTOM. */ ECanShadow.CANGIM.bit.MTOM = 1; + /* Записывает ECanShadow.CANGIM.bit.I1EN значением 1; данные I1EN. */ ECanShadow.CANGIM.bit.I1EN = 1; + /* Записывает ECanShadow.CANGIM.bit.GIL значением 1; данные GIL. */ ECanShadow.CANGIM.bit.GIL = 1; + /* Записывает ECanRegs->CANGIM.all значением ECanShadow.CANGIM.all; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANGIM.all = ECanShadow.CANGIM.all; + /* Записывает PieVectTable.ECAN0INTA значением &CANa_handler; данные ECAN0INTA. */ PieVectTable.ECAN0INTA = &CANa_handler; + /* Записывает PieCtrlRegs.PIEIER9.bit.INTx5 значением 1; данные INTx5. */ PieCtrlRegs.PIEIER9.bit.INTx5=1; // PIE Group 9, INT6 + /* Записывает PieVectTable.ECAN1INTA значением &CANa_reset_err; данные ECAN1INTA. */ PieVectTable.ECAN1INTA = &CANa_reset_err; + /* Записывает PieCtrlRegs.PIEIER9.bit.INTx6 значением 1; данные INTx6. */ PieCtrlRegs.PIEIER9.bit.INTx6=1; // PIE Group 9, INT6 - + + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; // Enable CPU INT + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; -// çàâåðøèëè íàñòðîéêó CAN àùèêîâ +// завершили настройку CAN ащиков + /* Записывает MessageReceivedCount значением 0; Message Received число. */ MessageReceivedCount = 0; + /* Записывает ErrorCount значением 0; ошибка число. */ ErrorCount = 0; + /* Записывает CanTimeOutErrorTR значением 0; CAN Time Out ошибка TR. */ CanTimeOutErrorTR=0; + /* Записывает MessageTransivedCount значением 0; Message Transived число. */ MessageTransivedCount=0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Упаковывает адрес и технологические слова в штатный CAN-кадр и запускает передачу mailbox. */ void CAN_send(int Port, int data[], int Addr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет hiword — данные hiword; loword — данные loword. */ unsigned long hiword,loword; + /* Продолжает список аргументов, полей или выражение volatile struct ECAN_REGS * ECanRegs;; порядок элементов сохраняется. */ volatile struct ECAN_REGS * ECanRegs; + /* Продолжает список аргументов, полей или выражение volatile struct ECAN_MBOXES * ECanMboxes;; порядок элементов сохраняется. */ volatile struct ECAN_MBOXES * ECanMboxes; + /* Записывает ECanRegs значением &ECanaRegs; E CAN Regs. */ ECanRegs = &ECanaRegs; + /* Записывает ECanMboxes значением &ECanaMboxes; E CAN Mboxes. */ ECanMboxes = &ECanaMboxes; + /* Проверяет if(wait); последующий оператор выполняется только при истинном условии. */ if(wait) + /* Проверяет if(!(ECanRegs->CANTA.all & 1)); последующий оператор выполняется только при истинном условии. */ if(!(ECanRegs->CANTA.all & 1)) + /* Проверяет if(!(ECanRegs->CANAA.all & 1)); последующий оператор выполняется только при истинном условии. */ if(!(ECanRegs->CANAA.all & 1)) + /* Завершает CAN_send без возвращаемого значения. */ return; + /* Записывает ECanRegs->CANTA.all значением 1; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANTA.all = 1; + /* Записывает ECanRegs->CANAA.all значением 1; представление регистра целым словом без разбиения на битовые поля. */ ECanRegs->CANAA.all = 1; + /* Записывает hiword значением ((((Uint32) Addr ) & 0xffff)<<16)| 0xE0000000 |; данные hiword. */ hiword= ((((Uint32) Addr ) & 0xffff)<<16)| 0xE0000000 | + /* Продолжает список аргументов, полей или выражение ((((Uint32)data[Addr ]) & 0xffff) );; порядок элементов сохраняется. */ ((((Uint32)data[Addr ]) & 0xffff) ); + /* Записывает loword значением ((((Uint32)data[Addr+1]) & 0xffff)<<16)|; данные loword. */ loword= ((((Uint32)data[Addr+1]) & 0xffff)<<16)| + /* Продолжает список аргументов, полей или выражение ((((Uint32)data[Addr+2]) & 0xffff) );; порядок элементов сохраняется. */ ((((Uint32)data[Addr+2]) & 0xffff) ); + /* Записывает ECanMboxes->MBOX0.MDH.all значением hiword; представление регистра целым словом без разбиения на битовые поля. */ ECanMboxes->MBOX0.MDH.all = hiword; + /* Записывает ECanMboxes->MBOX0.MDL.all значением loword; представление регистра целым словом без разбиения на битовые поля. */ ECanMboxes->MBOX0.MDL.all = loword; + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает ECanRegs->CANTSC значением 0; E CAN Regs CANTSC. */ ECanRegs->CANTSC = 0; // clear time-out counter + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; - ECanRegs->CANTRS.all = 1; // çàïóñòèòü ïåðåäà÷ó - + /* Записывает ECanRegs->CANTRS.all значением 1; представление регистра целым словом без разбиения на битовые поля. */ + ECanRegs->CANTRS.all = 1; // запустить передачу + + /* Записывает wait значением 1; данные wait. */ wait=1; + /* Вызывает led1_toggle с аргументами () в текущей последовательности операций. */ led1_toggle(); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию Handlai; назначение модуля — штатный eCAN и отдельный служебный обмен УМП/GAS. */ void Handlai(volatile struct ECAN_MBOXES * ECanMboxes) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет adr — данные adr. */ unsigned int adr; + /* Объявляет bit — представление регистра отдельными битовыми полями. */ unsigned int bit[3]; + /* Объявляет hiword — данные hiword; loword — данные loword. */ unsigned long hiword,loword; + /* Объявляет Data — данные. */ int Data[3]; + /* Записывает Lonely значением 0; данные Lonely. */ Lonely=0; + /* Записывает hiword значением ECanMboxes->MBOX1.MDH.all; данные hiword. */ hiword = ECanMboxes->MBOX1.MDH.all; + /* Записывает loword значением ECanMboxes->MBOX1.MDL.all; данные loword. */ loword = ECanMboxes->MBOX1.MDL.all; - /* Ñëóæåáíûé çàïðîñ ëîããåðà íå ÿâëÿåòñÿ êîìàíäîé ÓÌÏ è ñàì íå äîëæåí - * çàïîëíÿòü æóðíàë CAN-ñîáûòèÿìè ïðè îíëàéí-÷òåíèè. Êîðîòêèå êàäðû - * îòáðàñûâàþòñÿ: íåçàïîëíåííûå áàéòû mailbox ìîãëè îñòàòüñÿ îò ïðîøëîãî. */ + /* Служебный запрос логгера не является командой УМП и сам не должен + * заполнять журнал CAN-событиями при онлайн-чтении. Короткие кадры + * отбрасываются: незаполненные байты mailbox могли остаться от прошлого. */ + /* Проверяет if ((unsigned int)(hiword >> 16) == UMP_CAN_MARKER); последующий оператор выполняется только при истинном условии. */ if ((unsigned int)(hiword >> 16) == UMP_CAN_MARKER) { + /* Проверяет if (ECanMboxes->MBOX1.MSGCTRL.bit.DLC == 8 и (hiword & 0xFF00UL)); последующий оператор выполняется только при истинном условии. */ if (ECanMboxes->MBOX1.MSGCTRL.bit.DLC == 8 && (hiword & 0xFF00UL)) { + /* Записывает ump_can_tag значением (unsigned int)hiword; ump CAN tag. */ ump_can_tag = (unsigned int)hiword; + /* Записывает ump_can_address значением (unsigned int)(loword >> 16); ump CAN адрес. */ ump_can_address = (unsigned int)(loword >> 16); + /* Записывает ump_can_value значением (unsigned int)loword; ump CAN value. */ ump_can_value = (unsigned int)loword; + /* Записывает ump_can_pending значением 1; флаг ожидающего запроса служебного CAN между ISR и главным циклом. */ ump_can_pending = 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Завершает Handlai без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает adr значением (hiword >> 16); данные adr. */ adr = (hiword >> 16); + /* Записывает bit[0] значением adr & 0x8000; представление регистра отдельными битовыми полями. */ bit[0] = adr & 0x8000; + /* Записывает bit[1] значением adr & 0x4000; представление регистра отдельными битовыми полями. */ bit[1] = adr & 0x4000; + /* Записывает bit[2] значением adr & 0x2000; представление регистра отдельными битовыми полями. */ bit[2] = adr & 0x2000; + /* Оставляет биты маски adr значением 0x1fff; данные adr. */ adr &= 0x1fff; + /* Записывает Data[0] значением (hiword ) & 0xffff; данные. */ Data[0] = (hiword ) & 0xffff; + /* Записывает Data[1] значением (loword>>16) & 0xffff; данные. */ Data[1] = (loword>>16) & 0xffff; + /* Записывает Data[2] значением (loword ) & 0xffff; данные. */ Data[2] = (loword ) & 0xffff; - + + /* Проверяет if(bit[0]) if(adr < ANSWER_LEN и; последующий оператор выполняется только при истинном условии. */ if(bit[0]) if(adr < ANSWER_LEN && + /* Записывает modbus[adr] значением Data[0]; adr++; массив технологических регистров; слово int на C28x занимает 16 бит. */ !(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[0]; adr++; + /* Проверяет if(bit[1]) if(adr < ANSWER_LEN и; последующий оператор выполняется только при истинном условии. */ if(bit[1]) if(adr < ANSWER_LEN && + /* Записывает modbus[adr] значением Data[1]; adr++; массив технологических регистров; слово int на C28x занимает 16 бит. */ !(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[1]; adr++; + /* Проверяет if(bit[2]) if(adr < ANSWER_LEN и; последующий оператор выполняется только при истинном условии. */ if(bit[2]) if(adr < ANSWER_LEN && + /* Записывает modbus[adr] значением Data[2]; массив технологических регистров; слово int на C28x занимает 16 бит. */ !(Desk == dsk_LOAD && (adr == 0x7CU || adr == 0x7DU))) modbus[adr] = Data[2]; - /* Ôèêñèðóåì ïðèìåí¸ííóþ êîìàíäó äî âûõîäà èç îáðàáîò÷èêà CAN. */ + /* Фиксируем применённую команду до выхода из обработчика CAN. */ /* A short frame cannot confirm voltage freshness. Service frames * UMP_MARKER return above and do not refresh this timeout. */ + /* Проверяет if (ECanMboxes->MBOX1.MSGCTRL.bit.DLC == 8); последующий оператор выполняется только при истинном условии. */ if (ECanMboxes->MBOX1.MSGCTRL.bit.DLC == 8) + /* Вызывает Load_voltage_can. Принимает напряжение выбранной нагрузки из достоверных слов CAN и сбрасывает возраст только нужного измерения. */ Load_voltage_can((unsigned int)(hiword >> 16), Data[0], Data[1], Data[2]); + /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */ ump_log_can((unsigned int)(hiword >> 16), Data[0], Data[1], Data[2]); + /* Вызывает led2_toggle с аргументами () в текущей последовательности операций. */ led2_toggle(); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Принимает CAN в прерывании, разбирает служебный запрос или передаёт данные штатному протоколу. */ interrupt void CANa_handler(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG95; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG95; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; + /* Вызывает Handlai с аргументами (&ECanaMboxes) в текущей последовательности операций. */ Handlai(&ECanaMboxes); + /* Записывает ECanaRegs.CANRMP.all значением 2; представление регистра целым словом без разбиения на битовые поля. */ ECanaRegs.CANRMP.all = 2; + /* Устанавливает биты PieCtrlRegs.PIEACK.bit.ACK9 значением 1; данные ACK9. */ PieCtrlRegs.PIEACK.bit.ACK9 |= 1; // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию CANa_reset_err; назначение модуля — штатный eCAN и отдельный служебный обмен УМП/GAS. */ interrupt void CANa_reset_err(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Set interrupt priority: + /* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all; + /* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */ IER |= M_INT9; + /* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */ IER &= MINT9; // Set "global" priority + /* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG96; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all &= MG96; // Set "group" priority + /* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts + /* Разрешение маскируемых прерываний ядра. */ EINT; + /* Записывает ECanaRegs.CANTRR.all значением 1; представление регистра целым словом без разбиения на битовые поля. */ ECanaRegs.CANTRR.all = 1; + /* Изменяет счётчик в выражении CanTimeOutErrorTR++; на один для следующего шага. */ CanTimeOutErrorTR++; + /* Устанавливает биты PieCtrlRegs.PIEACK.bit.ACK9 значением 1; данные ACK9. */ PieCtrlRegs.PIEACK.bit.ACK9 |= 1; // Restore registers saved: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */ PieCtrlRegs.PIEIER9.all = TempPIEIER; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } //=========================================================================== @@ -296,59 +492,106 @@ interrupt void CANa_reset_err(void) //=========================================================================== -/* Îäèí âûçîâ îáñëóæèâàåò ìàêñèìóì îäèí êàäð è íèêîãäà íå æä¸ò ACK â öèêëå. - * Ñíèìîê ôèêñèðóåòñÿ îäèí ðàç íà çàïðîñ: CAN-ôðàãìåíòû íå ñìåøèâàþò - * çíà÷åíèÿ äî/ïîñëå ïåðåêëþ÷åíèÿ êîëüöåâîãî áàíêà. Íîâûå çàïðîñû çàáèðàåì - * ïîñëå çàâåðøåíèÿ ïðåäûäóùåãî îòâåòà. GUI äåðæèò òîëüêî îäèí çàïðîñ. */ +/* Один вызов обслуживает максимум один кадр и никогда не ждёт ACK в цикле. + * Снимок фиксируется один раз на запрос: CAN-фрагменты не смешивают + * значения до/после переключения кольцевого банка. Новые запросы забираем + * после завершения предыдущего ответа. GUI держит только один запрос. */ +/* В главном цикле готовит замороженный ответ служебного CAN и отправляет его двухсловными фрагментами. */ void UMP_CAN_service(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved; tag — данные tag; address — адрес; value — данные value; error — ошибка. */ unsigned int saved, tag, address, value, error; + /* Объявляет hiword — данные hiword; loword — данные loword. */ uint32_t hiword, loword; + /* Проверяет if (ump_can_waiting); последующий оператор выполняется только при истинном условии. */ if (ump_can_waiting) { + /* Проверяет if (ECanaRegs.CANTA.all & 4UL); последующий оператор выполняется только при истинном условии. */ if (ECanaRegs.CANTA.all & 4UL) { + /* Записывает ECanaRegs.CANTA.all значением 4UL; представление регистра целым словом без разбиения на битовые поля. */ ECanaRegs.CANTA.all = 4UL; + /* Записывает ump_can_waiting значением 0; ump CAN waiting. */ ump_can_waiting = 0; + /* Проверяет else if ((ECanaRegs.CANAA.all & 4UL) или; последующий оператор выполняется только при истинном условии. */ } else if ((ECanaRegs.CANAA.all & 4UL) || + /* Продолжает список аргументов, полей или выражение ((unsigned long)CpuTimer1.InterruptCount - ump_can_sent_at > 250UL)) {; порядок элементов сохраняется. */ ((unsigned long)CpuTimer1.InterruptCount - ump_can_sent_at > 250UL)) { - /* Íåò ïîäòâåðæäåíèÿ øèíû: îòìåíÿåì òîëüêî ñëóæåáíûé mailbox. - * GUI îáíàðóæèò íåïîëíûé îòâåò ïî òàéì-àóòó; óïðàâëåíèå MBOX0 - * è ïðè¸ì êîìàíä MBOX1 ïðîäîëæàþòñÿ. */ + /* Нет подтверждения шины: отменяем только служебный mailbox. + * GUI обнаружит неполный ответ по тайм-ауту; управление MBOX0 + * и приём команд MBOX1 продолжаются. */ + /* Записывает ECanaRegs.CANTRR.all значением 4UL; представление регистра целым словом без разбиения на битовые поля. */ ECanaRegs.CANTRR.all = 4UL; - /* Äî ôàêòè÷åñêîãî çàâåðøåíèÿ îòìåíû mailbox íå ïåðåèñïîëüçóåì. */ + /* До фактического завершения отмены mailbox не переиспользуем. */ + /* Проверяет if (!(ECanaRegs.CANAA.all & 4UL)) return; последующий оператор выполняется только при истинном условии. */ if (!(ECanaRegs.CANAA.all & 4UL)) return; + /* Записывает ECanaRegs.CANAA.all значением 4UL; представление регистра целым словом без разбиения на битовые поля. */ ECanaRegs.CANAA.all = 4UL; + /* Записывает ump_can_waiting значением 0; ump CAN waiting. */ ump_can_waiting = 0; + /* Записывает ump_can_length значением 0; ump CAN длина. */ ump_can_length = 0; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ } else return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (ump_can_index >= ump_can_length и ump_can_pending); последующий оператор выполняется только при истинном условии. */ if (ump_can_index >= ump_can_length && ump_can_pending) { + /* Записывает saved значением __disable_interrupts(); данные saved. */ saved = __disable_interrupts(); + /* Записывает tag значением ump_can_tag; address = ump_can_address; value = ump_can_value; данные tag. */ tag = ump_can_tag; address = ump_can_address; value = ump_can_value; + /* Записывает ump_can_pending значением 0; флаг ожидающего запроса служебного CAN между ISR и главным циклом. */ ump_can_pending = 0; + /* Проверяет if (address >= 0x1300U и address < 0x1308U); последующий оператор выполняется только при истинном условии. */ if (address >= 0x1300U && address < 0x1308U) + /* Записывает ump_can_length значением Load_protection_prepare(tag & 0xFF, address, value, ump_can_reply, &error); ump CAN длина. */ ump_can_length = Load_protection_prepare(tag & 0xFF, address, value, ump_can_reply, &error); +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 + /* Проверяет else if (gas167_contains(address)); последующий оператор выполняется только при истинном условии. */ else if (gas167_contains(address)) + /* Записывает ump_can_length значением gas167_prepare(tag & 0xFF, address, value, 1, ump_can_reply, &error); ump CAN длина. */ ump_can_length = gas167_prepare(tag & 0xFF, address, value, 1, ump_can_reply, &error); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else ump_can_length = ump_can_prepare(tag & 0xFF, address, value, ump_can_reply, &error); + /* Записывает ump_can_reply_tag значением (tag & 0xFF00) | error; ump CAN reply tag. */ ump_can_reply_tag = (tag & 0xFF00) | error; + /* Записывает ump_can_index значением 0; ump CAN index. */ ump_can_index = 0; + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (ump_can_index >= ump_can_length) return; последующий оператор выполняется только при истинном условии. */ if (ump_can_index >= ump_can_length) return; - /* Ïåðåä ñëåäóþùèì ôðàãìåíòîì óñòóïàåì øòàòíîé òåëåìåòðèè MBOX0. */ + /* Перед следующим фрагментом уступаем штатной телеметрии MBOX0. */ + /* Проверяет if (ECanaRegs.CANTRS.all & 1UL) return; последующий оператор выполняется только при истинном условии. */ if (ECanaRegs.CANTRS.all & 1UL) return; + /* Проверяет if (!ump_tms28335_fragment(ump_can_reply, ump_can_length, ump_can_index/2,; последующий оператор выполняется только при истинном условии. */ if (!ump_tms28335_fragment(ump_can_reply, ump_can_length, ump_can_index/2, + /* Продолжает список аргументов, полей или выражение ump_can_reply_tag >> 8, ump_can_reply_tag & 255U, &loword, &hiword)) {; порядок элементов сохраняется. */ ump_can_reply_tag >> 8, ump_can_reply_tag & 255U, &loword, &hiword)) { + /* Записывает ump_can_length значением 0; ump CAN длина. */ ump_can_length = 0; + /* Завершает UMP_CAN_service без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает ECanaRegs.CANTA.all значением 4UL; ECanaRegs.CANAA.all = 4UL; представление регистра целым словом без разбиения на битовые поля. */ ECanaRegs.CANTA.all = 4UL; ECanaRegs.CANAA.all = 4UL; + /* Записывает ECanaMboxes.MBOX2.MDH.all значением hiword; представление регистра целым словом без разбиения на битовые поля. */ ECanaMboxes.MBOX2.MDH.all = hiword; + /* Записывает ECanaMboxes.MBOX2.MDL.all значением loword; представление регистра целым словом без разбиения на битовые поля. */ ECanaMboxes.MBOX2.MDL.all = loword; + /* Записывает ump_can_sent_at значением CpuTimer1.InterruptCount; время последней передачи фрагмента ответа CAN. */ ump_can_sent_at = CpuTimer1.InterruptCount; + /* Записывает ECanaRegs.CANTRS.all значением 4UL; представление регистра целым словом без разбиения на битовые поля. */ ECanaRegs.CANTRS.all = 4UL; + /* Записывает ump_can_waiting значением 1; ump CAN waiting. */ ump_can_waiting = 1; + /* Увеличивает ump_can_index значением 2; ump CAN index. */ ump_can_index += 2; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/filter_bat2.c b/Source/Internal/filter_bat2.c index a577836..85e3f13 100644 --- a/Source/Internal/filter_bat2.c +++ b/Source/Internal/filter_bat2.c @@ -1,18 +1,31 @@ +/* Накопительный фильтр измерительных каналов. Русские пояснения сохранены в UTF-8. */ +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Обновляет скользящий фильтр измерительного канала и его накопленные значения. */ float filterbat(FILTERBAT *b, float InpVarCurr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет y — данные y. */ float y; - y = (b->k_0 * (InpVarCurr + (b->i_0*2) + b->i_1)) + + /* Записывает y значением (b->k_0 * (InpVarCurr + (b->i_0*2) + b->i_1)) +; данные y. */ + y = (b->k_0 * (InpVarCurr + (b->i_0*2) + b->i_1)) + + /* Продолжает список аргументов, полей или выражение (b->k_1 * b->u_0) + (b->k_2 * b->u_1);; порядок элементов сохраняется. */ (b->k_1 * b->u_0) + (b->k_2 * b->u_1); + /* Записывает b->u_1 значением b->u_0; данные b->u_1. */ b->u_1=b->u_0; + /* Записывает b->u_0 значением y; данные b->u_0. */ b->u_0=y; + /* Записывает b->i_1 значением b->i_0; данные b->i_1. */ b->i_1=b->i_0; + /* Записывает b->i_0 значением InpVarCurr; данные b->i_0. */ b->i_0=InpVarCurr; - + + /* Завершает filterbat и возвращает y. */ return y; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/gas167.c b/Source/Internal/gas167.c index 0404dfc..f9b4846 100644 --- a/Source/Internal/gas167.c +++ b/Source/Internal/gas167.c @@ -1,63 +1,117 @@ +/* Дополнительная карта GAS 167/v1 только для новой EEPROM M95M02. Русские пояснения сохранены в UTF-8. */ +/* Подключает границы GAS и общий выбор EEPROM; при профиле 0 интерфейс GAS исключён. */ #include "gas167.h" +/* Весь дополнительный код включается только для физически установленной M95M02; вариант AT25256B не растёт. */ #if EEPROM_M95M02 +/* Подключает тип платы dsk_LOAD и псевдонимы регистров, чтобы сохранять правила обычного Modbus. */ #include "package.h" +/* Использует существующие технологические регистры без копии массива и без добавления RAM. */ extern int modbus[]; +/* Тип платы нужен для ограничений записи статусов и тайм-аута нагрузки. */ extern int Desk; +/* Вызывает штатную регистрацию изменения команды; нового регистратора GAS не создаёт. */ extern void ump_log_rs(void); +/* Постоянный дескриптор из восьми слов описывает карту 167/v1; область 0x5F00..0x5F07 доступна только для чтения. */ static const uint16_t gas167_info[GAS167_INFO_WORDS] = { + /* Слова 0..3: сигнатура GA/S1, версия профиля и номер проекта 167. */ 0x4741U, 0x5331U, GAS167_PROFILE_VERSION, 167U, + /* Слова 4..7: начало 0x5000, длина 128 слов, возможности RTU/CAN/FC06 и размер адресной единицы в словах. */ GAS167_REG_BASE, GAS167_REG_COUNT, GAS167_CAPABILITIES, 1U +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Проверяет одиночный адрес в двух непересекающихся диапазонах; весь блок дополнительно проверяет gas167_prepare. */ int gas167_contains(uint16_t address) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Беззнаковое 16-битное смещение проверяет 0x5000..0x507F: адрес ниже начала даёт большое смещение. */ return (uint16_t)(address - GAS167_REG_BASE) < GAS167_REG_COUNT || + /* Аналогично проверяет 0x5F00..0x5F07; промежуток между диапазонами остаётся недоступным. */ (uint16_t)(address - GAS167_INFO_BASE) < GAS167_INFO_WORDS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Записывает технологическое слово с теми же ограничениями, что и штатная функция Modbus FC06. */ static unsigned gas167_write(uint16_t offset, uint16_t value) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - /* Match the existing native Modbus write policy. These status words - * cannot be overwritten and an invalid timeout cannot bypass protection. */ + /* Правила записи совпадают со штатным Modbus: статусы защиты нельзя + * перезаписать, а недопустимый тайм-аут не позволяет обойти защиту. */ + /* На плате LOAD состояния 0x7C/0x7D принадлежат защите; запись отклоняется кодом неверного адреса 2. */ if (Desk == dsk_LOAD && (offset == 0x7CU || offset == 0x7DU)) return 2; + /* Для сохраняемого тайм-аута CAN нагрузки применяется проверка диапазона независимо от транспорта. */ if (Desk == dsk_LOAD && offset == 0x52U && + /* Значение 0 или больше 60000 мс недопустимо и возвращает код 3; защиту нельзя отключить такой записью. */ (value == 0U || value > 60000U)) return 3; - /* C28x int is one register word; reads always expose the raw uint16_t. */ + /* int C28x занимает одно слово регистра; чтение возвращает исходный uint16_t. */ + /* Сохраняет 16-битный рисунок регистра: знаковый int C28x занимает ровно одно слово, чтение вернёт uint16_t. */ modbus[offset] = (int)value; + /* Запись слова команд 127 вызывает существующий хук регистратора, как обычный Modbus. */ if (offset == 127U) ump_log_rs(); + /* Возвращает успех записи; исходное правило ошибок Modbus сохраняется. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Готовит FC03/FC06: value — число слов чтения или значение записи, address — глобальный словный адрес. */ unsigned gas167_prepare(unsigned function, uint16_t address, uint16_t value, + /* can включает парное чтение CAN; reply вмещает 124 слова, error получает код Modbus; вызывающий код удерживает краткую блокировку IRQ. */ int can, uint16_t *reply, unsigned *error) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Смещение адреса внутри выбранной области; uint16_t задаёт правила вычисления на границах 0xFFFF. */ uint16_t offset; + /* Индекс копирования и число доступных слов в выбранной области — 128 или 8. */ unsigned i, available; + /* Признак обращения к постоянному дескриптору вместо технологических регистров. */ int info; + /* Не разыменовывает отсутствующие выходные буферы; ответ сформировать нельзя. */ if (!reply || !error) return 0; + /* Сначала считает запрос успешным; последующие проверки задают конкретный код ошибки. */ *error = 0; + /* Выбирает дескриптор только для его восьми допустимых стартовых адресов. */ info = (uint16_t)(address - GAS167_INFO_BASE) < GAS167_INFO_WORDS; + /* Переводит глобальный адрес в индекс выбранной области без изменения штатных адресов Modbus. */ offset = (uint16_t)(address - (info ? GAS167_INFO_BASE : GAS167_REG_BASE)); + /* Определяет границу выбранной области, чтобы следующий запрос не пересёк её конец. */ available = info ? GAS167_INFO_WORDS : GAS167_REG_COUNT; + /* GAS поддерживает только чтение FC03 и одиночную запись FC06; остальные функции возвращают исключение 1. */ if (function != 3U && function != 6U) *error = 1; + /* Отклоняет адрес вне выбранной области до любого чтения массива; исключение 2. */ else if (offset >= available) *error = 2; + /* Для FC06 длина не проверяется: value содержит записываемое слово. */ else if (function == 6U) { + /* Дескриптор запрещён для записи; технологическая область проходит проверку прав и тайм-аута. */ *error = info ? 2U : gas167_write(offset, value); + /* Чтение RTU допускает 1..124 слова; служебный CAN передаёт пары и поэтому требует чётную ненулевую длину. */ } else if (!value || value > GAS167_MAX_WORDS || (can && (value & 1U))) { + /* Неверная длина чтения получает исключение Modbus 3 без частичного ответа. */ *error = 3; + /* Проверяет остаток области через вычитание: запрос не выходит за границу, не оборачивается и не читает скрытый modbus[128]. */ } else if (value > available - offset) { + /* Пересечение конца области получает исключение Modbus 2; данные ещё не копировались. */ *error = 2; + /* Только полностью проверенный запрос попадает в ветвь копирования снимка. */ } else { - /* Validate the entire block before reading. A block cannot cross a - * region boundary, wrap at 0xFFFF, or leak the hidden parameter word. */ + /* Проверяется весь блок до чтения: нельзя пересечь конец области, + * перейти через 0xFFFF или получить скрытое слово параметров. */ + /* Копирует точно запрошенное число слов, не выполняя EEPROM I/O и не выделяя память. */ for (i = 0; i < value; ++i) + /* Берёт постоянное слово дескриптора либо сырой 16-битный регистр; согласованность обеспечена блокировкой вызывающего транспорта. */ reply[i] = info ? gas167_info[offset+i] : (uint16_t)modbus[offset+i]; + /* Для успешного чтения возвращает фактическое число слов; транспорт сам строит RTU или CAN-кадры. */ return value; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Для записи либо ошибки сохраняет исходный адрес, используемый транспортом при формировании ответа. */ reply[0] = address; + /* Сохраняет исходное значение или длину рядом с адресом; массив ответа содержит два слова. */ reply[1] = value; + /* Возвращает двухсловный результат записи/ошибки; конкретный код ошибки остаётся в error. */ return 2; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Завершает код GAS, доступный только при EEPROM_M95M02=1. */ #endif diff --git a/Source/Internal/kanal.c b/Source/Internal/kanal.c index c719f08..1aa3e45 100644 --- a/Source/Internal/kanal.c +++ b/Source/Internal/kanal.c @@ -1,183 +1,337 @@ +/* Последовательный вывод данных канала индикации. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP281x Headerfile Include File -#include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */ +#include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */ #include "message.h" +/* Подключает "kanal.h": последовательный вывод данных канала индикации. */ #include "kanal.h" +/* Подключает "pulto.h": обмен и индикация пульта. */ #include "pulto.h" +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" +/* Подключает "tools.h": настройка внешней памяти и служебные задержки. */ #include "tools.h" +/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */ #include "peripher.h" +/* Объявляет digits — данные digits. Начальное значение задаётся справа от знака равенства. */ int digits[16] = {63,6,91,79,102,109,125,7,127,111,64,0,0,0,121,0}; +/* Объявляет readr — данные readr. Начальное значение задаётся справа от знака равенства. */ int readr[5] = {0x08,0x0C,0x10,0x00,0x04}; +/* Начинает функцию DCLK; назначение модуля — последовательный вывод данных канала индикации. */ void DCLK(int x) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(x) GpioDataRegs.GPASET.bit.GPIO6=1; последующий оператор выполняется только при истинном условии. */ if(x) GpioDataRegs.GPASET.bit.GPIO6=1; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else GpioDataRegs.GPACLEAR.bit.GPIO6=1; -} +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} +/* Начинает функцию DOUT; назначение модуля — последовательный вывод данных канала индикации. */ void DOUT(int x) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(x) GpioDataRegs.GPASET.bit.GPIO8=1; последующий оператор выполняется только при истинном условии. */ if(x) GpioDataRegs.GPASET.bit.GPIO8=1; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else GpioDataRegs.GPACLEAR.bit.GPIO8=1; -} +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} +/* Условие компиляции CLKMULT==1: выбранный блок включается в текущий вариант прошивки. */ #if CLKMULT==1 +/* Задаёт POWS0 = 0L; данные POWS0. */ #define POWS0 0L +/* Задаёт POWS1 = 10L; данные POWS1. */ #define POWS1 10L +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции CLKMULT==2: выбранный блок включается в текущий вариант прошивки. */ #if CLKMULT==2 +/* Задаёт POWS0 = 0L; данные POWS0. */ #define POWS0 0L +/* Задаёт POWS1 = 30L; данные POWS1. */ #define POWS1 30L +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции CLKMULT==3: выбранный блок включается в текущий вариант прошивки. */ #if CLKMULT==3 +/* Задаёт POWS0 = 1L; данные POWS0. */ #define POWS0 1L +/* Задаёт POWS1 = 50L; данные POWS1. */ #define POWS1 50L +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции CLKMULT==4: выбранный блок включается в текущий вариант прошивки. */ #if CLKMULT==4 +/* Задаёт POWS0 = 2L; данные POWS0. */ #define POWS0 2L +/* Задаёт POWS1 = 60L; данные POWS1. */ #define POWS1 60L +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Условие компиляции CLKMULT==5: выбранный блок включается в текущий вариант прошивки. */ #if CLKMULT==5 +/* Задаёт POWS0 = 4L; данные POWS0. */ #define POWS0 4L +/* Задаёт POWS1 = 80L; данные POWS1. */ #define POWS1 80L +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Начинает функцию RESET; назначение модуля — последовательный вывод данных канала индикации. */ void RESET() -{ - DCLK(0); -#if POWS1>0 - DSP28x_usDelay(POWS1); -#endif - DOUT(1); -#if POWS1>0 - DSP28x_usDelay(POWS1); -#endif - DOUT(0); -#if POWS1>0 - DSP28x_usDelay(POWS1); -#endif -} - -void SENDBIT(int x) -{ - DOUT(x); DCLK(1); -#if POWS0>0 - DSP28x_usDelay(POWS0); -#endif - DOUT(0); - DSP28x_usDelay(POWS0+1); - DCLK(0); -#if POWS1>0 - DSP28x_usDelay(POWS1); -#endif -} - -void kanal_Send(int adr, long dat, int dot) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает DCLK с аргументами (0) в текущей последовательности операций. */ + DCLK(0); +/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */ +#if POWS1>0 + /* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */ + DSP28x_usDelay(POWS1); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif + /* Вызывает DOUT с аргументами (1) в текущей последовательности операций. */ + DOUT(1); +/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */ +#if POWS1>0 + /* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */ + DSP28x_usDelay(POWS1); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif + /* Вызывает DOUT с аргументами (0) в текущей последовательности операций. */ + DOUT(0); +/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */ +#if POWS1>0 + /* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */ + DSP28x_usDelay(POWS1); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} + +/* Начинает функцию SENDBIT; назначение модуля — последовательный вывод данных канала индикации. */ +void SENDBIT(int x) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Вызывает DOUT с аргументами (x); DCLK(1) в текущей последовательности операций. */ + DOUT(x); DCLK(1); +/* Условие компиляции POWS0>0: выбранный блок включается в текущий вариант прошивки. */ +#if POWS0>0 + /* Вызывает DSP28x_usDelay с аргументами (POWS0) в текущей последовательности операций. */ + DSP28x_usDelay(POWS0); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif + /* Вызывает DOUT с аргументами (0) в текущей последовательности операций. */ + DOUT(0); + /* Вызывает DSP28x_usDelay с аргументами (POWS0+1) в текущей последовательности операций. */ + DSP28x_usDelay(POWS0+1); + /* Вызывает DCLK с аргументами (0) в текущей последовательности операций. */ + DCLK(0); +/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */ +#if POWS1>0 + /* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */ + DSP28x_usDelay(POWS1); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} + +/* Начинает функцию kanal_Send; назначение модуля — последовательный вывод данных канала индикации. */ +void kanal_Send(int adr, long dat, int dot) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Объявляет Word — слово; data — данные; aliq_part — данные aliq_part; dg — данные dg. */ long Word,data,aliq_part,dg[4]; + /* Объявляет i — данные i; j — данные j; bit — представление регистра отдельными битовыми полями; byt — данные byt; addr — данные addr. Начальное значение задаётся справа от знака равенства. */ int i,j,bit,byt,addr,sgn=0,punkt=0,aliq_len=0,full_len, isdot=0; - if(adr>1) // Ëàìïî÷êè + /* Проверяет if(adr>1); последующий оператор выполняется только при истинном условии. */ + if(adr>1) // Лампочки + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает Word значением dat; слово. */ Word =dat; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(dat<0) sgn=1; последующий оператор выполняется только при истинном условии. */ if(dat<0) sgn=1; + /* Записывает data значением labs(dat); данные. */ data = labs(dat); + /* Проверяет if(dot>=0 и dot<4) isdot = 1; последующий оператор выполняется только при истинном условии. */ if(dot>=0 && dot<4) isdot = 1; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else dot=0; + /* Записывает aliq_part значением data; данные aliq_part. */ aliq_part = data; + /* Цикл for(i=0;i0). */ while(dat>0) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Делит dat значением 10; данные dat. */ aliq_len++; dat/=10; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает dat значением data; данные dat. */ dat = data; - + + /* Записывает full_len значением aliq_len+sgn; данные full_len. */ full_len = aliq_len+sgn; + /* Проверяет if(full_len==0) full_len=1; последующий оператор выполняется только при истинном условии. */ if(full_len==0) full_len=1; + /* Увеличивает full_len значением dot; данные full_len. */ full_len += dot; - + + /* Цикл for(i=0; i<(full_len-4);i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0; i<(full_len-4);i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Начинает цикл с проверкой условия после тела: первый проход выполняется всегда. */ dot--; dat/=10; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(dot<0) dot=0; последующий оператор выполняется только при истинном условии. */ if(dot<0) dot=0; + /* Записывает punkt значением 1<0;i--); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=3;i>0;i--) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if((dg[i]==0) и (i!=dot)); последующий оператор выполняется только при истинном условии. */ if((dg[i]==0)&&(i!=dot)) - dg[i]=0xF; // Ýòî çíà÷èò ïóñòî + /* Записывает dg[i] значением 0xF; данные dg. */ + dg[i]=0xF; // Это значит пусто + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else break; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - + + /* Проверяет if(sgn); последующий оператор выполняется только при истинном условии. */ if(sgn) + /* Цикл for(i=1;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=1;i<4;i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if( (dg[i]==0xF) или (i==3)); последующий оператор выполняется только при истинном условии. */ if( (dg[i]==0xF)||(i==3)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - dg[i]=0xA; // Ýòî çíà÷èò ìèíóñ + /* Записывает dg[i] значением 0xA; данные dg. */ + dg[i]=0xA; // Это значит минус + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } + /* Цикл for(i=0;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<4;i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает dg[i] значением digits[dg[i]]; данные dg. */ dg[i] = digits[dg[i]]; + /* Проверяет if((punkt>>i)&1) dg[i]+= 128; последующий оператор выполняется только при истинном условии. */ if((punkt>>i)&1) dg[i]+= 128; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает Word значением ((dg[0] ) & 0x000000FF) | ((dg[1]<<8 ) & 0x0000FF00) |; слово. */ Word = ((dg[0] ) & 0x000000FF) | ((dg[1]<<8 ) & 0x0000FF00) | + /* Продолжает список аргументов, полей или выражение ((dg[2]<<16) & 0x00FF0000) | ((dg[3]<<24) & 0xFF000000);; порядок элементов сохраняется. */ ((dg[2]<<16) & 0x00FF0000) | ((dg[3]<<24) & 0xFF000000); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает addr значением readr[adr]; данные addr. */ addr = readr[adr]; + /* Цикл for (i=0;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for (i=0;i<4;i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(addr>0x10) break; последующий оператор выполняется только при истинном условии. */ if(addr>0x10) break; + /* Цикл for (j=0;j<8;j++); задаёт начальное значение, условие продолжения и шаг перебора. */ for (j=0;j<8;j++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает bit значением Word & 1; Word >>= 1; представление регистра отдельными битовыми полями. */ bit = Word & 1; Word >>= 1; + /* Вызывает SENDBIT с аргументами (bit) в текущей последовательности операций. */ SENDBIT(bit); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - byt = addr; + /* Записывает byt значением addr; данные byt. */ + byt = addr; + /* Цикл for (j=0;j<6;j++); задаёт начальное значение, условие продолжения и шаг перебора. */ for (j=0;j<6;j++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает bit значением byt & 1; byt >>= 1; представление регистра отдельными битовыми полями. */ bit = byt & 1; byt >>= 1; + /* Вызывает SENDBIT с аргументами (bit) в текущей последовательности операций. */ SENDBIT(bit); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Изменяет счётчик в выражении addr++; на один для следующего шага. */ addr++; + /* Вызывает RESET с аргументами () в текущей последовательности операций. */ RESET(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/log_to_mem.c b/Source/Internal/log_to_mem.c index b491ddd..f03268a 100644 --- a/Source/Internal/log_to_mem.c +++ b/Source/Internal/log_to_mem.c @@ -1,296 +1,533 @@ +/* Двухбанковый регистратор событий нагрузки во внешней RAM. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */ #include "message.h" +/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */ #include "peripher.h" +/* Подключает "DAC.h": выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ #include "DAC.h" +/* Подключает "ADC.h": настройка АЦП, обработка преобразований и первичная фильтрация измерений. */ #include "ADC.h" +/* Подключает "log_to_mem.h": двухбанковый регистратор событий нагрузки во внешней RAM. */ #include "log_to_mem.h" +/* Объявляет no_write — no запись. Начальное значение задаётся справа от знака равенства. */ int no_write = 0, - never_write = 0; // Ôëàãè, ÷òîáû íå ïèñàòü (åñëè ÷òî) + /* Записывает never_write значением 0; never запись. */ + never_write = 0; // Флаги, чтобы не писать (если что) +/* Указание компилятору DATA_SECTION(logs_block,".logg");: размещение данных или настройка обработки объявлений. */ #pragma DATA_SECTION(logs_block,".logg"); +/* Объявляет logs_block — выделенный массив внешней RAM для двух банков регистратора. */ unsigned int logs_block[0xFA00]; +/* Объявляет Log — данные Log. */ LOG Log; +/* Объявляет flog — данные flog. Начальное значение задаётся справа от знака равенства. */ unsigned int flog=0; -// Î÷èùåíèå ïàìàòè, ãäå ëîãè ëåæàò +// Очищение памати, где логи лежат +/* Обнуляет выделенный диапазон внешней RAM журнала и задаёт границы кольцевого буфера. */ void clear_mem() -{ +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Объявляет i — данные i. */ unsigned long i; - + + /* Записывает Log.Start значением LOG_PAGE_START; данные Start. */ Log.Start = LOG_PAGE_START; + /* Записывает Log.Finis значением LOG_PAGE_START + LOG_PAGE_LEN; данные Finis. */ Log.Finis = LOG_PAGE_START + LOG_PAGE_LEN; + /* Записывает Log.Adres значением Log.Start; данные Adres. */ Log.Adres = Log.Start; + /* Записывает Log.Circl значением 0; данные Circl. */ Log.Circl = 0; - + + /* Цикл for (i=Log.Start; i= UMP_LOG_CAPACITY - UMP_POST_POINTS); последующий оператор выполняется только при истинном условии. */ if (ump_count >= UMP_LOG_CAPACITY - UMP_POST_POINTS) + /* Записывает ump_count значением UMP_LOG_CAPACITY - UMP_POST_POINTS - 1; число сохранённых точек в активном банке. */ ump_count = UMP_LOG_CAPACITY - UMP_POST_POINTS - 1; + /* Записывает ump_post значением UMP_POST_POINTS; данные ump_post. */ ump_post = UMP_POST_POINTS; + /* Устанавливает биты reason значением 0x100; данные reason. */ reason |= 0x100; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает ump_prev_commands значением commands; ump_prev_inputs = inputs; ump_prev_outputs = outputs; данные ump_prev_commands. */ ump_prev_commands = commands; ump_prev_inputs = inputs; ump_prev_outputs = outputs; /* Every stored point counts, including CAN and I/O, except the trigger. */ + /* Проверяет if (ump_post и !(reason & 0x100) и --ump_post == 0) reason = 5; последующий оператор выполняется только при истинном условии. */ if (ump_post && !(reason & 0x100) && --ump_post == 0) reason = 5; + /* Записывает p значением logs_block + ((unsigned long)ump_bank * UMP_LOG_CAPACITY + ump_next) * UMP_LOG_WORDS; данные p. */ p = logs_block + ((unsigned long)ump_bank * UMP_LOG_CAPACITY + ump_next) * UMP_LOG_WORDS; + /* Записывает p[0] значением (unsigned int)ump_time; p[1] = (unsigned int)(ump_time >> 16); данные p. */ p[0] = (unsigned int)ump_time; p[1] = (unsigned int)(ump_time >> 16); + /* Записывает p[2] значением reason; p[3] = commands; данные p. */ p[2] = reason; p[3] = commands; + /* Записывает p[4] значением inputs; p[5] = outputs; данные p. */ p[4] = inputs; p[5] = outputs; + /* Записывает p[6] значением (unsigned int)IMPowse; p[7] = (unsigned int)WAKEpowse; данные p. */ p[6] = (unsigned int)IMPowse; p[7] = (unsigned int)WAKEpowse; + /* Записывает p[8] значением modbus[0x7B]; p[9] = modbus[0x1C]; данные p. */ p[8] = modbus[0x7B]; p[9] = modbus[0x1C]; + /* Цикл for (i = 0; i < 4; i++) ; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 4; i++) { p[10+i] = sens_data[i]; p[14+i] = modbus[i]; } + /* Записывает p[18] значением ump_can_header; данные p. */ p[18] = ump_can_header; + /* Записывает p[19] значением ump_can_data[0]; p[20] = ump_can_data[1]; p[21] = ump_can_data[2]; данные p. */ p[19] = ump_can_data[0]; p[20] = ump_can_data[1]; p[21] = ump_can_data[2]; + /* Записывает p[22] значением ump_can_count; p[23] = CanTimeOutErrorTR; данные p. */ p[22] = ump_can_count; p[23] = CanTimeOutErrorTR; - /* Èñõîäíûå óñòàâêè — ìÀ; ýôôåêòèâíûå óñòàâêè ïîñëå îãðàíè÷åíèé — 0.1 ìÀ. - * p[8] — îòïðàâëåííûé êîä, à p[9] — ðàñ÷¸òíîå çàäàíèå, ÍÅ èçìåðåíèå òîêà. */ + /* Исходные уставки — мА; эффективные уставки после ограничений — 0.1 мА. + * p[8] — отправленный код, а p[9] — расчётное задание, НЕ измерение тока. */ + /* Записывает p[24] значением DAC_go; p[25] = DAC_stop; данные p. */ p[24] = DAC_go; p[25] = DAC_stop; + /* Записывает p[26] значением DAC_min(); p[27] = DAC_max(); p[28] = DAC_cal(); данные p. */ p[26] = DAC_min(); p[27] = DAC_max(); p[28] = DAC_cal(); + /* Записывает p[29] значением DAC_04; p[30] = DAC_20; данные p. */ p[29] = DAC_04; p[30] = DAC_20; + /* Записывает p[31] значением ump_dac_ramp; p[32] = ump_dac_duration; данные p. */ p[31] = ump_dac_ramp; p[32] = ump_dac_duration; + /* Записывает p[33] значением ump_dac_go10; p[34] = ump_dac_stop10; p[35] = ump_dac_position; данные p. */ p[33] = ump_dac_go10; p[34] = ump_dac_stop10; p[35] = ump_dac_position; + /* Цикл for (i = 0; i < 4; i++) p[36+i] = ADC_table[i];; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 4; i++) p[36+i] = ADC_table[i]; + /* Записывает p[40] значением ump_pm67_voltage[0]; p[41] = ump_pm67_voltage[1]; данные p. */ p[40] = ump_pm67_voltage[0]; p[41] = ump_pm67_voltage[1]; + /* Изменяет счётчик в выражении ump_next++; на один для следующего шага. */ ump_next++; + /* Проверяет if (ump_next == UMP_LOG_CAPACITY) ump_next = 0; последующий оператор выполняется только при истинном условии. */ if (ump_next == UMP_LOG_CAPACITY) ump_next = 0; + /* Проверяет if (ump_count < UMP_LOG_CAPACITY) ump_count++; последующий оператор выполняется только при истинном условии. */ if (ump_count < UMP_LOG_CAPACITY) ump_count++; + /* Изменяет счётчик в выражении ump_sequence++; на один для следующего шага. */ ump_sequence++; + /* Проверяет if (reason == 5) ump_freeze(); последующий оператор выполняется только при истинном условии. */ if (reason == 5) ump_freeze(); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* Çàâåðø¸ííûé áàíê áîëüøå íå èçìåíÿåòñÿ äî ñëåäóþùåãî îòêëþ÷åíèÿ. - * Íîìåð ïîêîëåíèÿ ïîçâîëÿåò GUI îáíàðóæèòü çàìåíó àðõèâà âî âðåìÿ ÷òåíèÿ. */ +/* Завершённый банк больше не изменяется до следующего отключения. + * Номер поколения позволяет GUI обнаружить замену архива во время чтения. */ +/* Замораживает заполненный банк и переключает рабочий банк, сохраняя доступный архив. */ static void ump_freeze(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает ump_archive_bank значением ump_bank; индекс замороженного банка, доступного для чтения. */ ump_archive_bank = ump_bank; + /* Записывает ump_archive_count значением ump_count; ump_archive_next = ump_next; ump archive число. */ ump_archive_count = ump_count; ump_archive_next = ump_next; + /* Изменяет счётчик в выражении ump_generation++; на один для следующего шага. */ ump_generation++; + /* Инвертирует биты ump_bank значением 1; индекс активного банка регистратора. */ ump_bank ^= 1; + /* Записывает ump_count значением 0; ump_next = 0; ump_post = 0; число сохранённых точек в активном банке. */ ump_count = 0; ump_next = 0; ump_post = 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Продвигает время регистратора в Timer1 и снимает записи с заданным периодом. */ void ump_log_tick(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved. Начальное значение задаётся справа от знака равенства. */ unsigned int saved = __disable_interrupts(); + /* Проверяет if (ump_state == 1); последующий оператор выполняется только при истинном условии. */ if (ump_state == 1) { + /* Изменяет счётчик в выражении ump_time++; на один для следующего шага. */ ump_time++; + /* Проверяет if (++ump_divider >= ump_period); последующий оператор выполняется только при истинном условии. */ if (++ump_divider >= ump_period) { ump_divider = 0; ump_capture(1); } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* Äîïîëíèòåëüíûé ñíèìîê òîëüêî ïðè èçìåíåíèè êîìàíä, âõîäîâ èëè âûõîäîâ. - * Ýòî íå çàìåíÿåò ïåðèîäè÷åñêóþ çàïèñü àíàëîãîâûõ âåëè÷èí â òàéìåðå. */ +/* Дополнительный снимок только при изменении команд, входов или выходов. + * Это не заменяет периодическую запись аналоговых величин в таймере. */ +/* Обслуживает изменения дискретных входов и выходов из главного цикла. */ void ump_log_io(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved. */ unsigned int saved; + /* Проверяет if (ump_state != 1 или Desk != dsk_LOAD) return; последующий оператор выполняется только при истинном условии. */ if (ump_state != 1 || Desk != dsk_LOAD) return; + /* Записывает saved значением __disable_interrupts(); данные saved. */ saved = __disable_interrupts(); + /* Проверяет if (Commands != ump_prev_commands или ump_inputs() != ump_prev_inputs или; последующий оператор выполняется только при истинном условии. */ if (Commands != ump_prev_commands || ump_inputs() != ump_prev_inputs || + /* Вызывает ump_outputs. Собирает фактические состояния GPIO выходов START/STOP/разрешения нагрузки. */ ump_outputs() != ump_prev_outputs) ump_capture(3); + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* Âûçûâàåòñÿ ïîñëå ïðèìåíåíèÿ ñëîâ ïðèíÿòîãî CAN-êàäðà: ñíèìîê ñîäåðæèò - * íîâûå êîìàíäû, à òàêæå èñõîäíûé àäðåñ/ìàñêó è âñå òðè ñëîâà êàäðà. */ +/* Вызывается после применения слов принятого CAN-кадра: снимок содержит + * новые команды, а также исходный адрес/маску и все три слова кадра. */ +/* Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */ void ump_log_can(unsigned int header, unsigned int a, unsigned int b, unsigned int c) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved; i — данные i; address — адрес; mask — маска; data — данные. */ unsigned int saved, i, address, mask, data[3]; + /* Проверяет if (Desk != dsk_LOAD) return; последующий оператор выполняется только при истинном условии. */ if (Desk != dsk_LOAD) return; + /* Записывает saved значением __disable_interrupts(); данные saved. */ saved = __disable_interrupts(); + /* Записывает data[0] значением a; data[1] = b; data[2] = c; данные. */ data[0] = a; data[1] = b; data[2] = c; + /* Записывает address значением header & 0x1FFFU; адрес. */ address = header & 0x1FFFU; + /* Записывает mask значением 0x8000U; маска. */ mask = 0x8000U; /* Track reception even while recording is stopped. Each mask bit * refers to its own address, including disabled words in between. */ + /* Цикл for (i = 0; i < 3; i++, address++, mask >>= 1) ; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 3; i++, address++, mask >>= 1) { + /* Проверяет if (!(header & mask)) continue; последующий оператор выполняется только при истинном условии. */ if (!(header & mask)) continue; + /* Проверяет if (address == 305U) ump_pm67_voltage[0] = data[i]; последующий оператор выполняется только при истинном условии. */ if (address == 305U) ump_pm67_voltage[0] = data[i]; + /* Проверяет if (address == 8U) ump_pm67_voltage[1] = data[i]; последующий оператор выполняется только при истинном условии. */ if (address == 8U) ump_pm67_voltage[1] = data[i]; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (ump_state != 1); последующий оператор выполняется только при истинном условии. */ if (ump_state != 1) { __restore_interrupts(saved); return; } + /* Записывает ump_can_header значением header; ump CAN header. */ ump_can_header = header; + /* Записывает ump_can_data[0] значением a; ump_can_data[1] = b; ump_can_data[2] = c; ump CAN данные. */ ump_can_data[0] = a; ump_can_data[1] = b; ump_can_data[2] = c; + /* Изменяет счётчик в выражении ump_can_count++; на один для следующего шага. */ ump_can_count++; + /* Вызывает ump_capture. Создаёт одну запись состояния: входы, выходы, команды, напряжения и параметры тока нагрузки. */ ump_capture(2); + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Регистрирует изменение слова команд после записи по последовательному интерфейсу. */ void ump_log_rs(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved. Начальное значение задаётся справа от знака равенства. */ unsigned int saved = __disable_interrupts(); + /* Вызывает ump_capture. Создаёт одну запись состояния: входы, выходы, команды, напряжения и параметры тока нагрузки. */ ump_capture(4); + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* Óïðàâëåíèå æóðíàëîì îòäåëåíî îò òåõíîëîãè÷åñêèõ êîìàíä: íà÷àëî çàïèñè - * ÍÅ çàïóñêàåò ÓÌÏ. Âûáîð àðõèâà íå îñòàíàâëèâàåò òåêóùóþ çàïèñü. */ +/* Управление журналом отделено от технологических команд: начало записи + * НЕ запускает УМП. Выбор архива не останавливает текущую запись. */ +/* Применяет допустимые команды управления регистратором, сохраняя ограничения адресов. */ int ump_log_write(unsigned int address, unsigned int value) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет saved — данные saved; valid — данные valid. Начальное значение задаётся справа от знака равенства. */ unsigned int saved, valid = 1; + /* Записывает saved значением __disable_interrupts(); данные saved. */ saved = __disable_interrupts(); + /* Проверяет if (address == UMP_LOG_BASE и value == 0); последующий оператор выполняется только при истинном условии. */ if (address == UMP_LOG_BASE && value == 0) { + /* Записывает ump_state значением 3; ump_post = 0; данные ump_state. */ ump_state = 3; ump_post = 0; + /* Проверяет else if (address == UMP_LOG_BASE и value == 1 и Desk == dsk_LOAD и READY и ump_state != 1); последующий оператор выполняется только при истинном условии. */ } else if (address == UMP_LOG_BASE && value == 1 && Desk == dsk_LOAD && READY && ump_state != 1) { + /* Записывает ump_count значением 0; ump_next = 0; ump_cursor = 0; ump_divider = 0; ump_post = 0; число сохранённых точек в активном банке. */ ump_count = 0; ump_next = 0; ump_cursor = 0; ump_divider = 0; ump_post = 0; + /* Записывает ump_source значением 0; данные ump_source. */ ump_source = 0; + /* Записывает ump_prev_commands значением Commands; данные ump_prev_commands. */ ump_prev_commands = Commands; + /* Записывает ump_prev_inputs значением ump_inputs(); ump_prev_outputs = ump_outputs(); данные ump_prev_inputs. */ ump_prev_inputs = ump_inputs(); ump_prev_outputs = ump_outputs(); + /* Записывает no_write значением 0; never_write = 0; no запись. */ no_write = 0; never_write = 0; + /* Записывает ump_state значением 1; данные ump_state. */ ump_state = 1; + /* Вызывает ump_capture. Создаёт одну запись состояния: входы, выходы, команды, напряжения и параметры тока нагрузки. */ ump_capture(1); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет else if (address == UMP_LOG_BASE+1 и ump_state != 1 и value >= 1 и value <= 1000); последующий оператор выполняется только при истинном условии. */ else if (address == UMP_LOG_BASE+1 && ump_state != 1 && value >= 1 && value <= 1000) + /* Записывает ump_period значением value; период записи регистратора в миллисекундных тактах. */ ump_period = value; + /* Проверяет else if (address == UMP_LOG_BASE+2 и value < UMP_LOG_CAPACITY); последующий оператор выполняется только при истинном условии. */ else if (address == UMP_LOG_BASE+2 && value < UMP_LOG_CAPACITY) + /* Записывает ump_cursor значением value; данные ump_cursor. */ ump_cursor = value; + /* Проверяет else if (address == UMP_LOG_BASE+3 и value <= 1) ump_source = value; последующий оператор выполняется только при истинном условии. */ else if (address == UMP_LOG_BASE+3 && value <= 1) ump_source = value; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else valid = 0; + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); + /* Завершает ump_log_write и возвращает valid. */ return valid; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* Ïðåîáðàçîâàíèå õðîíîëîãè÷åñêîãî èíäåêñà â ôèçè÷åñêóþ ïîçèöèþ êîëüöà. - * Äëÿ àðõèâà ñîõðàíåíû ñîáñòâåííûå count/next, íåçàâèñèìûå îò æèâîãî áàíêà. */ +/* Преобразование хронологического индекса в физическую позицию кольца. + * Для архива сохранены собственные count/next, независимые от живого банка. */ +/* Начинает функцию ump_word; назначение модуля — двухбанковый регистратор событий нагрузки во внешней RAM. */ static unsigned int ump_word(unsigned int archived, unsigned int record, unsigned int word) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет count — число; ump_count — число сохранённых точек в активном банке. Начальное значение задаётся справа от знака равенства. */ unsigned int count = archived ? ump_archive_count : ump_count; + /* Объявляет next — данные next; ump_next — данные ump_next. Начальное значение задаётся справа от знака равенства. */ unsigned int next = archived ? ump_archive_next : ump_next; + /* Объявляет bank — данные bank; ump_bank — индекс активного банка регистратора. Начальное значение задаётся справа от знака равенства. */ unsigned int bank = archived ? ump_archive_bank : ump_bank; + /* Объявляет slot — данные slot. */ unsigned int slot; + /* Проверяет if (record >= count) return 0; последующий оператор выполняется только при истинном условии. */ if (record >= count) return 0; + /* Записывает slot значением next + UMP_LOG_CAPACITY - count + record; данные slot. */ slot = next + UMP_LOG_CAPACITY - count + record; + /* Повторяет или ожидает, пока выполняется while (slot >= UMP_LOG_CAPACITY) slot -= UMP_LOG_CAPACITY;. */ while (slot >= UMP_LOG_CAPACITY) slot -= UMP_LOG_CAPACITY; + /* Завершает ump_word и возвращает logs_block[((unsigned long)bank * UMP_LOG_CAPACITY + slot) * UMP_LOG_WORDS + word]. */ return logs_block[((unsigned long)bank * UMP_LOG_CAPACITY + slot) * UMP_LOG_WORDS + word]; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* Âåñü Modbus-áëîê ÷èòàåòñÿ âûçûâàþùèì êîäîì ïîä îäíîé áëîêèðîâêîé IRQ. - * Ïîýòîìó timestamp/äàííûå è çàãîëîâîê îíëàéí-áëîêà îòíîñÿòñÿ ê îäíîìó - * ñîñòîÿíèþ êîëüöà, äàæå åñëè â ýòîò ìîìåíò ïðèõîäèò íîâàÿ CAN-êîìàíäà. */ +/* Весь Modbus-блок читается вызывающим кодом под одной блокировкой IRQ. + * Поэтому timestamp/данные и заголовок онлайн-блока относятся к одному + * состоянию кольца, даже если в этот момент приходит новая CAN-команда. */ +/* Проверяет область чтения регистратора и возвращает слова состояния либо архивной записи. */ unsigned int ump_log_read(unsigned int address) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет offset — данные offset; count — число. */ unsigned int offset, count; + /* Объявляет first — данные first. */ unsigned long first; + /* Вызывает switch с аргументами (address) { в текущей последовательности операций. */ switch (address) { + /* Ветвь выбора для UMP_LOG_BASE; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE: return 0x554D; + /* Ветвь выбора для UMP_LOG_BASE+1; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+1: return 3; + /* Ветвь выбора для UMP_LOG_BASE+2; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+2: return ump_source ? 3 : ump_state; + /* Ветвь выбора для UMP_LOG_BASE+3; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+3: return ump_source ? ump_archive_count : ump_count; + /* Ветвь выбора для UMP_LOG_BASE+4; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+4: return UMP_LOG_WORDS; + /* Ветвь выбора для UMP_LOG_BASE+5; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+5: return UMP_LOG_CAPACITY; + /* Ветвь выбора для UMP_LOG_BASE+6; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+6: return ump_period; + /* Ветвь выбора для UMP_LOG_BASE+7; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+7: return (unsigned int)ump_time; + /* Ветвь выбора для UMP_LOG_BASE+8; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+8: return (unsigned int)(ump_time >> 16); + /* Ветвь выбора для UMP_LOG_BASE+9; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+9: return Desk; + /* Ветвь выбора для UMP_LOG_BASE+10; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+10: return Mode; + /* Ветвь выбора для UMP_LOG_BASE+11; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+11: return (unsigned int)READY_FREQ; + /* Ветвь выбора для UMP_LOG_BASE+12; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+12: return ump_generation; + /* Ветвь выбора для UMP_LOG_BASE+13; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+13: return ump_archive_count; /* Preserve the legacy millisecond status field as an upper estimate. * Additional event records may finish the post interval sooner. */ + /* Ветвь выбора для UMP_LOG_BASE+14; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+14: + /* Записывает first значением (unsigned long)ump_post * ump_period; данные first. */ first = (unsigned long)ump_post * ump_period; + /* Завершает ump_log_read и возвращает first > 65535UL ? 65535U : (unsigned int)first. */ return first > 65535UL ? 65535U : (unsigned int)first; + /* Ветвь выбора для UMP_LOG_BASE+15; выполняется при совпадении селектора switch. */ case UMP_LOG_BASE+15: return ump_state; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (address >= UMP_LOG_DATA и address < UMP_LOG_DATA+120 и (ump_source или ump_state != 1)); последующий оператор выполняется только при истинном условии. */ if (address >= UMP_LOG_DATA && address < UMP_LOG_DATA+120 && (ump_source || ump_state != 1)) { + /* Записывает offset значением address - UMP_LOG_DATA; данные offset. */ offset = address - UMP_LOG_DATA; + /* Завершает ump_log_read и возвращает ump_word(ump_source, ump_cursor + offset / UMP_LOG_WORDS, offset % UMP_LOG_WORDS). */ return ump_word(ump_source, ump_cursor + offset / UMP_LOG_WORDS, offset % UMP_LOG_WORDS); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - /* Ïîñëåäíèå òðè çàïèñè äëÿ îíëàéí-ãðàôèêà, áåç îñòàíîâêè è áåç - * èçìåíåíèÿ êóðñîðà àðõèâíîãî ÷òåíèÿ. Ïåðâûå äâà ñëîâà — èõ íîìåð. */ + /* Последние три записи для онлайн-графика, без остановки и без + * изменения курсора архивного чтения. Первые два слова — их номер. */ + /* Проверяет if (address >= UMP_LOG_LIVE и address < UMP_LOG_LIVE+124); последующий оператор выполняется только при истинном условии. */ if (address >= UMP_LOG_LIVE && address < UMP_LOG_LIVE+124) { + /* Записывает count значением ump_count < UMP_LOG_LIVE_RECORDS ? ump_count : UMP_LOG_LIVE_RECORDS; число. */ count = ump_count < UMP_LOG_LIVE_RECORDS ? ump_count : UMP_LOG_LIVE_RECORDS; + /* Записывает first значением ump_sequence - count; данные first. */ first = ump_sequence - count; + /* Записывает offset значением address - UMP_LOG_LIVE; данные offset. */ offset = address - UMP_LOG_LIVE; + /* Проверяет if (offset == 0) return (unsigned int)first; последующий оператор выполняется только при истинном условии. */ if (offset == 0) return (unsigned int)first; + /* Проверяет if (offset == 1) return (unsigned int)(first >> 16); последующий оператор выполняется только при истинном условии. */ if (offset == 1) return (unsigned int)(first >> 16); + /* Проверяет if (offset == 2) return count; последующий оператор выполняется только при истинном условии. */ if (offset == 2) return count; + /* Проверяет if (offset == 3) return ump_generation; последующий оператор выполняется только при истинном условии. */ if (offset == 3) return ump_generation; + /* Уменьшает offset значением 4; данные offset. */ offset -= 4; + /* Проверяет if (offset / UMP_LOG_WORDS < count); последующий оператор выполняется только при истинном условии. */ if (offset / UMP_LOG_WORDS < count) + /* Завершает ump_log_read и возвращает ump_word(0, ump_count - count + offset / UMP_LOG_WORDS, offset % UMP_LOG_WORDS). */ return ump_word(0, ump_count - count + offset / UMP_LOG_WORDS, offset % UMP_LOG_WORDS); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Завершает ump_log_read и возвращает 0. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/main.c b/Source/Internal/main.c index e731770..261f77e 100644 --- a/Source/Internal/main.c +++ b/Source/Internal/main.c @@ -1,217 +1,384 @@ +/* Порядок запуска периферии и обслуживание команд в главном цикле. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "cntrl_adr.h": собственный и универсальный адрес устройства. */ #include "cntrl_adr.h" +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "BIOS_DSP.h": настройки и интерфейс BIOS_DSP. */ #include "BIOS_DSP.h" +/* Подключает "Message.h": настройки и интерфейс Message. */ #include "Message.h" +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" +/* Подключает "spise2p.h": драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */ #include "spise2p.h" +/* Подключает "tools.h": настройка внешней памяти и служебные задержки. */ #include "tools.h" +/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */ #include "peripher.h" +/* Подключает "ADC.h": настройка АЦП, обработка преобразований и первичная фильтрация измерений. */ #include "ADC.h" +/* Подключает "DAC.h": выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ #include "DAC.h" +/* Подключает "ecan.h": штатный eCAN и отдельный служебный обмен УМП/GAS. */ #include "ecan.h" +/* Подключает "kanal.h": последовательный вывод данных канала индикации. */ #include "kanal.h" +/* Подключает "pulto.h": обмен и индикация пульта. */ #include "pulto.h" +/* Подключает "log_to_mem.h": двухбанковый регистратор событий нагрузки во внешней RAM. */ #include "log_to_mem.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Объявляет интерфейс функции DSP28x_usDelay; реализация вызывается через этот прототип. */ extern void DSP28x_usDelay(Uint32 Count); +/* Назначает обработчик Timer1 по типу платы и задаёт период основного такта. */ void timer_Init() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; // This is needed to write to EALLOW protected registers + /* Проверяет if(Desk==dsk_EPLT) PieVectTable.XINT13 = &cpu_timer1_isr_PULT; последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_EPLT) PieVectTable.XINT13 = &cpu_timer1_isr_PULT; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else PieVectTable.XINT13 = &cpu_timer1_isr_SENS; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; // This is needed to disable write to EALLOW protected registers + /* Вызывает ConfigCpuTimer с аргументами (&CpuTimer1, SYSCLKOUT/1000000, 1000000/READY_FREQ) в текущей последовательности операций. */ ConfigCpuTimer(&CpuTimer1, SYSCLKOUT/1000000, 1000000/READY_FREQ); + /* Записывает CpuTimer1Regs.TCR.all значением 0x4020; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer1Regs.TCR.all = 0x4020; // Use write-only instruction to set TSS bit = 0 + /* Устанавливает биты IER значением M_INT13; регистр разрешения прерываний ядра C28x. */ IER |= M_INT13; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */ void main() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i; j — данные j; mask — маска. */ int i,j,mask; + /* Объявляет cancount — данные cancount; cancell — данные cancell; rscount — данные rscount. */ static unsigned int cancount[2], cancell[2], rscount; + /* Объявляет rs — данные rs. Хранит указатель на данные. */ RS_DATA * rs; + /* Объявляет presbyt — данные presbyt. Начальное значение задаётся справа от знака равенства. */ int presbyt=0; + /* Инициализирует модуль вызовом InitSysCtrl(); перед его дальнейшим использованием. */ InitSysCtrl(); // Disable CPU interrupts and clear all CPU interrupt flags: + /* Запрет маскируемых прерываний ядра. */ DINT; + /* Инициализирует модуль вызовом InitPieCtrl(); перед его дальнейшим использованием. */ InitPieCtrl(); + /* Записывает IER значением 0x0000; регистр разрешения прерываний ядра C28x. */ IER = 0x0000; + /* Записывает IFR значением 0x0000; регистр ожидающих прерываний ядра C28x. */ IFR = 0x0000; + /* Инициализирует модуль вызовом InitPieVectTable(); перед его дальнейшим использованием. */ InitPieVectTable(); + /* Вызывает init_zone7. Настраивает временные параметры внешней шины XINTF Zone7 для RAM регистратора. */ init_zone7(); + /* Вызывает get_Mode. Определяет адрес и тип платы по аппаратным перемычкам и задаёт рабочий режим. */ get_Mode(); + /* Вызывает InitCan. Настраивает eCAN, скорость, почтовые ящики и маршрутизацию прерываний для выбранного режима платы. */ InitCan(0,Mode); + /* Вызывает create_uart_vars. Инициализирует структуры обоих SCI и таблицу длин команд. */ create_uart_vars(sizeof(CMD_TO_TMS)); + /* Вызывает setup_uart. Настраивает выбранный SCI, скорость и обработчики прерываний. */ setup_uart(COM_1,115200); + /* Проверяет if(Owen)setup_uart(COM_2,57600); последующий оператор выполняется только при истинном условии. */ if(Owen)setup_uart(COM_2,57600); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else setup_uart(COM_2,115200); + /* Инициализирует модуль вызовом InitSeeprom(); перед его дальнейшим использованием. */ InitSeeprom(); + /* Вызывает setup_leds_line с аргументами () в текущей последовательности операций. */ setup_leds_line(); + /* Вызывает led1_on с аргументами () в текущей последовательности операций. */ led1_on(); + /* Вызывает led2_off с аргументами () в текущей последовательности операций. */ led2_off(); + /* Цикл for (i=0;i<10;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for (i=0;i<10;i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает pause_us. Формирует задержку в микросекундах через калиброванную функцию DSP28x_usDelay. */ pause_us(50000); + /* Вызывает led2_toggle с аргументами () в текущей последовательности операций. */ led2_toggle(); + /* Вызывает led1_toggle с аргументами () в текущей последовательности операций. */ led1_toggle(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает led1_off с аргументами () в текущей последовательности операций. */ led1_off(); + /* Вызывает led2_off с аргументами () в текущей последовательности операций. */ led2_off(); + /* Вызывает unsetup_leds_line с аргументами () в текущей последовательности операций. */ unsetup_leds_line(); + /* Вызывает clear_mem. Обнуляет выделенный диапазон внешней RAM журнала и задаёт границы кольцевого буфера. */ clear_mem(); + /* Вызывает ump_log_init. Явно инициализирует оба банка регистратора до включения IRQ; повторный старт записи архив не стирает. */ ump_log_init(); - Load_control_init(); /* Explicit initialization before IRQ. */ + Load_control_init(); /* Explicit initialization before IRQ. */ /* Вызывает Load_control_init. Сбрасывает все переменные автомата нагрузки до разрешения прерываний; COFF не обнуляет всю .ebss. */ + /* Вызывает set_cntrl_addr. Устанавливает собственный и универсальный адрес для проверки адресованных команд. */ set_cntrl_addr(Mode,16); + /* Вызывает timer_Init. Назначает обработчик Timer1 по типу платы и задаёт период основного такта. */ timer_Init(); + /* Вызывает EnableInterrupts с аргументами () в текущей последовательности операций. */ EnableInterrupts(); + /* Проверяет if(Desk!=dsk_EPLT); последующий оператор выполняется только при истинном условии. */ if(Desk!=dsk_EPLT) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает setup_adc. Настраивает каналы, последовательность преобразований и запуск АЦП. */ setup_adc(); + /* Инициализирует модуль вызовом Init_sensors(); перед его дальнейшим использованием. */ Init_sensors(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Инициализирует модуль вызовом Init_packMask(); перед его дальнейшим использованием. */ Init_packMask(); + /* Вызывает Load_params. Читает сохранённые регистры из области параметров EEPROM и применяет настройки платы. */ Load_params(); + /* Инициализирует модуль вызовом Init_sensors_more(); перед его дальнейшим использованием. */ Init_sensors_more(); + /* Проверяет if(Desk==dsk_LOAD); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_LOAD) + /* Вызывает Setup_DAC_time. Вычисляет такты ЦАП; для недопустимого сохранённого тайм-аута CAN возвращает 600 мс. */ Setup_DAC_time(); + /* Записывает LastMode значением Mode; последний режим платы, технологический регистр 126. */ LastMode = Mode; + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает SysCtrlRegs.WDCR значением 0x2F; данные WDCR. */ SysCtrlRegs.WDCR= 0x2F; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; + /* Записывает READY значением 1; данные READY. */ READY=1; + /* Повторяет или ожидает, пока выполняется while(1). */ while(1) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - /* ×òåíèå ëîããåðà ïî CAN íå áëîêèðóåò öèêë óïðàâëåíèÿ. */ + /* Чтение логгера по CAN не блокирует цикл управления. */ + /* Вызывает UMP_CAN_service. В главном цикле готовит замороженный ответ служебного CAN и отправляет его двухсловными фрагментами. */ UMP_CAN_service(); + /* Проверяет if(CanGO); последующий оператор выполняется только при истинном условии. */ if(CanGO) - { + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Записывает CanGO значением 0; CAN GO. */ CanGO=0; + /* Проверяет if(Owncount); последующий оператор выполняется только при истинном условии. */ if(Owncount) + /* Проверяет if(++rscount>=Owncount); последующий оператор выполняется только при истинном условии. */ if(++rscount>=Owncount) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает rscount значением 0; данные rscount. */ rscount=0; + /* Вызывает SendCommandModbus4 с аргументами (&rs_b) в текущей последовательности операций. */ SendCommandModbus4(&rs_b); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Цикл for(i=0;i<2;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<2;i++) - if(++cancount[i] >= Cancount[i]) + /* Проверяет if(++cancount[i] >= Cancount[i]); последующий оператор выполняется только при истинном условии. */ + if(++cancount[i] >= Cancount[i]) + /* Проверяет if(Cancount[i] и cancount[0]); последующий оператор выполняется только при истинном условии. */ if(Cancount[i] && cancount[0]) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - cancount[i] = 0; + /* Записывает cancount[i] значением 0; данные cancount. */ + cancount[i] = 0; + /* Повторяет или ожидает, пока выполняется while(1). */ while(1) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(cancell[i] >= 0x80) cancell[i]=0; последующий оператор выполняется только при истинном условии. */ if(cancell[i] >= 0x80) cancell[i]=0; + /* Записывает mask значением Maska[i][cancell[i]/16] >> (cancell[i]%16); маска. */ mask = Maska[i][cancell[i]/16] >> (cancell[i]%16); + /* Проверяет if(!mask) cancell[i] = (cancell[i] + 0x10) & 0xFFF0; последующий оператор выполняется только при истинном условии. */ if(!mask) cancell[i] = (cancell[i] + 0x10) & 0xFFF0; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Повторяет или ожидает, пока выполняется while(!(mask & 1)). */ while(!(mask & 1)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Изменяет счётчик в выражении cancell[i]++; mask >>= 1; на один для следующего шага. */ cancell[i]++; mask >>= 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } + /* Вызывает CAN_send. Упаковывает адрес и технологические слова в штатный CAN-кадр и запускает передачу mailbox. */ CAN_send(0,modbus,cancell[i]); - cancell[i]+=3; + /* Увеличивает cancell[i] значением 3; данные cancell. */ + cancell[i]+=3; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } + /* Проверяет if(cDefParam); последующий оператор выполняется только при истинном условии. */ if(cDefParam) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает cDefParam значением 0; данные cDefParam. */ cDefParam=0; + /* Вызывает Default_params. Заполняет регистры заводскими значениями; тайм-аут CAN нагрузки по умолчанию равен 600 мс. */ Default_params(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(cSaveParam); последующий оператор выполняется только при истинном условии. */ if(cSaveParam) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает cSaveParam значением 0; данные cSaveParam. */ cSaveParam=0; + /* Вызывает Save_params. Сохраняет технологические регистры в область параметров, отделённую от загрузочного образа EEPROM. */ Save_params(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(cLoadParam); последующий оператор выполняется только при истинном условии. */ if(cLoadParam) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает cLoadParam значением 0; данные cLoadParam. */ cLoadParam=0; + /* Вызывает Load_params. Читает сохранённые регистры из области параметров EEPROM и применяет настройки платы. */ Load_params(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(cKoefCalc); последующий оператор выполняется только при истинном условии. */ if(cKoefCalc) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает cKoefCalc значением 0; данные cKoefCalc. */ cKoefCalc=0; + /* Вызывает calc_sensor_koef с аргументами () в текущей последовательности операций. */ calc_sensor_koef(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает get_Buttons. Считывает кнопки, обновляет флаги команд и учитывает текущий тип платы. */ get_Buttons(); + /* Проверяет if(Desk==dsk_COMM); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_COMM) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(!bTermoCal & presbyt) cSaveParam=1; последующий оператор выполняется только при истинном условии. */ if(!bTermoCal & presbyt) cSaveParam=1; + /* Записывает presbyt значением bTermoCal; данные presbyt. */ presbyt = bTermoCal; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } /* Timer1 owns START/STOP/permission and the DAC ramp together. * Main must not re-enable the output during a protected reload. */ - /* Ñíèìîê ïîñëå îáíîâëåíèÿ âõîäîâ è ôîðìèðîâàíèÿ ïóñêîâûõ âûõîäîâ. */ + /* Снимок после обновления входов и формирования пусковых выходов. */ + /* Вызывает ump_log_io. Обслуживает изменения дискретных входов и выходов из главного цикла. */ ump_log_io(); + /* Цикл for(i=0;i<2;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<2;i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(i) rs = &rs_a; последующий оператор выполняется только при истинном условии. */ if(i) rs = &rs_a; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else rs = &rs_b; + /* Записывает j значением get_command(rs); данные j. */ j = get_command(rs); + /* Проверяет if(j!=-1); последующий оператор выполняется только при истинном условии. */ if(j!=-1) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает Lonely значением 0; данные Lonely. */ Lonely=0; + /* Вызывает led2_toggle с аргументами () в текущей последовательности операций. */ led2_toggle(); + /* Вызывает switch с аргументами (j) в текущей последовательности операций. */ switch(j) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - case CMD_INIT: init(rs); break; // íà÷àëüíûå óñòàíîâêè - case CMD_INITLOAD: initload(rs); break; // íàñòðîéêà çàãðóçêè - case CMD_RUN: run(rs); break; // çàãðóçèòü áëîê - case CMD_LOAD: load(rs); break; // çàãðóçèòü áëîê - case CMD_PEEK: peek(rs); break; // ïðî÷èòàòü à÷åéêó ïàìàòè - case CMD_POKE: poke(rs); break; // çàïèñàòü â à÷åéêó ïàìàòè - case CMD_UPLOAD: upload(rs); break; // ïåðåäàòü áëîê ïàìàòè - case CMD_EXTEND: extendbios(rs); break; // ðàñøèðåííûå êîìàíäû äëà áèîñà - - case CMD_TFLASH: tflash(rs); break; // ïðîøèòü TMS + /* Ветвь выбора для CMD_INIT; выполняется при совпадении селектора switch. */ + case CMD_INIT: init(rs); break; // начальные установки + /* Ветвь выбора для CMD_INITLOAD; выполняется при совпадении селектора switch. */ + case CMD_INITLOAD: initload(rs); break; // настройка загрузки + /* Ветвь выбора для CMD_RUN; выполняется при совпадении селектора switch. */ + case CMD_RUN: run(rs); break; // загрузить блок + /* Ветвь выбора для CMD_LOAD; выполняется при совпадении селектора switch. */ + case CMD_LOAD: load(rs); break; // загрузить блок + /* Ветвь выбора для CMD_PEEK; выполняется при совпадении селектора switch. */ + case CMD_PEEK: peek(rs); break; // прочитать ачейку памати + /* Ветвь выбора для CMD_POKE; выполняется при совпадении селектора switch. */ + case CMD_POKE: poke(rs); break; // записать в ачейку памати + /* Ветвь выбора для CMD_UPLOAD; выполняется при совпадении селектора switch. */ + case CMD_UPLOAD: upload(rs); break; // передать блок памати + /* Ветвь выбора для CMD_EXTEND; выполняется при совпадении селектора switch. */ + case CMD_EXTEND: extendbios(rs); break; // расширенные команды дла биоса + /* Ветвь выбора для CMD_TFLASH; выполняется при совпадении селектора switch. */ + case CMD_TFLASH: tflash(rs); break; // прошить TMS + + /* Ветвь выбора для CMD_MODBUS_3; выполняется при совпадении селектора switch. */ case CMD_MODBUS_3: ReceiveCommandModbus3(rs); break; + /* Ветвь выбора для CMD_MODBUS_6; выполняется при совпадении селектора switch. */ case CMD_MODBUS_6: ReceiveCommandModbus6(rs); break; + /* Ветвь выбора для ANS_MODBUS_4; выполняется при совпадении селектора switch. */ case ANS_MODBUS_4: ReceiveAnswerModbus4(rs); break; + /* Обрабатывает значения селектора, для которых нет отдельной ветви case. */ default: break; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } } } } diff --git a/Source/Internal/measure.c b/Source/Internal/measure.c index 3dfa276..c8a41f1 100644 --- a/Source/Internal/measure.c +++ b/Source/Internal/measure.c @@ -1,489 +1,872 @@ +/* Обработка датчиков, вычисление величин и миллисекундный такт системы. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File -#include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */ +#include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" +/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */ #include "peripher.h" +/* Подключает "ADC.h": настройка АЦП, обработка преобразований и первичная фильтрация измерений. */ #include "ADC.h" +/* Подключает "DAC.h": выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ #include "DAC.h" +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */ #include "message.h" +/* Подключает "log_to_mem.h": двухбанковый регистратор событий нагрузки во внешней RAM. */ #include "log_to_mem.h" -#include // Ýòî ÷òîáû ìåðèòü àìïëèòóäó! sqrt áåç ýòîãî áóäåò êðèâ!!! +/* Подключает : настройки и интерфейс math. */ +#include // Это чтобы мерить амплитуду! sqrt без этого будет крив!!! +/* Объявляет CanPowse — CAN Powse; CANPOWSE — данные CANPOWSE; CanGO — CAN GO. Начальное значение задаётся справа от знака равенства. */ unsigned int CanPowse=CANPOWSE,CanGO=0; -unsigned int Maska[2][8]; +/* Объявляет Maska[2][8];. */ +unsigned int Maska[2][8]; -int READY=0; // Âñå çàãðóçèëîñ +/* Объявляет READY — данные READY. Начальное значение задаётся справа от знака равенства. */ +int READY=0; // Все загрузилос -int TPL_CANS=0; // Êîëè÷åñòâî òåìïåðàòóðíûõ êàíàëîâ -int tpl_cans=0; // Êîëè÷åñòâî òåìïåðàòóðíûõ äàò÷èêîâ -int cal_addr=0; // Íà÷àëî êàëèáðîâî÷íûõ äàò÷èêîâ -int pow_addr=0; // Íà÷àëî äàò÷èêîâ íàïðàæåíèà\òîêà +/* Объявляет TPL_CANS — данные TPL_CANS. Начальное значение задаётся справа от знака равенства. */ +int TPL_CANS=0; // Количество температурных каналов +/* Объявляет tpl_cans — данные tpl_cans. Начальное значение задаётся справа от знака равенства. */ +int tpl_cans=0; // Количество температурных датчиков +/* Объявляет cal_addr — данные cal_addr. Начальное значение задаётся справа от знака равенства. */ +int cal_addr=0; // Начало калибровочных датчиков +/* Объявляет pow_addr — данные pow_addr. Начальное значение задаётся справа от знака равенства. */ +int pow_addr=0; // Начало датчиков напражениа\тока +/* Объявляет period_ready — период ready; period_blink — период blink. */ int period_ready, period_blink; +/* Объявляет chk — данные chk; sig — данные sig. */ FLAG chk,sig; +/* Объявляет time_1_5sec — данные time_1_5sec; time_5msec — данные time_5msec; time_3sec — данные time_3sec; time_5sec — данные time_5sec. */ unsigned int time_1_5sec, time_5msec, time_3sec, time_5sec; +/* Объявляет low_count — low число. Начальное значение задаётся справа от знака равенства. */ unsigned int low_count[2] = {0,0}; +/* Объявляет err_count — err число. */ unsigned int err_count[6]; +/* Объявляет lev_count — lev число. */ int lev_count[6]; +/* Объявляет lev_quadr — данные lev_quadr. */ float lev_quadr[6]; +/* Объявляет zer_count — zer число. */ float zer_count[4]; +/* Объявляет sens_type — данные sens_type. */ int sens_type[24]; +/* Объявляет sens_pair — данные sens_pair. */ int sens_pair[24]; +/* Объявляет din_count — din число. */ unsigned int din_count[32]; +/* Объявляет ext_temp — данные ext_temp. */ int ext_temp[8]; +/* Объявляет ext_diag — данные ext_diag. */ int ext_diag[8]; +/* Объявляет Caliber_time — данные Caliber_time. Начальное значение задаётся справа от знака равенства. */ unsigned int Caliber_time = 0; +/* Объявляет Curr_Edge — данные Curr_Edge. */ int Curr_Edge; +/* Объявляет okay — данные okay. */ ERROR okay; -float powK[] = +/* Объявляет powK — данные powK. Начальное значение задаётся справа от знака равенства. */ +float powK[] = +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - 0.127, // ïèòàíèå 380 - 0.127, // ïèòàíèå 380 + /* Элемент постоянной таблицы 0.127,; порядок значений совпадает с порядком индексов потребителя. */ + 0.127, // питание 380В + /* Элемент постоянной таблицы 0.127,; порядок значений совпадает с порядком индексов потребителя. */ + 0.127, // питание 380В - 1.000, // òîê - 1.000, // íàïðàæåíèå + /* Элемент постоянной таблицы 1.000,; порядок значений совпадает с порядком индексов потребителя. */ + 1.000, // ток + /* Элемент постоянной таблицы 1.000,; порядок значений совпадает с порядком индексов потребителя. */ + 1.000, // напражение - 0.0076, // ïèòàíèå 31 - 0.0076, // ïèòàíèå 24 - 0.0076, // ïèòàíèå 24 - 0.0076, // ïèòàíèå 15 - 1.0000, // òåðìîäàò÷èê ìåëêîñõåìà + /* Элемент постоянной таблицы 0.0076,; порядок значений совпадает с порядком индексов потребителя. */ + 0.0076, // питание 31В + /* Элемент постоянной таблицы 0.0076,; порядок значений совпадает с порядком индексов потребителя. */ + 0.0076, // питание 24В + /* Элемент постоянной таблицы 0.0076,; порядок значений совпадает с порядком индексов потребителя. */ + 0.0076, // питание 24В + /* Элемент постоянной таблицы 0.0076,; порядок значений совпадает с порядком индексов потребителя. */ + 0.0076, // питание 15В + /* Элемент постоянной таблицы 1.0000,; порядок значений совпадает с порядком индексов потребителя. */ + 1.0000, // термодатчик мелкосхема +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ }; +/* Объявляет def_FILTERBAT — данные def_FILTERBAT; DEF_FILTERBAT — данные DEF_FILTERBAT. Начальное значение задаётся справа от знака равенства. */ FILTERBAT def_FILTERBAT = DEF_FILTERBAT; -FILTERBAT adc_filter[20+4]; // ìàêñ.TPL*2 + 4 êàëèáð -FILTERBAT out_filter[20+4]; // ìàêñ.TPL*2 + 4 íàïðàæ -FILTERBAT zer_filter[4]; // 4 íàïðàæ +/* Объявляет adc_filter — АЦП filter. */ +FILTERBAT adc_filter[20+4]; // макс.TPL*2 + 4 калибр +/* Объявляет out_filter — данные out_filter. */ +FILTERBAT out_filter[20+4]; // макс.TPL*2 + 4 напраж +/* Объявляет zer_filter — данные zer_filter. */ +FILTERBAT zer_filter[4]; // 4 напраж +/* Объявляет sens_count — sens число. */ long sens_count[24+4]; +/* Объявляет K100 — данные K100; K_50 — данные K_50. */ float K100,K_50; +/* Объявляет K_T1 — данные K_T1; K_T2 — данные K_T2. */ float K_T1,K_T2; +/* Выполняет миллисекундный такт датчиков, таймеров связи, регистратора и защиты нагрузки. */ interrupt void cpu_timer1_isr_SENS(void); -/********************************************************************/ -/* Ðàñ÷åò ìîäóëà òîêà èç ïîêàçàíèé äâóõ ôàç */ /********************************************************************/ +/* Расчет модула тока из показаний двух фаз */ +/********************************************************************/ +/* Начинает функцию im_calc; назначение модуля — обработка датчиков, вычисление величин и миллисекундный такт системы. */ float im_calc(float ia,float ib) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет isa — данные isa; isb — данные isb. */ float isa,isb; - + + /* Записывает isa значением - 1.5 * (ia + ib); данные isa. */ isa = - 1.5 * (ia + ib); + /* Записывает isb значением COSPi6 * (ia - ib); данные isb. */ isb = COSPi6 * (ia - ib); + /* Завершает im_calc и возвращает (2*sqrt(isa*isa+isb*isb)/3). */ return (2*sqrt(isa*isa+isb*isb)/3); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию calc_sensor_koef; назначение модуля — обработка датчиков, вычисление величин и миллисекундный такт системы. */ void calc_sensor_koef() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i. */ int i; + /* Объявляет K — данные K. */ float K; + /* Проверяет if(TermoRS); последующий оператор выполняется только при истинном условии. */ if(TermoRS) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - K100 = 129.0/(K150_D - K100_D); + /* Записывает K100 значением 129.0/(K150_D - K100_D); данные K100. */ + K100 = 129.0/(K150_D - K100_D); + /* Записывает K_50 значением 261.8/(K150_D - K100_D); данные K_50. */ K_50 = 261.8/(K150_D - K100_D); - K_T1 = 129.0/(K150_1 - K100_1); - K_T2 = 129.0/(K150_2 - K100_2); + /* Записывает K_T1 значением 129.0/(K150_1 - K100_1); данные K_T1. */ + K_T1 = 129.0/(K150_1 - K100_1); + /* Записывает K_T2 значением 129.0/(K150_2 - K100_2); данные K_T2. */ + K_T2 = 129.0/(K150_2 - K100_2); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(TermoAD); последующий оператор выполняется только при истинном условии. */ if(TermoAD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает K_T1 значением 100.0/(K400_1 - K300_1); данные K_T1. */ K_T1 = 100.0/(K400_1 - K300_1); + /* Записывает K_T2 значением 100.0/(K400_2 - K300_2); данные K_T2. */ K_T2 = 100.0/(K400_2 - K300_2); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } // if(Kurrent) + /* Цикл for(i=0;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<4;i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает K значением Caliber[i]; данные K. */ K = Caliber[i]; + /* Проверяет if(sens_type[i]==CURRENT) K/=1000.0; последующий оператор выполняется только при истинном условии. */ if(sens_type[i]==CURRENT) K/=1000.0; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else K/=10000.0; + /* Записывает powK[i] значением K; данные powK. */ powK[i] = K; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } +/* Выполняет миллисекундный такт датчиков, таймеров связи, регистратора и защиты нагрузки. */ interrupt void cpu_timer1_isr_SENS(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет . */ static unsigned int - count_blink=0, count_bright=0, count_mode, + /* Записывает count_blink значением 0, count_bright=0, count_mode,; число blink. */ + count_blink=0, count_bright=0, count_mode, + /* Продолжает список аргументов, полей или выражение blink_over, blink_alarm, work_lamp, heat_lamp, power_lamp;; порядок элементов сохраняется. */ blink_over, blink_alarm, work_lamp, heat_lamp, power_lamp; + /* Объявляет preTest — данные preTest. */ static int preTest; + /* Объявляет TST — данные TST. */ int TST; -#define err_lamp work_lamp // ýòî äëà øêàïà, -#define alm_lamp heat_lamp // ÷òîá áûëî ïîíàòíåå +/* Задаёт err_lamp = work_lamp; данные err_lamp. */ +#define err_lamp work_lamp // это дла шкапа, +/* Задаёт alm_lamp = heat_lamp; данные alm_lamp. */ +#define alm_lamp heat_lamp // чтоб было понатнее + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Изменяет счётчик в выражении CpuTimer1.InterruptCount++; на один для следующего шага. */ CpuTimer1.InterruptCount++; +/* Условие компиляции RS232_USE_FIFO: выбранный блок включается в текущий вариант прошивки. */ #if RS232_USE_FIFO + /* Вызывает RS_FifoTick1ms. Уменьшает защитную паузу RX FIFO по миллисекундному такту. */ RS_FifoTick1ms(); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Устанавливает биты IER значением M_INT13; регистр разрешения прерываний ядра C28x. */ IER |= M_INT13; // Set "global" priority + /* Оставляет биты маски IER значением MINT13; регистр разрешения прерываний ядра C28x. */ IER &= MINT13; // Set "global" priority + /* Разрешение маскируемых прерываний ядра. */ EINT; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; // This is needed to disable write to EALLOW protected registers + /* Проверяет if(!cReset) ServiceDog(); последующий оператор выполняется только при истинном условии. */ if(!cReset) ServiceDog(); + /* Проверяет if(++CanPowse >= CANPOWSE); последующий оператор выполняется только при истинном условии. */ if(++CanPowse >= CANPOWSE) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает CanPowse значением 0; CAN Powse. */ CanPowse = 0; + /* Записывает CanGO значением 1; CAN GO. */ CanGO = 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает TST значением cTestLamp|bTestLamp; данные TST. */ TST = cTestLamp|bTestLamp; + /* Проверяет if(!sig.bit.Error|TST) toggle_READY(); последующий оператор выполняется только при истинном условии. */ if(!sig.bit.Error|TST) toggle_READY(); - else clear_READY(); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else clear_READY(); + /* Проверяет if(Desk==dsk_LOAD); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_LOAD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает Load_runner. В такте Timer1 проверяет команды, напряжение и давность CAN; управляет STOP, повторным пуском и током ЦАП. */ Load_runner(); - /* Áàçà âðåìåíè 1 ìñ; ñíèìîê ñîäåðæèò ðåçóëüòàò òåêóùåãî øàãà ÖÀÏ. */ + /* База времени 1 мс; снимок содержит результат текущего шага ЦАП. */ + /* Вызывает ump_log_tick. Продвигает время регистратора в Timer1 и снимает записи с заданным периодом. */ ump_log_tick(); + /* Завершает cpu_timer1_isr_SENS без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - + + /* Проверяет if(++count_bright == maximum_bright); последующий оператор выполняется только при истинном условии. */ if(++count_bright == maximum_bright) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает count_bright значением 0 ; число bright. */ count_bright = 0 ; - if( ((Desk==dsk_SHKF) && power_lamp) || + /* Проверяет if( ((Desk==dsk_SHKF) и power_lamp) или; последующий оператор выполняется только при истинном условии. */ + if( ((Desk==dsk_SHKF) && power_lamp) || + /* Продолжает список аргументов, полей или выражение ((Desk==dsk_COMM) && heat_lamp) ) set_RES_OUT_1();; порядок элементов сохраняется. */ ((Desk==dsk_COMM) && heat_lamp) ) set_RES_OUT_1(); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else clear_RES_OUT_1(); - - if(work_lamp) set_LED_OUT_1(); // Îíà æå err_lamp äëà øêàïà + + /* Проверяет if(work_lamp) set_LED_OUT_1(); последующий оператор выполняется только при истинном условии. */ + if(work_lamp) set_LED_OUT_1(); // Она же err_lamp дла шкапа + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else clear_LED_OUT_1(); - if(heat_lamp) set_LED_OUT_2(); // Îíà æå alm_lamp äëà øêàïà + /* Проверяет if(heat_lamp) set_LED_OUT_2(); последующий оператор выполняется только при истинном условии. */ + if(heat_lamp) set_LED_OUT_2(); // Она же alm_lamp дла шкапа + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else clear_LED_OUT_2(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(!TST); последующий оператор выполняется только при истинном условии. */ if(!TST) + /* Проверяет if(count_bright == Brightness); последующий оператор выполняется только при истинном условии. */ if(count_bright == Brightness) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Сбрасывает аппаратный сигнал через clear_LED_OUT_1();. */ clear_LED_OUT_1(); + /* Сбрасывает аппаратный сигнал через clear_LED_OUT_2();. */ clear_LED_OUT_2(); + /* Сбрасывает аппаратный сигнал через clear_RES_OUT_1();. */ clear_RES_OUT_1(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - if(TST & !preTest) + /* Проверяет if(TST & !preTest); последующий оператор выполняется только при истинном условии. */ + if(TST & !preTest) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - count_blink = BLINK_TIME; + /* Записывает count_blink значением BLINK_TIME; число blink. */ + count_blink = BLINK_TIME; + /* Записывает count_mode значением 0; число режим. */ count_mode = 0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает preTest значением TST; данные preTest. */ preTest = TST; + /* Проверяет if(++count_blink >= BLINK_TIME); последующий оператор выполняется только при истинном условии. */ if(++count_blink >= BLINK_TIME) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает count_blink значением 0; число blink. */ count_blink=0; + /* Изменяет счётчик в выражении count_mode++; на один для следующего шага. */ count_mode++; + /* Записывает blink_over значением (count_mode & 1)?1:0; данные blink_over. */ blink_over = (count_mode & 1)?1:0; + /* Записывает blink_alarm значением (count_mode & 7)?1:0; данные blink_alarm. */ blink_alarm = (count_mode & 7)?1:0; + /* Проверяет if(TST); последующий оператор выполняется только при истинном условии. */ if(TST) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает heat_lamp значением blink_over; данные heat_lamp. */ heat_lamp = blink_over; + /* Записывает work_lamp значением blink_over; данные work_lamp. */ work_lamp = blink_over; + /* Записывает power_lamp значением blink_over; данные power_lamp. */ power_lamp= blink_over; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(Mode==adr_SHKF); последующий оператор выполняется только при истинном условии. */ if(Mode==adr_SHKF) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает power_lamp значением 1; данные power_lamp. */ power_lamp= 1; + /* Проверяет if(sig.bit.Alarm); последующий оператор выполняется только при истинном условии. */ if(sig.bit.Alarm){// power_lamp= blink_alarm; + /* Записывает alm_lamp значением blink_over; }; данные alm_lamp. */ alm_lamp = blink_over; } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else alm_lamp = 0; + /* Проверяет if(sig.bit.Error); последующий оператор выполняется только при истинном условии. */ if(sig.bit.Error){ power_lamp= blink_over; + /* Записывает err_lamp значением blink_over; }; данные err_lamp. */ err_lamp = blink_over; } - else err_lamp = 0; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else err_lamp = 0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // if(sig.bit.Error) work_lamp = blink_over; // else if(sig.bit.Alarm) work_lamp = blink_alarm; -// else +// else + /* Записывает work_lamp значением 1; данные work_lamp. */ work_lamp = 1; + /* Проверяет if(bSecretBt|cSecretBt) work_lamp = blink_alarm; последующий оператор выполняется только при истинном условии. */ if(bSecretBt|cSecretBt) work_lamp = blink_alarm; + /* Проверяет if(sig.bit.OverHeat) heat_lamp = 1; последующий оператор выполняется только при истинном условии. */ if(sig.bit.OverHeat) heat_lamp = 1; + /* Проверяет else if(sig.bit.SubHeat) heat_lamp = blink_over; последующий оператор выполняется только при истинном условии. */ else if(sig.bit.SubHeat) heat_lamp = blink_over; + /* Проверяет else if(sig.bit.OutHeat) heat_lamp = !blink_alarm; последующий оператор выполняется только при истинном условии. */ else if(sig.bit.OutHeat) heat_lamp = !blink_alarm; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else heat_lamp = 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } } } +/* Начинает функцию Init_sensors; назначение модуля — обработка датчиков, вычисление величин и миллисекундный такт системы. */ void Init_sensors() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i. */ int i; - + + /* Записывает TPL_CANS значением tpl_cans = cal_addr = 0; данные TPL_CANS. */ TPL_CANS = tpl_cans = cal_addr = 0; + /* Вызывает switch с аргументами (Mode) в текущей последовательности операций. */ switch(Mode) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Ветвь выбора для adr_TRN1; выполняется при совпадении селектора switch. */ case adr_TRN1: - case adr_TRN2: + /* Ветвь выбора для adr_TRN2; выполняется при совпадении селектора switch. */ + case adr_TRN2: + /* Записывает TPL_CANS значением TPL_TRN; tpl_cans = TPL_TRN*2; cal_addr = tpl_cans; break; данные TPL_CANS. */ TPL_CANS = TPL_TRN; tpl_cans = TPL_TRN*2; cal_addr = tpl_cans; break; + /* Ветвь выбора для adr_POW1; выполняется при совпадении селектора switch. */ case adr_POW1: - case adr_POW2: + /* Ветвь выбора для adr_POW2; выполняется при совпадении селектора switch. */ + case adr_POW2: + /* Записывает TPL_CANS значением TPL_POW; tpl_cans = TPL_POW*2; cal_addr = tpl_cans; break; данные TPL_CANS. */ TPL_CANS = TPL_POW; tpl_cans = TPL_POW*2; cal_addr = tpl_cans; break; - case adr_ENG1: + /* Ветвь выбора для adr_ENG1; выполняется при совпадении селектора switch. */ + case adr_ENG1: + /* Записывает TPL_CANS значением TPL_ENG; tpl_cans = TPL_ENG; cal_addr = tpl_cans; break; данные TPL_CANS. */ TPL_CANS = TPL_ENG; tpl_cans = TPL_ENG; cal_addr = tpl_cans; break; + /* Ветвь выбора для adr_SHKF; выполняется при совпадении селектора switch. */ case adr_SHKF: tpl_cans = TPL_SHK; cal_addr = tpl_cans-2; break; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает pow_addr значением tpl_cans + Owen; данные pow_addr. */ pow_addr = tpl_cans + Owen; + /* Цикл for(i=0;i<24;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<24;i++) - { + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Записывает sens_type[i] значением 0; данные sens_type. */ sens_type[i]=0; + /* Записывает sens_pair[i] значением i; данные sens_pair. */ sens_pair[i]=i; + /* Записывает adc_filter[i] значением def_FILTERBAT; АЦП filter. */ adc_filter[i] = def_FILTERBAT; + /* Записывает out_filter[i] значением def_FILTERBAT; данные out_filter. */ out_filter[i] = def_FILTERBAT; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(TermoSW); последующий оператор выполняется только при истинном условии. */ if(TermoSW) + /* Цикл for(i=0;i=edge) return 1; - (*count)++; return pre; - } - if( (*count) == 0 ) return 0; - (*count)--; return pre; -} - -void reset_errs(int sens, ERROR err) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if (term); последующий оператор выполняется только при истинном условии. */ + if (term) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Проверяет if((*count)>=edge) return 1; последующий оператор выполняется только при истинном условии. */ + if((*count)>=edge) return 1; + /* Изменяет счётчик в выражении (*count)++; return pre; на один для следующего шага. */ + (*count)++; return pre; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Проверяет if( (*count) == 0 ) return 0; последующий оператор выполняется только при истинном условии. */ + if( (*count) == 0 ) return 0; + /* Изменяет счётчик в выражении (*count)--; return pre; на один для следующего шага. */ + (*count)--; return pre; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ +} + +/* Начинает функцию reset_errs; назначение модуля — обработка датчиков, вычисление величин и миллисекундный такт системы. */ +void reset_errs(int sens, ERROR err) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Объявляет set — установка. */ ERROR set; + /* Записывает set.all значением (sens_error[sens].all & NOER) | err.all; представление регистра целым словом без разбиения на битовые поля. */ set.all = (sens_error[sens].all & NOER) | err.all; + /* Устанавливает биты chk.bit.Error значением set.bit.Stop; ошибка. */ chk.bit.Error|= set.bit.Stop; + /* Записывает set.bit.Ready значением !set.bit.Stop; данные Ready. */ set.bit.Ready = !set.bit.Stop; + /* Записывает sens_error[sens] значением set; sens ошибка. */ sens_error[sens] = set; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию Current_count; назначение модуля — обработка датчиков, вычисление величин и миллисекундный такт системы. */ void Current_count(int chan) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Numb — данные Numb; Zer — данные Zer; Current — данные Current; Level — данные Level. */ float Numb,Zer,Current,Level; + /* Объявляет aCurrent — данные aCurrent; Amplitude — данные Amplitude. */ static float aCurrent,Amplitude; + /* Объявляет ignor — данные ignor; sens — данные sens; pair — данные pair; ist — данные ist; thrd — данные thrd. */ int ignor, sens, pair, ist, thrd, fazz, feed; + /* Объявляет error — ошибка. */ ERROR error; + /* Проверяет if(Desk == dsk_LOAD); последующий оператор выполняется только при истинном условии. */ if(Desk == dsk_LOAD) + /* Проверяет if(!chan); последующий оператор выполняется только при истинном условии. */ if(!chan) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает sig.all значением chk.all; представление регистра целым словом без разбиения на битовые поля. */ sig.all = chk.all; + /* Записывает chk.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ chk.all = 0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает sens значением pow_addr + chan; данные sens. */ sens = pow_addr + chan; + /* Записывает pair значением sens_pair[chan]; данные pair. */ pair = sens_pair[chan]; + /* Записывает ist значением !(chan & 1); данные ist. */ ist = !(chan & 1); + /* Записывает feed значением (chan >>1); данные feed. */ feed = (chan >>1); + /* Записывает fazz значением feed*3; данные fazz. */ fazz = feed*3; + /* Записывает thrd значением feed+4; данные thrd. */ thrd = feed+4; + /* Проверяет if(sens_error[sens].bit.Bypas); последующий оператор выполняется только при истинном условии. */ if(sens_error[sens].bit.Bypas) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - sens_error[sens].all = 0; + /* Записывает sens_error[sens].all значением 0; представление регистра целым словом без разбиения на битовые поля. */ + sens_error[sens].all = 0; + /* Записывает sens_error[sens].bit.Bypas значением 1; данные Bypas. */ sens_error[sens].bit.Bypas = 1; + /* Записывает sens_data[sens] значением 0; sens данные. */ sens_data[sens] = 0; + /* Завершает Current_count без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает Numb значением adc_table_lem[chan]; данные Numb. */ Numb = adc_table_lem[chan]; + /* Записывает modbus[0x64+chan] значением Numb; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[0x64+chan] = Numb; -// Ñðåäíèé (îí æå íóëåâîé) óðîâåíü ïîêàçàíèé ÀÖÏ +// Средний (он же нулевой) уровень показаний АЦП + /* Увеличивает zer_count[chan] значением (Numb-zer_count[chan])/(5.0 * ADC_FREQ); zer число. */ zer_count[chan] += (Numb-zer_count[chan])/(5.0 * ADC_FREQ); + /* Записывает Zer значением (int)(filterbat(&zer_filter[chan],zer_count[chan])); данные Zer. */ Zer = (int)(filterbat(&zer_filter[chan],zer_count[chan])); + /* Проверяет if(WAKE < (WAKE_TIME /2)) Zero_lev[chan] = Zer; последующий оператор выполняется только при истинном условии. */ if(WAKE < (WAKE_TIME /2)) Zero_lev[chan] = Zer; /* Test_mem_limit(12); @@ -491,41 +874,65 @@ Log_to_mem((int)adc_table_lem[chan]); Log_to_mem((int)zer_count[chan]); Log_to_mem((int)Zero_lev[chan]); */ -// Ìãíîâåííîå çíà÷åíèå ôàçû +// Мгновенное значение фазы + /* Записывает Current значением (Numb - Zero_lev[chan]) * powK[chan]; данные Current. */ Current = (Numb - Zero_lev[chan]) * powK[chan]; -// Äåéñòâóþùåå (ñðåäíåêâàäðàòè÷íîå) çíà÷åíèå ôàçû +// Действующее (среднеквадратичное) значение фазы + /* Увеличивает lev_quadr[chan] значением ((Current*Current)-lev_quadr[chan])/(1.0 * ADC_FREQ); данные lev_quadr. */ lev_quadr[chan] += ((Current*Current)-lev_quadr[chan])/(1.0 * ADC_FREQ); + /* Записывает lev_count[chan] значением sqrt(lev_quadr[chan]); lev число. */ lev_count[chan] = sqrt(lev_quadr[chan]); -// Çàïîìíèì - if(ist) +// Запомним + /* Проверяет if(ist); последующий оператор выполняется только при истинном условии. */ + if(ist) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(Desk==dsk_COMM) aCurrent =-Current; последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_COMM) aCurrent =-Current; - else aCurrent = Current; // Çàïîìíèëè ìãíîâåííîå çíà÷åíèå - äëà àìïëèòóäû + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else aCurrent = Current; // Запомнили мгновенное значение - дла амплитуды + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - else + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { -// Âû÷èñëåíèå àìïëèòóäû +// Вычисление амплитуды + /* Записывает Amplitude значением filterbat(&out_filter[sens], im_calc(Current,aCurrent)); данные Amplitude. */ Amplitude = filterbat(&out_filter[sens], im_calc(Current,aCurrent)); + /* Проверяет if(sens_type[sens]==VOLTAGE); последующий оператор выполняется только при истинном условии. */ if(sens_type[sens]==VOLTAGE) + /* Проверяет if(Amplitude<20) Amplitude = 0; последующий оператор выполняется только при истинном условии. */ if(Amplitude<20) Amplitude = 0; + /* Проверяет if(sens_type[sens]==CURRENT); последующий оператор выполняется только при истинном условии. */ if(sens_type[sens]==CURRENT) + /* Проверяет if(Amplitude<75) Amplitude = 0; последующий оператор выполняется только при истинном условии. */ if(Amplitude<75) Amplitude = 0; + /* Записывает Level значением Amplitude / RADIX2; данные Level. */ Level = Amplitude / RADIX2; - + + /* Проверяет if(!WAKE); последующий оператор выполняется только при истинном условии. */ if(!WAKE) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает sens_data[sens ] значением Amplitude; sens данные. */ sens_data[sens ] = Amplitude; + /* Записывает sens_data[sens-1] значением Level; sens данные. */ sens_data[sens-1] = Level; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -// Äåéñòâóþùåå (ñðåäíåêâàäðàòè÷íîå) çíà÷åíèå òðåòüåé ôàçû +// Действующее (среднеквадратичное) значение третьей фазы + /* Записывает Numb значением -Current-aCurrent; данные Numb. */ Numb =-Current-aCurrent; + /* Увеличивает lev_quadr[thrd] значением (Numb*Numb-lev_quadr[thrd])/(1.0 * ADC_FREQ); данные lev_quadr. */ lev_quadr[thrd] += (Numb*Numb-lev_quadr[thrd])/(1.0 * ADC_FREQ); + /* Записывает lev_count[thrd] значением sqrt(lev_quadr[thrd]); lev число. */ lev_count[thrd] = sqrt(lev_quadr[thrd]); /* if(!no_write) @@ -544,57 +951,99 @@ Log_to_mem(Amplitude); Log_to_mem(Level); } */ +/* Записывает modbus[0x68+fazz ] значением lev_count[pair]; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[0x68+fazz ] = lev_count[pair]; +/* Записывает modbus[0x68+fazz+1] значением lev_count[chan]; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[0x68+fazz+1] = lev_count[chan]; +/* Записывает modbus[0x68+fazz+2] значением lev_count[thrd]; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[0x68+fazz+2] = lev_count[thrd]; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -// Ýòî ìàêñèìàëüíîå +// Это максимальное + /* Записывает Numb значением lev_count[chan]; данные Numb. */ Numb = lev_count[chan]; + /* Проверяет if(Numb 0.3) и (Numb>Curr_Edge),; последующий оператор выполняется только при истинном условии. */ if(er_anal( ((Numb-lev_count[chan])/Numb > 0.3) && (Numb>Curr_Edge), + /* Продолжает список аргументов, полей или выражение &err_count[chan],time_3sec,0)); порядок элементов сохраняется. */ &err_count[chan],time_3sec,0)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает error.bit.Wry значением 1; данные Wry. */ error.bit.Wry = 1; + /* Записывает error.bit.Stop значением !ignor; данные Stop. */ error.bit.Stop = !ignor; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(er_anal( ((Numb-lev_count[thrd])/Numb > 0.3) и (Numb>Curr_Edge),; последующий оператор выполняется только при истинном условии. */ if(er_anal( ((Numb-lev_count[thrd])/Numb > 0.3) && (Numb>Curr_Edge), + /* Продолжает список аргументов, полей или выражение &err_count[thrd],time_3sec,0)); порядок элементов сохраняется. */ &err_count[thrd],time_3sec,0)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает error.bit.Wry значением 1; данные Wry. */ error.bit.Wry = 1; + /* Записывает error.bit.Stop значением !ignor; данные Stop. */ error.bit.Stop = !ignor; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk == dsk_LOAD); последующий оператор выполняется только при истинном условии. */ if(Desk == dsk_LOAD) + /* Проверяет if(!ist); последующий оператор выполняется только при истинном условии. */ if(!ist) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(Level > sens_hi_edge[sens]); последующий оператор выполняется только при истинном условии. */ if(Level > sens_hi_edge[sens]) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает error.bit.Hyper значением 1; данные Hyper. */ error.bit.Hyper = 1; + /* Записывает error.bit.Stop значением !ignor; данные Stop. */ error.bit.Stop = !ignor; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(sens_type[sens]==VOLTAGE); последующий оператор выполняется только при истинном условии. */ if(sens_type[sens]==VOLTAGE) - - if(er_anal( (Level < sens_lo_edge[sens]), + + /* Проверяет if(er_anal( (Level < sens_lo_edge[sens]),; последующий оператор выполняется только при истинном условии. */ + if(er_anal( (Level < sens_lo_edge[sens]), + /* Продолжает список аргументов, полей или выражение &low_count[feed],time_3sec,0)); порядок элементов сохраняется. */ &low_count[feed],time_3sec,0)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает error.bit.Out значением 1; данные Out. */ error.bit.Out = 1; + /* Записывает error.bit.Stop значением !ignor; данные Stop. */ error.bit.Stop = !ignor; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(sens_type[sens]==CURRENT); последующий оператор выполняется только при истинном условии. */ if(sens_type[sens]==CURRENT) + /* Проверяет if(Level > sens_lo_edge[sens]); последующий оператор выполняется только при истинном условии. */ if(Level > sens_lo_edge[sens]) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает error.bit.Over значением 1; данные Over. */ error.bit.Over = 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } /* if((chan==1)||(chan==3)) @@ -616,233 +1065,409 @@ Log_to_mem(error.all); Log_to_mem(WAKE); } */ + /* Метка fin для перехода внутри функции. */ fin: + /* Вызывает reset_errs с аргументами (sens,error) в текущей последовательности операций. */ reset_errs(sens,error); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию Temper_count; назначение модуля — обработка датчиков, вычисление величин и миллисекундный такт системы. */ void Temper_count(int chan, int own) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Numb — данные Numb. */ float Numb; + /* Объявляет Temper — данные Temper. */ static int Temper; + /* Объявляет i — данные i; j — данные j; kun — данные kun. */ int i,j, kun; + /* Объявляет s — данные s. */ long s; + /* Объявляет error — ошибка. */ ERROR error; + /* Объявляет ovn — данные ovn. */ int ovn; + /* Проверяет if(!chan); последующий оператор выполняется только при истинном условии. */ if(!chan) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает sig.all значением chk.all; представление регистра целым словом без разбиения на битовые поля. */ sig.all = chk.all; + /* Записывает chk.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ chk.all = 0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(sens_error[chan].bit.Bypas); последующий оператор выполняется только при истинном условии. */ if(sens_error[chan].bit.Bypas) + /* Проверяет if(chan2200) kun|=2; последующий оператор выполняется только при истинном условии. */ if(Numb>2200) kun|=2; + /* Проверяет if(kun>=0); последующий оператор выполняется только при истинном условии. */ if(kun>=0) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает TCaliber[kun] значением Numb; данные TCaliber. */ TCaliber[kun] = Numb; + /* Вызывает calc_sensor_koef с аргументами () в текущей последовательности операций. */ calc_sensor_koef(); + /* Завершает Temper_count без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } + /* Проверяет if(chan>=tpl_cans) return; последующий оператор выполняется только при истинном условии. */ if(chan>=tpl_cans) return; -// Kun èìåííî ÷òîá ñêîìïåíñèðîâàòü íå÷åòíîñòü +// Kun именно чтоб скомпенсировать нечетность + /* Проверяет if(kun&1) Numb = (Numb-K300_2)*K_T2+ZERO; последующий оператор выполняется только при истинном условии. */ if(kun&1) Numb = (Numb-K300_2)*K_T2+ZERO; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else Numb = (Numb-K300_1)*K_T1+ZERO; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(TermoRS); последующий оператор выполняется только при истинном условии. */ if(TermoRS) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(kun>=0); последующий оператор выполняется только при истинном условии. */ if(kun>=0) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(WAKE) out_filter[chan] = adc_filter[chan]; последующий оператор выполняется только при истинном условии. */ if(WAKE) out_filter[chan] = adc_filter[chan]; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { -// Êàëèáðîâêó îòôèëüòðóåì âòîðûì ñëîåì +// Калибровку отфильтруем вторым слоем + /* Записывает Numb значением filterbat(&out_filter[chan],Numb); данные Numb. */ Numb = filterbat(&out_filter[chan],Numb); + /* Записывает TCaliber[kun] значением Numb; данные TCaliber. */ TCaliber[kun] = Numb; + /* Вызывает calc_sensor_koef с аргументами () в текущей последовательности операций. */ calc_sensor_koef(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Завершает Temper_count без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_BKSD); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_BKSD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Записывает sens_data[chan+8] значением ADC_table[chan]; sens данные. */ sens_data[chan+8] = ADC_table[chan]; + /* Проверяет if(chan<6) Numb = (Numb-K100_D)*K100; последующий оператор выполняется только при истинном условии. */ if(chan<6) Numb = (Numb-K100_D)*K100; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else Numb = (Numb-K100_D)*K_50; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(chan&1) Numb = (Numb-K100_2)*K_T2; последующий оператор выполняется только при истинном условии. */ if(chan&1) Numb = (Numb-K100_2)*K_T2; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else Numb = (Numb-K100_1)*K_T1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } + /* Проверяет if(Numb < -20) Numb = -20; последующий оператор выполняется только при истинном условии. */ if(Numb < -20) Numb = -20; + /* Проверяет if(Numb > 200) Numb = 200; последующий оператор выполняется только при истинном условии. */ if(Numb > 200) Numb = 200; + /* Проверяет if(bSecretBt|cSecretBt) Numb = 40.0; последующий оператор выполняется только при истинном условии. */ if(bSecretBt|cSecretBt) Numb = 40.0; + /* Записывает sens_data[chan] значением Numb*10; sens данные. */ sens_data[chan] = Numb*10; + /* Записывает Temper значением Numb; данные Temper. */ Temper = Numb; + /* Записывает error.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ error.all = 0; + /* Проверяет if(WAKE или sens_error[chan].bit.Ignor) goto fin; последующий оператор выполняется только при истинном условии. */ if(WAKE || sens_error[chan].bit.Ignor) goto fin; -// Îáðûâ èëè íåèñïðàâíîñòü +// Обрыв или неисправность + /* Проверяет if(Temper<=-20 или Temper>=200); последующий оператор выполняется только при истинном условии. */ if(Temper<=-20 || Temper>=200) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает error.bit.Tear значением 1; данные Tear. */ error.bit.Tear = 1; + /* Записывает chk.bit.OutHeat значением 1; данные OutHeat. */ chk.bit.OutHeat = 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else -// Ïåðåãðåâ +// Перегрев + /* Проверяет if(((Temper>sens_hi_edge[chan]-Cooling) и (sens_error[chan].bit.Hyper)) или; последующий оператор выполняется только при истинном условии. */ if(((Temper>sens_hi_edge[chan]-Cooling) && (sens_error[chan].bit.Hyper)) || + /* Продолжает список аргументов, полей или выражение (Temper>sens_hi_edge[chan]) ); порядок элементов сохраняется. */ (Temper>sens_hi_edge[chan]) ) - { + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Записывает error.bit.Hyper значением 1; данные Hyper. */ error.bit.Hyper = 1; + /* Записывает error.bit.Stop значением 1; данные Stop. */ error.bit.Stop = 1; + /* Записывает chk.bit.OverHeat значением 1; данные OverHeat. */ chk.bit.OverHeat= 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else -// Ïðåäóïðåæäåíèå ïî òåìïåðàòóðå +// Предупреждение по температуре + /* Проверяет if(Temper>sens_lo_edge[chan]); последующий оператор выполняется только при истинном условии. */ if(Temper>sens_lo_edge[chan]) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает error.bit.Over значением 1; данные Over. */ error.bit.Over = 1; + /* Записывает chk.bit.SubHeat значением 1; данные SubHeat. */ chk.bit.SubHeat = 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Метка fin для перехода внутри функции. */ fin: + /* Вызывает reset_errs с аргументами (chan,error) в текущей последовательности операций. */ reset_errs(chan,error); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию Power_count; назначение модуля — обработка датчиков, вычисление величин и миллисекундный такт системы. */ void Power_count(int chan) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Numb — данные Numb. */ float Numb; + /* Объявляет Power — данные Power; bitt — данные bitt. */ int Power,bitt; + /* Объявляет error — ошибка. */ ERROR error; + /* Проверяет if(!chan); последующий оператор выполняется только при истинном условии. */ if(!chan) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает sig.all значением chk.all; представление регистра целым словом без разбиения на битовые поля. */ sig.all = chk.all; + /* Записывает chk.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ chk.all = 0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(sens_error[chan].bit.Bypas); последующий оператор выполняется только при истинном условии. */ if(sens_error[chan].bit.Bypas) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - sens_error[chan].all = 0; + /* Записывает sens_error[chan].all значением 0; представление регистра целым словом без разбиения на битовые поля. */ + sens_error[chan].all = 0; + /* Записывает sens_error[chan].bit.Bypas значением 1; данные Bypas. */ sens_error[chan].bit.Bypas = 1; + /* Записывает sens_data[chan] значением 0; sens данные. */ sens_data[chan] = 0; + /* Завершает Power_count без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает Numb значением ADC_table[chan]; данные Numb. */ Numb = ADC_table[chan]; + /* Проверяет if(cRawMeat); последующий оператор выполняется только при истинном условии. */ if(cRawMeat) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает sens_data[chan] значением Numb; sens данные. */ sens_data[chan] = Numb; + /* Завершает Power_count без возвращаемого значения. */ return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает Power значением Numb * powK[sens_type[chan]]; данные Power. */ Power = Numb * powK[sens_type[chan]]; + /* Записывает sens_data[chan] значением Power; sens данные. */ sens_data[chan] = Power; + /* Записывает error.all значением 0; представление регистра целым словом без разбиения на битовые поля. */ error.all = 0; - + + /* Проверяет if(WAKE или sens_error[chan].bit.Ignor) goto fin; последующий оператор выполняется только при истинном условии. */ if(WAKE || sens_error[chan].bit.Ignor) goto fin; -// Äèñêðåòíûå êàíàëû +// Дискретные каналы + /* Записывает bitt значением chan*2; данные bitt. */ bitt = chan*2; + /* Проверяет if(chan!=7); последующий оператор выполняется только при истинном условии. */ if(chan!=7) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает error.bit.Discr1 значением er_anal(((DigErr.all>>bitt)&1), &din_count[bitt], 1000, 0); bitt++; данные Discr1. */ error.bit.Discr1 = er_anal(((DigErr.all>>bitt)&1), &din_count[bitt], 1000, 0); bitt++; + /* Записывает error.bit.Discr2 значением er_anal(((DigErr.all>>bitt)&1), &din_count[bitt], 1000, 0); bitt++; данные Discr2. */ error.bit.Discr2 = er_anal(((DigErr.all>>bitt)&1), &din_count[bitt], 1000, 0); bitt++; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(chan==6); последующий оператор выполняется только при истинном условии. */ if(chan==6) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает error.bit.Discr3 значением er_anal(((DigErr.all>>bitt)&1), &din_count[bitt], 1000, 0); bitt++; данные Discr3. */ error.bit.Discr3 = er_anal(((DigErr.all>>bitt)&1), &din_count[bitt], 1000, 0); bitt++; + /* Записывает error.bit.Discr4 значением er_anal(((DigErr.all>>bitt)&1), &din_count[bitt], 1000, 0); bitt++; данные Discr4. */ error.bit.Discr4 = er_anal(((DigErr.all>>bitt)&1), &din_count[bitt], 1000, 0); bitt++; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает error.bit.Contr значением error.bit.Discr1 | error.bit.Discr2 | error.bit.Discr3 | error.bit.Discr4; данные Contr. */ error.bit.Contr = error.bit.Discr1 | error.bit.Discr2 | error.bit.Discr3 | error.bit.Discr4; -// Ïîíèæåííîå íàïðàæåíèå +// Пониженное напражение + /* Проверяет if(Power sens_hi_edge[chan]) - { + { error.bit.Hyper = 1; error.bit.Stop = 1; } */ - if(error.all) + /* Проверяет if(error.all); последующий оператор выполняется только при истинном условии. */ + if(error.all) + /* Записывает chk.bit.Alarm значением 1; данные Alarm. */ chk.bit.Alarm = 1; - + + /* Метка fin для перехода внутри функции. */ fin: + /* Вызывает reset_errs с аргументами (chan,error) в текущей последовательности операций. */ reset_errs(chan,error); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/message.c b/Source/Internal/message.c index 86d76f7..fff2907 100644 --- a/Source/Internal/message.c +++ b/Source/Internal/message.c @@ -1,391 +1,680 @@ +/* Обработка Modbus, заводские параметры и сохранение настроек. Русские пояснения сохранены в UTF-8. */ +/* Подключает "eeprom_config.h": выбор профиля физически установленной EEPROM при сборке. */ #include "eeprom_config.h" +/* Подключает "include/balsam167_eeprom_block.h": настройки и интерфейс balsam167_eeprom_block. */ #include "include/balsam167_eeprom_block.h" +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "crc16.h": таблицы и функции вычисления контрольных сумм CRC. */ #include "crc16.h" +/* Подключает "cntrl_adr.h": собственный и универсальный адрес устройства. */ #include "cntrl_adr.h" -#include "bios_dsp.h" +/* Подключает "bios_dsp.h": коды и объявления команд последовательного загрузчика. */ +#include "bios_dsp.h" +/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */ #include "message.h" +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Подключает "ADC.h": настройка АЦП, обработка преобразований и первичная фильтрация измерений. */ #include "ADC.h" +/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */ #include "peripher.h" +/* Подключает "ecan.h": штатный eCAN и отдельный служебный обмен УМП/GAS. */ #include "ecan.h" +/* Подключает "pulto.h": обмен и индикация пульта. */ #include "pulto.h" +/* Подключает "spise2p.h": драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */ #include "spise2p.h" +/* Подключает "caliber.h": заводские калибровочные значения датчиков. */ #include "caliber.h" +/* Подключает "log_to_mem.h": двухбанковый регистратор событий нагрузки во внешней RAM. */ #include "log_to_mem.h" +/* Подключает "DAC.h": выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ #include "DAC.h" +/* Подключает "ump_tms28335.h": настройки и интерфейс ump_tms28335. */ #include "ump_tms28335.h" +/* Подключает "gas167.h": дополнительная карта GAS 167/v1 только для новой EEPROM M95M02. */ #include "gas167.h" +/* Подключает "include/balsam167_eeprom_layout.h": настройки и интерфейс balsam167_eeprom_layout. */ #include "include/balsam167_eeprom_layout.h" +/* Условие компиляции (ANSWER_LEN + 1) != BALSAM167_EEPROM_PARAM_WORDS: выбранный блок включается в текущий вариант прошивки. */ #if (ANSWER_LEN + 1) != BALSAM167_EEPROM_PARAM_WORDS +/* Останавливает сборку при недопустимой конфигурации: EEPROM_parameter_reservation_must_match_ANSWER_LEN. */ #error EEPROM_parameter_reservation_must_match_ANSWER_LEN +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Объявляет modbus — массив технологических регистров; слово int на C28x занимает 16 бит. */ int modbus[ANSWER_LEN+1]; +/* Объявляет param — данные param. */ unsigned int param[ANSWER_LEN+1]; +/* Заполняет регистры заводскими значениями; тайм-аут CAN нагрузки по умолчанию равен 600 мс. */ void Default_params() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i; def — данные def. */ unsigned int i,def; + /* Объявляет shkf_lo_edge — данные shkf_lo_edge. Начальное значение задаётся справа от знака равенства. */ int shkf_lo_edge[] = {300, // 380 + /* Элемент постоянной таблицы 300,; порядок значений совпадает с порядком индексов потребителя. */ 300, // 38O + /* Элемент постоянной таблицы 0,; порядок значений совпадает с порядком индексов потребителя. */ 0, // 0 + /* Элемент постоянной таблицы 0,; порядок значений совпадает с порядком индексов потребителя. */ 0, // 0 - 15, // 31 + /* Элемент постоянной таблицы 15,; порядок значений совпадает с порядком индексов потребителя. */ + 15, // 31 + /* Элемент постоянной таблицы 22,; порядок значений совпадает с порядком индексов потребителя. */ 22, // 27 + /* Элемент постоянной таблицы 20,; порядок значений совпадает с порядком индексов потребителя. */ 20, // 24 + /* Элемент постоянной таблицы 10,; порядок значений совпадает с порядком индексов потребителя. */ 10, // 15 + /* Элемент постоянной таблицы 60};; порядок значений совпадает с порядком индексов потребителя. */ 60}; // AD + /* Объявляет bright — данные bright. Начальное значение задаётся справа от знака равенства. */ int bright[] = {10,8,6,8,6,8}; + /* Цикл for(i=0;iadr_PULT) def--; последующий оператор выполняется только при истинном условии. */ if(Mode>adr_PULT) def--; +/* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Записывает def значением Mode-3; данные def. */ def = Mode-3; + /* Проверяет if(Mode==adr_SHKF) def=4; последующий оператор выполняется только при истинном условии. */ if(Mode==adr_SHKF) def=4; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Цикл for(i=0;i<8;i++) Caliber[i] = def_cal[def][i];; задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<8;i++) Caliber[i] = def_cal[def][i]; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - + + /* Проверяет if(Desk == dsk_COMM); последующий оператор выполняется только при истинном условии. */ if(Desk == dsk_COMM) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Цикл for(i=0;ibuffer[0] значением CNTRL_ADDR; rs arr буфер. */ rs_arr->buffer[0] = CNTRL_ADDR; + /* Записывает rs_arr->buffer[1] значением function | 0x80; rs arr буфер. */ rs_arr->buffer[1] = function | 0x80; + /* Записывает rs_arr->buffer[2] значением error; rs arr буфер. */ rs_arr->buffer[2] = error; + /* Записывает crc значением get_crc_16(0xFFFF, rs_arr->buffer, 3); данные crc. */ crc = get_crc_16(0xFFFF, rs_arr->buffer, 3); + /* Записывает rs_arr->buffer[3] значением LOBYTE(crc); rs_arr->buffer[4] = HIBYTE(crc); rs arr буфер. */ rs_arr->buffer[3] = LOBYTE(crc); rs_arr->buffer[4] = HIBYTE(crc); + /* Записывает rs_arr->flag_TIMEOUT_to_Send значением true; rs arr флаг TIMEOUT to Send. */ rs_arr->flag_TIMEOUT_to_Send = true; + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ RS_Send(rs_arr, rs_arr->buffer, 5); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } /* UART parser has already validated CRC and accepted the device address. */ +/* Выбирает GAS либо существующее адресное пространство УМП и снимает согласованный ответ под краткой блокировкой IRQ. */ static int receive_ump(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет address — адрес; value — данные value; saved — данные saved; length — длина; count — число. */ unsigned int address, value, saved, length, count, error; /* Main-loop only; encoded into the UART buffer before the next request. * Keep the 124-word snapshot off the shared interrupt stack. */ + /* Объявляет words — слова. */ static uint16_t words[UMP_MAX_WORDS]; + /* Записывает address значением (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3]; адрес. */ address = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3]; + /* Проверяет if (address < UMP_BASE) return 0; последующий оператор выполняется только при истинном условии. */ if (address < UMP_BASE) return 0; + /* Записывает value значением (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; данные value. */ value = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; /* SPI driver advances in Timer2 ISR: NEVER mask interrupts here. * Reuse the existing snapshot buffer; the main loop owns this transaction. * The shared validator rejects writes, wraparound and out-of-device reads. */ + /* Проверяет if (address >= 0x1300U и address < 0x1308U); последующий оператор выполняется только при истинном условии. */ if (address >= 0x1300U && address < 0x1308U) { + /* Записывает count значением Load_protection_prepare(rs_arr->RS_Header[1], address, value, words, &error); число. */ count = Load_protection_prepare(rs_arr->RS_Header[1], address, value, words, &error); + /* Проверяет else if (address >= BALSAM167_EEPROM_RTU_BASE); последующий оператор выполняется только при истинном условии. */ } else if (address >= BALSAM167_EEPROM_RTU_BASE) { + /* Записывает error значением 2; ошибка. */ error = 2; +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 /* Exception 3 prevents old AT-profile clients from falling back to * legacy PEEK after a profile mismatch. No SPI transaction is issued. */ + /* Проверяет if (!(value & BALSAM167_EEPROM_M95_MARKER)) error = 3; последующий оператор выполняется только при истинном условии. */ if (!(value & BALSAM167_EEPROM_M95_MARKER)) error = 3; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Записывает count значением 0; число. */ count = 0; + /* Проверяет if (balsam167_eeprom_block_valid(rs_arr->RS_Header[1], address, value)); последующий оператор выполняется только при истинном условии. */ if (balsam167_eeprom_block_valid(rs_arr->RS_Header[1], address, value)) { +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 + /* Записывает count значением value & 255U; число. */ count = value & 255U; + /* Вызывает Seeprom_read. Читает EEPROM порциями; адрес задаётся словами C28x, размер переводится в число передаваемых слов. */ Seeprom_read(balsam167_eeprom_block_word(address, value), words, count * 2); +/* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Записывает count значением value; число. */ count = value; + /* Вызывает Seeprom_read. Читает EEPROM порциями; адрес задаётся словами C28x, размер переводится в число передаваемых слов. */ Seeprom_read(address - BALSAM167_EEPROM_RTU_BASE, words, count * 2); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Записывает error значением 0; ошибка. */ error = 0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ } else { + /* Записывает saved значением __disable_interrupts(); данные saved. */ saved = __disable_interrupts(); +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 + /* Проверяет if (gas167_contains(address)); последующий оператор выполняется только при истинном условии. */ if (gas167_contains(address)) + /* Записывает count значением gas167_prepare(rs_arr->RS_Header[1], address, value, 0, words, &error); число. */ count = gas167_prepare(rs_arr->RS_Header[1], address, value, 0, words, &error); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Записывает count значением ump_tms28335_capture(rs_arr->RS_Header[1], address, value, words, &error); число. */ count = ump_tms28335_capture(rs_arr->RS_Header[1], address, value, words, &error); + /* Вызывает __restore_interrupts с аргументами (saved) в текущей последовательности операций. */ __restore_interrupts(saved); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает length значением ump_rtu_encode(CNTRL_ADDR, rs_arr->RS_Header[1], error,; длина. */ length = ump_rtu_encode(CNTRL_ADDR, rs_arr->RS_Header[1], error, + /* Продолжает список аргументов, полей или выражение words, count, rs_arr->buffer, MAX_SEND_LENGTH);; порядок элементов сохраняется. */ words, count, rs_arr->buffer, MAX_SEND_LENGTH); + /* Проверяет if (length); последующий оператор выполняется только при истинном условии. */ if (length) { + /* Записывает rs_arr->flag_TIMEOUT_to_Send значением true; rs arr флаг TIMEOUT to Send. */ rs_arr->flag_TIMEOUT_to_Send = true; + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ RS_Send(rs_arr, rs_arr->buffer, length); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Завершает receive_ump и возвращает 1. */ return 1; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Обслуживает чтение регистров FC03 с проверкой адреса, длины и формированием ответа RTU. */ void ReceiveCommandModbus3(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет crc — данные crc; Address_MB — адрес MB; Length_MB — длина MB; i — данные i; value — данные value. */ unsigned int crc, Address_MB, Length_MB, i, value; + /* Проверяет if (receive_ump(rs_arr)) return; последующий оператор выполняется только при истинном условии. */ if (receive_ump(rs_arr)) return; -// ïîëó÷èëè íà÷àëüíûé àäðåñ ÷òåíèà +// получили начальный адрес чтениа + /* Записывает Address_MB значением (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3]; адрес MB. */ Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3]; -// ïîëó÷èëè êîëè÷åñòâî ñëîâ äàííûõ +// получили количество слов данных + /* Записывает Length_MB значением (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; длина MB. */ Length_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; + /* Проверяет if (!Length_MB или Length_MB > 125 или; последующий оператор выполняется только при истинном условии. */ if (!Length_MB || Length_MB > 125 || + /* Продолжает список аргументов, полей или выражение !(Address_MB < ANSWER_LEN && Length_MB <= ANSWER_LEN-Address_MB)) {; порядок элементов сохраняется. */ !(Address_MB < ANSWER_LEN && Length_MB <= ANSWER_LEN-Address_MB)) { + /* Вызывает modbus_exception. Формирует ответ Modbus с установленным старшим битом функции и кодом исключения. */ modbus_exception(rs_arr, CMD_MODBUS_3, 2); return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } ///////////////////////////////////////////////// - // Îòñûëêà - /* Ïîñ÷èòàëè êîíòðîëüíóþ ñóììó ïåðåä ñàìîé ïîñûëêîé */ + // Отсылка + /* Посчитали контрольную сумму перед самой посылкой */ + /* Записывает rs_arr->buffer[0] значением CNTRL_ADDR; rs arr буфер. */ rs_arr->buffer[0] = CNTRL_ADDR; + /* Записывает rs_arr->buffer[1] значением CMD_MODBUS_3; rs arr буфер. */ rs_arr->buffer[1] = CMD_MODBUS_3; + /* Записывает rs_arr->buffer[2] значением Length_MB*2; rs arr буфер. */ rs_arr->buffer[2] = Length_MB*2; - /* Çàùèùàåì öåëîñòíîñòü îäíîãî ñíèìêà/áëîêà; ïåðåäà÷à UART èä¸ò óæå - * ñ ðàçðåø¸ííûìè ïðåðûâàíèÿìè è íå çàäåðæèâàåò èçìåðåíèå/óïðàâëåíèå. */ + /* Защищаем целостность одного снимка/блока; передача UART идёт уже + * с разрешёнными прерываниями и не задерживает измерение/управление. */ + /* Цикл for (i=0;ibuffer[3+i*2] значением (value >> 8) & 0xFF; rs arr буфер. */ rs_arr->buffer[3+i*2] = (value >> 8) & 0xFF; + /* Записывает rs_arr->buffer[3+i*2+1] значением value & 0xFF; rs arr буфер. */ rs_arr->buffer[3+i*2+1] = value & 0xFF; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает crc значением 0xffff; данные crc. */ crc = 0xffff; + /* Записывает crc значением get_crc_16(crc, rs_arr->buffer, Length_MB*2+3); данные crc. */ crc = get_crc_16(crc, rs_arr->buffer, Length_MB*2+3); + /* Записывает rs_arr->buffer[Length_MB*2+3] значением LOBYTE(crc); rs arr буфер. */ rs_arr->buffer[Length_MB*2+3] = LOBYTE(crc); + /* Записывает rs_arr->buffer[Length_MB*2+4] значением HIBYTE(crc); rs arr буфер. */ rs_arr->buffer[Length_MB*2+4] = HIBYTE(crc); - - rs_arr->buffer[Length_MB*2+5] = 0; - rs_arr->buffer[Length_MB*2+6] = 0; - rs_arr->buffer[Length_MB*2+7] = 0; - rs_arr->buffer[Length_MB*2+8] = 0; + /* Записывает rs_arr->buffer[Length_MB*2+5] значением 0; rs arr буфер. */ + rs_arr->buffer[Length_MB*2+5] = 0; + /* Записывает rs_arr->buffer[Length_MB*2+6] значением 0; rs arr буфер. */ + rs_arr->buffer[Length_MB*2+6] = 0; + /* Записывает rs_arr->buffer[Length_MB*2+7] значением 0; rs arr буфер. */ + rs_arr->buffer[Length_MB*2+7] = 0; + /* Записывает rs_arr->buffer[Length_MB*2+8] значением 0; rs arr буфер. */ + rs_arr->buffer[Length_MB*2+8] = 0; + + /* Записывает rs_arr->flag_TIMEOUT_to_Send значением true; rs arr флаг TIMEOUT to Send. */ rs_arr->flag_TIMEOUT_to_Send=true; - /* Ðàñøèðåíèå ëîããåðà îòâå÷àåò òî÷íûì êàäðîì Modbus áåç õâîñòîâûõ - * íóëåé: îíè èíà÷å ïîïàëè áû â íà÷àëî îòâåòà ñëåäóþùåãî áëîêà GUI. - * Èñòîðè÷åñêèé ôîðìàò òåõíîëîãè÷åñêèõ ðåãèñòðîâ îñòàâëåí ïðåæíèì. */ + /* Расширение логгера отвечает точным кадром Modbus без хвостовых + * нулей: они иначе попали бы в начало ответа следующего блока GUI. + * Исторический формат технологических регистров оставлен прежним. */ + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ RS_Send(rs_arr, rs_arr->buffer, Length_MB*2+8); + /* Завершает ReceiveCommandModbus3 без возвращаемого значения. */ return; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Обслуживает одиночную запись FC06, проверяя доступность регистра и допустимость значения. */ void ReceiveCommandModbus6(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет Address_MB — адрес MB; Data_MB — данные MB; i — данные i. */ unsigned int Address_MB, Data_MB, i; + /* Проверяет if (receive_ump(rs_arr)) return; последующий оператор выполняется только при истинном условии. */ if (receive_ump(rs_arr)) return; ///////////////////////////////////////////////// - // Îòñûëêà - /* Îòïðàâëàåì íàçàä òî æå ñàìîå */ + // Отсылка + /* Отправлаем назад то же самое */ + /* Цикл for (i=0;i<8;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for (i=0;i<8;i++) + /* Записывает rs_arr->buffer[i] значением rs_arr->RS_Header[i]; rs arr буфер. */ rs_arr->buffer[i] = rs_arr->RS_Header[i]; -// ïîëó÷èëè íà÷àëüíûé àäðåñ çàïèñè +// получили начальный адрес записи + /* Записывает Address_MB значением (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3]; адрес MB. */ Address_MB = (rs_arr->RS_Header[2] << 8) | rs_arr->RS_Header[3]; -// ïîëó÷èëè ñëîâî äàííûõ +// получили слово данных + /* Записывает Data_MB значением (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; данные MB. */ Data_MB = (rs_arr->RS_Header[4] << 8) | rs_arr->RS_Header[5]; + /* Проверяет if (Desk == dsk_LOAD и (Address_MB == 0x7CU или Address_MB == 0x7DU)); последующий оператор выполняется только при истинном условии. */ if (Desk == dsk_LOAD && (Address_MB == 0x7CU || Address_MB == 0x7DU)) { + /* Вызывает modbus_exception. Формирует ответ Modbus с установленным старшим битом функции и кодом исключения. */ modbus_exception(rs_arr, CMD_MODBUS_6, 2); return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (Desk == dsk_LOAD и Address_MB == 0x52U и; последующий оператор выполняется только при истинном условии. */ if (Desk == dsk_LOAD && Address_MB == 0x52U && + /* Продолжает список аргументов, полей или выражение (Data_MB == 0U || Data_MB > 60000U)) {; порядок элементов сохраняется. */ (Data_MB == 0U || Data_MB > 60000U)) { + /* Вызывает modbus_exception. Формирует ответ Modbus с установленным старшим битом функции и кодом исключения. */ modbus_exception(rs_arr, CMD_MODBUS_6, 3); return; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if (Address_MB < ANSWER_LEN); последующий оператор выполняется только при истинном условии. */ if (Address_MB < ANSWER_LEN) { + /* Записывает Modbus[Address_MB].all значением Data_MB; представление регистра целым словом без разбиения на битовые поля. */ Modbus[Address_MB].all = Data_MB; + /* Проверяет if (Address_MB == 127) ump_log_rs(); последующий оператор выполняется только при истинном условии. */ if (Address_MB == 127) ump_log_rs(); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ } else { modbus_exception(rs_arr, CMD_MODBUS_6, 2); return; } + /* Записывает rs_arr->flag_TIMEOUT_to_Send значением true; rs arr флаг TIMEOUT to Send. */ rs_arr->flag_TIMEOUT_to_Send=true; + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ RS_Send(rs_arr, rs_arr->buffer, 10); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию SendCommandModbus4; назначение модуля — обработка Modbus, заводские параметры и сохранение настроек. */ void SendCommandModbus4(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет crc — данные crc. */ unsigned int crc; ///////////////////////////////////////////////// - // Îòñûëêà + // Отсылка + /* Записывает rs_arr->buffer[0] значением 16; rs arr буфер. */ rs_arr->buffer[0] = 16; + /* Записывает rs_arr->buffer[1] значением 4; rs arr буфер. */ rs_arr->buffer[1] = 4; + /* Записывает rs_arr->buffer[2] значением 0; rs arr буфер. */ rs_arr->buffer[2] = 0; + /* Записывает rs_arr->buffer[3] значением 0; rs arr буфер. */ rs_arr->buffer[3] = 0; + /* Записывает rs_arr->buffer[4] значением 0; rs arr буфер. */ rs_arr->buffer[4] = 0; + /* Записывает rs_arr->buffer[5] значением 48; rs arr буфер. */ rs_arr->buffer[5] = 48; + /* Записывает crc значением 0xffff; данные crc. */ crc = 0xffff; + /* Записывает crc значением get_crc_16(crc, rs_arr->buffer, 6); данные crc. */ crc = get_crc_16(crc, rs_arr->buffer, 6); + /* Записывает rs_arr->buffer[6] значением LOBYTE(crc); rs arr буфер. */ rs_arr->buffer[6] = LOBYTE(crc); + /* Записывает rs_arr->buffer[7] значением HIBYTE(crc); rs arr буфер. */ rs_arr->buffer[7] = HIBYTE(crc); //rs_arr->buffer[8] = 0; //rs_arr->buffer[9] = 0; //rs_arr->buffer[10] = 0; - + + /* Записывает rs_arr->flag_TIMEOUT_to_Send значением true; rs arr флаг TIMEOUT to Send. */ rs_arr->flag_TIMEOUT_to_Send=true; + /* Вызывает RS_Send. Передаёт массив слов через SCI в выбранном режиме упаковки. */ RS_Send(rs_arr, rs_arr->buffer, 8); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию ReceiveAnswerModbus4; назначение модуля — обработка Modbus, заводские параметры и сохранение настроек. */ void ReceiveAnswerModbus4(RS_DATA *rs_arr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i. */ unsigned int i; ///////////////////////////////////////////////// - // Îòñûëêà + // Отсылка + /* Цикл for (i=0;i<8;i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for (i=0;i<8;i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает ext_temp[i] значением ( rs_arr->RS_Header[5+i*12] << 8) +; данные ext_temp. */ ext_temp[i] = ( rs_arr->RS_Header[5+i*12] << 8) + + /* Продолжает список аргументов, полей или выражение rs_arr->RS_Header[6+i*12];; порядок элементов сохраняется. */ rs_arr->RS_Header[6+i*12]; + /* Записывает ext_diag[i] значением ( rs_arr->RS_Header[7+i*12] |; данные ext_diag. */ ext_diag[i] = ( rs_arr->RS_Header[7+i*12] | + /* Продолжает список аргументов, полей или выражение rs_arr->RS_Header[8+i*12] ) != 0;; порядок элементов сохраняется. */ rs_arr->RS_Header[8+i*12] ) != 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } diff --git a/Source/Internal/peripher.c b/Source/Internal/peripher.c index bba30e2..7b2ddc2 100644 --- a/Source/Internal/peripher.c +++ b/Source/Internal/peripher.c @@ -1,291 +1,519 @@ +/* Перемычки режима платы, дискретные входы и выходы. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP281x Headerfile Include File +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */ #include "message.h" +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" +/* Подключает "pulto.h": обмен и индикация пульта. */ #include "pulto.h" +/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */ #include "peripher.h" +/* Подключает "GPIO_table.h": таблица назначения GPIO и макросы аппаратных сигналов платы. */ #include "GPIO_table.h" +/* Объявляет Mode — рабочий адрес или режим платы, выбранный перемычками; Desk — аппаратно определённый тип платы; TermoAD — данные TermoAD; TermoRS — данные TermoRS; TermoSW — данные TermoSW. Начальное значение задаётся справа от знака равенства. */ int Mode,Desk,TermoAD=0,TermoRS=0,TermoSW=0,Kurrent=0,Kalibro=0,Owen=0; +/* Объявляет INcount0 — данные INcount0; INcount1 — данные INcount1. Начальное значение задаётся справа от знака равенства. */ unsigned int INcount0=0,INcount1=0; +/* Продолжает список аргументов, полей или выражение LONGE DigErr;; порядок элементов сохраняется. */ LONGE DigErr; +/* Объявляет MUX_GPIO32 — выбор функции вывода 32; MUX_GPIO48 — выбор функции вывода 48; DIR_GPIO32 — данные DIR_GPIO32; DIR_GPIO48 — данные DIR_GPIO48. */ int MUX_GPIO32,MUX_GPIO48,DIR_GPIO32,DIR_GPIO48; +/* Начинает функцию setup_leds_line; назначение модуля — перемычки режима платы, дискретные входы и выходы. */ void setup_leds_line() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает MUX_GPIO32 значением GpioCtrlRegs.GPBMUX1.bit.GPIO32; выбор функции вывода 32. */ MUX_GPIO32 = GpioCtrlRegs.GPBMUX1.bit.GPIO32; + /* Записывает MUX_GPIO48 значением GpioCtrlRegs.GPBMUX2.bit.GPIO48; выбор функции вывода 48. */ MUX_GPIO48 = GpioCtrlRegs.GPBMUX2.bit.GPIO48; + /* Записывает DIR_GPIO32 значением GpioCtrlRegs.GPBDIR.bit.GPIO32; данные DIR_GPIO32. */ DIR_GPIO32 = GpioCtrlRegs.GPBDIR.bit.GPIO32; + /* Записывает DIR_GPIO48 значением GpioCtrlRegs.GPBDIR.bit.GPIO48; данные DIR_GPIO48. */ DIR_GPIO48 = GpioCtrlRegs.GPBDIR.bit.GPIO48; + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO32 значением 0; аппаратная линия ввода/вывода GPIO32. */ GpioCtrlRegs.GPBMUX1.bit.GPIO32 = 0; + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO48 значением 0; аппаратная линия ввода/вывода GPIO48. */ GpioCtrlRegs.GPBMUX2.bit.GPIO48 = 0; + /* Записывает GpioCtrlRegs.GPBDIR.bit.GPIO32 значением 1; аппаратная линия ввода/вывода GPIO32. */ GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1; + /* Записывает GpioCtrlRegs.GPBDIR.bit.GPIO48 значением 1; аппаратная линия ввода/вывода GPIO48. */ GpioCtrlRegs.GPBDIR.bit.GPIO48 = 1; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию unsetup_leds_line; назначение модуля — перемычки режима платы, дискретные входы и выходы. */ void unsetup_leds_line() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает GpioCtrlRegs.GPBMUX1.bit.GPIO32 значением MUX_GPIO32; аппаратная линия ввода/вывода GPIO32. */ GpioCtrlRegs.GPBMUX1.bit.GPIO32 = MUX_GPIO32; + /* Записывает GpioCtrlRegs.GPBMUX2.bit.GPIO48 значением MUX_GPIO48; аппаратная линия ввода/вывода GPIO48. */ GpioCtrlRegs.GPBMUX2.bit.GPIO48 = MUX_GPIO48; + /* Записывает GpioCtrlRegs.GPBDIR.bit.GPIO32 значением DIR_GPIO32; аппаратная линия ввода/вывода GPIO32. */ GpioCtrlRegs.GPBDIR.bit.GPIO32 = DIR_GPIO32; + /* Записывает GpioCtrlRegs.GPBDIR.bit.GPIO48 значением DIR_GPIO48; аппаратная линия ввода/вывода GPIO48. */ GpioCtrlRegs.GPBDIR.bit.GPIO48 = DIR_GPIO48; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Определяет адрес и тип платы по аппаратным перемычкам и задаёт рабочий режим. */ void get_Mode() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; - GpioCtrlRegs.GPAMUX1.all &= 0xFF000000; // 00—11 - GpioCtrlRegs.GPAMUX2.all &= 0xFF00003F; // 19—27 - GpioCtrlRegs.GPBMUX1.all &= 0xFFFFFFC0; // 32—34 - GpioCtrlRegs.GPBMUX2.all &= 0x000FF000; // 48—53, 58—63 + /* Оставляет биты маски GpioCtrlRegs.GPAMUX1.all значением 0xFF000000; представление регистра целым словом без разбиения на битовые поля. */ + GpioCtrlRegs.GPAMUX1.all &= 0xFF000000; // 00—11 + /* Оставляет биты маски GpioCtrlRegs.GPAMUX2.all значением 0xFF00003F; представление регистра целым словом без разбиения на битовые поля. */ + GpioCtrlRegs.GPAMUX2.all &= 0xFF00003F; // 19—27 + /* Оставляет биты маски GpioCtrlRegs.GPBMUX1.all значением 0xFFFFFFC0; представление регистра целым словом без разбиения на битовые поля. */ + GpioCtrlRegs.GPBMUX1.all &= 0xFFFFFFC0; // 32—34 + /* Оставляет биты маски GpioCtrlRegs.GPBMUX2.all значением 0x000FF000; представление регистра целым словом без разбиения на битовые поля. */ + GpioCtrlRegs.GPBMUX2.all &= 0x000FF000; // 48—53, 58—63 + /* Записывает GpioCtrlRegs.GPADIR.bit.GPIO20 значением 0; аппаратная линия ввода/вывода GPIO20. */ GpioCtrlRegs.GPADIR.bit.GPIO20 = 0; + /* Записывает GpioCtrlRegs.GPADIR.bit.GPIO21 значением 0; аппаратная линия ввода/вывода GPIO21. */ GpioCtrlRegs.GPADIR.bit.GPIO21 = 0; + /* Записывает GpioCtrlRegs.GPADIR.bit.GPIO22 значением 0; аппаратная линия ввода/вывода GPIO22. */ GpioCtrlRegs.GPADIR.bit.GPIO22 = 0; + /* Записывает GpioCtrlRegs.GPBDIR.bit.GPIO51 значением 0; аппаратная линия ввода/вывода GPIO51. */ GpioCtrlRegs.GPBDIR.bit.GPIO51 = 0; - EDIS; + /* Закрытие доступа к защищённым регистрам периферии. */ + EDIS; + /* Записывает Mode значением 1; рабочий адрес или режим платы, выбранный перемычками. */ Mode = 1; + /* Увеличивает Mode значением 1 * !GpioDataRegs.GPADAT.bit.GPIO21; рабочий адрес или режим платы, выбранный перемычками. */ Mode += 1 * !GpioDataRegs.GPADAT.bit.GPIO21; + /* Увеличивает Mode значением 2 * !GpioDataRegs.GPADAT.bit.GPIO20; рабочий адрес или режим платы, выбранный перемычками. */ Mode += 2 * !GpioDataRegs.GPADAT.bit.GPIO20; + /* Увеличивает Mode значением 4 * !GpioDataRegs.GPADAT.bit.GPIO22; рабочий адрес или режим платы, выбранный перемычками. */ Mode += 4 * !GpioDataRegs.GPADAT.bit.GPIO22; + /* Увеличивает Mode значением 8 * !GpioDataRegs.GPBDAT.bit.GPIO51; рабочий адрес или режим платы, выбранный перемычками. */ Mode += 8 * !GpioDataRegs.GPBDAT.bit.GPIO51; + /* Проверяет if( (Mode==adr_POW1) или (Mode==adr_POW2)) Desk = dsk_COMM; последующий оператор выполняется только при истинном условии. */ if( (Mode==adr_POW1)||(Mode==adr_POW2)) Desk = dsk_COMM; + /* Проверяет if( (Mode==adr_TRN1) или (Mode==adr_TRN2)) Desk = dsk_BKST; последующий оператор выполняется только при истинном условии. */ if( (Mode==adr_TRN1)||(Mode==adr_TRN2)) Desk = dsk_BKST; + /* Проверяет if( (Mode==adr_LOA1) или (Mode==adr_LOA2)) Desk = dsk_LOAD; последующий оператор выполняется только при истинном условии. */ if( (Mode==adr_LOA1)||(Mode==adr_LOA2)) Desk = dsk_LOAD; + /* Проверяет if (Mode==adr_ENG1) Desk = dsk_BKSD; последующий оператор выполняется только при истинном условии. */ if (Mode==adr_ENG1) Desk = dsk_BKSD; + /* Проверяет if (Mode==adr_PULT) Desk = dsk_EPLT; последующий оператор выполняется только при истинном условии. */ if (Mode==adr_PULT) Desk = dsk_EPLT; + /* Проверяет if (Mode==adr_SHKF) Desk = dsk_SHKF; последующий оператор выполняется только при истинном условии. */ if (Mode==adr_SHKF) Desk = dsk_SHKF; + /* Проверяет if( (Desk==dsk_COMM) или (Desk==dsk_LOAD)) Kurrent = 1; последующий оператор выполняется только при истинном условии. */ if( (Desk==dsk_COMM)||(Desk==dsk_LOAD)) Kurrent = 1; + /* Проверяет if( (Desk==dsk_BKSD) или (Desk==dsk_BKST)) TermoRS = 1; последующий оператор выполняется только при истинном условии. */ if( (Desk==dsk_BKSD)||(Desk==dsk_BKST)) TermoRS = 1; + /* Проверяет if( (Desk==dsk_COMM) или (Desk==dsk_SHKF)) TermoAD = 1; последующий оператор выполняется только при истинном условии. */ if( (Desk==dsk_COMM)||(Desk==dsk_SHKF)) TermoAD = 1; + /* Проверяет if( (Desk==dsk_COMM) или (Desk==dsk_BKST)) TermoSW = 2; последующий оператор выполняется только при истинном условии. */ if( (Desk==dsk_COMM)||(Desk==dsk_BKST)) TermoSW = 2; + /* Проверяет if (Desk==dsk_BKSD) TermoSW = 1; последующий оператор выполняется только при истинном условии. */ if (Desk==dsk_BKSD) TermoSW = 1; -#ifdef CALIB_RS +/* Включает следующий блок только при определённом символе CALIB_RS. */ +#ifdef CALIB_RS + /* Проверяет if (Desk!=dsk_EPLT) Kalibro = 1; последующий оператор выполняется только при истинном условии. */ if (Desk!=dsk_EPLT) Kalibro = 1; -#else +/* Выбирает альтернативный блок текущего условия компиляции. */ +#else + /* Проверяет if( (Desk==dsk_COMM) или (Desk==dsk_SHKF) или; последующий оператор выполняется только при истинном условии. */ if( (Desk==dsk_COMM)||(Desk==dsk_SHKF)|| + /* Записывает Kalibro значением 1; данные Kalibro. */ (Desk==dsk_LOAD) ) Kalibro = 1; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif +/* Включает следующий блок только при определённом символе OWEN. */ #ifdef OWEN + /* Проверяет if (Desk==dsk_COMM) Owen = OWEN_DT; последующий оператор выполняется только при истинном условии. */ if (Desk==dsk_COMM) Owen = OWEN_DT; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Сбрасывает аппаратный сигнал через clear_LED_OUT_1();. */ clear_LED_OUT_1(); + /* Сбрасывает аппаратный сигнал через clear_LED_OUT_2();. */ clear_LED_OUT_2(); + /* Сбрасывает аппаратный сигнал через clear_RES_OUT_1();. */ clear_RES_OUT_1(); + /* Сбрасывает аппаратный сигнал через clear_RES_OUT_2();. */ clear_RES_OUT_2(); + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Вызывает switch с аргументами (Desk) в текущей последовательности операций. */ switch(Desk) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Ветвь выбора для dsk_COMM; выполняется при совпадении селектора switch. */ case dsk_COMM: GpioCtrlRegs.GPADIR.all = COMM_GPADIR; + /* Записывает GpioCtrlRegs.GPBDIR.all значением COMM_GPBDIR; break; представление регистра целым словом без разбиения на битовые поля. */ GpioCtrlRegs.GPBDIR.all = COMM_GPBDIR; break; + /* Ветвь выбора для dsk_BKSD; выполняется при совпадении селектора switch. */ case dsk_BKSD: GpioCtrlRegs.GPADIR.all = BKSD_GPADIR; + /* Записывает GpioCtrlRegs.GPBDIR.all значением BKSD_GPBDIR; break; представление регистра целым словом без разбиения на битовые поля. */ GpioCtrlRegs.GPBDIR.all = BKSD_GPBDIR; break; + /* Ветвь выбора для dsk_BKST; выполняется при совпадении селектора switch. */ case dsk_BKST: GpioCtrlRegs.GPADIR.all = BKST_GPADIR; + /* Записывает GpioCtrlRegs.GPBDIR.all значением BKST_GPBDIR; break; представление регистра целым словом без разбиения на битовые поля. */ GpioCtrlRegs.GPBDIR.all = BKST_GPBDIR; break; - + + /* Ветвь выбора для dsk_EPLT; выполняется при совпадении селектора switch. */ case dsk_EPLT: GpioCtrlRegs.GPADIR.all = PLT2_GPADIR; + /* Записывает GpioCtrlRegs.GPBDIR.all значением PLT2_GPBDIR; break; представление регистра целым словом без разбиения на битовые поля. */ GpioCtrlRegs.GPBDIR.all = PLT2_GPBDIR; break; + /* Ветвь выбора для dsk_LOAD; выполняется при совпадении селектора switch. */ case dsk_LOAD: GpioCtrlRegs.GPADIR.all = LOAD_GPADIR; - GpioCtrlRegs.GPBDIR.all = LOAD_GPBDIR; + /* Записывает GpioCtrlRegs.GPBDIR.all значением LOAD_GPBDIR; представление регистра целым словом без разбиения на битовые поля. */ + GpioCtrlRegs.GPBDIR.all = LOAD_GPBDIR; + /* Записывает GpioDataRegs.GPASET.bit.GPIO3 значением 1; break; аппаратная линия ввода/вывода GPIO3. */ GpioDataRegs.GPASET.bit.GPIO3=1; break; + /* Ветвь выбора для dsk_SHKF; выполняется при совпадении селектора switch. */ case dsk_SHKF: GpioCtrlRegs.GPADIR.all = SHKF_GPADIR; + /* Записывает GpioCtrlRegs.GPBDIR.all значением SHKF_GPBDIR; break; представление регистра целым словом без разбиения на битовые поля. */ GpioCtrlRegs.GPBDIR.all = SHKF_GPBDIR; break; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию select_tpl_255; назначение модуля — перемычки режима платы, дискретные входы и выходы. */ void select_tpl_255(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(Desk==dsk_BKSD); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_BKSD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Задаёт BKSD_A_tpl_255 = ((1L<<11) + (1L<<9) + (1L<<7) + (1L<<3)); данные BKSD_A_tpl_255. */ #define BKSD_A_tpl_255 ((1L<<11) + (1L<<9) + (1L<<7) + (1L<<3)) + /* Записывает GpioDataRegs.GPACLEAR.all значением BKSD_A_tpl_255; представление регистра целым словом без разбиения на битовые поля. */ GpioDataRegs.GPACLEAR.all = BKSD_A_tpl_255; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_COMM); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_COMM) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Задаёт COMM_A_tpl_255 = ((1L<<27) + (1L<<24) + (1L<<25)); данные COMM_A_tpl_255. */ #define COMM_A_tpl_255 ((1L<<27) + (1L<<24) + (1L<<25)) +/* Задаёт COMM_B_tpl_255 = ((1L<<(49-32)) + (1L<<(52-32))); данные COMM_B_tpl_255. */ #define COMM_B_tpl_255 ((1L<<(49-32)) + (1L<<(52-32))) + /* Записывает GpioDataRegs.GPASET.all значением COMM_A_tpl_255; представление регистра целым словом без разбиения на битовые поля. */ GpioDataRegs.GPASET.all = COMM_A_tpl_255; + /* Записывает GpioDataRegs.GPBSET.all значением COMM_B_tpl_255; представление регистра целым словом без разбиения на битовые поля. */ GpioDataRegs.GPBSET.all = COMM_B_tpl_255; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_BKST); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_BKST) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Задаёт BKST_A_tpl_zero = ((1L<<11) + (1L<<9) + (1L<<7) + (1L<<3) + (1L<<1) + (1L<<8) + (1L<<6) + (1L<<0) + (1L<<27) + (1L<<24)); данные BKST_A_tpl_zero. */ #define BKST_A_tpl_zero ((1L<<11) + (1L<<9) + (1L<<7) + (1L<<3) + (1L<<1) + (1L<<8) + (1L<<6) + (1L<<0) + (1L<<27) + (1L<<24)) +/* Задаёт BKST_B_tpl_zero = ((1L<<(53-32)) + (1L<<(50-32))); данные BKST_B_tpl_zero. */ #define BKST_B_tpl_zero ((1L<<(53-32)) + (1L<<(50-32))) + /* Записывает GpioDataRegs.GPASET.all значением BKST_A_tpl_zero; представление регистра целым словом без разбиения на битовые поля. */ GpioDataRegs.GPASET.all = BKST_A_tpl_zero; + /* Записывает GpioDataRegs.GPBSET.all значением BKST_B_tpl_zero; представление регистра целым словом без разбиения на битовые поля. */ GpioDataRegs.GPBSET.all = BKST_B_tpl_zero; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } +/* Начинает функцию select_tpl_canal; назначение модуля — перемычки режима платы, дискретные входы и выходы. */ void select_tpl_canal(int n_tpl) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет GPIO_A_tpl_set — аппаратная линия ввода/вывода GPIO_A_tpl_set. Начальное значение задаётся справа от знака равенства. */ unsigned long GPIO_A_tpl_set = 0; + /* Объявляет GPIO_B_tpl_set — аппаратная линия ввода/вывода GPIO_B_tpl_set. Начальное значение задаётся справа от знака равенства. */ unsigned long GPIO_B_tpl_set = 0; + /* Проверяет if(Desk==dsk_BKSD); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_BKSD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(!(n_tpl&0x01)) GPIO_A_tpl_set|=(1L<<11); последующий оператор выполняется только при истинном условии. */ if(!(n_tpl&0x01)) GPIO_A_tpl_set|=(1L<<11); + /* Проверяет if(!(n_tpl&0x02)) GPIO_A_tpl_set|=(1L<<9); последующий оператор выполняется только при истинном условии. */ if(!(n_tpl&0x02)) GPIO_A_tpl_set|=(1L<<9); + /* Проверяет if(!(n_tpl&0x04)) GPIO_A_tpl_set|=(1L<<7); последующий оператор выполняется только при истинном условии. */ if(!(n_tpl&0x04)) GPIO_A_tpl_set|=(1L<<7); + /* Проверяет if(!(n_tpl&0x08)) GPIO_A_tpl_set|=(1L<<3); последующий оператор выполняется только при истинном условии. */ if(!(n_tpl&0x08)) GPIO_A_tpl_set|=(1L<<3); + /* Записывает GpioDataRegs.GPASET.all значением GPIO_A_tpl_set; представление регистра целым словом без разбиения на битовые поля. */ GpioDataRegs.GPASET.all = GPIO_A_tpl_set; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_BKST); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_BKST) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(n_tpl==0) GpioDataRegs.GPACLEAR.bit.GPIO11=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==0) GpioDataRegs.GPACLEAR.bit.GPIO11=1; + /* Проверяет if(n_tpl==1) GpioDataRegs.GPACLEAR.bit.GPIO9=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==1) GpioDataRegs.GPACLEAR.bit.GPIO9=1; + /* Проверяет if(n_tpl==2) GpioDataRegs.GPACLEAR.bit.GPIO7=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==2) GpioDataRegs.GPACLEAR.bit.GPIO7=1; + /* Проверяет if(n_tpl==3) GpioDataRegs.GPACLEAR.bit.GPIO3=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==3) GpioDataRegs.GPACLEAR.bit.GPIO3=1; + /* Проверяет if(n_tpl==4) GpioDataRegs.GPACLEAR.bit.GPIO1=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==4) GpioDataRegs.GPACLEAR.bit.GPIO1=1; + /* Проверяет if(n_tpl==5) GpioDataRegs.GPACLEAR.bit.GPIO8=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==5) GpioDataRegs.GPACLEAR.bit.GPIO8=1; + /* Проверяет if(n_tpl==6) GpioDataRegs.GPACLEAR.bit.GPIO6=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==6) GpioDataRegs.GPACLEAR.bit.GPIO6=1; + /* Проверяет if(n_tpl==7) GpioDataRegs.GPACLEAR.bit.GPIO0=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==7) GpioDataRegs.GPACLEAR.bit.GPIO0=1; + /* Проверяет if(n_tpl==8) GpioDataRegs.GPACLEAR.bit.GPIO27=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==8) GpioDataRegs.GPACLEAR.bit.GPIO27=1; + /* Проверяет if(n_tpl==9) GpioDataRegs.GPACLEAR.bit.GPIO24=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==9) GpioDataRegs.GPACLEAR.bit.GPIO24=1; + /* Проверяет if(n_tpl==10) GpioDataRegs.GPBCLEAR.bit.GPIO53=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==10) GpioDataRegs.GPBCLEAR.bit.GPIO53=1; + /* Проверяет if(n_tpl==11) GpioDataRegs.GPBCLEAR.bit.GPIO50=1; последующий оператор выполняется только при истинном условии. */ if(n_tpl==11) GpioDataRegs.GPBCLEAR.bit.GPIO50=1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_COMM); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_COMM) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(!(n_tpl&0x01)) GPIO_A_tpl_set|=(1L<<27); последующий оператор выполняется только при истинном условии. */ if(!(n_tpl&0x01)) GPIO_A_tpl_set|=(1L<<27); + /* Проверяет if(!(n_tpl&0x02)) GPIO_A_tpl_set|=(1L<<24); последующий оператор выполняется только при истинном условии. */ if(!(n_tpl&0x02)) GPIO_A_tpl_set|=(1L<<24); + /* Проверяет if(!(n_tpl&0x04)) GPIO_A_tpl_set|=(1L<<25); последующий оператор выполняется только при истинном условии. */ if(!(n_tpl&0x04)) GPIO_A_tpl_set|=(1L<<25); + /* Проверяет if(!(n_tpl&0x08)) GPIO_B_tpl_set|=(1L<<(49-32)); последующий оператор выполняется только при истинном условии. */ if(!(n_tpl&0x08)) GPIO_B_tpl_set|=(1L<<(49-32)); + /* Проверяет if(!(n_tpl&0x10)) GPIO_B_tpl_set|=(1L<<(52-32)); последующий оператор выполняется только при истинном условии. */ if(!(n_tpl&0x10)) GPIO_B_tpl_set|=(1L<<(52-32)); + /* Записывает GpioDataRegs.GPACLEAR.all значением GPIO_A_tpl_set; представление регистра целым словом без разбиения на битовые поля. */ GpioDataRegs.GPACLEAR.all = GPIO_A_tpl_set; + /* Записывает GpioDataRegs.GPBCLEAR.all значением GPIO_B_tpl_set; представление регистра целым словом без разбиения на битовые поля. */ GpioDataRegs.GPBCLEAR.all = GPIO_B_tpl_set; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } +/* Считывает кнопки, обновляет флаги команд и учитывает текущий тип платы. */ void get_Buttons() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет butt — данные butt. Начальное значение задаётся справа от знака равенства. */ unsigned long butt =0; + /* Объявляет fluf — данные fluf. Начальное значение задаётся справа от знака равенства. */ unsigned long fluf =0; + /* Проверяет if(Desk==dsk_BKSD); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_BKSD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает bTestLamp значением !GpioDataRegs.GPBDAT.bit.GPIO50; данные bTestLamp. */ bTestLamp = !GpioDataRegs.GPBDAT.bit.GPIO50; + /* Записывает bSecretBt значением !GpioDataRegs.GPBDAT.bit.GPIO49; данные bSecretBt. */ bSecretBt = !GpioDataRegs.GPBDAT.bit.GPIO49; + /* Записывает InputRep0 значением bTestLamp; вход Rep 0. */ InputRep0 = bTestLamp; + /* Записывает InputRep1 значением bSecretBt; вход Rep 1. */ InputRep1 = bSecretBt; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO0) butt +=0x0001; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO0) butt +=0x0001; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO2) butt +=0x0002; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO2) butt +=0x0002; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO10)butt +=0x0004; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO10)butt +=0x0004; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO4) butt +=0x0008; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO4) butt +=0x0008; + /* Записывает Inputs.all значением butt; представление регистра целым словом без разбиения на битовые поля. */ Inputs.all = butt; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } -/* Íè÷åãî òàêîãî â äåéñòâèòåëüíîñòè íåò +/* Ничего такого в действительности нет if(Desk==dsk_BKST) { bSecretBt = !GpioDataRegs.GPBDAT.bit.GPIO63; InputRep1 = bSecretBt; return; } */ + /* Проверяет if(Desk==dsk_COMM); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_COMM) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает bSecretBt значением !GpioDataRegs.GPBDAT.bit.GPIO53; данные bSecretBt. */ bSecretBt = !GpioDataRegs.GPBDAT.bit.GPIO53; + /* Записывает bTermoCal значением er_anal(!GpioDataRegs.GPBDAT.bit.GPIO50, &INcount0, 0xFFFF, 0); данные bTermoCal. */ bTermoCal = er_anal(!GpioDataRegs.GPBDAT.bit.GPIO50, &INcount0, 0xFFFF, 0); + /* Записывает InputRep1 значением bSecretBt; вход Rep 1. */ InputRep1 = bSecretBt; + /* Записывает InputRep2 значением bTermoCal; вход Rep 2. */ InputRep2 = bTermoCal; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_EPLT); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_EPLT) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает bTestLamp значением er_anal(GpioDataRegs.GPADAT.bit.GPIO26, &INcount0, 1000, 0); данные bTestLamp. */ bTestLamp = er_anal(GpioDataRegs.GPADAT.bit.GPIO26, &INcount0, 1000, 0); + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO27) butt +=0x0001; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO27) butt +=0x0001; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO24) butt +=0x0002; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO24) butt +=0x0002; + /* Проверяет if(GpioDataRegs.GPBDAT.bit.GPIO53) butt +=0x0004; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPBDAT.bit.GPIO53) butt +=0x0004; + /* Проверяет if(GpioDataRegs.GPBDAT.bit.GPIO50) butt +=0x0008; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPBDAT.bit.GPIO50) butt +=0x0008; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO26) butt +=0x0010; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO26) butt +=0x0010; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO23) butt +=0x0020; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO23) butt +=0x0020; + /* Проверяет if(GpioDataRegs.GPBDAT.bit.GPIO52) butt +=0x0040; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPBDAT.bit.GPIO52) butt +=0x0040; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO4 ) butt +=0x0080; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO4 ) butt +=0x0080; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO25) butt +=0x0100; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO25) butt +=0x0100; + /* Проверяет if(GpioDataRegs.GPBDAT.bit.GPIO49) butt +=0x0200; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPBDAT.bit.GPIO49) butt +=0x0200; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO11) butt +=0x0400; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO11) butt +=0x0400; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO5 ) butt +=0x0800; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPADAT.bit.GPIO5 ) butt +=0x0800; + /* Проверяет if(GpioDataRegs.GPBDAT.bit.GPIO48) butt +=0x1000; последующий оператор выполняется только при истинном условии. */ if(GpioDataRegs.GPBDAT.bit.GPIO48) butt +=0x1000; - if(GpioDataRegs.GPADAT.bit.GPIO10) butt +=0x2000; // Ñåêðåòíûé âõîä + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO10) butt +=0x2000; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO10) butt +=0x2000; // Секретный вход + /* Записывает Inputs.all значением butt; представление регистра целым словом без разбиения на битовые поля. */ Inputs.all = butt; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_LOAD); последующий оператор выполняется только при истинном условии. */ if(Desk==dsk_LOAD) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(!GpioDataRegs.GPADAT.bit.GPIO6) butt +=0x0001; последующий оператор выполняется только при истинном условии. */ if(!GpioDataRegs.GPADAT.bit.GPIO6) butt +=0x0001; // OMEGA + /* Проверяет if(!GpioDataRegs.GPADAT.bit.GPIO8) butt +=0x0002; последующий оператор выполняется только при истинном условии. */ if(!GpioDataRegs.GPADAT.bit.GPIO8) butt +=0x0002; // Start_1 + /* Проверяет if(!GpioDataRegs.GPADAT.bit.GPIO11) butt +=0x0004; последующий оператор выполняется только при истинном условии. */ if(!GpioDataRegs.GPADAT.bit.GPIO11) butt +=0x0004; // Res_in + /* Записывает Inputs.all значением butt; представление регистра целым словом без разбиения на битовые поля. */ Inputs.all = butt; - } - - if(Desk==dsk_SHKF) - { - - if(GpioDataRegs.GPBDAT.bit.GPIO53) fluf += 0x0000010; else butt += 0x0001; - if(GpioDataRegs.GPBDAT.bit.GPIO52) fluf += 0x0000040; else butt += 0x0002; - - if(GpioDataRegs.GPADAT.bit.GPIO2) fluf += 0x0001000; else butt += 0x0004; - if(GpioDataRegs.GPADAT.bit.GPIO4) fluf += 0x0002000; else butt += 0x0008; - if(GpioDataRegs.GPADAT.bit.GPIO6) fluf += 0x0004000; else butt += 0x0010; - if(GpioDataRegs.GPADAT.bit.GPIO0) fluf += 0x0008000; else butt += 0x0020; - - if(GpioDataRegs.GPADAT.bit.GPIO8) fluf += 0x0010000; else butt += 0x0040; - if(GpioDataRegs.GPADAT.bit.GPIO10) fluf += 0x0020000; else butt += 0x0080; - if(GpioDataRegs.GPADAT.bit.GPIO3) fluf += 0x0040000; else butt += 0x0100; - if(GpioDataRegs.GPADAT.bit.GPIO5) fluf += 0x0080000; else butt += 0x0200; - if(GpioDataRegs.GPADAT.bit.GPIO7) fluf += 0x0100000; else butt += 0x0400; - if(GpioDataRegs.GPADAT.bit.GPIO1) fluf += 0x0200000; else butt += 0x0800; - if(GpioDataRegs.GPADAT.bit.GPIO11) fluf += 0x0400000; else butt += 0x1000; - if(GpioDataRegs.GPADAT.bit.GPIO9) fluf += 0x0800000; else butt += 0x2000; - - DigErr.all = fluf; - Inputs.all = butt; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Проверяет if(Desk==dsk_SHKF); последующий оператор выполняется только при истинном условии. */ + if(Desk==dsk_SHKF) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + + /* Проверяет if(GpioDataRegs.GPBDAT.bit.GPIO53) fluf += 0x0000010; else butt += 0x0001; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPBDAT.bit.GPIO53) fluf += 0x0000010; else butt += 0x0001; + /* Проверяет if(GpioDataRegs.GPBDAT.bit.GPIO52) fluf += 0x0000040; else butt += 0x0002; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPBDAT.bit.GPIO52) fluf += 0x0000040; else butt += 0x0002; + + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO2) fluf += 0x0001000; else butt += 0x0004; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO2) fluf += 0x0001000; else butt += 0x0004; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO4) fluf += 0x0002000; else butt += 0x0008; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO4) fluf += 0x0002000; else butt += 0x0008; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO6) fluf += 0x0004000; else butt += 0x0010; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO6) fluf += 0x0004000; else butt += 0x0010; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO0) fluf += 0x0008000; else butt += 0x0020; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO0) fluf += 0x0008000; else butt += 0x0020; + + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO8) fluf += 0x0010000; else butt += 0x0040; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO8) fluf += 0x0010000; else butt += 0x0040; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO10) fluf += 0x0020000; else butt += 0x0080; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO10) fluf += 0x0020000; else butt += 0x0080; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO3) fluf += 0x0040000; else butt += 0x0100; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO3) fluf += 0x0040000; else butt += 0x0100; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO5) fluf += 0x0080000; else butt += 0x0200; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO5) fluf += 0x0080000; else butt += 0x0200; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO7) fluf += 0x0100000; else butt += 0x0400; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO7) fluf += 0x0100000; else butt += 0x0400; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO1) fluf += 0x0200000; else butt += 0x0800; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO1) fluf += 0x0200000; else butt += 0x0800; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO11) fluf += 0x0400000; else butt += 0x1000; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO11) fluf += 0x0400000; else butt += 0x1000; + /* Проверяет if(GpioDataRegs.GPADAT.bit.GPIO9) fluf += 0x0800000; else butt += 0x2000; последующий оператор выполняется только при истинном условии. */ + if(GpioDataRegs.GPADAT.bit.GPIO9) fluf += 0x0800000; else butt += 0x2000; + + /* Записывает DigErr.all значением fluf; представление регистра целым словом без разбиения на битовые поля. */ + DigErr.all = fluf; + /* Записывает Inputs.all значением butt; представление регистра целым словом без разбиения на битовые поля. */ + Inputs.all = butt; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + + /* Записывает butt значением 1 * !GpioDataRegs.GPADAT.bit.GPIO21; данные butt. */ butt = 1 * !GpioDataRegs.GPADAT.bit.GPIO21; + /* Увеличивает butt значением 2 * !GpioDataRegs.GPADAT.bit.GPIO20; данные butt. */ butt += 2 * !GpioDataRegs.GPADAT.bit.GPIO20; + /* Увеличивает butt значением 4 * !GpioDataRegs.GPADAT.bit.GPIO22; данные butt. */ butt += 4 * !GpioDataRegs.GPADAT.bit.GPIO22; + /* Увеличивает butt значением 8 * !GpioDataRegs.GPBDAT.bit.GPIO51; данные butt. */ butt += 8 * !GpioDataRegs.GPBDAT.bit.GPIO51; + /* Записывает Jumpers значением butt; данные Jumpers. */ Jumpers = butt; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/pulto.c b/Source/Internal/pulto.c index 2efd425..e880d61 100644 --- a/Source/Internal/pulto.c +++ b/Source/Internal/pulto.c @@ -1,107 +1,196 @@ +/* Обмен и индикация пульта. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File -#include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */ +#include "DSP2833x_SWPrioritizedIsrLevels.h" +/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */ #include "RS485.h" +/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */ #include "message.h" +/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */ #include "filter_bat2.h" +/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */ #include "measure.h" +/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */ #include "package.h" +/* Подключает "pulto.h": обмен и индикация пульта. */ #include "pulto.h" +/* Подключает "kanal.h": последовательный вывод данных канала индикации. */ #include "kanal.h" +/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */ #include "peripher.h" +/* Объявляет isMask — is маска. */ unsigned long isMask; +/* Объявляет isNumb — данные isNumb. */ int isNumb; +/* Объявляет quaLamp — данные quaLamp. Начальное значение задаётся справа от знака равенства. */ int quaLamp = 6; +/* Объявляет Lonely — данные Lonely. Начальное значение задаётся справа от знака равенства. */ unsigned long Lonely=0; +/* Начинает функцию what_is; назначение модуля — обмен и индикация пульта. */ void what_is() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет count_blink — число blink. */ static unsigned int count_blink; + /* Объявляет numb — данные numb. Начальное значение задаётся справа от знака равенства. */ static int numb=0; + /* Проверяет if(++count_blink >= BLINK_TIME); последующий оператор выполняется только при истинном условии. */ if(++count_blink >= BLINK_TIME) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает count_blink значением 0; число blink. */ count_blink=0; + /* Записывает numb значением 0; данные numb. */ numb++; if(numb==10) numb=0; + /* Записывает isNumb значением numb*1000 + numb*100 + numb*10 +numb; данные isNumb. */ isNumb = numb*1000 + numb*100 + numb*10 +numb; + /* Проверяет if(isMask) isMask = 0; последующий оператор выполняется только при истинном условии. */ if(isMask) isMask = 0; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else isMask = 0xFFFFFFFF; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } +/* Обслуживает периодический обмен и индикацию пульта вместо измерительной платы. */ interrupt void cpu_timer1_isr_PULT(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет cownt — данные cownt; count_bright — число bright. Начальное значение задаётся справа от знака равенства. */ static int cownt=0,count_bright; + /* Объявляет light — данные light; i — данные i. Начальное значение задаётся справа от знака равенства. */ unsigned int light=0, i; + /* Объявляет Alone — данные Alone; READY_FREQ — частота основного такта Timer1 в герцах. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */ unsigned int Alone = 20*READY_FREQ; + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Изменяет счётчик в выражении CpuTimer1.InterruptCount++; на один для следующего шага. */ CpuTimer1.InterruptCount++; + /* Устанавливает биты IER значением MINT13; регистр разрешения прерываний ядра C28x. */ IER |= MINT13; // Set "global" priority + /* Разрешение маскируемых прерываний ядра. */ EINT; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; // This is needed to disable write to EALLOW protected registers + /* Проверяет if(!cReset) ServiceDog(); последующий оператор выполняется только при истинном условии. */ if(!cReset) ServiceDog(); + /* Проверяет if(++CanPowse >= CANPOWSE); последующий оператор выполняется только при истинном условии. */ if(++CanPowse >= CANPOWSE) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает CanPowse значением 0; CAN Powse. */ CanPowse = 0; + /* Записывает CanGO значением 1; CAN GO. */ CanGO = 1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - toggle_ONLINE(); // ñòðîá äëà ÏËÈÑ - toggle_RES_OUT_1(); // òèïà ýòî ãîòîâíîñòü - toggle_RES_OUT_2(); // íà âñàêèé + /* Переключает аппаратный сигнал через toggle_ONLINE();. */ + toggle_ONLINE(); // строб дла ПЛИС + /* Переключает аппаратный сигнал через toggle_RES_OUT_1();. */ + toggle_RES_OUT_1(); // типа это готовность + /* Переключает аппаратный сигнал через toggle_RES_OUT_2();. */ + toggle_RES_OUT_2(); // на всакий + /* Проверяет if(++Lonely > Alone) Lonely = Alone; последующий оператор выполняется только при истинном условии. */ if(++Lonely > Alone) Lonely = Alone; + /* Проверяет if(++count_bright >= maximum_bright) count_bright = 0; последующий оператор выполняется только при истинном условии. */ if(++count_bright >= maximum_bright) count_bright = 0 ; + /* Цикл for(i=0; i2) cownt=0; последующий оператор выполняется только при истинном условии. */ if(++cownt>2) cownt=0; + /* Проверяет if(cTestLamp|bTestLamp); последующий оператор выполняется только при истинном условии. */ if(cTestLamp|bTestLamp) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает what_is с аргументами () в текущей последовательности операций. */ what_is(); + /* Проверяет if(cownt == 0) kanal_Send(0,isNumb,4); последующий оператор выполняется только при истинном условии. */ if(cownt == 0) kanal_Send(0,isNumb,4); + /* Проверяет if(cownt == 1) kanal_Send(1,isNumb,4); последующий оператор выполняется только при истинном условии. */ if(cownt == 1) kanal_Send(1,isNumb,4); + /* Вызывает kanal_Send с аргументами (2,isMask,0) в текущей последовательности операций. */ kanal_Send(2,isMask,0); + /* Проверяет if(cownt == 2) kanal_Send(3,isMask,0); последующий оператор выполняется только при истинном условии. */ if(cownt == 2) kanal_Send(3,isMask,0); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Проверяет if(cLiteFire); последующий оператор выполняется только при истинном условии. */ if(cLiteFire) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(cownt == 0) kanal_Send(0,8888,1); последующий оператор выполняется только при истинном условии. */ if(cownt == 0) kanal_Send(0,8888,1); + /* Проверяет if(cownt == 1) kanal_Send(1,8888,1); последующий оператор выполняется только при истинном условии. */ if(cownt == 1) kanal_Send(1,8888,1); + /* Вызывает kanal_Send с аргументами (2,0xFFFF & light,0) в текущей последовательности операций. */ kanal_Send(2,0xFFFF & light,0); + /* Проверяет if(cownt == 2) kanal_Send(3,0xFFFF,0); последующий оператор выполняется только при истинном условии. */ if(cownt == 2) kanal_Send(3,0xFFFF,0); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Проверяет if((Lonely >= Alone)); последующий оператор выполняется только при истинном условии. */ if((Lonely >= Alone)) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(cownt == 0) kanal_Send(0,0,0); последующий оператор выполняется только при истинном условии. */ if(cownt == 0) kanal_Send(0,0,0); + /* Проверяет if(cownt == 1) kanal_Send(1,0,0); последующий оператор выполняется только при истинном условии. */ if(cownt == 1) kanal_Send(1,0,0); + /* Вызывает kanal_Send с аргументами (2,0,0) в текущей последовательности операций. */ kanal_Send(2,0,0); + /* Проверяет if(cownt == 2) kanal_Send(3,0,0); последующий оператор выполняется только при истинном условии. */ if(cownt == 2) kanal_Send(3,0,0); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Условие компиляции OBOROT == STRAIGHT: выбранный блок включается в текущий вариант прошивки. */ #if OBOROT == STRAIGHT + /* Проверяет if(cownt == 0) kanal_Send(0,modbus[0],1); последующий оператор выполняется только при истинном условии. */ if(cownt == 0) kanal_Send(0,modbus[0],1); + /* Проверяет if(cownt == 1) kanal_Send(1,modbus[1],1); последующий оператор выполняется только при истинном условии. */ if(cownt == 1) kanal_Send(1,modbus[1],1); +/* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Проверяет if(cownt == 0) kanal_Send(0,modbus[1],1); последующий оператор выполняется только при истинном условии. */ if(cownt == 0) kanal_Send(0,modbus[1],1); + /* Проверяет if(cownt == 1) kanal_Send(1,modbus[0],1); последующий оператор выполняется только при истинном условии. */ if(cownt == 1) kanal_Send(1,modbus[0],1); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Вызывает kanal_Send с аргументами (2,modbus[2] & light,0) в текущей последовательности операций. */ kanal_Send(2,modbus[2] & light,0); + /* Проверяет if(cownt == 2) kanal_Send(3,modbus[3],0); последующий оператор выполняется только при истинном условии. */ if(cownt == 2) kanal_Send(3,modbus[3],0); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } diff --git a/Source/Internal/shared_ump.c b/Source/Internal/shared_ump.c index 2c67289..0b363f7 100644 --- a/Source/Internal/shared_ump.c +++ b/Source/Internal/shared_ump.c @@ -1,7 +1,12 @@ +/* Подключение общей реализации УМП и паспорта прошивки из соседнего репозитория. Русские пояснения сохранены в UTF-8. */ /* Build the canonical sources directly; do not copy their implementations. */ +/* Подключает "../firmware-info/src/firmware_info_static.c": настройки и интерфейс firmware_info_static. */ #include "../firmware-info/src/firmware_info_static.c" /* Bind only this PM35 application's identity. The shared transport still owns * range checks, read-only access, CRC and CAN fragment packing. */ +/* Задаёт UMP_FIRMWARE_INFO_READ = firmware_info_static_read; UMP FIRMWARE INFO чтение. */ #define UMP_FIRMWARE_INFO_READ firmware_info_static_read +/* Подключает "src/ump_protocol.c": настройки и интерфейс ump_protocol. */ #include "src/ump_protocol.c" +/* Подключает "ports/tms320f28335/ump_tms28335.c": настройки и интерфейс ump_tms28335. */ #include "ports/tms320f28335/ump_tms28335.c" diff --git a/Source/Internal/spise2p.c b/Source/Internal/spise2p.c index 57784fe..e84baf0 100644 --- a/Source/Internal/spise2p.c +++ b/Source/Internal/spise2p.c @@ -1,480 +1,781 @@ +/* Драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP2833x Headerfile Include File +/* Подключает "spise2p.h": драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */ #include "spise2p.h" -/* Instance the SPI bus serial EEPROM driver */ -static SPISE2P_DRV se2p=SPISE2P_DRV_DEFAULTS; +/* Instance the SPI bus serial EEPROM driver */ +/* Объявляет se2p — данные se2p; SPISE2P_DRV_DEFAULTS — данные SPISE2P_DRV_DEFAULTS. Начальное значение задаётся справа от знака равенства. */ +static SPISE2P_DRV se2p=SPISE2P_DRV_DEFAULTS; /* Instance serial EEPROm data transfer structure */ +/* Продолжает список аргументов, полей или выражение static SE2P_DATA writeData, readData;; порядок элементов сохраняется. */ static SE2P_DATA writeData, readData; // Prototype statements for functions found within this file. +/* Объявляет интерфейс функции PRD_TICK; реализация вызывается через этот прототип. */ interrupt void PRD_TICK(void); +/* Продвигает SPI EEPROM по Timer2 и подтверждает прерывание таймера. */ interrupt void cpu_timer2_isr(void); +/* Объявляет ccc — данные ccc. Начальное значение задаётся справа от знака равенства. */ int ccc=0; /********************************************************************/ -/******* SPI bus Serial EEPROM driver Initialization routine ********/ +/******* SPI bus Serial EEPROM driver Initialization routine ********/ /********************************************************************/ +/* Пишет EEPROM с разделением по физическим страницам; область параметров не пересекает образ прошивки. */ void Seeprom_write( SE2P_SIZE adres, + /* Объявляет buf — данные buf. */ unsigned int buf[], + /* Объявляет size). */ SE2P_SIZE size) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет len — данные len. */ unsigned int len; +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 /* Bound physical accesses before byte-to-word rounding. Legacy 32-KiB * callers retain their compact driver; EXTEND is checked independently. */ + /* Проверяет if (adres >= PROM_LEN или !size или size > (PROM_LEN-adres)*2) return; последующий оператор выполняется только при истинном условии. */ if (adres >= PROM_LEN || !size || size > (PROM_LEN-adres)*2) return; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Записывает CpuTimer2.InterruptCount значением 0; прерывание число. */ CpuTimer2.InterruptCount=0; + /* Записывает CpuTimer2Regs.TCR.all значением 0x4020; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer2Regs.TCR.all = 0x4020; // Use write-only instruction to set TSS bit = 0 + /* Повторяет или ожидает, пока выполняется while(!spiSe2pFree(&se2p));. */ while(!spiSe2pFree(&se2p)); + /* Записывает size значением (size / WORD_LEN) + (size % WORD_LEN); размер. */ size = (size / WORD_LEN) + (size % WORD_LEN); + /* Повторяет или ожидает, пока выполняется while(size). */ while(size) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает len значением PAGE_LEN - (adres % PAGE_LEN); данные len. */ len = PAGE_LEN - (adres % PAGE_LEN); + /* Проверяет if(len > size) len=size; последующий оператор выполняется только при истинном условии. */ if(len > size) len=size; + /* Записывает writeData.dataPtr значением buf; данные Ptr. */ writeData.dataPtr = buf; + /* Записывает writeData.nrData значением len; nr данные. */ writeData.nrData = len; + /* Записывает writeData.se2pAddr значением adres * WORD_LEN; данные se2pAddr. */ writeData.se2pAddr = adres * WORD_LEN; - + + /* Вызывает spiSe2pWrite. Ставит задание записи в SPI-драйвер с учётом состояния занятости EEPROM. */ spiSe2pWrite(&se2p, &writeData); + /* Повторяет или ожидает, пока выполняется while(!spiSe2pFree(&se2p));. */ while(!spiSe2pFree(&se2p)); + /* Увеличивает buf значением len; данные buf. */ buf += len; + /* Увеличивает adres значением len; данные adres. */ adres += len; + /* Уменьшает size значением len; размер. */ size -= len; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает CpuTimer2Regs.TCR.all значением 0x4010; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer2Regs.TCR.all = 0x4010; // Use write-only instruction to set TSS bit = 1 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Читает EEPROM порциями; адрес задаётся словами C28x, размер переводится в число передаваемых слов. */ void Seeprom_read( SE2P_SIZE adres, + /* Объявляет buf — данные buf. */ unsigned int buf[], + /* Объявляет size). */ SE2P_SIZE size) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет len — данные len. */ unsigned int len; +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 /* Bound physical accesses before byte-to-word rounding. Legacy 32-KiB * callers retain their compact driver; EXTEND is checked independently. */ + /* Проверяет if (adres >= PROM_LEN или !size или size > (PROM_LEN-adres)*2) return; последующий оператор выполняется только при истинном условии. */ if (adres >= PROM_LEN || !size || size > (PROM_LEN-adres)*2) return; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Записывает CpuTimer2.InterruptCount значением 0; прерывание число. */ CpuTimer2.InterruptCount=0; + /* Записывает CpuTimer2Regs.TCR.all значением 0x4020; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer2Regs.TCR.all = 0x4020; // Use write-only instruction to set TSS bit = 0 + /* Повторяет или ожидает, пока выполняется while(!spiSe2pFree(&se2p));. */ while(!spiSe2pFree(&se2p)); + /* Записывает size значением (size / WORD_LEN) + (size % WORD_LEN); размер. */ size = (size / WORD_LEN) + (size % WORD_LEN); + /* Повторяет или ожидает, пока выполняется while(size). */ while(size) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает len значением PAGE_LEN - (adres % PAGE_LEN); данные len. */ len = PAGE_LEN - (adres % PAGE_LEN); + /* Проверяет if(len > size) len=size; последующий оператор выполняется только при истинном условии. */ if(len > size) len=size; + /* Записывает readData.dataPtr значением buf; данные Ptr. */ readData.dataPtr = buf; + /* Записывает readData.nrData значением len; nr данные. */ readData.nrData = len; + /* Записывает readData.se2pAddr значением adres * WORD_LEN; данные se2pAddr. */ readData.se2pAddr = adres * WORD_LEN; + /* Вызывает spiSe2pRead. Ставит задание чтения в SPI-драйвер с указателем буфера, длиной и физическим адресом. */ spiSe2pRead(&se2p, &readData); + /* Повторяет или ожидает, пока выполняется while(!spiSe2pFree(&se2p));. */ while(!spiSe2pFree(&se2p)); + /* Увеличивает buf значением len; данные buf. */ buf += len; + /* Увеличивает adres значением len; данные adres. */ adres += len; + /* Уменьшает size значением len; размер. */ size -= len; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает CpuTimer2Regs.TCR.all значением 0x4010; представление регистра целым словом без разбиения на битовые поля. */ CpuTimer2Regs.TCR.all = 0x4010; // Use write-only instruction to set TSS bit = 1 +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию InitSeeprom; назначение модуля — драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */ void InitSeeprom() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - se2p.init(&se2p); + /* Продолжает список аргументов, полей или выражение se2p.init(&se2p);; порядок элементов сохраняется. */ + se2p.init(&se2p); + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; // This is needed to write to EALLOW protected registers + /* Записывает PieVectTable.TINT2 значением &cpu_timer2_isr; данные TINT2. */ PieVectTable.TINT2 = &cpu_timer2_isr; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; // This is needed to disable write to EALLOW protected registers + /* Инициализирует модуль вызовом InitCpuTimers(); перед его дальнейшим использованием. */ InitCpuTimers(); // For this example, only initialize the Cpu Timers + /* Вызывает ConfigCpuTimer с аргументами (&CpuTimer2, (SYSCLKOUT/1000000), 100) в текущей последовательности операций. */ ConfigCpuTimer(&CpuTimer2, (SYSCLKOUT/1000000), 100); + /* Устанавливает биты IER значением M_INT14; регистр разрешения прерываний ядра C28x. */ IER |= M_INT14; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию SPISE2P_DRV_init; назначение модуля — драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */ void SPISE2P_DRV_init(SPISE2P_DRV *eeprom) -{ +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ /* Configure SPI-A pins using GPIO regs*/ // This specifies which of the possible GPIO pins will be SPI functional pins. // Comment out other unwanted lines. + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; + /* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO16 значением 1; аппаратная линия ввода/вывода GPIO16. */ GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA + /* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO17 значением 1; аппаратная линия ввода/вывода GPIO17. */ GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA + /* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO18 значением 1; аппаратная линия ввода/вывода GPIO18. */ GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA + /* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO19 значением 0; аппаратная линия ввода/вывода GPIO19. */ GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; // General purpose I/O 19 (default) (I/O) + /* Записывает GpioCtrlRegs.GPADIR.bit.GPIO19 значением 1; аппаратная линия ввода/вывода GPIO19. */ GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; // Configures the GPIO pin as an output + /* Записывает GpioDataRegs.GPADAT.bit.GPIO19 значением 0; аппаратная линия ввода/вывода GPIO19. */ GpioDataRegs.GPADAT.bit.GPIO19 = 0; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; /* Configure the SPI: 8-bit, Rising edge with delay */ + /* Записывает SpiaRegs.SPICCR.all значением 0x0007; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all=0x0007; + /* Записывает SpiaRegs.SPICTL.all значением 0x001F; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICTL.all=0x001F; + /* Записывает SpiaRegs.SPISTS.all значением 0x00; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPISTS.all=0x00; + /* Записывает SpiaRegs.SPIBRR значением CLKMULT * 6 + 1; данные SPIBRR. */ SpiaRegs.SPIBRR = CLKMULT * 6 + 1; + /* Записывает SpiaRegs.SPIFFTX.all значением 0x8000; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPIFFTX.all=0x8000; + /* Записывает SpiaRegs.SPIFFRX.all значением 0x0000; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPIFFRX.all=0x0000; + /* Записывает SpiaRegs.SPIFFCT.all значением 0x00; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPIFFCT.all=0x00; + /* Записывает SpiaRegs.SPIPRI.all значением 0x0010; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPIPRI.all=0x0010; - + /* Disable Chip Select of Serial EEPROM */ + /* Записывает eeprom->csr значением 0; данные eeprom->csr. */ eeprom->csr=0; + /* Записывает eeprom->msgPtr значением 0; данные eeprom->msgPtr. */ eeprom->msgPtr=0; + /* Записывает SpiaRegs.SPICCR.bit.SPISWRESET значением 1; данные SPISWRESET. */ SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SCI +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию SPISE2P_DRV_csset; назначение модуля — драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */ void SPISE2P_DRV_csset() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает GpioDataRegs.GPADAT.bit.GPIO19 значением 1; аппаратная линия ввода/вывода GPIO19. */ GpioDataRegs.GPADAT.bit.GPIO19 = 1; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию SPISE2P_DRV_csclr; назначение модуля — драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */ void SPISE2P_DRV_csclr() +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает GpioDataRegs.GPADAT.bit.GPIO19 значением 0; аппаратная линия ввода/вывода GPIO19. */ GpioDataRegs.GPADAT.bit.GPIO19 = 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Проверяет завершение текущего задания SPI EEPROM перед постановкой следующего. */ unsigned int spiSe2pFree(SPISE2P_DRV *se2p) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Проверяет if(se2p->csr&0x3) return(0); последующий оператор выполняется только при истинном условии. */ if(se2p->csr&0x3) return(0); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else return(1); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Ставит задание записи в SPI-драйвер с учётом состояния занятости EEPROM. */ void spiSe2pWrite(SPISE2P_DRV *se2p, SE2P_DATA *msgPtr) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает se2p->msgPtr значением msgPtr; данные se2p->msgPtr. */ se2p->msgPtr=msgPtr; + /* Устанавливает биты se2p->csr значением 0x1; данные se2p->csr. */ se2p->csr|=0x1; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Ставит задание чтения в SPI-драйвер с указателем буфера, длиной и физическим адресом. */ void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *msgPtr) -{ +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ +{ + /* Записывает se2p->msgPtr значением msgPtr; данные se2p->msgPtr. */ se2p->msgPtr=msgPtr; + /* Устанавливает биты se2p->csr значением 0x2; данные se2p->csr. */ se2p->csr|=0x2; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } /********************************************************************/ -/******* SPI bus Serial EEPROM driver Tick function *****************/ +/******* SPI bus Serial EEPROM driver Tick function *****************/ /********************************************************************/ +/* Продвигает SPI EEPROM по Timer2 и подтверждает прерывание таймера. */ interrupt void cpu_timer2_isr(void) +/* Продолжает список аргументов, полей или выражение { EALLOW;; порядок элементов сохраняется. */ { EALLOW; + /* Изменяет счётчик в выражении CpuTimer2.InterruptCount++; на один для следующего шага. */ CpuTimer2.InterruptCount++; - se2p.tick(&se2p); + /* Продолжает список аргументов, полей или выражение se2p.tick(&se2p);; порядок элементов сохраняется. */ + se2p.tick(&se2p); // The CPU acknowledges the interrupt. + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - + +/* Продвигает неблокирующий автомат SPI EEPROM: команда, адрес, данные и ожидание завершения записи. */ void SPISE2P_DRV_tick(SPISE2P_DRV *eeprom) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет step — данные step. Начальное значение задаётся справа от знака равенства. */ static unsigned int step=0; + /* Объявляет dataCount — данные число. Начальное значение задаётся справа от знака равенства. */ static unsigned int dataCount=0; + /* Объявляет dummy — данные dummy. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */ static volatile unsigned int dummy=0; - + + /* Вызывает switch с аргументами (step) в текущей последовательности операций. */ switch(step) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - case 0: - /* If write request is SET, then trigger the Write operation + /* Ветвь выбора для 0; выполняется при совпадении селектора switch. */ + case 0: + /* If write request is SET, then trigger the Write operation If read request is SET, then trigger the Read operation If Read request is also not SET, then continue to poll */ - + + /* Проверяет if(eeprom->csr&SPISE2P_WRRQ); последующий оператор выполняется только при истинном условии. */ if(eeprom->csr&SPISE2P_WRRQ) + /* Записывает step значением 1; данные step. */ { step=1; - eeprom->csr|=SPISE2P_WRIP; /* Set Write in progress*/ + eeprom->csr|=SPISE2P_WRIP; /* Set Write in progress*/ /* Устанавливает биты eeprom->csr значением SPISE2P_WRIP; данные eeprom->csr. */ + /* Продолжает список аргументов, полей или выражение eeprom->csclr();; порядок элементов сохраняется. */ eeprom->csclr(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - + + /* Проверяет if(eeprom->csr&SPISE2P_RDRQ); последующий оператор выполняется только при истинном условии. */ if(eeprom->csr&SPISE2P_RDRQ) + /* Записывает step значением 13; данные step. */ { step=13; - eeprom->csr|=SPISE2P_RDIP; /* Set Read in progress */ + eeprom->csr|=SPISE2P_RDIP; /* Set Read in progress */ /* Устанавливает биты eeprom->csr значением SPISE2P_RDIP; данные eeprom->csr. */ + /* Продолжает список аргументов, полей или выражение eeprom->csclr();; порядок элементов сохраняется. */ eeprom->csclr(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - + + /* Ветвь выбора для 1; выполняется при совпадении селектора switch. */ case 1: - /************************************************************ + /************************************************************ *********** SPI bus EEPROM Write Starts from here *********** ************************************************************* - Prier to any attempt to write data to SPI serial EEPROM + Prier to any attempt to write data to SPI serial EEPROM Write Enable Latch must be set by issuing the WREN command */ + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + /* Записывает SpiaRegs.SPITXBUF значением SPISE2P_WREN_CMD; данные SPITXBUF. */ SpiaRegs.SPITXBUF=SPISE2P_WREN_CMD; - SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; + /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */ + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; + /* Записывает step значением 2; данные step. */ step=2; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - case 2: - /* Wait for VSPI State machine to send the WREN command and + /* Ветвь выбора для 2; выполняется при совпадении селектора switch. */ + case 2: + /* Wait for VSPI State machine to send the WREN command and serial EEPROM Chip Select must be brought to HIGH to set the WREN latch */ - - if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ - { - dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */ + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */ + /* Продолжает список аргументов, полей или выражение eeprom->csset();; порядок элементов сохраняется. */ eeprom->csset(); + /* Записывает step значением 3; данные step. */ step=3; - } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - case 3: - /* Assert CS of Serial EEPROM and send WRITE command */ + /* Ветвь выбора для 3; выполняется при совпадении селектора switch. */ + case 3: + /* Assert CS of Serial EEPROM and send WRITE command */ - eeprom->csclr(); + /* Продолжает список аргументов, полей или выражение eeprom->csclr();; порядок элементов сохраняется. */ + eeprom->csclr(); + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + /* Записывает SpiaRegs.SPITXBUF значением SPISE2P_WRITE_CMD; данные SPITXBUF. */ SpiaRegs.SPITXBUF=SPISE2P_WRITE_CMD; - SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; + /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */ + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; + /* Записывает step значением 4; данные step. */ step=4; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - - case 4: - /* Wait for VSPI State machine to send the WRITE command */ - if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ - { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + /* Ветвь выбора для 4; выполняется при совпадении селектора switch. */ + case 4: + /* Wait for VSPI State machine to send the WRITE command */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */ + /* Записывает step значением 5; данные step. */ step=5; - } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - case 5: + /* Ветвь выбора для 5; выполняется при совпадении селектора switch. */ + case 5: /* Send Address */ +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + /* Записывает SpiaRegs.SPITXBUF значением (unsigned int)(eeprom->msgPtr->se2pAddr >> 16) << 8; данные SPITXBUF. */ SpiaRegs.SPITXBUF=(unsigned int)(eeprom->msgPtr->se2pAddr >> 16) << 8; + /* Записывает step значением 20; данные step. */ step=20; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; + /* Ветвь выбора для 20; выполняется при совпадении селектора switch. */ case 20: + /* Проверяет if (!SpiaRegs.SPISTS.bit.INT_FLAG) break; последующий оператор выполняется только при истинном условии. */ if (!SpiaRegs.SPISTS.bit.INT_FLAG) break; + /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */ dummy=SpiaRegs.SPIRXBUF; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (SPISE2P_ADDR_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */ #if(SPISE2P_ADDR_WIDTH==SIXTEEN_BIT) + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR16BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all= SPISE2P_TFR16BIT; - SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr; + /* Записывает SpiaRegs.SPITXBUF значением eeprom->msgPtr->se2pAddr; данные SPITXBUF. */ + SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr; + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (SPISE2P_ADDR_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */ #if(SPISE2P_ADDR_WIDTH==EIGHT_BIT) + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all= SPISE2P_TFR8BIT; + /* Записывает SpiaRegs.SPITXBUF значением eeprom->msgPtr->se2pAddr<<8; данные SPITXBUF. */ SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr<<8; + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - - SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ - step=6; - break; - - case 6: - /* Wait for VSPI State machine to send the Address */ - if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ - { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ - step=7; - } + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */ + /* Записывает step значением 6; данные step. */ + step=6; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - - case 7: + + /* Ветвь выбора для 6; выполняется при совпадении селектора switch. */ + case 6: + /* Wait for VSPI State machine to send the Address */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */ + /* Записывает step значением 7; данные step. */ + step=7; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ + break; + + /* Ветвь выбора для 7; выполняется при совпадении селектора switch. */ + case 7: /* Send Data */ + /* Условие компиляции (SPISE2P_DATA_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */ #if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT) + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR16BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all=SPISE2P_TFR16BIT; + /* Записывает SpiaRegs.SPITXBUF значением *(eeprom->msgPtr->dataPtr+dataCount); данные SPITXBUF. */ SpiaRegs.SPITXBUF=*(eeprom->msgPtr->dataPtr+dataCount); + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - + + /* Условие компиляции (SPISE2P_DATA_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */ #if(SPISE2P_DATA_WIDTH==EIGHT_BIT) + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; - SpiaRegs.SPITXBUF=*(eeprom->msgPtr->dataPtr+dataCount)<<8; + /* Записывает SpiaRegs.SPITXBUF значением *(eeprom->msgPtr->dataPtr+dataCount)<<8; данные SPITXBUF. */ + SpiaRegs.SPITXBUF=*(eeprom->msgPtr->dataPtr+dataCount)<<8; + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - + + /* Изменяет счётчик в выражении dataCount++; на один для следующего шага. */ dataCount++; - SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */ + /* Записывает step значением 8; данные step. */ step=8; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - case 8: + /* Ветвь выбора для 8; выполняется при совпадении селектора switch. */ + case 8: /* Wait for VSPI State machine to send the Data. - If all the data are sent, then set the CS pin to HIGH + If all the data are sent, then set the CS pin to HIGH to program or write the data in EEPROM array */ - if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ - { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */ + /* Проверяет if (dataCount==eeprom->msgPtr->nrData); последующий оператор выполняется только при истинном условии. */ if (dataCount==eeprom->msgPtr->nrData) + /* Продолжает список аргументов, полей или выражение { eeprom->csset();; порядок элементов сохраняется. */ { eeprom->csset(); + /* Записывает step значением 9;}; данные step. */ step=9;} + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else - step=7; /* Write next data */ + step=7; /* Write next data */ /* Записывает step значением 7; данные step. */ + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - case 9: - /* Read the EEPROM status register to check whether the + /* Ветвь выбора для 9; выполняется при совпадении селектора switch. */ + case 9: + /* Read the EEPROM status register to check whether the data sent are indeed programmed to the EEPROM array. Hence, send RDSR command to EEPROM to read status reg. */ + /* Продолжает список аргументов, полей или выражение eeprom->csclr();; порядок элементов сохраняется. */ eeprom->csclr(); + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + /* Записывает SpiaRegs.SPITXBUF значением SPISE2P_RDSR_CMD; данные SPITXBUF. */ SpiaRegs.SPITXBUF=SPISE2P_RDSR_CMD; - SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */ + /* Записывает step значением 10; данные step. */ step=10; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - case 10: + /* Ветвь выбора для 10; выполняется при совпадении селектора switch. */ + case 10: /* Wait for VSPI State machine to send RDSR command */ - - if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ - { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */ + /* Записывает step значением 11; данные step. */ step=11; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - break; - - case 11: - /* Send dummy Data to read Status reg. */ - - SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA; - SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ - step=12; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - case 12: + /* Ветвь выбора для 11; выполняется при совпадении селектора switch. */ + case 11: + /* Send dummy Data to read Status reg. */ + + /* Записывает SpiaRegs.SPITXBUF значением SPISE2P_DUMMY_DATA; данные SPITXBUF. */ + SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA; + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */ + /* Записывает step значением 12; данные step. */ + step=12; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ + break; + + /* Ветвь выбора для 12; выполняется при совпадении селектора switch. */ + case 12: /* Wait for VSPI State machine to clock out status reg. Check, whether the data are written to the EEPROM array, - If written, then reset the WRIP(write in progress) and + If written, then reset the WRIP(write in progress) and WRRQ(Write request bit) and go back to STATE0 */ - - if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ - { eeprom->csset(); + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */ + /* Продолжает список аргументов, полей или выражение { eeprom->csset();; порядок элементов сохраняется. */ + { eeprom->csset(); + + /* Проверяет if (SpiaRegs.SPIRXBUF & SPISE2P_BUSY_MASK ); последующий оператор выполняется только при истинном условии. */ if (SpiaRegs.SPIRXBUF & SPISE2P_BUSY_MASK ) + /* Записывает step значением 9; данные step. */ step=9; + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else + /* Оставляет биты маски eeprom->csr значением (~SPISE2P_WRIP); данные eeprom->csr. */ { eeprom->csr&=(~SPISE2P_WRIP); + /* Оставляет биты маски eeprom->csr значением (~SPISE2P_WRRQ); данные eeprom->csr. */ eeprom->csr&=(~SPISE2P_WRRQ); + /* Записывает step значением 0; данные step. */ step=0; + /* Записывает dataCount значением 0; данные число. */ dataCount=0; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - - case 13: - /************************************************************ + + /* Ветвь выбора для 13; выполняется при совпадении селектора switch. */ + case 13: + /************************************************************ *********** SPI bus EEPROM Read Starts from here *********** ************************************************************* Send READ Command to SPI bus serail EEPROM */ + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + /* Записывает SpiaRegs.SPITXBUF значением SPISE2P_READ_CMD; данные SPITXBUF. */ SpiaRegs.SPITXBUF=SPISE2P_READ_CMD; - SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */ + /* Записывает step значением 14; данные step. */ step=14; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - - case 14: - /* Wait for VSPI State machine to send READ command */ - if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ - { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ + /* Ветвь выбора для 14; выполняется при совпадении селектора switch. */ + case 14: + /* Wait for VSPI State machine to send READ command */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */ + /* Записывает step значением 15; данные step. */ step=15; - } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - case 15: + /* Ветвь выбора для 15; выполняется при совпадении селектора switch. */ + case 15: /* Send Address */ + /* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT; + /* Записывает SpiaRegs.SPITXBUF значением (unsigned int)(eeprom->msgPtr->se2pAddr >> 16) << 8; данные SPITXBUF. */ SpiaRegs.SPITXBUF=(unsigned int)(eeprom->msgPtr->se2pAddr >> 16) << 8; + /* Записывает step значением 21; данные step. */ step=21; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; + /* Ветвь выбора для 21; выполняется при совпадении селектора switch. */ case 21: + /* Проверяет if (!SpiaRegs.SPISTS.bit.INT_FLAG) break; последующий оператор выполняется только при истинном условии. */ if (!SpiaRegs.SPISTS.bit.INT_FLAG) break; + /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */ dummy=SpiaRegs.SPIRXBUF; +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (SPISE2P_ADDR_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */ #if(SPISE2P_ADDR_WIDTH==SIXTEEN_BIT) + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR16BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all= SPISE2P_TFR16BIT; - SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr; + /* Записывает SpiaRegs.SPITXBUF значением eeprom->msgPtr->se2pAddr; данные SPITXBUF. */ + SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr; + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Условие компиляции (SPISE2P_ADDR_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */ #if(SPISE2P_ADDR_WIDTH==EIGHT_BIT) + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all= SPISE2P_TFR8BIT; + /* Записывает SpiaRegs.SPITXBUF значением eeprom->msgPtr->se2pAddr<<8; данные SPITXBUF. */ SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr<<8; + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - - SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ - step=16; - break; - - case 16: - /* Wait for VSPI State machine to send Address */ - if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ - { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ - step=17; - } + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */ + /* Записывает step значением 16; данные step. */ + step=16; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - - case 17: + + /* Ветвь выбора для 16; выполняется при совпадении селектора switch. */ + case 16: + /* Wait for VSPI State machine to send Address */ + + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */ + { dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */ + /* Записывает step значением 17; данные step. */ + step=17; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ + break; + + /* Ветвь выбора для 17; выполняется при совпадении селектора switch. */ + case 17: /* Send Dummy value to clock out data from serial EEPROM */ + /* Условие компиляции (SPISE2P_DATA_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */ #if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT) + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR16BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all= SPISE2P_TFR16BIT; + /* Записывает SpiaRegs.SPITXBUF значением SPISE2P_DUMMY_DATA; данные SPITXBUF. */ SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA; + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - - #if(SPISE2P_DATA_WIDTH==EIGHT_BIT) + + /* Условие компиляции (SPISE2P_DATA_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */ + #if(SPISE2P_DATA_WIDTH==EIGHT_BIT) + /* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */ SpiaRegs.SPICCR.all= SPISE2P_TFR8BIT; + /* Записывает SpiaRegs.SPITXBUF значением SPISE2P_DUMMY_DATA<<8; данные SPITXBUF. */ SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA<<8; + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - - SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ + + SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */ + /* Записывает step значением 18; данные step. */ step=18; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; - case 18: + /* Ветвь выбора для 18; выполняется при совпадении селектора switch. */ + case 18: /* Wait for VSPI State machine to clk out data from EEPROM */ - if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ - { + if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */ + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ + { + /* Условие компиляции (SPISE2P_DATA_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */ #if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT) - *(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF; + /* Продолжает список аргументов, полей или выражение *(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF;; порядок элементов сохраняется. */ + *(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF; + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - - #if(SPISE2P_DATA_WIDTH==EIGHT_BIT) + + /* Условие компиляции (SPISE2P_DATA_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */ + #if(SPISE2P_DATA_WIDTH==EIGHT_BIT) + /* Продолжает список аргументов, полей или выражение *(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF&0xFF;; порядок элементов сохраняется. */ *(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF&0xFF; + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Изменяет счётчик в выражении dataCount++; на один для следующего шага. */ dataCount++; + /* Записывает step значением 19; данные step. */ step=19; - } - break; - - case 19: - /* If all the data are read, terminate the read operation by - rising the CS. Then reset the RDIP (Read in progress) bit - and reset the RDRQ(Read request) bit and go back to STATE0 */ - - if (dataCount==eeprom->msgPtr->nrData) - { eeprom->csset(); - step=0; - dataCount=0; - eeprom->csr&=(~SPISE2P_RDIP); - eeprom->csr&=(~SPISE2P_RDRQ); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } - else - step=17; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ break; + + /* Ветвь выбора для 19; выполняется при совпадении селектора switch. */ + case 19: + /* If all the data are read, terminate the read operation by + rising the CS. Then reset the RDIP (Read in progress) bit + and reset the RDRQ(Read request) bit and go back to STATE0 */ + + /* Проверяет if (dataCount==eeprom->msgPtr->nrData); последующий оператор выполняется только при истинном условии. */ + if (dataCount==eeprom->msgPtr->nrData) + /* Продолжает список аргументов, полей или выражение { eeprom->csset();; порядок элементов сохраняется. */ + { eeprom->csset(); + /* Записывает step значением 0; данные step. */ + step=0; + /* Записывает dataCount значением 0; данные число. */ + dataCount=0; + /* Оставляет биты маски eeprom->csr значением (~SPISE2P_RDIP); данные eeprom->csr. */ + eeprom->csr&=(~SPISE2P_RDIP); + /* Оставляет биты маски eeprom->csr значением (~SPISE2P_RDRQ); данные eeprom->csr. */ + eeprom->csr&=(~SPISE2P_RDRQ); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ + } + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ + else + /* Записывает step значением 17; данные step. */ + step=17; + /* Прерывает ближайший цикл или ветвь switch и продолжает после него. */ + break; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/Source/Internal/tools.c b/Source/Internal/tools.c index 382de8b..b9b08a3 100644 --- a/Source/Internal/tools.c +++ b/Source/Internal/tools.c @@ -1,3 +1,5 @@ +/* Настройка внешней памяти и служебные задержки. Русские пояснения сохранены в UTF-8. */ +/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */ #include "DSP2833x_Device.h" // DSP281x Headerfile Include File // Configure the timing paramaters for Zone 7. @@ -5,64 +7,94 @@ // This function should not be executed from XINTF // Adjust the timing based on the data manual and // external device requirements. +/* Настраивает временные параметры внешней шины XINTF Zone7 для RAM регистратора. */ void init_zone7(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { // Make sure the XINTF clock is enabled + /* Записывает SysCtrlRegs.PCLKCR3.bit.XINTFENCLK значением 1; данные XINTFENCLK. */ SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1; // Configure the GPIO for XINTF with a 16-bit data bus // This function is in DSP2833x_Xintf.c + /* Инициализирует модуль вызовом InitXintf16Gpio(); перед его дальнейшим использованием. */ InitXintf16Gpio(); + /* Разрешение записи в защищённые регистры периферии. */ EALLOW; // All Zones--------------------------------- // Timing for all zones based on XTIMCLK = SYSCLKOUT + /* Записывает XintfRegs.XINTCNF2.bit.XTIMCLK значением 0; данные XTIMCLK. */ XintfRegs.XINTCNF2.bit.XTIMCLK = 0; // Buffer up to 3 writes + /* Записывает XintfRegs.XINTCNF2.bit.WRBUFF значением 3; данные WRBUFF. */ XintfRegs.XINTCNF2.bit.WRBUFF = 3; // XCLKOUT is enabled + /* Записывает XintfRegs.XINTCNF2.bit.CLKOFF значением 0; данные CLKOFF. */ XintfRegs.XINTCNF2.bit.CLKOFF = 0; // XCLKOUT = XTIMCLK + /* Записывает XintfRegs.XINTCNF2.bit.CLKMODE значением 0; данные CLKMODE. */ XintfRegs.XINTCNF2.bit.CLKMODE = 0; // Zone 7------------------------------------ // When using ready, ACTIVE must be 1 or greater // Lead must always be 1 or greater // Zone write timing + /* Записывает XintfRegs.XTIMING7.bit.XWRLEAD значением 1; данные XWRLEAD. */ XintfRegs.XTIMING7.bit.XWRLEAD = 1; + /* Записывает XintfRegs.XTIMING7.bit.XWRACTIVE значением 2; данные XWRACTIVE. */ XintfRegs.XTIMING7.bit.XWRACTIVE = 2; + /* Записывает XintfRegs.XTIMING7.bit.XWRTRAIL значением 1; данные XWRTRAIL. */ XintfRegs.XTIMING7.bit.XWRTRAIL = 1; // Zone read timing + /* Записывает XintfRegs.XTIMING7.bit.XRDLEAD значением 1; данные XRDLEAD. */ XintfRegs.XTIMING7.bit.XRDLEAD = 1; + /* Записывает XintfRegs.XTIMING7.bit.XRDACTIVE значением 3; данные XRDACTIVE. */ XintfRegs.XTIMING7.bit.XRDACTIVE = 3; + /* Записывает XintfRegs.XTIMING7.bit.XRDTRAIL значением 0; данные XRDTRAIL. */ XintfRegs.XTIMING7.bit.XRDTRAIL = 0; // don't double all Zone read/write lead/active/trail timing + /* Записывает XintfRegs.XTIMING7.bit.X2TIMING значением 0; данные X2TIMING. */ XintfRegs.XTIMING7.bit.X2TIMING = 0; // Zone will not sample XREADY signal + /* Записывает XintfRegs.XTIMING7.bit.USEREADY значением 0; данные USEREADY. */ XintfRegs.XTIMING7.bit.USEREADY = 0; + /* Записывает XintfRegs.XTIMING7.bit.READYMODE значением 0; данные READYMODE. */ XintfRegs.XTIMING7.bit.READYMODE = 0; // 1,1 = x16 data bus // 0,1 = x32 data bus // other values are reserved + /* Записывает XintfRegs.XTIMING7.bit.XSIZE значением 3; данные XSIZE. */ XintfRegs.XTIMING7.bit.XSIZE = 3; + /* Закрытие доступа к защищённым регистрам периферии. */ EDIS; //Force a pipeline flush to ensure that the write to //the last register configured occurs before returning. + /* Вызывает asm с аргументами (" RPT #7 || NOP") в текущей последовательности операций. */ asm(" RPT #7 || NOP"); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Формирует задержку в микросекундах через калиброванную функцию DSP28x_usDelay. */ void pause_us(unsigned long t) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i. */ unsigned long i; + /* Записывает t значением t >> 1; данные t. */ t = t >> 1; + /* Цикл for (i = 0; i < t; i++); задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < t; i++) + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает DSP28x_usDelay с аргументами (CLKMULT*8L) в текущей последовательности операций. */ DSP28x_usDelay(CLKMULT*8L); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } } diff --git a/UKSSTMS320F28335/.ccsproject b/UKSSTMS320F28335/.ccsproject index ff17ec1..67fb17f 100644 --- a/UKSSTMS320F28335/.ccsproject +++ b/UKSSTMS320F28335/.ccsproject @@ -1,13 +1,24 @@ + + + + + + + + + + + diff --git a/UKSSTMS320F28335/.cproject b/UKSSTMS320F28335/.cproject index 162d211..3e21595 100644 --- a/UKSSTMS320F28335/.cproject +++ b/UKSSTMS320F28335/.cproject @@ -1,384 +1,766 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file + + diff --git a/UKSSTMS320F28335/.gitignore b/UKSSTMS320F28335/.gitignore index c744cf6..82f4496 100644 --- a/UKSSTMS320F28335/.gitignore +++ b/UKSSTMS320F28335/.gitignore @@ -1,6 +1,12 @@ +# Исключает из Git артефакты по шаблону ниже. /Debug/ +# Исключает из Git артефакты по шаблону ниже. /Source/ +# Исключает из Git артефакты по шаблону ниже. /.launches/ +# Исключает из Git артефакты по шаблону ниже. /targetConfigs/ +# Исключает из Git артефакты по шаблону ниже. /project.log +# Исключает из Git артефакты по шаблону ниже. /Release/ diff --git a/UKSSTMS320F28335/.project b/UKSSTMS320F28335/.project index 2414266..ee06cfe 100644 --- a/UKSSTMS320F28335/.project +++ b/UKSSTMS320F28335/.project @@ -1,224 +1,447 @@ + + Balsam_167 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + com.ti.ccstudio.core.ccsNature + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + F28335.cmd + 1 + SRC_ROOT1/F28335.cmd + + + UKSSTMS320F28335.pjt + 1 + SRC_ROOT1/UKSSTMS320F28335.pjt + + + Debug/UKSSTMS320F28335.out + 1 + EXTERNAL_BUILD_ARTIFACT + + + Libraries/rts2800_fpu32.lib + 1 + SRC_ROOT1/Libraries/rts2800_fpu32.lib + + + Source/Internal/ADC.c + 1 + SRC_ROOT1/Source/Internal/ADC.c + + + Source/Internal/DAC.c + 1 + SRC_ROOT1/Source/Internal/DAC.c + + + Source/Internal/RS485.c + 1 + SRC_ROOT1/Source/Internal/RS485.c + + + Source/Internal/bios.c + 1 + SRC_ROOT1/Source/Internal/bios.c + + + Source/Internal/cntrl_adr.c + 1 + SRC_ROOT1/Source/Internal/cntrl_adr.c + + + Source/Internal/crc16.c + 1 + SRC_ROOT1/Source/Internal/crc16.c + + + Source/Internal/ecan.c + 1 + SRC_ROOT1/Source/Internal/ecan.c + + + Source/Internal/filter_bat2.c + 1 + SRC_ROOT1/Source/Internal/filter_bat2.c + + + Source/Internal/kanal.c + 1 + SRC_ROOT1/Source/Internal/kanal.c + + + Source/Internal/log_to_mem.c + 1 + SRC_ROOT1/Source/Internal/log_to_mem.c + + + Source/Internal/main.c + 1 + SRC_ROOT1/Source/Internal/main.c + + + Source/Internal/measure.c + 1 + SRC_ROOT1/Source/Internal/measure.c + + + Source/Internal/shared_ump.c + 1 + SRC_ROOT1/Source/Internal/shared_ump.c + + + Source/Internal/message.c + 1 + SRC_ROOT1/Source/Internal/message.c + + + Source/Internal/peripher.c + 1 + SRC_ROOT1/Source/Internal/peripher.c + + + Source/Internal/pulto.c + 1 + SRC_ROOT1/Source/Internal/pulto.c + + + Source/Internal/spise2p.c + 1 + SRC_ROOT1/Source/Internal/spise2p.c + + + Source/Internal/tools.c + 1 + SRC_ROOT1/Source/Internal/tools.c + + + Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm + + + Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c + + + Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c + + + Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c + + + Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c + + + Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c + + + Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c + + + Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c + + + Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm + + + Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd + + + Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c + 1 + SRC_ROOT1/Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c + + + Source/Internal/Include + 2 + SRC_ROOT1/Source/Internal/Include + + + Source/External/v120/DSP2833x_headers/include + 2 + SRC_ROOT1/Source/External/v120/DSP2833x_headers/include + + + Source/External/v120/DSP2833x_common/include + 2 + SRC_ROOT1/Source/External/v120/DSP2833x_common/include + + + Source/Internal/gas167.c + 1 + SRC_ROOT1/Source/Internal/gas167.c + + + + + SRC_ROOT + $%7BPARENT-1-PROJECT_LOC%7D + + + SRC_ROOT1 + $%7BPARENT-1-PROJECT_LOC%7D + + + diff --git a/UKSSTMS320F28335/.settings/org.eclipse.cdt.codan.core.prefs b/UKSSTMS320F28335/.settings/org.eclipse.cdt.codan.core.prefs index f653028..595c4a4 100644 --- a/UKSSTMS320F28335/.settings/org.eclipse.cdt.codan.core.prefs +++ b/UKSSTMS320F28335/.settings/org.eclipse.cdt.codan.core.prefs @@ -1,3 +1,6 @@ +# Настройка Eclipse/CCS: eclipse.preferences.version. eclipse.preferences.version=1 +# Настройка Eclipse/CCS: inEditor. inEditor=false +# Настройка Eclipse/CCS: onBuild. onBuild=false diff --git a/UKSSTMS320F28335/.settings/org.eclipse.cdt.debug.core.prefs b/UKSSTMS320F28335/.settings/org.eclipse.cdt.debug.core.prefs index 2adc7b1..fe93a4a 100644 --- a/UKSSTMS320F28335/.settings/org.eclipse.cdt.debug.core.prefs +++ b/UKSSTMS320F28335/.settings/org.eclipse.cdt.debug.core.prefs @@ -1,2 +1,4 @@ +# Настройка Eclipse/CCS: eclipse.preferences.version. eclipse.preferences.version=1 +# Настройка Eclipse/CCS: org.eclipse.cdt.debug.core.toggleBreakpointModel. org.eclipse.cdt.debug.core.toggleBreakpointModel=com.ti.ccstudio.debug.CCSBreakpointMarker diff --git a/UKSSTMS320F28335/.settings/org.eclipse.core.resources.prefs b/UKSSTMS320F28335/.settings/org.eclipse.core.resources.prefs index abcaf1d..1be5656 100644 --- a/UKSSTMS320F28335/.settings/org.eclipse.core.resources.prefs +++ b/UKSSTMS320F28335/.settings/org.eclipse.core.resources.prefs @@ -1,106 +1,214 @@ +# Настройка Eclipse/CCS: eclipse.preferences.version. eclipse.preferences.version=1 +# Настройка Eclipse/CCS: encoding//Debug/Libraries/subdir_rules.mk. encoding//Debug/Libraries/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/Libraries/subdir_vars.mk. encoding//Debug/Libraries/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/Source/External/v120/DSP2833x_common/source/subdir_rules.mk. encoding//Debug/Source/External/v120/DSP2833x_common/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/Source/External/v120/DSP2833x_common/source/subdir_vars.mk. encoding//Debug/Source/External/v120/DSP2833x_common/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk. encoding//Debug/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk. encoding//Debug/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk. encoding//Debug/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk. encoding//Debug/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/Source/Internal/subdir_rules.mk. encoding//Debug/Source/Internal/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/Source/Internal/subdir_vars.mk. encoding//Debug/Source/Internal/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/makefile. encoding//Debug/makefile=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/objects.mk. encoding//Debug/objects.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Libraries/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Libraries/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Libraries/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Libraries/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_common/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_common/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_common/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_common/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/Internal/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/Internal/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/Internal/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/Source/Internal/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/makefile. encoding//Debug/optimizerAssistant/opt_for_speed__0/makefile=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/objects.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/objects.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/sources.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/sources.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__0/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__0/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Libraries/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Libraries/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Libraries/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Libraries/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_common/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_common/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_common/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_common/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/Internal/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/Internal/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/Internal/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/Source/Internal/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/makefile. encoding//Debug/optimizerAssistant/opt_for_speed__1/makefile=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/objects.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/objects.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/sources.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/sources.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__1/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__1/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Libraries/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Libraries/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Libraries/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Libraries/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_common/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_common/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_common/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_common/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/Internal/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/Internal/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/Internal/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/Source/Internal/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/makefile. encoding//Debug/optimizerAssistant/opt_for_speed__2/makefile=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/objects.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/objects.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/sources.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/sources.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__2/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__2/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Libraries/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Libraries/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Libraries/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Libraries/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_common/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_common/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_common/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_common/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/Internal/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/Internal/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/Internal/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/Source/Internal/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/makefile. encoding//Debug/optimizerAssistant/opt_for_speed__3/makefile=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/objects.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/objects.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/sources.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/sources.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__3/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__3/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Libraries/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Libraries/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Libraries/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Libraries/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_common/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_common/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_common/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_common/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/Internal/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/Internal/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/Internal/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/Source/Internal/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/makefile. encoding//Debug/optimizerAssistant/opt_for_speed__4/makefile=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/objects.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/objects.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/sources.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/sources.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__4/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__4/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Libraries/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Libraries/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Libraries/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Libraries/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_common/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_common/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_common/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_common/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_headers/cmd/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_headers/cmd/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_headers/source/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/External/v120/DSP2833x_headers/source/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/Internal/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/Internal/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/Internal/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/Source/Internal/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/makefile. encoding//Debug/optimizerAssistant/opt_for_speed__5/makefile=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/objects.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/objects.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/sources.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/sources.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/subdir_rules.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/optimizerAssistant/opt_for_speed__5/subdir_vars.mk. encoding//Debug/optimizerAssistant/opt_for_speed__5/subdir_vars.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/sources.mk. encoding//Debug/sources.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/subdir_rules.mk. encoding//Debug/subdir_rules.mk=UTF-8 +# Настройка Eclipse/CCS: encoding//Debug/subdir_vars.mk. encoding//Debug/subdir_vars.mk=UTF-8 +# Кодировка всего проекта, включая связанные исходники. +encoding/=UTF-8 diff --git a/UKSSTMS320F28335/28335_RAM_lnk.cmd b/UKSSTMS320F28335/28335_RAM_lnk.cmd index 0db663f..14ad6e9 100644 --- a/UKSSTMS320F28335/28335_RAM_lnk.cmd +++ b/UKSSTMS320F28335/28335_RAM_lnk.cmd @@ -1,3 +1,4 @@ +/* Распределение секций программы и данных по RAM контроллера. Русские пояснения сохранены в UTF-8. */ /* // TI File $Revision: /main/11 $ // Checkin $Date: April 15, 2009 09:57:28 $ @@ -78,69 +79,109 @@ */ +/* Начинает описание физических блоков памяти для линкера. */ MEMORY +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { +/* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */ PAGE 0 : /* BEGIN is used for the "boot to SARAM" bootloader mode */ - BEGIN : origin = 0x000000, length = 0x000002 /* Boot to M0 will go here */ + BEGIN : origin = 0x000000, length = 0x000002 /* Boot to M0 will go here */ /* Записывает origin значением 0x000000, length = 0x000002; данные origin. */ + /* Записывает origin значением 0x000050, length = 0x0003B0; данные origin. */ RAMM0 : origin = 0x000050, length = 0x0003B0 + /* Записывает origin значением 0x008000, length = 0x001000; данные origin. */ RAML0 : origin = 0x008000, length = 0x001000 + /* Записывает origin значением 0x009000, length = 0x001000; данные origin. */ RAML1 : origin = 0x009000, length = 0x001000 + /* Записывает origin значением 0x00A000, length = 0x001000; данные origin. */ RAML2 : origin = 0x00A000, length = 0x001000 + /* Записывает origin значением 0x00B000, length = 0x001000; данные origin. */ RAML3 : origin = 0x00B000, length = 0x001000 - ZONE7A : origin = 0x200000, length = 0x00FC00 /* XINTF zone 7 - program space */ - CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */ - CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ + ZONE7A : origin = 0x200000, length = 0x00FC00 /* XINTF zone 7 - program space */ /* Записывает origin значением 0x200000, length = 0x00FC00; данные origin. */ + CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */ /* Записывает origin значением 0x33FF80, length = 0x000076; данные origin. */ + CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ /* Записывает origin значением 0x33FFF8, length = 0x000008; данные origin. */ + /* Записывает origin значением 0x380080, length = 0x000009; данные origin. */ ADC_CAL : origin = 0x380080, length = 0x000009 + /* Записывает origin значением 0x3FFFC0, length = 0x000002; данные origin. */ RESET : origin = 0x3FFFC0, length = 0x000002 + /* Записывает origin значением 0x3FE000, length = 0x000b50; данные origin. */ IQTABLES : origin = 0x3FE000, length = 0x000b50 + /* Записывает origin значением 0x3FEB50, length = 0x00008c; данные origin. */ IQTABLES2 : origin = 0x3FEB50, length = 0x00008c + /* Записывает origin значением 0x3FEBDC, length = 0x0006A0; данные origin. */ FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 + /* Записывает origin значением 0x3FF27C, length = 0x000D44; данные origin. */ BOOTROM : origin = 0x3FF27C, length = 0x000D44 +/* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */ PAGE 1 : /* BOOT_RSVD is used by the boot ROM for stack. */ /* This section is only reserved to keep the BOOT ROM from */ /* corrupting this area during the debug process */ - BOOT_RSVD : origin = 0x000002, length = 0x00004E /* Part of M0, BOOT rom will use this for stack */ - RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ + BOOT_RSVD : origin = 0x000002, length = 0x00004E /* Part of M0, BOOT rom will use this for stack */ /* Записывает origin значением 0x000002, length = 0x00004E; данные origin. */ + RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ /* Записывает origin значением 0x000400, length = 0x000400; данные origin. */ + /* Записывает origin значением 0x00C000, length = 0x001000; данные origin. */ RAML4 : origin = 0x00C000, length = 0x001000 + /* Записывает origin значением 0x00D000, length = 0x001000; данные origin. */ RAML5 : origin = 0x00D000, length = 0x001000 + /* Записывает origin значением 0x00E000, length = 0x001000; данные origin. */ RAML6 : origin = 0x00E000, length = 0x001000 + /* Записывает origin значением 0x00F000, length = 0x001000; данные origin. */ RAML7 : origin = 0x00F000, length = 0x001000 - ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */ + ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */ /* Записывает origin значением 0x20FC00, length = 0x000400; данные origin. */ +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает описание размещения секций объектных файлов для линкера. */ SECTIONS +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { /* Setup for "boot to SARAM" mode: The codestart section (found in DSP28_CodeStartBranch.asm) re-directs execution to the start of user code. */ + /* Записывает PAGE значением 0; данные PAGE. */ codestart : > BEGIN, PAGE = 0 - + +/* Включает следующий блок только при определённом символе __TI_COMPILER_VERSION__. */ #ifdef __TI_COMPILER_VERSION__ + /* Условие компиляции __TI_COMPILER_VERSION__ >= 15009000: выбранный блок включается в текущий вариант прошивки. */ #if __TI_COMPILER_VERSION__ >= 15009000 + /* Записывает PAGE значением 0; данные PAGE. */ .TI.ramfunc : {} > RAML0, PAGE = 0 + /* Выбирает альтернативный блок текущего условия компиляции. */ #else - ramfuncs : > RAML0, PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ + ramfuncs : > RAML0, PAGE = 0 + /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif -#endif - +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ +#endif + + /* Записывает PAGE значением 0; данные PAGE. */ .text : > RAML1, PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ .cinit : > RAML0, PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ .pinit : > RAML0, PAGE = 0 + /* Записывает PAGE значением 0; данные PAGE. */ .switch : > RAML0, PAGE = 0 + /* Записывает PAGE значением 1; данные PAGE. */ .stack : > RAMM1, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ .ebss : > RAML4, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ .econst : > RAML5, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ .esysmem : > RAMM1, PAGE = 1 + /* Записывает PAGE значением 0; данные PAGE. */ IQmath : > RAML1, PAGE = 0 + /* Записывает PAGE значением 0, TYPE = NOLOAD; данные PAGE. */ IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD /* Uncomment the section below if calling the IQNexp() or IQexp() @@ -159,26 +200,34 @@ SECTIONS } */ + /* Записывает PAGE значением 0, TYPE = NOLOAD; данные PAGE. */ FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD + /* Записывает PAGE значением 1; данные PAGE. */ DMARAML4 : > RAML4, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ DMARAML5 : > RAML5, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ DMARAML6 : > RAML6, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ DMARAML7 : > RAML7, PAGE = 1 + /* Записывает PAGE значением 1; данные PAGE. */ ZONE7DATA : > ZONE7B, PAGE = 1 - .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used */ - csm_rsvd : > CSM_RSVD PAGE = 0, TYPE = DSECT /* not used for SARAM examples */ - csmpasswds : > CSM_PWL PAGE = 0, TYPE = DSECT /* not used for SARAM examples */ + .reset : > RESET, PAGE = 0, TYPE = DSECT /* not used */ /* Записывает PAGE значением 0, TYPE = DSECT; данные PAGE. */ + csm_rsvd : > CSM_RSVD PAGE = 0, TYPE = DSECT /* not used for SARAM examples */ /* Записывает PAGE значением 0, TYPE = DSECT; данные PAGE. */ + csmpasswds : > CSM_PWL PAGE = 0, TYPE = DSECT /* not used for SARAM examples */ /* Записывает PAGE значением 0, TYPE = DSECT; данные PAGE. */ /* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */ + /* Записывает load значением ADC_CAL, PAGE = 0, TYPE = NOLOAD; данные load. */ .adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } /* //=========================================================================== // End of file. //=========================================================================== -*/ \ No newline at end of file +*/ diff --git a/UKSSTMS320F28335/README.md b/UKSSTMS320F28335/README.md index 4dd7c97..5f754d6 100644 --- a/UKSSTMS320F28335/README.md +++ b/UKSSTMS320F28335/README.md @@ -1,55 +1,59 @@ -## Номер выпуска +# Сборка Бальзам-167 -Меняйте `FIRMWARE_VERSION_MAJOR`, `FIRMWARE_VERSION_MINOR` и -`FIRMWARE_VERSION_PATCH` в `firmware_version.h` в корне проекта CCS. -Например, `0U`, `1U`, `2U` задают версию 0.1.2. Сохраните файл и -выполните Rebuild. После обновления настроек закройте/откройте проект и -выполните Clean/Rebuild. +Проект CCS использует TMS320F28335, модель памяти large и ABI COFF. +Исходники и русские комментарии сохранены в UTF-8 без BOM. Кодировка проекта +задана в .settings/org.eclipse.core.resources.prefs, правило редактора — в +../.editorconfig. Подробная проверка покрытия: [COMMENT_AUDIT.md](../Doc/COMMENT_AUDIT.md). -Debug и Release запускают `prepare_identity.py`: он читает номер из заголовка -и передаёт его общему генератору. `firmware_identity.json` содержит только -product/target; номер выпуска в нём редактировать не нужно. -`${BuildDirectory}/generated/firmware_identity.h` и JSON-паспорт создаются -автоматически; вручную их не меняйте. Диапазоны: major/minor 0..255, -patch 0..999. Неверный номер останавливает генерацию. -# Результаты сборки +## Версия и паспорт прошивки -Версия 0.1.1 возвращает паспорт прошивки и блочное чтение EEPROM поверх -подтверждённой на плате базы `c6c9128`. COM_1 остаётся на 115200; исходники -`main.c`, `RS485.c`, `RS485.h` и настройки PLL не менялись относительно этой базы. -Не используйте 250000/256000 для проверки этой сборки. FIFO остаётся включённым, -как в рабочей базе; диагностический вариант без FIFO здесь не используется. -Блочное чтение, проверка размера и host-тесты проверяются программно; -после загрузки сначала проверьте чтение версии 0.1.1, затем 256 байт EEPROM. +Текущий номер 1.1.2 задаётся в firmware_version.h: major/minor 0..255, +patch 0..999. Меняйте только три числовых определения версии и выполняйте +Clean/Rebuild. firmware_identity.json хранит product/target. -Debug post-build CCS12 также копирует проверенный BIN и сопутствующие -`.manifest.json`/`.sha256` в -`../newProject/SETGUI/..periph_28335/firmware/periph28335/bal`. -Папка создаётся автоматически; имя BIN с Git commit сохраняется. -Копирование выполняет `copy_bin_to_setgui.ps1` после успешной проверки образа -и создания паспорта. Пути определяются относительно репозитория, не cwd CCS. -Для ручного копирования: `./copy_bin_to_setgui.ps1 -Path ./Bin/<имя>.bin`. +Debug и Release вызывают prepare_identity.py. Он читает номер версии и передаёт +его общему генератору паспорта. generated/firmware_identity.h и JSON создаются +в каталоге сборки; вручную их редактировать не нужно. Паспорт включает исходный +коммит, признак незакоммиченных изменений и время UTC. Порядок проверки +приведён в [FIRMWARE_IDENTITY.md](../Doc/FIRMWARE_IDENTITY.md). -Версия работающей прошивки, SHA-256 BIN и паспорт сборки описаны в -[инструкции для 167](../Doc/FIRMWARE_IDENTITY.md). Перед компиляцией запускается -`preBuildStep.bat`; требуются Python 3.10+ и Git в PATH CCS. Debug post-build -создаёт рядом с BIN файлы `.manifest.json` и `.sha256`. +## Зависимости и настройки CCS -Для сборки требуется общий UMP-протокол из соседнего репозитория: -`../newProject/SETGUI/third_party/templates/c/set-protocol` (от корня этого -репозитория). Пути к заголовкам заданы в `.cproject` для Debug и Release; -`Source/Internal/shared_ump.c` подключён в `.project` и компилирует общую -реализацию протокола и порт TMS320F28335. При другом расположении зависимости -обновите оба пути Include Options в нужной конфигурации CCS. +Для текущих конфигураций нужны Python, Git и TI C2000 22.6 LTS. +Общая реализация УМП и порт TMS320F28335 подключаются из +../newProject/SETGUI/third_party/templates/c/set-protocol относительно корня +репозитория. shared_ump.c включает эту реализацию и модуль паспорта. -После сборки Debug в `Bin` создаётся файл -`UKSSTMS320F28335_.bin`, где `` — короткий хеш текущего -коммита Git (не менее 8 символов). HEX сохраняет прежнее имя. +В .cproject обе конфигурации используют генератор и post-build из +K:/git_project/newProject/templates. При переносе проекта проверьте этот путь, +пути Include Options к общей реализации и каталог назначения BIN. Генератор +исходников и post-build сейчас находятся в соседнем репозитории; старые +локальные build_bin.bat/preBuildStep.bat больше не входят в этот проект. -BIN создаётся скриптом `build_bin.bat`; Git должен быть доступен в `PATH` -процесса CCS. Если определить коммит не удалось, сборка завершается ошибкой. -При наличии незакоммиченных правок хеш обозначает HEAD и не описывает эти правки. +Post-build вызывает tools/firmware-build/ccs/postcompile.bat: формирует загрузочный +образ, проверяет границы, создаёт паспорт и SHA-256. Текущий каталог копирования +задан в .cproject: +K:/git_project/newProject/SETGUI/..periph_28335/firmware/periph28335/balzam167. -## GAS для новой EEPROM +COM_1 работает на 115200 с FIFO. COM_2 использует 57600 для OWEN либо 115200 +для другого режима. Эти скорости задаются в main.c. -При EEPROM_M95M02=1 доступен профиль GAS 167/v1 через Modbus и служебный CAN УМП. Карта, проверки и измеренные размеры: [GAS_167_M95M02.md](../Doc/GAS_167_M95M02.md). В сборке AT25256B GAS исключён; её загрузочный BIN не увеличивается. После обновления проекта выполнить Clean/Rebuild: новый gas167.c зарегистрирован в .project. +## Профиль EEPROM и GAS + +В Source/Internal/Include/eeprom_config.h значение EEPROM_M95M02=0 выбирает +AT25256B 32 КиБ; значение 1 — M95M02-DR 256 КиБ. Выбор обязан соответствовать +микросхеме на плате. После изменения нужен Clean/Rebuild. При отдельной сборке +определение должно совпадать у компилятора и у препроцессора линкера. + +GAS включается только при значении 1: технологические слова 0x5000..0x507F и +дескриптор только для чтения 0x5F00..0x5F07. Транспорты — Modbus RTU и служебный +CAN УМП. Карта и измеренные размеры: [GAS_167_M95M02.md](../Doc/GAS_167_M95M02.md). +Подробное назначение модулей: [SOURCE_GUIDE.md](../Doc/SOURCE_GUIDE.md). + +## Проверки + +Запускайте из корня репозитория Python-скрипты tests/comments/run_test.py, +tests/gas167/run_test.py, tests/eeprom_profiles/run_test.py, +tests/load_control/run_test.py и проверки регистратора в tests/ump_logger. +Проверка FIFO: tests/rs232_fifo/run_test.py --cc <путь к GCC>. +Для MinGW каталог исполняемых файлов GCC должен присутствовать в PATH. diff --git a/UKSSTMS320F28335/firmware_version.h b/UKSSTMS320F28335/firmware_version.h index c6a5b44..972a395 100644 --- a/UKSSTMS320F28335/firmware_version.h +++ b/UKSSTMS320F28335/firmware_version.h @@ -1,9 +1,16 @@ +/* Настройки и интерфейс firmware_version. Русские пояснения сохранены в UTF-8. */ +/* Начинает условие: BALSAM_FIRMWARE_VERSION_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef BALSAM_FIRMWARE_VERSION_H +/* Определяет защитный символ или переключатель BALSAM_FIRMWARE_VERSION_H для последующей компиляции. */ #define BALSAM_FIRMWARE_VERSION_H /* Edit these numbers before releasing firmware, then rebuild. */ +/* Задаёт FIRMWARE_VERSION_MAJOR = 1U; данные FIRMWARE_VERSION_MAJOR. */ #define FIRMWARE_VERSION_MAJOR 1U +/* Задаёт FIRMWARE_VERSION_MINOR = 1U; данные FIRMWARE_VERSION_MINOR. */ #define FIRMWARE_VERSION_MINOR 1U +/* Задаёт FIRMWARE_VERSION_PATCH = 2U; данные FIRMWARE_VERSION_PATCH. */ #define FIRMWARE_VERSION_PATCH 2U +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif diff --git a/UKSSTMS320F28335/postBuildStep_Debug.old b/UKSSTMS320F28335/postBuildStep_Debug.old index d7027dd..dc309db 100644 --- a/UKSSTMS320F28335/postBuildStep_Debug.old +++ b/UKSSTMS320F28335/postBuildStep_Debug.old @@ -1,35 +1,63 @@ +@rem Выполняет команду старого служебного сценария: @echo off. @echo off +@rem Выполняет команду старого служебного сценария: pushd ..\..\. pushd ..\..\ +@rem Выполняет команду старого служебного сценария: setlocal. setlocal +@rem Метка перехода process_arg. :process_arg +@rem Выполняет команду старого служебного сценария: if "%1"=="" goto end_process_arg. if "%1"=="" goto end_process_arg +@rem Выполняет команду старого служебного сценария: set name=%1. set name=%1 +@rem Выполняет команду старого служебного сценария: set value=. set value= +@rem Метка перехода process_arg_value. :process_arg_value +@rem Выполняет команду старого служебного сценария: if NOT "%value%"=="" set value=%value% %2. if NOT "%value%"=="" set value=%value% %2 +@rem Выполняет команду старого служебного сценария: if "%value%"=="" set value=%2. if "%value%"=="" set value=%2 +@rem Выполняет команду старого служебного сценария: shift. shift +@rem Выполняет команду старого служебного сценария: if "%2"=="!" goto set_arg. if "%2"=="!" goto set_arg +@rem Выполняет команду старого служебного сценария: if "%2"=="" goto set_arg. if "%2"=="" goto set_arg +@rem Выполняет команду старого служебного сценария: goto process_arg_value. goto process_arg_value +@rem Метка перехода set_arg. :set_arg +@rem Выполняет команду старого служебного сценария: set %name%=%value%. set %name%=%value% +@rem Выполняет команду старого служебного сценария: shift. shift +@rem Выполняет команду старого служебного сценария: shift. shift +@rem Выполняет команду старого служебного сценария: goto process_arg. goto process_arg +@rem Метка перехода end_process_arg. :end_process_arg +@rem Выполняет команду старого служебного сценария: echo. > temp_postBuildStep_Debug.bat. echo. > temp_postBuildStep_Debug.bat +@rem Выполняет команду старого служебного сценария: echo E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\hex2000.exe E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.out -boot -sci8 -map E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.map -o E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.hex -i >> temp_postBuildStep_Debug.bat. echo E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\hex2000.exe E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.out -boot -sci8 -map E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.map -o E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.hex -i >> temp_postBuildStep_Debug.bat +@rem Выполняет команду старого служебного сценария: echo E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\hex2000.exe E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.out -boot -sci8 -map E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.map -o E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.bin -b >> temp_postBuildStep_Debug.bat. echo E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\hex2000.exe E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.out -boot -sci8 -map E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.map -o E:\workspace\setcorp\set506\git_project\ukssDimaCccs12\Bin\UKSSTMS320F28335.bin -b >> temp_postBuildStep_Debug.bat +@rem Выполняет команду старого служебного сценария: call temp_postBuildStep_Debug.bat. call temp_postBuildStep_Debug.bat +@rem Выполняет команду старого служебного сценария: del temp_postBuildStep_Debug.bat. del temp_postBuildStep_Debug.bat +@rem Выполняет команду старого служебного сценария: PAUSE. PAUSE +@rem Выполняет команду старого служебного сценария: endlocal. endlocal +@rem Выполняет команду старого служебного сценария: popd. popd diff --git a/UKSSTMS320F28335/prepare_identity.py b/UKSSTMS320F28335/prepare_identity.py index cff4b2d..565b51e 100644 --- a/UKSSTMS320F28335/prepare_identity.py +++ b/UKSSTMS320F28335/prepare_identity.py @@ -1,48 +1,90 @@ +# Настройки и интерфейс prepare_identity. Комментарии и исходный текст в UTF-8. +# Продолжает текущий вызов, список или выражение: """Generate build identity using the release version from firmware_version.h."""; порядок аргументов сохраняется. """Generate build identity using the release version from firmware_version.h.""" +# Подключает модуль argparse для этой проверки или подготовки сборки. import argparse +# Подключает модуль importlib.util для этой проверки или подготовки сборки. import importlib.util +# Подключает модуль json для этой проверки или подготовки сборки. import json +# Импортирует необходимые имена: from pathlib import Path. from pathlib import Path +# Подключает модуль re для этой проверки или подготовки сборки. import re +# Подключает модуль tempfile для этой проверки или подготовки сборки. import tempfile +# Объявляет функцию read_version и её входные параметры. def read_version(header): + # Читает исходный файл или образ для последующей проверки и разбора. text = header.read_text(encoding="utf-8-sig") + # Задаёт text по выражению справа; значение используется последующими операциями. text = re.sub(r"/\*.*?\*/|//[^\n]*", "", text, flags=re.S) + # Задаёт version по выражению справа; значение используется последующими операциями. version = [] + # Перебирает part, limit in (("MAJOR", 255), ("MINOR", 255), ("PATCH", 999)) в указанном порядке. for part, limit in (("MAJOR", 255), ("MINOR", 255), ("PATCH", 999)): + # Задаёт name по выражению справа; значение используется последующими операциями. name = "FIRMWARE_VERSION_" + part + # Задаёт definitions по выражению справа; значение используется последующими операциями. definitions = re.findall(r"^\s*#\s*define\s+" + name + r"\b([^\n]*)", text, re.M) + # Проверяет условие if len(definitions) != 1 перед выполнением следующего блока. if len(definitions) != 1: + # Останавливает текущую операцию с исключением ValueError(f"{header}: define {name} exactly once"). raise ValueError(f"{header}: define {name} exactly once") + # Задаёт value по выражению справа; значение используется последующими операциями. value = definitions[0].strip() + # Проверяет условие if not re.fullmatch(r"(?:0|[1-9][0-9]*)[uU]?", value) перед выполнением следующего блока. if not re.fullmatch(r"(?:0|[1-9][0-9]*)[uU]?", value): + # Останавливает текущую операцию с исключением ValueError(f"{header}: {name} must be a decimal integer"). raise ValueError(f"{header}: {name} must be a decimal integer") + # Задаёт number по выражению справа; значение используется последующими операциями. number = int(value.rstrip("uU")) + # Проверяет условие if not 0 <= number <= limit перед выполнением следующего блока. if not 0 <= number <= limit: + # Останавливает текущую операцию с исключением ValueError(f"{header}: {name} must be in 0..{limit}"). raise ValueError(f"{header}: {name} must be in 0..{limit}") + # Продолжает текущий вызов, список или выражение: version.append(number); порядок аргументов сохраняется. version.append(number) + # Возвращает version вызывающему коду и завершает функцию. return version +# Объявляет функцию prepare и её входные параметры. def prepare(project, templates, output): + # Читает исходный файл или образ для последующей проверки и разбора. settings = json.loads((project / "firmware_identity.json").read_text(encoding="utf-8-sig")) + # Задаёт settings["version"] по выражению справа; значение используется последующими операциями. settings["version"] = read_version(project / "firmware_version.h") + # Задаёт spec по выражению справа; значение используется последующими операциями. spec = importlib.util.spec_from_file_location("shared_firmware_identity", templates / "c/firmware-info/tools/identity.py") + # Задаёт identity по выражению справа; значение используется последующими операциями. identity = importlib.util.module_from_spec(spec) + # Продолжает текущий вызов, список или выражение: spec.loader.exec_module(identity); порядок аргументов сохраняется. spec.loader.exec_module(identity) # The source header owns SemVer; retain the shared generator and manifest format. + # Открывает управляемый ресурс tempfile.TemporaryDirectory(prefix="balsam-identity-") as directory с автоматическим освобождением. with tempfile.TemporaryDirectory(prefix="balsam-identity-") as directory: + # Задаёт config по выражению справа; значение используется последующими операциями. config = Path(directory) / "config.json" + # Сохраняет подготовленный файл в указанном формате для следующего шага. config.write_text(json.dumps(settings), encoding="utf-8") + # Возвращает identity.prepare(project, templates, config, output) вызывающему коду и завершает функцию. return identity.prepare(project, templates, config, output) +# Проверяет условие if __name__ == "__main__" перед выполнением следующего блока. if __name__ == "__main__": + # Задаёт parser по выражению справа; значение используется последующими операциями. parser = argparse.ArgumentParser(description=__doc__) + # Задаёт parser.add_argument("--project", type по выражению справа; значение используется последующими операциями. parser.add_argument("--project", type=Path, required=True) + # Задаёт parser.add_argument("--templates", type по выражению справа; значение используется последующими операциями. parser.add_argument("--templates", type=Path, required=True) + # Задаёт parser.add_argument("--output", type по выражению справа; значение используется последующими операциями. parser.add_argument("--output", type=Path, required=True) + # Задаёт args по выражению справа; значение используется последующими операциями. args = parser.parse_args() + # Продолжает текущий вызов, список или выражение: print(json.dumps(prepare(args.project, args.templates, args.output))); порядок аргументов сохраняется. print(json.dumps(prepare(args.project, args.templates, args.output))) diff --git a/fixya.bat b/fixya.bat index 9f8c871..f1dc503 100644 --- a/fixya.bat +++ b/fixya.bat @@ -1,3 +1,5 @@ +@rem Выполняет команду старого служебного сценария: fuckya.exe *.c. fuckya.exe *.c +@rem Выполняет команду старого служебного сценария: fuckya.exe *.h. fuckya.exe *.h diff --git a/tests/comments/run_test.py b/tests/comments/run_test.py new file mode 100644 index 0000000..7a8381c --- /dev/null +++ b/tests/comments/run_test.py @@ -0,0 +1,262 @@ +# Проверка comments на модели пк. Комментарии и исходный текст в UTF-8. +# Продолжает текущий вызов, список или выражение: """Проверка UTF-8 и русских пояснений к каждой строке исходного кода."""; порядок аргументов сохраняется. +"""Проверка UTF-8 и русских пояснений к каждой строке исходного кода.""" +# Подключает модуль argparse для этой проверки или подготовки сборки. +import argparse +# Подключает модуль io для этой проверки или подготовки сборки. +import io +# Импортирует необходимые имена: from pathlib import Path. +from pathlib import Path +# Подключает модуль re для этой проверки или подготовки сборки. +import re +# Подключает модуль subprocess для этой проверки или подготовки сборки. +import subprocess +# Подключает модуль tokenize для этой проверки или подготовки сборки. +import tokenize + +# Задаёт ROOT по выражению справа; значение используется последующими операциями. +ROOT = Path(__file__).resolve().parents[2] +# Задаёт RUSSIAN по выражению справа; значение используется последующими операциями. +RUSSIAN = re.compile("[А-Яа-яЁё]") +# Задаёт C_SUFFIXES по выражению справа; значение используется последующими операциями. +C_SUFFIXES = {".c", ".h", ".cmd", ".inc"} +# Задаёт TEXT_SUFFIXES по выражению справа; значение используется последующими операциями. +TEXT_SUFFIXES = C_SUFFIXES | {".asm", ".py", ".md", ".bat", ".old", ".prefs", ".json", ".pjt", ".lkf"} +# Задаёт TEXT_NAMES по выражению справа; значение используется последующими операциями. +TEXT_NAMES = {".project", ".cproject", ".ccsproject", ".gitignore", ".editorconfig"} + +# Объявляет функцию c_code_lines и её входные параметры. +def c_code_lines(text): + # Задаёт block по выражению справа; значение используется последующими операциями. + block = False + # Перебирает line in text.splitlines() в указанном порядке. + for line in text.splitlines(): + # Задаёт out по выражению справа; значение используется последующими операциями. + out = [] + # Задаёт i по выражению справа; значение используется последующими операциями. + i = 0 + # Задаёт quote по выражению справа; значение используется последующими операциями. + quote = None + # Повторяет блок при выполнении i < len(line). + while i < len(line): + # Проверяет условие if block перед выполнением следующего блока. + if block: + # Задаёт end по выражению справа; значение используется последующими операциями. + end = line.find("*/", i) + # Проверяет условие if end < 0 перед выполнением следующего блока. + if end < 0: + # Продолжает текущий вызов, список или выражение: break; порядок аргументов сохраняется. + break + # Задаёт block по выражению справа; значение используется последующими операциями. + block = False + # Задаёт i по выражению справа; значение используется последующими операциями. + i = end + 2 + # Продолжает текущий вызов, список или выражение: out.append(" "); порядок аргументов сохраняется. + out.append(" ") + # Продолжает текущий вызов, список или выражение: continue; порядок аргументов сохраняется. + continue + # Задаёт c по выражению справа; значение используется последующими операциями. + c = line[i] + # Проверяет условие if quote перед выполнением следующего блока. + if quote: + # Продолжает текущий вызов, список или выражение: out.append(c); порядок аргументов сохраняется. + out.append(c) + # Проверяет условие if c == "\\" and i + 1 < len(line) перед выполнением следующего блока. + if c == "\\" and i + 1 < len(line): + # Задаёт i + по выражению справа; значение используется последующими операциями. + i += 1 + # Продолжает текущий вызов, список или выражение: out.append(line[i]); порядок аргументов сохраняется. + out.append(line[i]) + # Проверяет условие elif c == quote перед выполнением следующего блока. + elif c == quote: + # Задаёт quote по выражению справа; значение используется последующими операциями. + quote = None + # Задаёт i + по выражению справа; значение используется последующими операциями. + i += 1 + # Продолжает текущий вызов, список или выражение: continue; порядок аргументов сохраняется. + continue + # Проверяет условие if line.startswith("//", i) перед выполнением следующего блока. + if line.startswith("//", i): + # Продолжает текущий вызов, список или выражение: break; порядок аргументов сохраняется. + break + # Проверяет условие if line.startswith("/*", i) перед выполнением следующего блока. + if line.startswith("/*", i): + # Задаёт block по выражению справа; значение используется последующими операциями. + block = True + # Задаёт i + по выражению справа; значение используется последующими операциями. + i += 2 + # Продолжает текущий вызов, список или выражение: out.append(" "); порядок аргументов сохраняется. + out.append(" ") + # Продолжает текущий вызов, список или выражение: continue; порядок аргументов сохраняется. + continue + # Проверяет условие if c in "\"'" перед выполнением следующего блока. + if c in "\"'": + # Задаёт quote по выражению справа; значение используется последующими операциями. + quote = c + # Продолжает текущий вызов, список или выражение: out.append(c); порядок аргументов сохраняется. + out.append(c) + # Задаёт i + по выражению справа; значение используется последующими операциями. + i += 1 + # Продолжает текущий вызов, список или выражение: yield "".join(out).strip(); порядок аргументов сохраняется. + yield "".join(out).strip() + +# Объявляет функцию python_code_lines и её входные параметры. +def python_code_lines(text): + # Задаёт active по выражению справа; значение используется последующими операциями. + active = set() + # Задаёт strings по выражению справа; значение используется последующими операциями. + strings = set() + # Перебирает token in tokenize.generate_tokens(io.StringIO(text).readline) в указанном порядке. + for token in tokenize.generate_tokens(io.StringIO(text).readline): + # Проверяет условие if token.type == tokenize.STRING and token.end[0] > token.start[0] перед выполнением следующего блока. + if token.type == tokenize.STRING and token.end[0] > token.start[0]: + # Продолжает текущий вызов, список или выражение: strings.update(range(token.start[0] + 1, token.end[0] + 1)); порядок аргументов сохраняется. + strings.update(range(token.start[0] + 1, token.end[0] + 1)) + # Проверяет условие if token.type not in {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE, tokenize.INDENT, tokenize.DEDENT, tokenize.ENDMARKER} перед выполнением следующего блока. + if token.type not in {tokenize.COMMENT, tokenize.NL, tokenize.NEWLINE, tokenize.INDENT, tokenize.DEDENT, tokenize.ENDMARKER}: + # Продолжает текущий вызов, список или выражение: active.add(token.start[0]); порядок аргументов сохраняется. + active.add(token.start[0]) + # Задаёт lines по выражению справа; значение используется последующими операциями. + lines = text.splitlines() + # Возвращает [line.strip() if n in active and n not in strings else "" for n, line in enumerate(lines, 1)] вызывающему коду и завершает функцию. + return [line.strip() if n in active and n not in strings else "" for n, line in enumerate(lines, 1)] + +# Объявляет функцию audit и её входные параметры. +def audit(path, text): + # Задаёт lines по выражению справа; значение используется последующими операциями. + lines = text.splitlines() + # Проверяет условие if path.suffix in C_SUFFIXES перед выполнением следующего блока. + if path.suffix in C_SUFFIXES: + # Задаёт code по выражению справа; значение используется последующими операциями. + code = list(c_code_lines(text)) + # Проверяет условие elif path.suffix == ".asm" перед выполнением следующего блока. + elif path.suffix == ".asm": + # Задаёт code по выражению справа; значение используется последующими операциями. + code = [line.split(";")[0].strip() for line in lines] + # Проверяет условие elif path.suffix == ".py" перед выполнением следующего блока. + elif path.suffix == ".py": + # Задаёт code по выражению справа; значение используется последующими операциями. + code = python_code_lines(text) + # Обрабатывает альтернативу предыдущего условия. + else: + # Возвращает 0, [] вызывающему коду и завершает функцию. + return 0, [] + # Задаёт missing по выражению справа; значение используется последующими операциями. + missing = [] + # Задаёт count по выражению справа; значение используется последующими операциями. + count = 0 + # Перебирает i, value in enumerate(code) в указанном порядке. + for i, value in enumerate(code): + # Проверяет условие if not value перед выполнением следующего блока. + if not value: + # Продолжает текущий вызов, список или выражение: continue; порядок аргументов сохраняется. + continue + # Задаёт count + по выражению справа; значение используется последующими операциями. + count += 1 + # Проверяет условие if RUSSIAN.search(lines[i]) or (i and RUSSIAN.search(lines[i-1])) перед выполнением следующего блока. + if RUSSIAN.search(lines[i]) or (i and RUSSIAN.search(lines[i-1])): + # Продолжает текущий вызов, список или выражение: continue; порядок аргументов сохраняется. + continue + # Явное продолжение Python-выражения относится к пояснённой начальной строке. + # Проверяет условие if path.suffix == ".py" and i and lines[i-1].rstrip().endswith("\\") перед выполнением следующего блока. + if path.suffix == ".py" and i and lines[i-1].rstrip().endswith("\\"): + # Продолжает текущий вызов, список или выражение: continue; порядок аргументов сохраняется. + continue + # Продолжает текущий вызов, список или выражение: missing.append(i+1); порядок аргументов сохраняется. + missing.append(i+1) + # Возвращает count, missing вызывающему коду и завершает функцию. + return count, missing + +# Объявляет функцию main и её входные параметры. +def main(): + # Задаёт parser по выражению справа; значение используется последующими операциями. + parser = argparse.ArgumentParser(description=__doc__) + # Задаёт parser.add_argument("--report", type по выражению справа; значение используется последующими операциями. + parser.add_argument("--report", type=Path, help="Сохранить таблицу покрытия в Markdown") + # Задаёт args по выражению справа; значение используется последующими операциями. + args = parser.parse_args() + # Задаёт names по выражению справа; значение используется последующими операциями. + names = subprocess.check_output(["git", "ls-files", "-z"], cwd=ROOT).decode("utf-8").split("\0") + # Задаёт names по выражению справа; значение используется последующими операциями. + names = sorted(set(filter(None, names)) | {"tests/comments/run_test.py", ".editorconfig"}) + # Задаёт rows по выражению справа; значение используется последующими операциями. + rows = [] + # Задаёт errors по выражению справа; значение используется последующими операциями. + errors = [] + # Задаёт checked по выражению справа; значение используется последующими операциями. + checked = 0 + # Перебирает name in names в указанном порядке. + for name in names: + # Задаёт path по выражению справа; значение используется последующими операциями. + path = ROOT / name + # Проверяет условие if path.suffix.lower() not in TEXT_SUFFIXES and path.name not in TEXT_NAMES перед выполнением следующего блока. + if path.suffix.lower() not in TEXT_SUFFIXES and path.name not in TEXT_NAMES: + # Продолжает текущий вызов, список или выражение: continue; порядок аргументов сохраняется. + continue + # Начинает блок обработки возможной ошибки. + try: + # Читает исходный файл или образ для последующей проверки и разбора. + text = path.read_text(encoding="utf-8") + # Перехватывает указанный тип ошибки и выполняет обработку. + except UnicodeError as error: + # Продолжает текущий вызов, список или выражение: errors.append(f"{name}: неверная кодировка UTF-8: {error}"); порядок аргументов сохраняется. + errors.append(f"{name}: неверная кодировка UTF-8: {error}") + # Продолжает текущий вызов, список или выражение: continue; порядок аргументов сохраняется. + continue + # Задаёт checked + по выражению справа; значение используется последующими операциями. + checked += 1 + # Задаёт count, missing по выражению справа; значение используется последующими операциями. + count, missing = audit(path, text) + # Проверяет условие if missing перед выполнением следующего блока. + if missing: + # Продолжает текущий вызов, список или выражение: errors.append(f"{name}: нет русского пояснения, строки {missing[:20]}"); порядок аргументов сохраняется. + errors.append(f"{name}: нет русского пояснения, строки {missing[:20]}") + # Проверяет условие if path.suffix in C_SUFFIXES or path.suffix in {".asm", ".py"} перед выполнением следующего блока. + if path.suffix in C_SUFFIXES or path.suffix in {".asm", ".py"}: + # Продолжает текущий вызов, список или выражение: rows.append((name, count, count-len(missing))); порядок аргументов сохраняется. + rows.append((name, count, count-len(missing))) + # Проверяет условие if args.report перед выполнением следующего блока. + if args.report: + # Задаёт report по выражению справа; значение используется последующими операциями. + report = [ + # Продолжает текущий вызов, список или выражение: "# Проверка комментариев и кодировки",; порядок аргументов сохраняется. + "# Проверка комментариев и кодировки", + # Продолжает текущий вызов, список или выражение: "",; порядок аргументов сохраняется. + "", + # Продолжает текущий вызов, список или выражение: "Проверка относится к редактируемым исходникам C/H, ASM, CMD, тестовым INC и Python.",; порядок аргументов сохраняется. + "Проверка относится к редактируемым исходникам C/H, ASM, CMD, тестовым INC и Python.", + # Продолжает текущий вызов, список или выражение: "Каждая непустая строка кода имеет русское пояснение перед ней или на ней. Пустые строки,",; порядок аргументов сохраняется. + "Каждая непустая строка кода имеет русское пояснение перед ней или на ней. Пустые строки,", + # Продолжает текущий вызов, список или выражение: "текст существующих комментариев и содержимое многострочных строк данных не считаются кодом.",; порядок аргументов сохраняется. + "текст существующих комментариев и содержимое многострочных строк данных не считаются кодом.", + # Продолжает текущий вызов, список или выражение: "Исходные уведомления TI сохранены. JSON-паспорта, индексы IDE, таблицы XLS и двоичные",; порядок аргументов сохраняется. + "Исходные уведомления TI сохранены. JSON-паспорта, индексы IDE, таблицы XLS и двоичные", + # Продолжает текущий вызов, список или выражение: "результаты сборки не допускают исходных комментариев; их назначение описано в документации.",; порядок аргументов сохраняется. + "результаты сборки не допускают исходных комментариев; их назначение описано в документации.", + # Продолжает текущий вызов, список или выражение: "",; порядок аргументов сохраняется. + "", + # Продолжает текущий вызов, список или выражение: f"UTF-8 проверен в {checked} текстовых файлах. Строк кода: {sum(r[1] for r in rows)}.",; порядок аргументов сохраняется. + f"UTF-8 проверен в {checked} текстовых файлах. Строк кода: {sum(r[1] for r in rows)}.", + # Продолжает текущий вызов, список или выражение: "",; порядок аргументов сохраняется. + "", + # Продолжает текущий вызов, список или выражение: "| Файл | Строк кода | С русским пояснением |",; порядок аргументов сохраняется. + "| Файл | Строк кода | С русским пояснением |", + # Продолжает текущий вызов, список или выражение: "| --- | ---: | ---: |",; порядок аргументов сохраняется. + "| --- | ---: | ---: |", + # Продолжает текущий вызов, список или выражение: ]; порядок аргументов сохраняется. + ] + # Задаёт report + по выражению справа; значение используется последующими операциями. + report += [f"| {name} | {count} | {covered} |" for name,count,covered in rows] + # Сохраняет подготовленный файл в указанном формате для следующего шага. + args.report.write_text("\n".join(report)+"\n", encoding="utf-8") + # Проверяет условие if errors перед выполнением следующего блока. + if errors: + # Останавливает текущую операцию с исключением SystemExit("\n".join(errors)). + raise SystemExit("\n".join(errors)) + # Продолжает текущий вызов, список или выражение: print(f"PASS UTF-8: {checked} files; Russian comments: {len(rows)} source files, {sum(r[1] for r in rows)} code lines"); порядок аргументов сохраняется. + print(f"PASS UTF-8: {checked} files; Russian comments: {len(rows)} source files, {sum(r[1] for r in rows)} code lines") + +# Проверяет условие if __name__ == "__main__" перед выполнением следующего блока. +if __name__ == "__main__": + # Продолжает текущий вызов, список или выражение: main(); порядок аргументов сохраняется. + main() diff --git a/tests/eeprom_profiles/run_test.py b/tests/eeprom_profiles/run_test.py index 8759d98..894d05a 100644 --- a/tests/eeprom_profiles/run_test.py +++ b/tests/eeprom_profiles/run_test.py @@ -1,21 +1,42 @@ +# Проверка eeprom_profiles на модели пк. Комментарии и исходный текст в UTF-8. +# Продолжает текущий вызов, список или выражение: """Check SPI wire address widths for both production EEPROM configurations."""; порядок аргументов сохраняется. """Check SPI wire address widths for both production EEPROM configurations.""" +# Импортирует необходимые имена: from pathlib import Path. from pathlib import Path +# Подключает модуль subprocess для этой проверки или подготовки сборки. import subprocess +# Подключает модуль os для этой проверки или подготовки сборки. import os +# Подключает модуль shutil для этой проверки или подготовки сборки. import shutil +# Подключает модуль tempfile для этой проверки или подготовки сборки. import tempfile +# Задаёт root по выражению справа; значение используется последующими операциями. root = Path(__file__).resolve().parents[2] +# Задаёт protocol по выражению справа; значение используется последующими операциями. protocol = root.parent / 'newProject/SETGUI/third_party/templates/c/set-protocol' +# Задаёт compiler по выражению справа; значение используется последующими операциями. compiler = os.environ.get('CC') or shutil.which('gcc') or 'C:/msys64/mingw64/bin/gcc.exe' +# Задаёт os.environ['PATH'] по выражению справа; значение используется последующими операциями. os.environ['PATH'] = str(Path(compiler).resolve().parent) + os.pathsep + os.environ['PATH'] +# Открывает управляемый ресурс tempfile.TemporaryDirectory() as folder с автоматическим освобождением. with tempfile.TemporaryDirectory() as folder: + # Перебирает profile in (0, 1) в указанном порядке. for profile in (0, 1): + # Задаёт exe по выражению справа; значение используется последующими операциями. exe = Path(folder) / f'spi{profile}.exe' + # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. subprocess.run([compiler, '-std=c99', + # Задаёт f'-DEEPROM_M95M02 по выражению справа; значение используется последующими операциями. f'-DEEPROM_M95M02={profile}', '-Itests/eeprom_profiles/stubs', + # Продолжает текущий вызов, список или выражение: '-ISource/Internal/Include', '-I' + str(protocol),; порядок аргументов сохраняется. '-ISource/Internal/Include', '-I' + str(protocol), + # Продолжает текущий вызов, список или выражение: 'tests/eeprom_profiles/spi_test.c', '-o', str(exe)],; порядок аргументов сохраняется. 'tests/eeprom_profiles/spi_test.c', '-o', str(exe)], + # Задаёт cwd по выражению справа; значение используется последующими операциями. cwd=root, check=True) + # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. subprocess.run([str(exe)], check=True, timeout=10) + # Продолжает текущий вызов, список или выражение: print(f'PASS SPI profile {profile}'); порядок аргументов сохраняется. print(f'PASS SPI profile {profile}') diff --git a/tests/eeprom_profiles/spi_test.c b/tests/eeprom_profiles/spi_test.c index c0c876e..30efc8f 100644 --- a/tests/eeprom_profiles/spi_test.c +++ b/tests/eeprom_profiles/spi_test.c @@ -1,47 +1,93 @@ +/* Проверка eeprom_profiles на модели ПК. Русские пояснения сохранены в UTF-8. */ /* Exercise the production Timer2 SPI state machine; no hardware writes. */ +/* Подключает : настройки и интерфейс assert. */ #include +/* Подключает "../../Source/Internal/spise2p.c": драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */ #include "../../Source/Internal/spise2p.c" +/* Продолжает список аргументов, полей или выражение static unsigned trace[300], widths[300], used;; порядок элементов сохраняется. */ static unsigned trace[300], widths[300], used; +/* Начинает функцию transfer; назначение модуля — проверка eeprom_profiles на модели ПК. */ static void transfer(unsigned long address, int write) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает buf[2] значением {0x1234,0x5678}, i; данные buf. */ unsigned buf[2]={0x1234,0x5678}, i; + /* Записывает message значением {buf,2,address}; данные message. */ SE2P_DATA message={buf,2,address}; + /* Записывает used значением 0; данные used. */ used=0; + /* Проверяет if(write) spiSe2pWrite(&se2p,&message); else spiSe2pRead(&se2p,&message); последующий оператор выполняется только при истинном условии. */ if(write) spiSe2pWrite(&se2p,&message); else spiSe2pRead(&se2p,&message); + /* Цикл for(i=0;i<100 && !spiSe2pFree(&se2p);i++) ; задаёт начальное значение, условие продолжения и шаг перебора. */ for(i=0;i<100 && !spiSe2pFree(&se2p);i++) { + /* Записывает SpiaRegs.SPITXBUF значением 0xdead; данные SPITXBUF. */ SpiaRegs.SPITXBUF=0xdead; - SpiaRegs.SPIRXBUF=0; /* WIP clear for write, deterministic read data. */ + SpiaRegs.SPIRXBUF=0; /* WIP clear for write, deterministic read data. */ /* Записывает SpiaRegs.SPIRXBUF значением 0; данные SPIRXBUF. */ + /* Записывает SpiaRegs.SPISTS.bit.INT_FLAG значением 1; INT флаг. */ SpiaRegs.SPISTS.bit.INT_FLAG=1; + /* Вызывает SPISE2P_DRV_tick. Продвигает неблокирующий автомат SPI EEPROM: команда, адрес, данные и ожидание завершения записи. */ SPISE2P_DRV_tick(&se2p); + /* Проверяет if(SpiaRegs.SPITXBUF!=0xdead); последующий оператор выполняется только при истинном условии. */ if(SpiaRegs.SPITXBUF!=0xdead) { + /* Вызывает assert с аргументами (GpioDataRegs.GPADAT.bit.GPIO19==0) в текущей последовательности операций. */ assert(GpioDataRegs.GPADAT.bit.GPIO19==0); + /* Записывает trace[used] значением SpiaRegs.SPITXBUF; данные trace. */ trace[used]=SpiaRegs.SPITXBUF; + /* Записывает widths[used++] значением (SpiaRegs.SPICCR.all&15)+1; данные widths. */ widths[used++]=(SpiaRegs.SPICCR.all&15)+1; + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает assert с аргументами (spiSe2pFree(&se2p) && GpioDataRegs.GPADAT.bit.GPIO19==1) в текущей последовательности операций. */ assert(spiSe2pFree(&se2p) && GpioDataRegs.GPADAT.bit.GPIO19==1); + /* Записывает i значением 0; данные i. */ i=0; + /* Проверяет if(write); последующий оператор выполняется только при истинном условии. */ if(write) { assert(trace[i]==0x0600 && widths[i++]==8); } + /* Вызывает assert с аргументами (trace[i]==(write ? 0x0200 : 0x0300) && widths[i++]==8) в текущей последовательности операций. */ assert(trace[i]==(write ? 0x0200 : 0x0300) && widths[i++]==8); +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 + /* Вызывает assert с аргументами (trace[i]==((address>>16)<<8) && widths[i++]==8) в текущей последовательности операций. */ assert(trace[i]==((address>>16)<<8) && widths[i++]==8); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Вызывает assert с аргументами (trace[i]==(address&65535) && widths[i++]==16) в текущей последовательности операций. */ assert(trace[i]==(address&65535) && widths[i++]==16); + /* Вызывает assert с аргументами (trace[i]==(write ? 0x1234 : 0) && widths[i++]==16) в текущей последовательности операций. */ assert(trace[i]==(write ? 0x1234 : 0) && widths[i++]==16); + /* Вызывает assert с аргументами (trace[i]==(write ? 0x5678 : 0) && widths[i++]==16) в текущей последовательности операций. */ assert(trace[i]==(write ? 0x5678 : 0) && widths[i++]==16); + /* Проверяет if(write); последующий оператор выполняется только при истинном условии. */ if(write) { assert(trace[i]==0x0500 && widths[i++]==8); assert(trace[i++]==0); } + /* Вызывает assert с аргументами (i==used) в текущей последовательности операций. */ assert(i==used); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */ int main(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает SPISE2P_DRV_init с аргументами (&se2p) в текущей последовательности операций. */ SPISE2P_DRV_init(&se2p); + /* Вызывает transfer с аргументами (0x7ffc,0); transfer(0x7ffc,1) в текущей последовательности операций. */ transfer(0x7ffc,0); transfer(0x7ffc,1); +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 + /* Вызывает assert с аргументами (BALSAM167_EEPROM_FIRMWARE_BYTES==261884UL) в текущей последовательности операций. */ assert(BALSAM167_EEPROM_FIRMWARE_BYTES==261884UL); + /* Вызывает transfer с аргументами (0xfffe,0); transfer(0x10000,0) в текущей последовательности операций. */ transfer(0xfffe,0); transfer(0x10000,0); + /* Вызывает transfer с аргументами (0x20000,1); transfer(0x3fffc,0); transfer(0x3fffc,1) в текущей последовательности операций. */ transfer(0x20000,1); transfer(0x3fffc,0); transfer(0x3fffc,1); +/* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Вызывает assert с аргументами (BALSAM167_EEPROM_FIRMWARE_BYTES==32508) в текущей последовательности операций. */ assert(BALSAM167_EEPROM_FIRMWARE_BYTES==32508); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Завершает main и возвращает 0. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/tests/eeprom_profiles/stubs/DSP2833x_Device.h b/tests/eeprom_profiles/stubs/DSP2833x_Device.h index f0d64db..58aaa61 100644 --- a/tests/eeprom_profiles/stubs/DSP2833x_Device.h +++ b/tests/eeprom_profiles/stubs/DSP2833x_Device.h @@ -1,22 +1,45 @@ +/* Проверка eeprom_profiles/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Начинает условие: EEPROM_TEST_DEVICE_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef EEPROM_TEST_DEVICE_H +/* Определяет защитный символ или переключатель EEPROM_TEST_DEVICE_H для последующей компиляции. */ #define EEPROM_TEST_DEVICE_H +/* Подключает : настройки и интерфейс stdint. */ #include +/* Определяет защитный символ или переключатель interrupt для последующей компиляции. */ #define interrupt +/* Определяет защитный символ или переключатель EALLOW для последующей компиляции. */ #define EALLOW +/* Определяет защитный символ или переключатель EDIS для последующей компиляции. */ #define EDIS +/* Задаёт CLKMULT = 2; данные CLKMULT. */ #define CLKMULT 2 +/* Задаёт SYSCLKOUT = 60000000UL; данные SYSCLKOUT. */ #define SYSCLKOUT 60000000UL +/* Задаёт M_INT14 = 0x2000; данные M_INT14. */ #define M_INT14 0x2000 +/* Продолжает список аргументов, полей или выражение static unsigned IER;; порядок элементов сохраняется. */ static unsigned IER; +/* Описывает структуру bits; порядок полей определяет расположение данных. */ struct bits { unsigned GPIO16,GPIO17,GPIO18,GPIO19,SPISWRESET,BUFFULL_FLAG,INT_FLAG; }; +/* Описывает структуру reg; порядок полей определяет расположение данных. */ struct reg { unsigned all; struct bits bit; }; +/* Продолжает список аргументов, полей или выражение static struct { struct reg GPAMUX2,GPADIR; } GpioCtrlRegs;; порядок элементов сохраняется. */ static struct { struct reg GPAMUX2,GPADIR; } GpioCtrlRegs; +/* Продолжает список аргументов, полей или выражение static struct { struct reg GPADAT; } GpioDataRegs;; порядок элементов сохраняется. */ static struct { struct reg GPADAT; } GpioDataRegs; +/* Продолжает список аргументов, полей или выражение static struct { void (*TINT2)(void); } PieVectTable;; порядок элементов сохраняется. */ static struct { void (*TINT2)(void); } PieVectTable; +/* Продолжает список аргументов, полей или выражение static struct { unsigned InterruptCount; } CpuTimer2;; порядок элементов сохраняется. */ static struct { unsigned InterruptCount; } CpuTimer2; +/* Продолжает список аргументов, полей или выражение static struct { struct reg TCR; } CpuTimer2Regs;; порядок элементов сохраняется. */ static struct { struct reg TCR; } CpuTimer2Regs; +/* Продолжает список аргументов, полей или выражение static struct { struct reg SPICCR,SPICTL,SPISTS,SPIFFTX,SPIFFRX,SPIFFCT,SPIPRI;; порядок элементов сохраняется. */ static struct { struct reg SPICCR,SPICTL,SPISTS,SPIFFTX,SPIFFRX,SPIFFCT,SPIPRI; + /* Продолжает список аргументов, полей или выражение unsigned SPIBRR; uint16_t SPITXBUF,SPIRXBUF; } SpiaRegs;; порядок элементов сохраняется. */ unsigned SPIBRR; uint16_t SPITXBUF,SPIRXBUF; } SpiaRegs; +/* Начинает функцию InitCpuTimers; назначение модуля — проверка eeprom_profiles/stubs на модели ПК. */ static void InitCpuTimers(void) {} +/* Начинает функцию ConfigCpuTimer; назначение модуля — проверка eeprom_profiles/stubs на модели ПК. */ static void ConfigCpuTimer(void *p, unsigned long f, unsigned t) {(void)p;(void)f;(void)t;} +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif diff --git a/tests/firmware_identity/check_build.py b/tests/firmware_identity/check_build.py index ac160c7..2879d98 100644 --- a/tests/firmware_identity/check_build.py +++ b/tests/firmware_identity/check_build.py @@ -1,3 +1,5 @@ +# Проверка firmware_identity на модели пк. Комментарии и исходный текст в UTF-8. +# Продолжает текущий вызов, список или выражение: """Independent test oracle: does this built SCI8 file contain its manifest identity?; порядок аргументов сохраняется. """Independent test oracle: does this built SCI8 file contain its manifest identity? This is a build test, not a second production protocol codec. The 12-word vector @@ -5,38 +7,72 @@ is deliberately constructed independently of the C implementation to detect a stale compilation unit, incorrect byte order or a mismatched pre-build JSON. Usage: python tests/firmware_identity/check_build.py path/to/firmware.bin """ +# Импортирует необходимые имена: from datetime import datetime. from datetime import datetime +# Подключает модуль hashlib для этой проверки или подготовки сборки. import hashlib +# Подключает модуль json для этой проверки или подготовки сборки. import json +# Импортирует необходимые имена: from pathlib import Path. from pathlib import Path +# Подключает модуль struct для этой проверки или подготовки сборки. import struct +# Подключает модуль sys для этой проверки или подготовки сборки. import sys +# Задаёт image по выражению справа; значение используется последующими операциями. image = Path(sys.argv[1]) +# Читает исходный файл или образ для последующей проверки и разбора. data = image.read_bytes() -meta = json.loads(image.with_suffix(image.suffix + '.manifest.json').read_text()) +# Читает исходный файл или образ для последующей проверки и разбора. +meta = json.loads(image.with_suffix(image.suffix + '.manifest.json').read_text(encoding="utf-8")) +# Проверяет обязательное условие hashlib.sha256(data).hexdigest() == meta['sha256'], 'Wrong file hash'; нарушение делает тест неуспешным. assert hashlib.sha256(data).hexdigest() == meta['sha256'], 'Wrong file hash' +# Проверяет обязательное условие len(data) == meta['size_bytes'], 'Wrong image size'; нарушение делает тест неуспешным. assert len(data) == meta['size_bytes'], 'Wrong image size' +# Задаёт stamp по выражению справа; значение используется последующими операциями. stamp = datetime.fromisoformat(meta['built_at_utc']) +# Задаёт build_id по выражению справа; значение используется последующими операциями. build_id = meta['build_id'] +# Задаёт words по выражению справа; значение используется последующими операциями. words = [1, *meta['version'], stamp.year, stamp.month * 256 + stamp.day, + # Продолжает текущий вызов, список или выражение: stamp.hour * 256 + stamp.minute, stamp.second]; порядок аргументов сохраняется. stamp.hour * 256 + stamp.minute, stamp.second] +# Задаёт words + по выражению справа; значение используется последующими операциями. words += [ord(build_id[i]) * 256 + ord(build_id[i+1]) for i in range(0, 8, 2)] +# Задаёт expected по выражению справа; значение используется последующими операциями. expected = struct.pack('<12H', *words) +# Проверяет обязательное условие data[:2] == b'\xaa\x08', 'Not SCI8'; нарушение делает тест неуспешным. assert data[:2] == b'\xaa\x08', 'Not SCI8' +# Задаёт offset по выражению справа; значение используется последующими операциями. offset = 22 +# Задаёт found по выражению справа; значение используется последующими операциями. found = 0 +# Повторяет блок при выполнении True. while True: + # Задаёт count, по выражению справа; значение используется последующими операциями. count, = struct.unpack_from(': настройки и интерфейс assert. */ #include +/* Продолжает список аргументов, полей или выражение static unsigned logger_reads, logger_writes;; порядок элементов сохраняется. */ static unsigned logger_reads, logger_writes; +/* Проверяет область чтения регистратора и возвращает слова состояния либо архивной записи. */ unsigned int ump_log_read(unsigned int address) +/* Изменяет счётчик в выражении { (void)address; ++logger_reads; return 0x554dU; } на один для следующего шага. */ { (void)address; ++logger_reads; return 0x554dU; } +/* Применяет допустимые команды управления регистратором, сохраняя ограничения адресов. */ int ump_log_write(unsigned int address, unsigned int value) +/* Изменяет счётчик в выражении { (void)address; (void)value; ++logger_writes; return 1; } на один для следующего шага. */ { (void)address; (void)value; ++logger_writes; return 1; } +/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */ int main(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет words — слова. */ uint16_t words[UMP_MAX_WORDS]; + /* Продолжает список аргументов, полей или выражение ump_octet wire[UMP_RTU_CAPACITY];; порядок элементов сохраняется. */ ump_octet wire[UMP_RTU_CAPACITY]; + /* Продолжает список аргументов, полей или выражение unsigned error, i;; порядок элементов сохраняется. */ unsigned error, i; + /* Вызывает assert с аргументами (ump_tms28335_prepare(3, UMP_FIRMWARE_INFO, 12, words, &error) == 12 && !error) в текущей последовательности операций. */ assert(ump_tms28335_prepare(3, UMP_FIRMWARE_INFO, 12, words, &error) == 12 && !error); + /* Вызывает assert с аргументами (words[0] == 1 && words[1] == FIRMWARE_VERSION_MAJOR) в текущей последовательности операций. */ assert(words[0] == 1 && words[1] == FIRMWARE_VERSION_MAJOR); + /* Вызывает assert с аргументами (words[2] == FIRMWARE_VERSION_MINOR && words[3] == FIRMWARE_VERSION_PATCH) в текущей последовательности операций. */ assert(words[2] == FIRMWARE_VERSION_MINOR && words[3] == FIRMWARE_VERSION_PATCH); + /* Вызывает assert с аргументами (words[4] == FI_YEAR && words[5] == FI_PAIR(FI_MONTH, FI_DAY)) в текущей последовательности операций. */ assert(words[4] == FI_YEAR && words[5] == FI_PAIR(FI_MONTH, FI_DAY)); + /* Вызывает assert с аргументами (words[8] == FI_PAIR(FI_ID_0, FI_ID_1)) в текущей последовательности операций. */ assert(words[8] == FI_PAIR(FI_ID_0, FI_ID_1)); + /* Вызывает assert с аргументами (logger_reads == 0) в текущей последовательности операций. */ assert(logger_reads == 0); + /* Вызывает assert с аргументами (ump_tms28335_rtu(1,3,UMP_FIRMWARE_INFO,12,wire,UMP_RTU_CAPACITY) == 29) в текущей последовательности операций. */ assert(ump_tms28335_rtu(1,3,UMP_FIRMWARE_INFO,12,wire,UMP_RTU_CAPACITY) == 29); + /* Цикл for (i=0; i<12; ++i) assert(((wire[3+i*2]<<8) | wire[4+i*2]) == words[i]);; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i=0; i<12; ++i) assert(((wire[3+i*2]<<8) | wire[4+i*2]) == words[i]); + /* Вызывает assert с аргументами (ump_crc(wire,29) == 0) в текущей последовательности операций. */ assert(ump_crc(wire,29) == 0); + /* Вызывает ump_tms28335_prepare с аргументами (6,UMP_FIRMWARE_INFO,123,words,&error) в текущей последовательности операций. */ ump_tms28335_prepare(6,UMP_FIRMWARE_INFO,123,words,&error); + /* Вызывает assert с аргументами (error == 2 && logger_writes == 0) в текущей последовательности операций. */ assert(error == 2 && logger_writes == 0); /* Firmware reads must not steal the existing logger window. */ + /* Вызывает assert с аргументами (ump_tms28335_prepare(3,UMP_BASE,16,words,&error) == 16 && !error) в текущей последовательности операций. */ assert(ump_tms28335_prepare(3,UMP_BASE,16,words,&error) == 16 && !error); + /* Вызывает assert с аргументами (logger_reads == 16 && words[0] == 0x554dU) в текущей последовательности операций. */ assert(logger_reads == 16 && words[0] == 0x554dU); + /* Завершает main и возвращает 0. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/tests/gas167/check_image.py b/tests/gas167/check_image.py index fb03cb2..989d0f2 100644 --- a/tests/gas167/check_image.py +++ b/tests/gas167/check_image.py @@ -1,48 +1,93 @@ +# Проверка gas167 на модели пк. Комментарии и исходный текст в UTF-8. +# Продолжает текущий вызов, список или выражение: """Validate the PM35 RAM-load SCI8 image against the selected EEPROM profile."""; порядок аргументов сохраняется. """Validate the PM35 RAM-load SCI8 image against the selected EEPROM profile.""" +# Подключает модуль argparse для этой проверки или подготовки сборки. import argparse +# Импортирует необходимые имена: from pathlib import Path. from pathlib import Path +# Подключает модуль struct для этой проверки или подготовки сборки. import struct +# Объявляет функцию check_image и её входные параметры. def check_image(path, eeprom): + # Читает исходный файл или образ для последующей проверки и разбора. data = path.read_bytes() + # Задаёт limit по выражению справа; значение используется последующими операциями. limit = {"AT25256B": 32508, "M95M02": 261884}[eeprom] + # Проверяет условие if not 24 <= len(data) <= limit перед выполнением следующего блока. if not 24 <= len(data) <= limit: + # Останавливает текущую операцию с исключением ValueError(f"Image size {len(data)} outside 24..{limit}"). raise ValueError(f"Image size {len(data)} outside 24..{limit}") + # Проверяет условие if struct.unpack_from(" len(data) перед выполнением следующего блока. if position + 2 > len(data): + # Останавливает текущую операцию с исключением ValueError("Missing boot terminator"). raise ValueError("Missing boot terminator") + # Задаёт words по выражению справа; значение используется последующими операциями. words = struct.unpack_from(" len(data) перед выполнением следующего блока. if position + 4 + words * 2 > len(data): + # Останавливает текущую операцию с исключением ValueError("Truncated boot block"). raise ValueError("Truncated boot block") + # Задаёт high, low по выражению справа; значение используется последующими операциями. high, low = struct.unpack_from(": настройки и интерфейс assert. */ #include +/* Подключает : настройки и интерфейс stdbool. */ #include +/* Подключает : настройки и интерфейс stdint. */ #include +/* Подключает : настройки и интерфейс stdio. */ #include +/* Подключает : настройки и интерфейс string. */ #include +/* Подключает "gas167.h": дополнительная карта GAS 167/v1 только для новой EEPROM M95M02. */ #include "gas167.h" +/* Подключает "ump_protocol.h": настройки и интерфейс ump_protocol. */ #include "ump_protocol.h" +/* Подключает "ump_tms28335.h": настройки и интерфейс ump_tms28335. */ #include "ump_tms28335.h" +/* Подключает "include/balsam167_eeprom_block.h": настройки и интерфейс balsam167_eeprom_block. */ #include "include/balsam167_eeprom_block.h" +/* Задаёт ANSWER_LEN = 128U; данные ANSWER_LEN. */ #define ANSWER_LEN 128U +/* Задаёт MAX_SEND_LENGTH = 400U; MAX SEND длина. */ #define MAX_SEND_LENGTH 400U +/* Задаёт CNTRL_ADDR = 16U; данные CNTRL_ADDR. */ #define CNTRL_ADDR 16U +/* Задаёт CMD_MODBUS_3 = 3U; данные CMD_MODBUS_3. */ #define CMD_MODBUS_3 3U +/* Задаёт CMD_MODBUS_6 = 6U; данные CMD_MODBUS_6. */ #define CMD_MODBUS_6 6U +/* Задаёт dsk_LOAD = 6; код платы нагрузки. */ #define dsk_LOAD 6 +/* Задаёт LOBYTE = ((v) & 255U); данные LOBYTE. */ #define LOBYTE(v) ((v) & 255U) +/* Задаёт HIBYTE = (((v) >> 8) & 255U); данные HIBYTE. */ #define HIBYTE(v) (((v) >> 8) & 255U) +/* Задаёт 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 +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef struct { int all; } WORDE; +/* Задаёт Modbus = ((WORDE *)modbus); данные Modbus. */ #define Modbus ((WORDE *)modbus) +/* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef struct { + /* Объявляет RS_Header — данные RS_Header; buffer — буфер. */ uint16_t RS_Header[8], buffer[MAX_SEND_LENGTH]; + /* Продолжает список аргументов, полей или выражение unsigned flag_TIMEOUT_to_Send;; порядок элементов сохраняется. */ unsigned flag_TIMEOUT_to_Send; +/* Продолжает список аргументов, полей или выражение } RS_DATA;; порядок элементов сохраняется. */ } RS_DATA; +/* Объявляет modbus — массив технологических регистров; слово int на C28x занимает 16 бит; Desk — аппаратно определённый тип платы; dsk_LOAD — код платы нагрузки. Начальное значение задаётся справа от знака равенства. */ int modbus[129], Desk = dsk_LOAD; +/* Продолжает список аргументов, полей или выражение static unsigned captures, spi_reads, sent, irq_depth, legacy_reads;; порядок элементов сохраняется. */ static unsigned captures, spi_reads, sent, irq_depth, legacy_reads; +/* Начинает функцию __disable_interrupts; назначение модуля — проверка gas167 на модели ПК. */ static unsigned __disable_interrupts(void) { + /* Записывает saved значением irq_depth; данные saved. */ unsigned saved = irq_depth; + /* Изменяет счётчик в выражении ++irq_depth; на один для следующего шага. */ ++irq_depth; + /* Завершает __disable_interrupts и возвращает saved. */ return saved; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию __restore_interrupts; назначение модуля — проверка gas167 на модели ПК. */ static void __restore_interrupts(unsigned saved) { irq_depth = saved; } +/* Регистрирует изменение слова команд после записи по последовательному интерфейсу. */ void ump_log_rs(void) { ++captures; } +/* Проверяет область чтения регистратора и возвращает слова состояния либо архивной записи. */ unsigned int ump_log_read(unsigned int address) { ++legacy_reads; return address; } +/* Применяет допустимые команды управления регистратором, сохраняя ограничения адресов. */ int ump_log_write(unsigned int address, unsigned int value) { return 1; } +/* Начинает функцию get_crc_16; назначение модуля — проверка gas167 на модели ПК. */ static unsigned get_crc_16(unsigned seed, const uint16_t *data, unsigned size) { + /* Вызывает assert с аргументами (seed == 0xFFFFU) в текущей последовательности операций. */ assert(seed == 0xFFFFU); + /* Завершает get_crc_16 и возвращает ump_crc(data, size). */ return ump_crc(data, size); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Передаёт массив слов через SCI в выбранном режиме упаковки. */ static void RS_Send(RS_DATA *rs, uint16_t *data, unsigned size) { + /* Вызывает assert с аргументами (irq_depth == 0) в текущей последовательности операций. */ assert(irq_depth == 0); + /* Записывает sent значением size; данные sent. */ sent = size; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Читает EEPROM порциями; адрес задаётся словами C28x, размер переводится в число передаваемых слов. */ static void Seeprom_read(unsigned long word, uint16_t *data, unsigned bytes) { + /* Продолжает список аргументов, полей или выражение unsigned i;; порядок элементов сохраняется. */ unsigned i; - assert(irq_depth == 0); /* The Timer2 SPI driver must retain interrupts. */ + assert(irq_depth == 0); /* The Timer2 SPI driver must retain interrupts. */ /* Вызывает assert с аргументами (irq_depth == 0) в текущей последовательности операций. */ + /* Изменяет счётчик в выражении ++spi_reads; на один для следующего шага. */ ++spi_reads; + /* Цикл for (i = 0; i < bytes/2; ++i) data[i] = (uint16_t)(0xBEEFU+i);; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < bytes/2; ++i) data[i] = (uint16_t)(0xBEEFU+i); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */ static unsigned Load_protection_prepare(unsigned fn, unsigned a, unsigned n, + /* Объявляет out — данные out. Хранит указатель на данные. */ uint16_t *out, unsigned *error) { + /* Записывает out[0] значением (uint16_t)a; out[1] = (uint16_t)n; *error = 0; данные out. */ out[0] = (uint16_t)a; out[1] = (uint16_t)n; *error = 0; + /* Завершает Load_protection_prepare и возвращает 2. */ return 2; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Описывает структуру mock_reg; порядок полей определяет расположение данных. */ struct mock_reg { uint32_t all; }; +/* Продолжает список аргументов, полей или выражение static struct {; порядок элементов сохраняется. */ static struct { + /* Описывает структуру mock_reg CANTA, CANAA, CANTRR, CANTRS;; порядок полей определяет расположение данных. */ struct mock_reg CANTA, CANAA, CANTRR, CANTRS; +/* Продолжает список аргументов, полей или выражение } ECanaRegs;; порядок элементов сохраняется. */ } ECanaRegs; +/* Продолжает список аргументов, полей или выражение static struct {; порядок элементов сохраняется. */ static struct { + /* Описывает структуру ; порядок полей определяет расположение данных. */ struct { struct mock_reg MDH, MDL; } MBOX2; +/* Продолжает список аргументов, полей или выражение } ECanaMboxes;; порядок элементов сохраняется. */ } ECanaMboxes; +/* Продолжает список аргументов, полей или выражение static struct { unsigned long InterruptCount; } CpuTimer1;; порядок элементов сохраняется. */ static struct { unsigned long InterruptCount; } CpuTimer1; +/* Подключает "production_routes.inc": настройки и интерфейс production_routes. */ #include "production_routes.inc" +/* Начинает функцию request; назначение модуля — проверка gas167 на модели ПК. */ static void request(RS_DATA *rs, unsigned fn, unsigned a, unsigned n) { + /* Продолжает список аргументов, полей или выражение unsigned crc;; порядок элементов сохраняется. */ unsigned crc; + /* Вызывает memset с аргументами (rs, 0, sizeof(*rs)) в текущей последовательности операций. */ memset(rs, 0, sizeof(*rs)); + /* Записывает rs->RS_Header[0] значением CNTRL_ADDR; rs->RS_Header[1] = fn; данные rs->RS_Header. */ rs->RS_Header[0] = CNTRL_ADDR; rs->RS_Header[1] = fn; + /* Записывает rs->RS_Header[2] значением a >> 8; rs->RS_Header[3] = a & 255U; данные rs->RS_Header. */ rs->RS_Header[2] = a >> 8; rs->RS_Header[3] = a & 255U; + /* Записывает rs->RS_Header[4] значением n >> 8; rs->RS_Header[5] = n & 255U; данные rs->RS_Header. */ rs->RS_Header[4] = n >> 8; rs->RS_Header[5] = n & 255U; + /* Записывает crc значением ump_crc(rs->RS_Header, 6); данные crc. */ crc = ump_crc(rs->RS_Header, 6); + /* Записывает rs->RS_Header[6] значением crc & 255U; rs->RS_Header[7] = crc >> 8; данные rs->RS_Header. */ rs->RS_Header[6] = crc & 255U; rs->RS_Header[7] = crc >> 8; + /* Записывает sent значением 0; данные sent. */ sent = 0; + /* Проверяет if (fn == 3) ReceiveCommandModbus3(rs); последующий оператор выполняется только при истинном условии. */ if (fn == 3) ReceiveCommandModbus3(rs); + /* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */ else ReceiveCommandModbus6(rs); + /* Вызывает assert с аргументами (irq_depth == 0 && rs->flag_TIMEOUT_to_Send) в текущей последовательности операций. */ assert(irq_depth == 0 && rs->flag_TIMEOUT_to_Send); + /* Вызывает assert с аргументами (ump_crc(rs->buffer, rs->buffer[1] & 128U ? 5 : в текущей последовательности операций. */ assert(ump_crc(rs->buffer, rs->buffer[1] & 128U ? 5 : + /* Продолжает список аргументов, полей или выражение (fn == 6 ? 8 : 5+rs->buffer[2])) == 0);; порядок элементов сохраняется. */ (fn == 6 ? 8 : 5+rs->buffer[2])) == 0); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию can_request; назначение модуля — проверка gas167 на модели ПК. */ static void can_request(unsigned fn, unsigned a, unsigned n) { + /* Вызывает memset с аргументами (&ECanaRegs, 0, sizeof(ECanaRegs)) в текущей последовательности операций. */ memset(&ECanaRegs, 0, sizeof(ECanaRegs)); + /* Вызывает memset с аргументами (&ECanaMboxes, 0, sizeof(ECanaMboxes)) в текущей последовательности операций. */ memset(&ECanaMboxes, 0, sizeof(ECanaMboxes)); + /* Записывает ump_can_waiting значением 0; ump_can_length = 0; ump_can_index = 0; ump CAN waiting. */ ump_can_waiting = 0; ump_can_length = 0; ump_can_index = 0; + /* Записывает ump_can_pending значением 1; ump_can_tag = 0x0100U | fn; флаг ожидающего запроса служебного CAN между ISR и главным циклом. */ ump_can_pending = 1; ump_can_tag = 0x0100U | fn; + /* Записывает ump_can_address значением a; ump_can_value = n; ump CAN адрес. */ ump_can_address = a; ump_can_value = n; + /* Вызывает UMP_CAN_service. В главном цикле готовит замороженный ответ служебного CAN и отправляет его двухсловными фрагментами. */ UMP_CAN_service(); + /* Вызывает assert с аргументами (irq_depth == 0 && !ump_can_pending) в текущей последовательности операций. */ assert(irq_depth == 0 && !ump_can_pending); + /* Вызывает assert с аргументами (ECanaRegs.CANTRS.all == 4U) в текущей последовательности операций. */ assert(ECanaRegs.CANTRS.all == 4U); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */ int main(void) { + /* Объявляет rs — данные rs. */ RS_DATA rs; + /* Продолжает список аргументов, полей или выражение unsigned i;; порядок элементов сохраняется. */ unsigned i; + /* Цикл for (i = 0; i < 129; ++i) modbus[i] = (int)i;; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 129; ++i) modbus[i] = (int)i; + /* Записывает modbus[128] значением 0xD00D; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[128] = 0xD00D; /* Exercise the real native handlers in both builds. */ + /* Вызывает request с аргументами (&rs, 6, 1, 0xFEDC) в текущей последовательности операций. */ request(&rs, 6, 1, 0xFEDC); + /* Вызывает assert с аргументами (modbus[1] == 0xFEDC && sent == 10) в текущей последовательности операций. */ assert(modbus[1] == 0xFEDC && sent == 10); + /* Вызывает request с аргументами (&rs, 3, 0, 2) в текущей последовательности операций. */ request(&rs, 3, 0, 2); + /* Вызывает assert с аргументами (rs.buffer[2] == 4 && rs.buffer[5] == 0xFE && rs.buffer[6] == 0xDC) в текущей последовательности операций. */ assert(rs.buffer[2] == 4 && rs.buffer[5] == 0xFE && rs.buffer[6] == 0xDC); + /* Вызывает request с аргументами (&rs, 6, 0x52, 0) в текущей последовательности операций. */ request(&rs, 6, 0x52, 0); + /* Вызывает assert с аргументами (rs.buffer[1] == 0x86 && rs.buffer[2] == 3 && modbus[0x52] == 0x52) в текущей последовательности операций. */ assert(rs.buffer[1] == 0x86 && rs.buffer[2] == 3 && modbus[0x52] == 0x52); + /* Вызывает request с аргументами (&rs, 6, 0x7C, 9) в текущей последовательности операций. */ request(&rs, 6, 0x7C, 9); + /* Вызывает assert с аргументами (rs.buffer[2] == 2 && modbus[0x7C] == 0x7C) в текущей последовательности операций. */ assert(rs.buffer[2] == 2 && modbus[0x7C] == 0x7C); /* Existing UMP and protection routing must still work. */ + /* Вызывает request с аргументами (&rs, 3, 0x1000, 2) в текущей последовательности операций. */ request(&rs, 3, 0x1000, 2); + /* Вызывает assert с аргументами (rs.buffer[1] == 3 && rs.buffer[3] == 0x10 && legacy_reads == 2) в текущей последовательности операций. */ assert(rs.buffer[1] == 3 && rs.buffer[3] == 0x10 && legacy_reads == 2); + /* Вызывает request с аргументами (&rs, 3, 0x1300, 2) в текущей последовательности операций. */ request(&rs, 3, 0x1300, 2); + /* Вызывает assert с аргументами (rs.buffer[1] == 3 && rs.buffer[3] == 0x13) в текущей последовательности операций. */ assert(rs.buffer[1] == 3 && rs.buffer[3] == 0x13); +/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 + /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет out — данные out. */ uint16_t out[124]; + /* Продолжает список аргументов, полей или выражение unsigned error, count;; порядок элементов сохраняется. */ unsigned error, count; + /* Цикл for (i = 0; i < 65536U; ++i); задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 65536U; ++i) + /* Вызывает assert с аргументами (gas167_contains((uint16_t)i) == в текущей последовательности операций. */ assert(gas167_contains((uint16_t)i) == + /* Продолжает список аргументов, полей или выражение ((i >= 0x5000U && i <= 0x507FU) || (i >= 0x5F00U && i <= 0x5F07U)));; порядок элементов сохраняется. */ ((i >= 0x5000U && i <= 0x507FU) || (i >= 0x5F00U && i <= 0x5F07U))); + /* Вызывает assert с аргументами (gas167_prepare(3, 0x5000, 124, 0, out, &error) == 124 && !error) в текущей последовательности операций. */ assert(gas167_prepare(3, 0x5000, 124, 0, out, &error) == 124 && !error); + /* Вызывает assert с аргументами (out[1] == 0xFEDC && out[123] == 123) в текущей последовательности операций. */ assert(out[1] == 0xFEDC && out[123] == 123); + /* Записывает count значением gas167_prepare(3, 0x507F, 2, 0, out, &error); число. */ count = gas167_prepare(3, 0x507F, 2, 0, out, &error); + /* Вызывает assert с аргументами (count == 2 && error == 2 && modbus[128] == 0xD00D) в текущей последовательности операций. */ assert(count == 2 && error == 2 && modbus[128] == 0xD00D); + /* Вызывает assert с аргументами (gas167_prepare(3, 0x5000, 0, 0, out, &error) == 2 && error == 3) в текущей последовательности операций. */ assert(gas167_prepare(3, 0x5000, 0, 0, out, &error) == 2 && error == 3); + /* Вызывает assert с аргументами (gas167_prepare(3, 0x5000, 125, 0, out, &error) == 2 && error == 3) в текущей последовательности операций. */ assert(gas167_prepare(3, 0x5000, 125, 0, out, &error) == 2 && error == 3); + /* Вызывает assert с аргументами (gas167_prepare(3, 0x5000, 1, 1, out, &error) == 2 && error == 3) в текущей последовательности операций. */ assert(gas167_prepare(3, 0x5000, 1, 1, out, &error) == 2 && error == 3); + /* Вызывает assert с аргументами (gas167_prepare(3, 0xFFFF, 2, 0, out, &error) == 2 && error == 2) в текущей последовательности операций. */ assert(gas167_prepare(3, 0xFFFF, 2, 0, out, &error) == 2 && error == 2); + /* Вызывает assert с аргументами (gas167_prepare(16, 0x5000, 1, 0, out, &error) == 2 && error == 1) в текущей последовательности операций. */ assert(gas167_prepare(16, 0x5000, 1, 0, out, &error) == 2 && error == 1); + /* Вызывает assert с аргументами (gas167_prepare(6, 0x5080, 7, 0, out, &error) == 2 && error == 2) в текущей последовательности операций. */ assert(gas167_prepare(6, 0x5080, 7, 0, out, &error) == 2 && error == 2); + /* Вызывает assert с аргументами (gas167_prepare(6, 0x5052, 60001, 0, out, &error) == 2 && error == 3) в текущей последовательности операций. */ assert(gas167_prepare(6, 0x5052, 60001, 0, out, &error) == 2 && error == 3); + /* Вызывает assert с аргументами (gas167_prepare(6, 0x5052, 60000, 0, out, &error) == 2 && !error) в текущей последовательности операций. */ assert(gas167_prepare(6, 0x5052, 60000, 0, out, &error) == 2 && !error); + /* Вызывает assert с аргументами (modbus[0x52] == 60000) в текущей последовательности операций. */ assert(modbus[0x52] == 60000); + /* Вызывает assert с аргументами (gas167_prepare(3, 0x5000, 1, 0, 0, &error) == 0) в текущей последовательности операций. */ assert(gas167_prepare(3, 0x5000, 1, 0, 0, &error) == 0); + /* Вызывает assert с аргументами (gas167_prepare(6, 0x5000, 1, 0, out, 0) == 0 && modbus[0] == 0) в текущей последовательности операций. */ assert(gas167_prepare(6, 0x5000, 1, 0, out, 0) == 0 && modbus[0] == 0); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает request с аргументами (&rs, 3, 0x5000, 2) в текущей последовательности операций. */ request(&rs, 3, 0x5000, 2); + /* Вызывает assert с аргументами (sent == 9 && rs.buffer[5] == 0xFE && rs.buffer[6] == 0xDC) в текущей последовательности операций. */ assert(sent == 9 && rs.buffer[5] == 0xFE && rs.buffer[6] == 0xDC); + /* Вызывает request с аргументами (&rs, 3, 0x5000, 124) в текущей последовательности операций. */ request(&rs, 3, 0x5000, 124); + /* Вызывает assert с аргументами (sent == 253 && rs.buffer[2] == 248) в текущей последовательности операций. */ assert(sent == 253 && rs.buffer[2] == 248); + /* Вызывает request с аргументами (&rs, 3, 0x5F00, 8) в текущей последовательности операций. */ request(&rs, 3, 0x5F00, 8); + /* Вызывает assert с аргументами (sent == 21 && rs.buffer[3] == 0x47 && rs.buffer[4] == 0x41) в текущей последовательности операций. */ assert(sent == 21 && rs.buffer[3] == 0x47 && rs.buffer[4] == 0x41); + /* Вызывает assert с аргументами (rs.buffer[5] == 0x53 && rs.buffer[6] == 0x31) в текущей последовательности операций. */ assert(rs.buffer[5] == 0x53 && rs.buffer[6] == 0x31); + /* Вызывает assert с аргументами (rs.buffer[10] == 167 && rs.buffer[18] == 1) в текущей последовательности операций. */ assert(rs.buffer[10] == 167 && rs.buffer[18] == 1); + /* Вызывает request с аргументами (&rs, 6, 0x5F00, 0) в текущей последовательности операций. */ request(&rs, 6, 0x5F00, 0); + /* Вызывает assert с аргументами (sent == 5 && rs.buffer[2] == 2) в текущей последовательности операций. */ assert(sent == 5 && rs.buffer[2] == 2); + /* Вызывает request с аргументами (&rs, 3, 0x5F07, 2) в текущей последовательности операций. */ request(&rs, 3, 0x5F07, 2); + /* Вызывает assert с аргументами (rs.buffer[2] == 2) в текущей последовательности операций. */ assert(rs.buffer[2] == 2); + /* Вызывает request с аргументами (&rs, 6, 0x5052, 0) в текущей последовательности операций. */ request(&rs, 6, 0x5052, 0); + /* Вызывает assert с аргументами (rs.buffer[2] == 3 && modbus[0x52] == 60000) в текущей последовательности операций. */ assert(rs.buffer[2] == 3 && modbus[0x52] == 60000); + /* Вызывает request с аргументами (&rs, 6, 0x507D, 9) в текущей последовательности операций. */ request(&rs, 6, 0x507D, 9); + /* Вызывает assert с аргументами (rs.buffer[2] == 2 && modbus[0x7D] == 0x7D) в текущей последовательности операций. */ assert(rs.buffer[2] == 2 && modbus[0x7D] == 0x7D); + /* Вызывает request с аргументами (&rs, 6, 0x507F, 0x80) в текущей последовательности операций. */ request(&rs, 6, 0x507F, 0x80); + /* Вызывает assert с аргументами (sent == 8 && rs.buffer[2] == 0x50 && rs.buffer[3] == 0x7F) в текущей последовательности операций. */ assert(sent == 8 && rs.buffer[2] == 0x50 && rs.buffer[3] == 0x7F); + /* Вызывает assert с аргументами (captures == 1 && modbus[127] == 0x80) в текущей последовательности операций. */ assert(captures == 1 && modbus[127] == 0x80); + /* Вызывает can_request с аргументами (6, 0x5001, 0xFEDC) в текущей последовательности операций. */ can_request(6, 0x5001, 0xFEDC); + /* Вызывает assert с аргументами (modbus[1] == 0xFEDC && ECanaMboxes.MBOX2.MDL.all == 0x5001FEDCUL) в текущей последовательности операций. */ assert(modbus[1] == 0xFEDC && ECanaMboxes.MBOX2.MDL.all == 0x5001FEDCUL); + /* Вызывает assert с аргументами (ECanaMboxes.MBOX2.MDH.all == 0x1F000100UL) в текущей последовательности операций. */ assert(ECanaMboxes.MBOX2.MDH.all == 0x1F000100UL); + /* Вызывает can_request с аргументами (3, 0x5001, 2) в текущей последовательности операций. */ can_request(3, 0x5001, 2); + /* Вызывает assert с аргументами (ECanaMboxes.MBOX2.MDL.all == 0xFEDC0002UL) в текущей последовательности операций. */ assert(ECanaMboxes.MBOX2.MDL.all == 0xFEDC0002UL); + /* Вызывает can_request с аргументами (3, 0x5000, 124) в текущей последовательности операций. */ can_request(3, 0x5000, 124); + /* Вызывает assert с аргументами (ump_can_length == 124 && ump_can_index == 2) в текущей последовательности операций. */ assert(ump_can_length == 124 && ump_can_index == 2); - modbus[2] = 777; /* All fragments must retain the original snapshot. */ + modbus[2] = 777; /* All fragments must retain the original snapshot. */ /* Записывает modbus[2] значением 777; массив технологических регистров; слово int на C28x занимает 16 бит. */ + /* Цикл for (i = 1; i < 62; ++i) ; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 1; i < 62; ++i) { + /* Записывает ECanaRegs.CANTA.all значением 4; представление регистра целым словом без разбиения на битовые поля. */ ECanaRegs.CANTA.all = 4; + /* Вызывает UMP_CAN_service. В главном цикле готовит замороженный ответ служебного CAN и отправляет его двухсловными фрагментами. */ UMP_CAN_service(); + /* Вызывает assert с аргументами (ump_can_index == 2*(i+1)) в текущей последовательности операций. */ assert(ump_can_index == 2*(i+1)); + /* Проверяет if (i == 1) assert(ECanaMboxes.MBOX2.MDL.all == 0x00020003UL); последующий оператор выполняется только при истинном условии. */ if (i == 1) assert(ECanaMboxes.MBOX2.MDL.all == 0x00020003UL); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Записывает modbus[2] значением 2; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[2] = 2; + /* Вызывает can_request с аргументами (3, 0x5000, 3) в текущей последовательности операций. */ can_request(3, 0x5000, 3); + /* Вызывает assert с аргументами (ECanaMboxes.MBOX2.MDH.all == 0x1F000103UL) в текущей последовательности операций. */ assert(ECanaMboxes.MBOX2.MDH.all == 0x1F000103UL); + /* Вызывает can_request с аргументами (6, 0x507C, 9) в текущей последовательности операций. */ can_request(6, 0x507C, 9); + /* Вызывает assert с аргументами ((ECanaMboxes.MBOX2.MDH.all & 255U) == 2 && modbus[0x7C] == 0x7C) в текущей последовательности операций. */ assert((ECanaMboxes.MBOX2.MDH.all & 255U) == 2 && modbus[0x7C] == 0x7C); + /* Вызывает can_request с аргументами (6, 0x507F, 0x40) в текущей последовательности операций. */ can_request(6, 0x507F, 0x40); + /* Вызывает assert с аргументами (captures == 2 && modbus[127] == 0x40) в текущей последовательности операций. */ assert(captures == 2 && modbus[127] == 0x40); + /* Вызывает can_request с аргументами (6, 0x5F00, 9) в текущей последовательности операций. */ can_request(6, 0x5F00, 9); + /* Вызывает assert с аргументами ((ECanaMboxes.MBOX2.MDH.all & 255U) == 2) в текущей последовательности операций. */ assert((ECanaMboxes.MBOX2.MDH.all & 255U) == 2); + /* Вызывает request с аргументами (&rs, 3, 0x8000, 0x8001) в текущей последовательности операций. */ request(&rs, 3, 0x8000, 0x8001); +/* Выбирает альтернативный блок текущего условия компиляции. */ #else + /* Вызывает request с аргументами (&rs, 3, 0x5000, 2) в текущей последовательности операций. */ request(&rs, 3, 0x5000, 2); + /* Вызывает assert с аргументами (sent == 5 && rs.buffer[2] == 2) в текущей последовательности операций. */ assert(sent == 5 && rs.buffer[2] == 2); + /* Вызывает request с аргументами (&rs, 6, 0x5001, 9) в текущей последовательности операций. */ request(&rs, 6, 0x5001, 9); + /* Вызывает assert с аргументами (rs.buffer[2] == 2 && modbus[1] == 0xFEDC) в текущей последовательности операций. */ assert(rs.buffer[2] == 2 && modbus[1] == 0xFEDC); + /* Вызывает request с аргументами (&rs, 3, 0x5000, 124) в текущей последовательности операций. */ request(&rs, 3, 0x5000, 124); + /* Вызывает assert с аргументами (sent == 5 && rs.buffer[2] == 2) в текущей последовательности операций. */ assert(sent == 5 && rs.buffer[2] == 2); + /* Вызывает request с аргументами (&rs, 3, 0x5F00, 8) в текущей последовательности операций. */ request(&rs, 3, 0x5F00, 8); + /* Вызывает assert с аргументами (rs.buffer[2] == 2) в текущей последовательности операций. */ assert(rs.buffer[2] == 2); + /* Вызывает can_request с аргументами (6, 0x5001, 9) в текущей последовательности операций. */ can_request(6, 0x5001, 9); + /* Вызывает assert с аргументами ((ECanaMboxes.MBOX2.MDH.all & 255U) == 2 && modbus[1] == 0xFEDC) в текущей последовательности операций. */ assert((ECanaMboxes.MBOX2.MDH.all & 255U) == 2 && modbus[1] == 0xFEDC); + /* Вызывает assert с аргументами (captures == 0) в текущей последовательности операций. */ assert(captures == 0); + /* Вызывает request с аргументами (&rs, 3, 0x8000, 1) в текущей последовательности операций. */ request(&rs, 3, 0x8000, 1); +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif + /* Вызывает assert с аргументами (spi_reads == 1 && rs.buffer[3] == 0xBE && rs.buffer[4] == 0xEF) в текущей последовательности операций. */ assert(spi_reads == 1 && rs.buffer[3] == 0xBE && rs.buffer[4] == 0xEF); + /* Вызывает assert с аргументами (modbus[128] == 0xD00D) в текущей последовательности операций. */ assert(modbus[128] == 0xD00D); + /* Вызывает printf с аргументами ("PASS GAS167 profile %d: production RTU/CAN routes, guards, CRC and legacy services\n", EEPROM_M95M02) в текущей последовательности операций. */ printf("PASS GAS167 profile %d: production RTU/CAN routes, guards, CRC and legacy services\n", EEPROM_M95M02); + /* Завершает main и возвращает 0. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/tests/gas167/run_test.py b/tests/gas167/run_test.py index 9b569a9..784d08c 100644 --- a/tests/gas167/run_test.py +++ b/tests/gas167/run_test.py @@ -1,51 +1,97 @@ +# Проверка gas167 на модели пк. Комментарии и исходный текст в UTF-8. +# Продолжает текущий вызов, список или выражение: """Exercise the production GAS provider and extracted production RTU/CAN routes."""; порядок аргументов сохраняется. """Exercise the production GAS provider and extracted production RTU/CAN routes.""" +# Подключает модуль os для этой проверки или подготовки сборки. import os +# Импортирует необходимые имена: from pathlib import Path. from pathlib import Path +# Подключает модуль re для этой проверки или подготовки сборки. import re +# Подключает модуль shutil для этой проверки или подготовки сборки. import shutil +# Подключает модуль subprocess для этой проверки или подготовки сборки. import subprocess +# Подключает модуль tempfile для этой проверки или подготовки сборки. import tempfile +# Задаёт root по выражению справа; значение используется последующими операциями. root = Path(__file__).resolve().parents[2] +# Задаёт templates по выражению справа; значение используется последующими операциями. templates = Path(os.environ.get("TEMPLATES_ROOT", root.parent / "newProject/SETGUI/third_party/templates")) +# Задаёт protocol по выражению справа; значение используется последующими операциями. protocol = templates / "c/set-protocol" +# Задаёт compiler по выражению справа; значение используется последующими операциями. compiler = os.environ.get("CC") or shutil.which("gcc") or "C:/msys64/mingw64/bin/gcc.exe" +# Задаёт os.environ["PATH"] по выражению справа; значение используется последующими операциями. os.environ["PATH"] = str(Path(compiler).resolve().parent) + os.pathsep + os.environ["PATH"] +# Объявляет функцию function и её входные параметры. def function(text, name): + # Задаёт match по выражению справа; значение используется последующими операциями. match = re.search(r"^(?:static )?(?:void|int) " + name + r"\(", text, re.M) + # Проверяет условие if not match перед выполнением следующего блока. if not match: + # Останавливает текущую операцию с исключением ValueError(f"Production function {name} missing"). raise ValueError(f"Production function {name} missing") + # Задаёт end по выражению справа; значение используется последующими операциями. end = re.search(r"^}", text[match.start():], re.M) + # Проверяет условие if not end перед выполнением следующего блока. if not end: + # Останавливает текущую операцию с исключением ValueError(f"Production function {name} incomplete"). raise ValueError(f"Production function {name} incomplete") + # Возвращает text[match.start():match.start() + end.end()] + "\n" вызывающему коду и завершает функцию. return text[match.start():match.start() + end.end()] + "\n" -message = (root / "Source/Internal/message.c").read_text(encoding="cp1251") -ecan = (root / "Source/Internal/ecan.c").read_text(encoding="cp1251") +# Читает исходный файл или образ для последующей проверки и разбора. +message = (root / "Source/Internal/message.c").read_text(encoding="utf-8") +# Читает исходный файл или образ для последующей проверки и разбора. +ecan = (root / "Source/Internal/ecan.c").read_text(encoding="utf-8") +# Задаёт can_globals по выражению справа; значение используется последующими операциями. can_globals = ecan[ecan.index("static volatile unsigned int ump_can_pending;"): + # Продолжает текущий вызов, список или выражение: ecan.index("static unsigned long ump_can_sent_at;") + len("static unsigned long ump_can_sent_at;")]; порядок аргументов сохраняется. ecan.index("static unsigned long ump_can_sent_at;") + len("static unsigned long ump_can_sent_at;")] # On C28x unsigned int is uint16_t. Preserve that target word layout on GCC. +# Задаёт can_globals по выражению справа; значение используется последующими операциями. can_globals = can_globals.replace("static unsigned int ump_can_reply[", + # Продолжает текущий вызов, список или выражение: "static uint16_t ump_can_reply["); порядок аргументов сохраняется. "static uint16_t ump_can_reply[") +# Задаёт routes по выражению справа; значение используется последующими операциями. routes = can_globals + "\n" + "".join(function(message, name) for name in + # Продолжает текущий вызов, список или выражение: ("modbus_exception", "receive_ump", "ReceiveCommandModbus3", "ReceiveCommandModbus6")); порядок аргументов сохраняется. ("modbus_exception", "receive_ump", "ReceiveCommandModbus3", "ReceiveCommandModbus6")) +# Задаёт routes + по выражению справа; значение используется последующими операциями. routes += function(ecan, "UMP_CAN_service") +# Открывает управляемый ресурс tempfile.TemporaryDirectory(prefix="gas167-test-") as tmp с автоматическим освобождением. with tempfile.TemporaryDirectory(prefix="gas167-test-") as tmp: + # Задаёт directory по выражению справа; значение используется последующими операциями. directory = Path(tmp) + # Сохраняет подготовленный файл в указанном формате для следующего шага. (directory / "production_routes.inc").write_text(routes, encoding="utf-8") + # Перебирает profile in (0, 1) в указанном порядке. for profile in (0, 1): + # Задаёт exe по выражению справа; значение используется последующими операциями. exe = directory / f"gas167_{profile}.exe" + # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. subprocess.run([compiler, "-std=c99", "-Wall", "-Wextra", + # Продолжает текущий вызов, список или выражение: "-Wno-unused-function", "-Wno-unused-parameter",; порядок аргументов сохраняется. "-Wno-unused-function", "-Wno-unused-parameter", + # Задаёт f"-DEEPROM_M95M02 по выражению справа; значение используется последующими операциями. f"-DEEPROM_M95M02={profile}", "-I" + str(directory), + # Продолжает текущий вызов, список или выражение: "-ISource/Internal/Include", "-I" + str(protocol),; порядок аргументов сохраняется. "-ISource/Internal/Include", "-I" + str(protocol), + # Продолжает текущий вызов, список или выражение: "-I" + str(protocol / "include"),; порядок аргументов сохраняется. "-I" + str(protocol / "include"), + # Продолжает текущий вызов, список или выражение: "-I" + str(protocol / "ports/tms320f28335"),; порядок аргументов сохраняется. "-I" + str(protocol / "ports/tms320f28335"), + # Продолжает текущий вызов, список или выражение: "tests/gas167/gas167_test.c", "Source/Internal/gas167.c",; порядок аргументов сохраняется. "tests/gas167/gas167_test.c", "Source/Internal/gas167.c", + # Продолжает текущий вызов, список или выражение: str(protocol / "src/ump_protocol.c"),; порядок аргументов сохраняется. str(protocol / "src/ump_protocol.c"), + # Продолжает текущий вызов, список или выражение: str(protocol / "ports/tms320f28335/ump_tms28335.c"),; порядок аргументов сохраняется. str(protocol / "ports/tms320f28335/ump_tms28335.c"), + # Задаёт "-o", str(exe)], cwd по выражению справа; значение используется последующими операциями. "-o", str(exe)], cwd=root, check=True) + # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. subprocess.run([str(exe)], check=True, timeout=10) diff --git a/tests/load_control/load_control_test.c b/tests/load_control/load_control_test.c index 222d0a2..7b05e6a 100644 --- a/tests/load_control/load_control_test.c +++ b/tests/load_control/load_control_test.c @@ -1,103 +1,197 @@ +/* Проверка load_control на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Подключает : настройки и интерфейс stdio. */ #include +/* Подключает : настройки и интерфейс string. */ #include +/* Подключает "../../Source/Internal/DAC.c": выход ЦАП и автомат защиты нагрузки с проверкой напряжения и свежести CAN. */ #include "../../Source/Internal/DAC.c" +/* Объявляет READY — данные READY; Desk — аппаратно определённый тип платы; Mode — рабочий адрес или режим платы, выбранный перемычками. Начальное значение задаётся справа от знака равенства. */ int READY = 1, Desk = 6, Mode = 5; +/* Объявляет modbus — массив технологических регистров; слово int на C28x занимает 16 бит. */ int modbus[128]; +/* Объявляет test_start — данные test_start; test_stop — данные test_stop; test_permission — данные test_permission; test_tick — данные test_tick. */ unsigned int test_start, test_stop, test_permission, test_tick; +/* Объявляет test_starts — данные test_starts; test_last_stop_tick — данные test_last_stop_tick; test_last_start_tick — данные test_last_start_tick; test_init_dac — test init ЦАП. */ unsigned int test_starts, test_last_stop_tick, test_last_start_tick, test_init_dac; +/* Объявляет test_bad_order — данные test_bad_order. */ int test_bad_order; +/* Объявляет 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. */ unsigned int ump_dac_ramp, ump_dac_duration, ump_dac_go10, ump_dac_stop10, ump_dac_position; +/* Задаёт CHECK = do { if (!(x)) { printf("FAIL line %d: %s\n", __LINE__, #x); return 1; } } while (0); данные CHECK. */ #define CHECK(x) do { if (!(x)) { printf("FAIL line %d: %s\n", __LINE__, #x); return 1; } } while (0) +/* Начинает функцию setup; назначение модуля — проверка load_control на модели ПК. */ static void setup(int mode) { + /* Записывает Mode значением mode; READY = 1; рабочий адрес или режим платы, выбранный перемычками. */ memset(modbus, 0, sizeof(modbus)); Mode = mode; READY = 1; + /* Записывает test_start значением test_stop = test_permission = test_tick = test_starts = 0; данные test_start. */ test_start = test_stop = test_permission = test_tick = test_starts = 0; + /* Записывает test_bad_order значением test_init_dac = 0; данные test_bad_order. */ test_bad_order = test_init_dac = 0; + /* Записывает WAKEpowse значением 0; данные WAKEpowse. */ Load_control_init(); Setup_DAC_time(); WAKEpowse = 0; + /* Записывает DAC_go значением 4; DAC_stop = 16; DAC_min() = 100; DAC_max() = 3000; начальный ток нагрузки в мА, технологический регистр 0x50. */ DAC_go = 4; DAC_stop = 16; DAC_min() = 100; DAC_max() = 3000; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию tick; назначение модуля — проверка load_control на модели ПК. */ static void tick(unsigned int n, int exchange, unsigned int volts) { + /* Повторяет или ожидает, пока выполняется while (n--). */ while (n--) { + /* Проверяет if (exchange) Load_voltage_can(0x8000U | (Mode == 5 ? 305U : 8U), volts, 0, 0); последующий оператор выполняется только при истинном условии. */ if (exchange) Load_voltage_can(0x8000U | (Mode == 5 ? 305U : 8U), volts, 0, 0); + /* Изменяет счётчик в выражении test_tick++; Load_runner(); на один для следующего шага. */ test_tick++; Load_runner(); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */ int main(void) { + /* Объявляет out — данные out; error — ошибка; count — число; ramp — данные ramp; code — данные code. */ unsigned int out[8], error, count, ramp, code, stopped_at; + /* Вызывает setup с аргументами (5) в текущей последовательности операций. */ setup(5); /* Boot ISR before parameters: no divide-by-zero and no GPIO start. */ + /* Записывает Commands значением 0x80; tick(10, 1, 0); CHECK(!test_starts); слово команд, технологический регистр 127. */ Load_control_init(); Commands = 0x80; tick(10, 1, 0); CHECK(!test_starts); + /* Записывает WAKEpowse значением 0; данные WAKEpowse. */ Setup_DAC_time(); WAKEpowse = 0; + /* Вызывает tick с аргументами (10, 0, 0); CHECK(test_starts == 1 && test_permission) в текущей последовательности операций. */ tick(10, 0, 0); CHECK(test_starts == 1 && test_permission); + /* Вызывает CHECK с аргументами (LOAD_CAN_TIMEOUT == 600) в текущей последовательности операций. */ CHECK(LOAD_CAN_TIMEOUT == 600); /* Wrong ZPT and masked slots never confirm freshness. */ + /* Записывает Commands значением 0x80; слово команд, технологический регистр 127. */ setup(5); Commands = 0x80; + /* Вызывает Load_voltage_can. Принимает напряжение выбранной нагрузки из достоверных слов CAN и сбрасывает возраст только нужного измерения. */ Load_voltage_can(0x8000U | 8U, 200, 0, 0); + /* Вызывает Load_voltage_can. Принимает напряжение выбранной нагрузки из достоверных слов CAN и сбрасывает возраст только нужного измерения. */ Load_voltage_can(305U, 200, 0, 0); tick(10, 0, 0); + /* Вызывает CHECK с аргументами (!test_starts && (LOAD_STATUS & 2)) в текущей последовательности операций. */ CHECK(!test_starts && (LOAD_STATUS & 2)); + /* Вызывает Load_voltage_can. Принимает напряжение выбранной нагрузки из достоверных слов CAN и сбрасывает возраст только нужного измерения. */ Load_voltage_can(0x2000U | 303U, 0, 0, 30); + /* Вызывает tick с аргументами (1, 0, 0); CHECK(test_starts == 1) в текущей последовательности операций. */ tick(1, 0, 0); CHECK(test_starts == 1); /* Freeze current and code at timeout; unrelated exchange cannot unfreeze. */ + /* Вызывает tick с аргументами (1000, 1, 30); tick(600, 0, 0) в текущей последовательности операций. */ tick(1000, 1, 30); tick(600, 0, 0); + /* Записывает ramp значением ump_dac_ramp; code = modbus[123]; данные ramp. */ ramp = ump_dac_ramp; code = modbus[123]; + /* Вызывает tick с аргументами (2000, 0, 0); CHECK(ump_dac_ramp == ramp && (unsigned int)modbus[123] == code) в текущей последовательности операций. */ tick(2000, 0, 0); CHECK(ump_dac_ramp == ramp && (unsigned int)modbus[123] == code); + /* Вызывает CHECK с аргументами (test_permission && !test_stop && (LOAD_STATUS & 2)) в текущей последовательности операций. */ CHECK(test_permission && !test_stop && (LOAD_STATUS & 2)); + /* Вызывает Load_voltage_can. Принимает напряжение выбранной нагрузки из достоверных слов CAN и сбрасывает возраст только нужного измерения. */ Load_voltage_can(0x8000U | 8U, 200, 0, 0); tick(10, 0, 0); + /* Вызывает CHECK с аргументами (ump_dac_ramp == ramp) в текущей последовательности операций. */ CHECK(ump_dac_ramp == ramp); + /* Вызывает tick с аргументами (10, 1, 30); CHECK(ump_dac_ramp > ramp) в текущей последовательности операций. */ tick(10, 1, 30); CHECK(ump_dac_ramp > ramp); /* Exactly 30 V permits growth; 29 V fails strictly above 6 mA. */ + /* Записывает Commands значением 0x80; tick(10, 1, 30); слово команд, технологический регистр 127. */ setup(6); Commands = 0x80; tick(10, 1, 30); + /* Записывает load_count_ramp значением time_dac / 6; tick(5, 1, 30); load число ramp. */ load_count_ramp = time_dac / 6; tick(5, 1, 30); + /* Вызывает CHECK с аргументами (load_state == LOAD_RUN && modbus[0x1C] >= 60) в текущей последовательности операций. */ CHECK(load_state == LOAD_RUN && modbus[0x1C] >= 60); + /* Вызывает tick с аргументами (5, 1, 29); CHECK(load_state == LOAD_RELOAD && test_stop && !test_permission) в текущей последовательности операций. */ tick(5, 1, 29); CHECK(load_state == LOAD_RELOAD && test_stop && !test_permission); + /* Вызывает CHECK с аргументами (!test_start && ump_dac_ramp == 0 && modbus[0x1C] == 40) в текущей последовательности операций. */ CHECK(!test_start && ump_dac_ramp == 0 && modbus[0x1C] == 40); + /* Записывает stopped_at значением test_last_stop_tick; данные stopped_at. */ CHECK(modbus[123] == DAC_min()); stopped_at = test_last_stop_tick; + /* Вызывает tick с аргументами (999, 1, 0); CHECK(test_starts == 1 && test_stop) в текущей последовательности операций. */ tick(999, 1, 0); CHECK(test_starts == 1 && test_stop); + /* Вызывает tick с аргументами (1, 1, 0); CHECK(test_starts == 2 && test_last_start_tick-stopped_at == 1000) в текущей последовательности операций. */ tick(1, 1, 0); CHECK(test_starts == 2 && test_last_start_tick-stopped_at == 1000); + /* Вызывает CHECK с аргументами (!test_stop && test_permission && !test_bad_order) в текущей последовательности операций. */ CHECK(!test_stop && test_permission && !test_bad_order); /* Five total attempts, then a persistent fault; no sixth start. */ + /* Повторяет или ожидает, пока выполняется while (load_state != LOAD_FAULT). */ while (load_state != LOAD_FAULT) { + /* Записывает load_count_ramp значением time_dac / 6; tick(5, 1, 0); load число ramp. */ load_count_ramp = time_dac / 6; tick(5, 1, 0); + /* Проверяет if (load_state == LOAD_RELOAD) tick(1000, 1, 0); последующий оператор выполняется только при истинном условии. */ if (load_state == LOAD_RELOAD) tick(1000, 1, 0); + /* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } + /* Вызывает CHECK с аргументами (test_starts == 5 && LOAD_ATTEMPTS == 5 && (LOAD_STATUS & 1)) в текущей последовательности операций. */ CHECK(test_starts == 5 && LOAD_ATTEMPTS == 5 && (LOAD_STATUS & 1)); + /* Вызывает tick с аргументами (3000, 1, 200); CHECK(test_starts == 5 && test_stop && !test_permission) в текущей последовательности операций. */ tick(3000, 1, 200); CHECK(test_starts == 5 && test_stop && !test_permission); + /* Записывает Commands значением 0xC0; tick(10, 1, 200); CHECK(load_state == LOAD_FAULT); слово команд, технологический регистр 127. */ Commands = 0xC0; tick(10, 1, 200); CHECK(load_state == LOAD_FAULT); + /* Записывает Commands значением 0; tick(1000, 1, 200); CHECK(!(LOAD_STATUS & 1)); слово команд, технологический регистр 127. */ Commands = 0; tick(1000, 1, 200); CHECK(!(LOAD_STATUS & 1)); + /* Записывает Commands значением 0x80; test_starts = 0; tick(10, 1, 200); CHECK(LOAD_ATTEMPTS == 1); слово команд, технологический регистр 127. */ Commands = 0x80; test_starts = 0; tick(10, 1, 200); CHECK(LOAD_ATTEMPTS == 1); /* Manual reset dominates START; releasing it alone cannot start again. */ + /* Записывает Commands значением 0xC0; tick(1, 1, 200); CHECK(test_stop && !test_permission); слово команд, технологический регистр 127. */ Commands = 0xC0; tick(1, 1, 200); CHECK(test_stop && !test_permission); + /* Записывает Commands значением 0x80; tick(1500, 1, 200); CHECK(test_starts == 1); слово команд, технологический регистр 127. */ Commands = 0x80; tick(1500, 1, 200); CHECK(test_starts == 1); /* Versioned simulation writes are bounded, read-only fields reject writes. */ + /* Записывает count значением Load_protection_prepare(3, 0x1300, 8, out, &error); число. */ count = Load_protection_prepare(3, 0x1300, 8, out, &error); + /* Вызывает CHECK с аргументами (count == 8 && !error && out[0] == 0x5550 && out[1] == 1) в текущей последовательности операций. */ CHECK(count == 8 && !error && out[0] == 0x5550 && out[1] == 1); + /* Вызывает Load_protection_prepare. Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */ Load_protection_prepare(6, 0x1303, 0, out, &error); CHECK(error == 3); + /* Вызывает Load_protection_prepare. Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */ Load_protection_prepare(6, 0x1304, 0, out, &error); CHECK(error == 2); + /* Вызывает Load_protection_prepare. Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */ Load_protection_prepare(6, 0x1302, 4, out, &error); CHECK(error == 3); + /* Записывает Commands значением 0x80; tick(10, 1, 200); слово команд, технологический регистр 127. */ setup(5); Commands = 0x80; tick(10, 1, 200); + /* Вызывает Load_protection_prepare. Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */ Load_protection_prepare(6, 0x1303, 20, out, &error); CHECK(!error); + /* Вызывает Load_protection_prepare. Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */ Load_protection_prepare(6, 0x1302, 1, out, &error); CHECK(!error); + /* Вызывает tick с аргументами (30, 1, 200); CHECK(LOAD_STATUS & 2) в текущей последовательности операций. */ tick(30, 1, 200); CHECK(LOAD_STATUS & 2); + /* Записывает ramp значением ump_dac_ramp; tick(100, 1, 200); CHECK(ump_dac_ramp == ramp); данные ramp. */ ramp = ump_dac_ramp; tick(100, 1, 200); CHECK(ump_dac_ramp == ramp); + /* Вызывает Load_protection_prepare. Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */ Load_protection_prepare(6, 0x1302, 0, out, &error); + /* Вызывает tick с аргументами (10, 1, 200); CHECK(!(LOAD_STATUS & 2) && ump_dac_ramp > ramp) в текущей последовательности операций. */ tick(10, 1, 200); CHECK(!(LOAD_STATUS & 2) && ump_dac_ramp > ramp); + /* Вызывает Load_protection_prepare. Фиксирует управляющие входы перед выполнением автомата защиты нагрузки. */ Load_protection_prepare(6, 0x1302, 2, out, &error); + /* Записывает load_count_ramp значением time_dac / 6; tick(5, 1, 200); CHECK(load_state == LOAD_RELOAD); load число ramp. */ load_count_ramp = time_dac / 6; tick(5, 1, 200); CHECK(load_state == LOAD_RELOAD); /* Calibration must not replace the forced 4 mA output during reload. */ + /* Устанавливает биты Commands значением 0x200; DAC_cal() = 4095; tick(5, 1, 200); слово команд, технологический регистр 127. */ Commands |= 0x200; DAC_cal() = 4095; tick(5, 1, 200); + /* Вызывает CHECK с аргументами (modbus[123] == DAC_min() && modbus[0x1C] == 40) в текущей последовательности операций. */ CHECK(modbus[123] == DAC_min() && modbus[0x1C] == 40); /* A calibration code preceding START must be replaced by 4 mA first. */ + /* Записывает Commands значением 0x200; DAC_cal() = 4095; слово команд, технологический регистр 127. */ setup(5); Commands = 0x200; DAC_cal() = 4095; + /* Вызывает tick с аргументами (10, 1, 200); CHECK(modbus[123] == 4095 && !load_zero_sent) в текущей последовательности операций. */ tick(10, 1, 200); CHECK(modbus[123] == 4095 && !load_zero_sent); + /* Записывает Commands значением 0x280; tick(1, 1, 200); CHECK(!test_starts); слово команд, технологический регистр 127. */ Commands = 0x280; tick(1, 1, 200); CHECK(!test_starts); + /* Вызывает tick с аргументами (4, 1, 200); CHECK(!test_starts && modbus[123] == DAC_min()) в текущей последовательности операций. */ tick(4, 1, 200); CHECK(!test_starts && modbus[123] == DAC_min()); + /* Вызывает tick с аргументами (1, 1, 200); CHECK(test_starts == 1) в текущей последовательности операций. */ tick(1, 1, 200); CHECK(test_starts == 1); /* Timeout while STOP is held cannot initiate the pending retry. */ + /* Записывает Commands значением 0x80; tick(10, 1, 0); слово команд, технологический регистр 127. */ setup(5); Commands = 0x80; tick(10, 1, 0); + /* Записывает load_count_ramp значением time_dac / 6; tick(5, 1, 0); load число ramp. */ load_count_ramp = time_dac / 6; tick(5, 1, 0); + /* Вызывает CHECK с аргументами (load_state == LOAD_RELOAD) в текущей последовательности операций. */ CHECK(load_state == LOAD_RELOAD); + /* Вызывает tick с аргументами (1500, 0, 0); CHECK(test_starts == 1 && test_stop) в текущей последовательности операций. */ tick(1500, 0, 0); CHECK(test_starts == 1 && test_stop); + /* Вызывает tick с аргументами (1, 1, 0); CHECK(test_starts == 2 && !test_stop) в текущей последовательности операций. */ tick(1, 1, 0); CHECK(test_starts == 2 && !test_stop); + /* Вызывает Load_control_init. Сбрасывает все переменные автомата нагрузки до разрешения прерываний; COFF не обнуляет всю .ebss. */ Load_control_init(); CHECK(!load_simulation); + /* Вызывает puts с аргументами ("PASS: production DAC control, timeout, CAN slots, STOP ordering, five attempts, simulation") в текущей последовательности операций. */ puts("PASS: production DAC control, timeout, CAN slots, STOP ordering, five attempts, simulation"); + /* Завершает main и возвращает 0. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/tests/load_control/run_test.py b/tests/load_control/run_test.py index 41fa105..ab98efa 100644 --- a/tests/load_control/run_test.py +++ b/tests/load_control/run_test.py @@ -1,16 +1,32 @@ +# Проверка load_control на модели пк. Комментарии и исходный текст в UTF-8. +# Продолжает текущий вызов, список или выражение: """Compile the production DAC.c against GPIO/IRQ mocks; no hardware writes."""; порядок аргументов сохраняется. """Compile the production DAC.c against GPIO/IRQ mocks; no hardware writes.""" +# Подключает модуль os для этой проверки или подготовки сборки. import os +# Импортирует необходимые имена: from pathlib import Path. from pathlib import Path +# Подключает модуль shutil для этой проверки или подготовки сборки. import shutil +# Подключает модуль subprocess для этой проверки или подготовки сборки. import subprocess +# Подключает модуль tempfile для этой проверки или подготовки сборки. import tempfile +# Задаёт root по выражению справа; значение используется последующими операциями. root = Path(__file__).resolve().parents[2] +# Задаёт compiler по выражению справа; значение используется последующими операциями. compiler = os.environ.get('CC') or shutil.which('gcc') or 'C:/msys64/mingw64/bin/gcc.exe' +# Задаёт os.environ['PATH'] по выражению справа; значение используется последующими операциями. os.environ['PATH'] = str(Path(compiler).resolve().parent) + os.pathsep + os.environ['PATH'] +# Открывает управляемый ресурс tempfile.TemporaryDirectory(prefix='load-control-') as tmp с автоматическим освобождением. with tempfile.TemporaryDirectory(prefix='load-control-') as tmp: + # Задаёт exe по выражению справа; значение используется последующими операциями. exe = Path(tmp) / 'test.exe' + # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. subprocess.run([compiler, '-Wall', '-Wextra', '-std=c99', + # Продолжает текущий вызов, список или выражение: '-Itests/load_control/stubs', '-ISource/Internal/Include',; порядок аргументов сохраняется. '-Itests/load_control/stubs', '-ISource/Internal/Include', + # Задаёт 'tests/load_control/load_control_test.c', '-o', str(exe)], cwd по выражению справа; значение используется последующими операциями. 'tests/load_control/load_control_test.c', '-o', str(exe)], cwd=root, check=True) + # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. subprocess.run([str(exe)], check=True, timeout=10) diff --git a/tests/load_control/stubs/DSP2833x_Device.h b/tests/load_control/stubs/DSP2833x_Device.h index 2807eba..cb903ee 100644 --- a/tests/load_control/stubs/DSP2833x_Device.h +++ b/tests/load_control/stubs/DSP2833x_Device.h @@ -1,9 +1,19 @@ +/* Проверка load_control/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Начинает условие: TEST_DEVICE_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef TEST_DEVICE_H +/* Определяет защитный символ или переключатель TEST_DEVICE_H для последующей компиляции. */ #define TEST_DEVICE_H +/* Описывает структуру bits; порядок полей определяет расположение данных. */ struct bits { unsigned int GPIO59, GPIO60, GPIO63; }; +/* Описывает структуру reg; порядок полей определяет расположение данных. */ struct reg { struct bits bit; }; +/* Продолжает список аргументов, полей или выражение static struct { struct reg GPBSET, GPBCLEAR; } GpioDataRegs;; порядок элементов сохраняется. */ static struct { struct reg GPBSET, GPBCLEAR; } GpioDataRegs; +/* Начинает функцию __disable_interrupts; назначение модуля — проверка load_control/stubs на модели ПК. */ static unsigned int __disable_interrupts(void) { return 0; } +/* Начинает функцию __restore_interrupts; назначение модуля — проверка load_control/stubs на модели ПК. */ static void __restore_interrupts(unsigned int saved) { (void)saved; } +/* Начинает функцию DSP28x_usDelay; назначение модуля — проверка load_control/stubs на модели ПК. */ static void DSP28x_usDelay(unsigned long n) { (void)n; } +/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif diff --git a/tests/load_control/stubs/DSP2833x_SWPrioritizedIsrLevels.h b/tests/load_control/stubs/DSP2833x_SWPrioritizedIsrLevels.h index 1fd1a88..f978ab2 100644 --- a/tests/load_control/stubs/DSP2833x_SWPrioritizedIsrLevels.h +++ b/tests/load_control/stubs/DSP2833x_SWPrioritizedIsrLevels.h @@ -1 +1,2 @@ +/* Проверка load_control/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ /* No IRQ registers needed in the host test. */ diff --git a/tests/load_control/stubs/RS485.h b/tests/load_control/stubs/RS485.h index 570fb8d..bc7aa53 100644 --- a/tests/load_control/stubs/RS485.h +++ b/tests/load_control/stubs/RS485.h @@ -1 +1,2 @@ +/* Проверка load_control/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ /* No serial dependencies in the host test. */ diff --git a/tests/load_control/stubs/filter_bat2.h b/tests/load_control/stubs/filter_bat2.h index 7cbd46b..5cfb910 100644 --- a/tests/load_control/stubs/filter_bat2.h +++ b/tests/load_control/stubs/filter_bat2.h @@ -1 +1,2 @@ +/* Проверка load_control/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ /* No filter dependencies in the host test. */ diff --git a/tests/load_control/stubs/measure.h b/tests/load_control/stubs/measure.h index f76a6e2..b68b6fd 100644 --- a/tests/load_control/stubs/measure.h +++ b/tests/load_control/stubs/measure.h @@ -1,4 +1,9 @@ +/* Проверка load_control/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Задаёт READY_FREQ = 1000; частота основного такта Timer1 в герцах. */ #define READY_FREQ 1000 +/* Задаёт DAC_FREQ = 200; частота обновления тока ЦАП в герцах. */ #define DAC_FREQ 200 +/* Задаёт LOAD_TIME = 30; время нарастания тока нагрузки в секундах. */ #define LOAD_TIME 30 +/* Объявляет READY — данные READY. Память определена в другом модуле. */ extern int READY; diff --git a/tests/load_control/stubs/message.h b/tests/load_control/stubs/message.h index 8a4d817..1baca7c 100644 --- a/tests/load_control/stubs/message.h +++ b/tests/load_control/stubs/message.h @@ -1 +1,3 @@ +/* Проверка load_control/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Объявляет modbus — массив технологических регистров; слово int на C28x занимает 16 бит. Память определена в другом модуле. */ extern int modbus[128]; diff --git a/tests/load_control/stubs/package.h b/tests/load_control/stubs/package.h index f35b080..987f908 100644 --- a/tests/load_control/stubs/package.h +++ b/tests/load_control/stubs/package.h @@ -1,17 +1,35 @@ +/* Проверка load_control/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Задаёт dsk_LOAD = 6; код платы нагрузки. */ #define dsk_LOAD 6 +/* Задаёт adr_LOA1 = 5; данные adr_LOA1. */ #define adr_LOA1 5 +/* Задаёт adr_LOA2 = 6; данные adr_LOA2. */ #define adr_LOA2 6 +/* Задаёт Commands = modbus[127]; слово команд, технологический регистр 127. */ #define Commands modbus[127] +/* Задаёт cUMPstart = (Commands & 0x80); данные cUMPstart. */ #define cUMPstart (Commands & 0x80) +/* Задаёт cUMPreset = (Commands & 0x40); данные cUMPreset. */ #define cUMPreset (Commands & 0x40) +/* Объявляет test_init_dac — test init ЦАП. Память определена в другом модуле. */ extern unsigned int test_init_dac; +/* Задаёт cInitDac = test_init_dac; c Init ЦАП. */ #define cInitDac test_init_dac +/* Задаёт cCalibrDac = (Commands & 0x200); c Calibr ЦАП. */ #define cCalibrDac (Commands & 0x200) +/* Задаёт DAC_go = modbus[0x50]; начальный ток нагрузки в мА, технологический регистр 0x50. */ #define DAC_go modbus[0x50] +/* Задаёт DAC_stop = modbus[0x51]; конечный ток нагрузки в мА, технологический регистр 0x51. */ #define DAC_stop modbus[0x51] +/* Задаёт 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] +/* Задаёт DAC_min = modbus[0x79]; ЦАП min. */ #define DAC_min() modbus[0x79] +/* Задаёт DAC_max = modbus[0x78]; ЦАП max. */ #define DAC_max() modbus[0x78] +/* Задаёт DAC_cal = modbus[0x7A]; ЦАП cal. */ #define DAC_cal() modbus[0x7A] diff --git a/tests/load_control/stubs/peripher.h b/tests/load_control/stubs/peripher.h index d9d0e3f..460f27a 100644 --- a/tests/load_control/stubs/peripher.h +++ b/tests/load_control/stubs/peripher.h @@ -1,14 +1,29 @@ +/* Проверка load_control/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Объявляет Desk — аппаратно определённый тип платы; Mode — рабочий адрес или режим платы, выбранный перемычками. Память определена в другом модуле. */ extern int Desk, Mode; +/* Объявляет test_start — данные test_start; test_stop — данные test_stop; test_permission — данные test_permission; test_tick — данные test_tick. Память определена в другом модуле. */ extern unsigned int test_start, test_stop, test_permission, test_tick; +/* Объявляет test_starts — данные test_starts; test_last_stop_tick — данные test_last_stop_tick; test_last_start_tick — данные test_last_start_tick. Память определена в другом модуле. */ extern unsigned int test_starts, test_last_stop_tick, test_last_start_tick; +/* Объявляет test_bad_order — данные test_bad_order. Память определена в другом модуле. */ extern int test_bad_order; +/* Начинает функцию clear_START_DPTB; назначение модуля — проверка load_control/stubs на модели ПК. */ static void clear_START_DPTB(void) { test_start = 0; } +/* Начинает функцию set_START_DPTB; назначение модуля — проверка load_control/stubs на модели ПК. */ static void set_START_DPTB(void) { + /* Проверяет if (test_stop или (test_starts и test_tick-test_last_stop_tick < 1000)) test_bad_order = 1; последующий оператор выполняется только при истинном условии. */ if (test_stop || (test_starts && test_tick-test_last_stop_tick < 1000)) test_bad_order = 1; + /* Записывает test_start значением 1; test_last_start_tick = test_tick; test_starts++; данные test_start. */ test_start = 1; test_last_start_tick = test_tick; test_starts++; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию set_STOP_DPTB; назначение модуля — проверка load_control/stubs на модели ПК. */ static void set_STOP_DPTB(void) { test_stop = 1; test_last_stop_tick = test_tick; } +/* Начинает функцию clear_STOP_DPTB; назначение модуля — проверка load_control/stubs на модели ПК. */ static void clear_STOP_DPTB(void) { test_stop = 0; } +/* Начинает функцию clear_RES_OUT_2; назначение модуля — проверка load_control/stubs на модели ПК. */ static void clear_RES_OUT_2(void) { test_permission = 0; } +/* Начинает функцию set_RES_OUT_2; назначение модуля — проверка load_control/stubs на модели ПК. */ static void set_RES_OUT_2(void) { if (!test_start || test_stop) test_bad_order = 1; test_permission = 1; } +/* Начинает функцию toggle_RES_OUT_1; назначение модуля — проверка load_control/stubs на модели ПК. */ static void toggle_RES_OUT_1(void) {} diff --git a/tests/load_control/stubs/tools.h b/tests/load_control/stubs/tools.h index 0309add..7111716 100644 --- a/tests/load_control/stubs/tools.h +++ b/tests/load_control/stubs/tools.h @@ -1 +1,2 @@ +/* Проверка load_control/stubs на модели ПК. Русские пояснения сохранены в UTF-8. */ /* Delay provided by the device stub. */ diff --git a/tests/rs232_fifo/model.inc b/tests/rs232_fifo/model.inc index f12fe42..7ff54aa 100644 --- a/tests/rs232_fifo/model.inc +++ b/tests/rs232_fifo/model.inc @@ -1,118 +1,229 @@ +/* Проверка rs232_fifo на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Продолжает список аргументов, полей или выражение volatile struct SCI_REGS SciaRegs,ScibRegs;; порядок элементов сохраняется. */ volatile struct SCI_REGS SciaRegs,ScibRegs; +/* Описывает структуру ; порядок полей определяет расположение данных. */ struct { struct { struct { unsigned ACK9; } bit; } PIEACK; } PieCtrlRegs; +/* Описывает структуру ; порядок полей определяет расположение данных. */ struct { struct { struct { unsigned GPIO34; } bit; } GPBDAT; } GpioDataRegs; +/* Объявляет rs_a — данные rs_a; rs_b — данные rs_b. */ RS_DATA rs_a,rs_b; +/* Объявляет RS_Len — таблица ожидаемых длин команд последовательного протокола; irq — данные irq. */ unsigned int RS_Len[70],irq; +/* Объявляет load_memory — данные load_memory. */ static unsigned int load_memory[4100]; +/* Начинает функцию __disable_interrupts; назначение модуля — проверка rs232_fifo на модели ПК. */ static unsigned int __disable_interrupts(void) { unsigned old=irq;irq=1;return old; } +/* Начинает функцию __restore_interrupts; назначение модуля — проверка rs232_fifo на модели ПК. */ static void __restore_interrupts(unsigned state) { irq=state; } +/* Начинает функцию RS_SetLineMode; назначение модуля — проверка rs232_fifo на модели ПК. */ void RS_SetLineMode(RS_DATA *p,int bits,char parity,int stop) +/* Продолжает список аргументов, полей или выражение { (void)p;(void)bits;(void)parity;(void)stop; }; порядок элементов сохраняется. */ { (void)p;(void)bits;(void)parity;(void)stop; } +/* Объявляет length — длина; wire_count — wire число. */ static unsigned int queue[2][16],length[2],wire[2][20000],wire_count[2]; +/* Объявляет rx_count — rx число; rx_pos — данные rx_pos; shift_pending — данные shift_pending; shift_checks — данные shift_checks. */ static unsigned int rx[2][16],rx_count[2],rx_pos[2],shift_pending[2],shift_checks; +/* Начинает функцию port; назначение модуля — проверка rs232_fifo на модели ПК. */ static unsigned int port(RS_DATA *p) {return p->commnumber-1;} +/* Начинает функцию model_interrupts; назначение модуля — проверка rs232_fifo на модели ПК. */ static void model_interrupts(RS_DATA *p,unsigned tx) +/* Записывает p->SciRegs->SCICTL2.bit.TXINTENA значением tx;p->SciRegs->SCICTL2.bit.RXBKINTENA=!tx; }; данные TXINTENA. */ { p->SciRegs->SCICTL2.bit.TXINTENA=tx;p->SciRegs->SCICTL2.bit.RXBKINTENA=!tx; } +/* Начинает функцию model_flush; назначение модуля — проверка rs232_fifo на модели ПК. */ static void model_flush(RS_DATA *p) +/* Записывает i значением port(p);rx_count[i]=rx_pos[i]=0;p->SciRegs->SCIFFRX.bit.RXFFST=0;p->SciRegs->SCIFFRX.bit.RXFFOVF=0; }; данные i. */ { unsigned i=port(p);rx_count[i]=rx_pos[i]=0;p->SciRegs->SCIFFRX.bit.RXFFST=0;p->SciRegs->SCIFFRX.bit.RXFFOVF=0; } +/* Начинает функцию model_pop; назначение модуля — проверка rs232_fifo на модели ПК. */ static unsigned int model_pop(RS_DATA *p) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает i значением port(p),v;assert(rx_pos[i]SciRegs->SCIFFRX.bit.RXFFST значением rx_count[i]-rx_pos[i]; данные RXFFST. */ p->SciRegs->SCIFFRX.bit.RXFFST=rx_count[i]-rx_pos[i]; + /* Записывает p->SciRegs->SCIRXST.bit.RXRDY значением rx_pos[i]SciRegs->SCIRXST.bit.RXRDY=rx_pos[i]SciRegs->SCIFFTX.bit.TXFFST=length[i]; последующий оператор выполняется только при истинном условии. */ if(i==0)p->SciRegs->SCIFFTX.bit.TXFFST=length[i]; + /* Записывает p->SciRegs->SCICTL2.bit.TXEMPTY значением 0; данные TXEMPTY. */ p->SciRegs->SCICTL2.bit.TXEMPTY=0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию model_shift; назначение модуля — проверка rs232_fifo на модели ПК. */ static void model_shift(RS_DATA *p) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает i значением port(p);assert(length[i]==0); данные i. */ unsigned i=port(p);assert(length[i]==0); - if(i==0)assert(p->fifo_tx_active); /* last symbol cannot finish early */ + if(i==0)assert(p->fifo_tx_active); /* last symbol cannot finish early */ /* Проверяет if(i==0)assert(p->fifo_tx_active); последующий оператор выполняется только при истинном условии. */ + /* Записывает shift_pending[i] значением 0;p->SciRegs->SCICTL2.bit.TXEMPTY=1;shift_checks++; данные shift_pending. */ shift_pending[i]=0;p->SciRegs->SCICTL2.bit.TXEMPTY=1;shift_checks++; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию model_step; назначение модуля — проверка rs232_fifo на модели ПК. */ static void model_step(RS_DATA *p) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает i значением port(p),j; данные i. */ unsigned i=port(p),j; + /* Проверяет if(length[i]); последующий оператор выполняется только при истинном условии. */ if(length[i]) { + /* Изменяет счётчик в выражении wire[i][wire_count[i]++]=queue[i][0]; на один для следующего шага. */ wire[i][wire_count[i]++]=queue[i][0]; + /* Цикл for(j=1;jSciRegs->SCIFFTX.bit.TXFFST=length[i]; последующий оператор выполняется только при истинном условии. */ if(i==0)p->SciRegs->SCIFFTX.bit.TXFFST=length[i]; + /* Проверяет else if(shift_pending[i]) model_shift(p); последующий оператор выполняется только при истинном условии. */ } else if(shift_pending[i]) model_shift(p); + /* Проверяет if(i==0 и p->SciRegs->SCIFFTX.bit.TXFFIENA и; последующий оператор выполняется только при истинном условии. */ if(i==0 && p->SciRegs->SCIFFTX.bit.TXFFIENA && + /* Продолжает список аргументов, полей или выражение length[i]<=p->SciRegs->SCIFFTX.bit.TXFFIL) RS_TX_Handler(p);; порядок элементов сохраняется. */ length[i]<=p->SciRegs->SCIFFTX.bit.TXFFIL) RS_TX_Handler(p); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию reset; назначение модуля — проверка rs232_fifo на модели ПК. */ static void reset(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Вызывает memset с аргументами (&rs_a,0,sizeof(rs_a));memset(&rs_b,0,sizeof(rs_b)) в текущей последовательности операций. */ memset(&rs_a,0,sizeof(rs_a));memset(&rs_b,0,sizeof(rs_b)); + /* Вызывает memset с аргументами ((void *)&SciaRegs,0,sizeof(SciaRegs));memset((void *)&ScibRegs,0,sizeof(ScibRegs)) в текущей последовательности операций. */ memset((void *)&SciaRegs,0,sizeof(SciaRegs));memset((void *)&ScibRegs,0,sizeof(ScibRegs)); + /* Вызывает memset с аргументами (length,0,sizeof(length));memset(wire_count,0,sizeof(wire_count)) в текущей последовательности операций. */ memset(length,0,sizeof(length));memset(wire_count,0,sizeof(wire_count)); + /* Вызывает memset с аргументами (rx_count,0,sizeof(rx_count));memset(rx_pos,0,sizeof(rx_pos)) в текущей последовательности операций. */ memset(rx_count,0,sizeof(rx_count));memset(rx_pos,0,sizeof(rx_pos)); + /* Вызывает memset с аргументами (shift_pending,0,sizeof(shift_pending)) в текущей последовательности операций. */ memset(shift_pending,0,sizeof(shift_pending)); + /* Записывает rs_a.commnumber значением 1;rs_b.commnumber=2;rs_a.SciRegs=&SciaRegs;rs_b.SciRegs=&ScibRegs; данные commnumber. */ rs_a.commnumber=1;rs_b.commnumber=2;rs_a.SciRegs=&SciaRegs;rs_b.SciRegs=&ScibRegs; + /* Записывает SciaRegs.SCICTL2.bit.TXEMPTY значением ScibRegs.SCICTL2.bit.TXEMPTY=1; данные TXEMPTY. */ SciaRegs.SCICTL2.bit.TXEMPTY=ScibRegs.SCICTL2.bit.TXEMPTY=1; + /* Записывает rs_a.RS_Flag9bit значением rs_b.RS_Flag9bit=1; RS флаг 9 бит. */ rs_a.RS_Flag9bit=rs_b.RS_Flag9bit=1; + /* Записывает RS_Len[3] значением 8;RS_Len[6]=8;RS_Len[16]=13;RS_Len[51]=12; таблица ожидаемых длин команд последовательного протокола. */ RS_Len[3]=8;RS_Len[6]=8;RS_Len[16]=13;RS_Len[51]=12; + /* Записывает GpioDataRegs.GPBDAT.bit.GPIO34 значением 1;irq=0; аппаратная линия ввода/вывода GPIO34. */ GpioDataRegs.GPBDAT.bit.GPIO34=1;irq=0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } +/* Начинает функцию feed; назначение модуля — проверка rs232_fifo на модели ПК. */ static void feed(RS_DATA *p,const unsigned *bytes,unsigned n) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Записывает i значением port(p),j;assert(n<=16);rx_pos[i]=0;rx_count[i]=n; данные i. */ unsigned i=port(p),j;assert(n<=16);rx_pos[i]=0;rx_count[i]=n; + /* Цикл for(j=0;jSciRegs->SCIFFRX.bit.RXFFST значением n;p->SciRegs->SCIRXST.bit.RXRDY=n!=0; данные RXFFST. */ p->SciRegs->SCIFFRX.bit.RXFFST=n;p->SciRegs->SCIRXST.bit.RXRDY=n!=0; + /* Вызывает RS_RX_Handler. Разбирает приём SCI; для COM_1 читает FIFO и проверяет ошибки, для COM_2 сохраняет штатный обмен RS485. */ RS_RX_Handler(p); +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } /* HANDLERS */ +/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */ int main(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Продолжает список аргументов, полей или выражение unsigned data[4200],sizes[]={0,1,2,7,8,15,16,17,31,120,253,400,8194};; порядок элементов сохраняется. */ unsigned data[4200],sizes[]={0,1,2,7,8,15,16,17,31,120,253,400,8194}; + /* Продолжает список аргументов, полей или выражение unsigned a,n,i,mode;unsigned request[]={16,3,0x10,0,0,16,0,0};; порядок элементов сохраняется. */ unsigned a,n,i,mode;unsigned request[]={16,3,0x10,0,0,16,0,0}; + /* Цикл for(mode=0;mode<2;mode++)for(a=0;a4200)continue; последующий оператор выполняется только при истинном условии. */ if(mode==0 && n>4200)continue; + /* Вызывает assert с аргументами ((mode ? RS_BSend(&rs_a,data,n):RS_Send(&rs_a,data,n))==0) в текущей последовательности операций. */ assert((mode ? RS_BSend(&rs_a,data,n):RS_Send(&rs_a,data,n))==0); + /* Проверяет if(n и rs_a.fifo_tx_active)assert(rs_a.RS_Flag9bit==0); последующий оператор выполняется только при истинном условии. */ if(n && rs_a.fifo_tx_active)assert(rs_a.RS_Flag9bit==0); + /* Вызывает RS_FifoWait. Ожидает завершения аппаратной передачи FIFO и сдвигового регистра SCI. */ RS_FifoWait(&rs_a);assert(!rs_a.fifo_tx_active && wire_count[0]==n); + /* Цикл for(i=0;i0) в текущей последовательности операций. */ assert(shift_checks>0); + /* Вызывает reset с аргументами ();feed(&rs_a,request,8);assert(rs_a.RS_DataReady && rs_a.RS_HeaderCnt==8) в текущей последовательности операций. */ reset();feed(&rs_a,request,8);assert(rs_a.RS_DataReady && rs_a.RS_HeaderCnt==8); + /* Вызывает reset с аргументами ();feed(&rs_a,request,3);feed(&rs_a,request+3,5);assert(rs_a.RS_DataReady) в текущей последовательности операций. */ reset();feed(&rs_a,request,3);feed(&rs_a,request+3,5);assert(rs_a.RS_DataReady); /* LOAD payload, including a short final chunk: nothing waits for byte 8. */ + /* Записывает rs_a.RS_PrevCmd значением CMD_INITLOAD;rs_a.RS_Length=8194; данные RS_PrevCmd. */ reset();rs_a.RS_PrevCmd=CMD_INITLOAD;rs_a.RS_Length=8194; + /* Записывает rs_a.pRS_RecvPtr значением rs_a.pRecvPtr=load_memory; данные pRS_RecvPtr. */ rs_a.pRS_RecvPtr=rs_a.pRecvPtr=load_memory; + /* Записывает data[0] значением 16;data[1]=CMD_LOAD;feed(&rs_a,data,2); данные. */ data[0]=16;data[1]=CMD_LOAD;feed(&rs_a,data,2); + /* Цикл for(a=0;a<8194;a+=n) ; задаёт начальное значение, условие продолжения и шаг перебора. */ for(a=0;a<8194;a+=n) { + /* Записывает n значением 8194-a;n=n<16?n:16; данные n. */ n=8194-a;n=n<16?n:16; + /* Цикл for(i=0;iSciRegs->SCIRXBUF.all;', 'received=model_pop(rs_arr);') +# Задаёт body по выражению справа; значение используется последующими операциями. body=body.replace('Rc = rs_arr->SciRegs->SCIRXBUF.bit.RXDT;', 'Rc=model_pop(rs_arr);') +# Задаёт body по выражению справа; значение используется последующими операциями. body=body.replace('rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=0;', + # Задаёт 'model_flush(rs_arr);rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET по выражению справа; значение используется последующими операциями. 'model_flush(rs_arr);rs_arr->SciRegs->SCIFFRX.bit.RXFIFORESET=0;') +# Задаёт body по выражению справа; значение используется последующими операциями. body=body.replace('rs_arr->SciRegs->SCICTL1.bit.SWRESET=1;', + # Задаёт 'rs_arr->SciRegs->SCIRXST.all по выражению справа; значение используется последующими операциями. 'rs_arr->SciRegs->SCIRXST.all=0;rs_arr->SciRegs->SCICTL1.bit.SWRESET=1;') +# Задаёт body по выражению справа; значение используется последующими операциями. body=body.replace('while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }', + # Продолжает текущий вызов, список или выражение: 'while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { model_step(rs_arr); }',1); порядок аргументов сохраняется. 'while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { model_step(rs_arr); }',1) +# Задаёт body по выражению справа; значение используется последующими операциями. body=body.replace('while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }', + # Продолжает текущий вызов, список или выражение: 'while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { model_shift(rs_arr); }'); порядок аргументов сохраняется. 'while (!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { model_shift(rs_arr); }') +# Задаёт body по выражению справа; значение используется последующими операциями. body=body.replace('!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { }', + # Продолжает текущий вызов, список или выражение: '!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { model_step(rs_arr); }'); порядок аргументов сохраняется. '!rs_arr->SciRegs->SCICTL2.bit.TXEMPTY) { model_step(rs_arr); }') +# Задаёт header по выражению справа; значение используется последующими операциями. header=read(root/'Source/Internal/Include/RS485.h') +# Задаёт header по выражению справа; значение используется последующими операциями. header=re.sub(r'#define SCI_send\(x,y\)[^\n]*', '#define SCI_send(x,y) model_push(x,y)',header) +# Задаёт header по выражению справа; значение используется последующими операциями. header=re.sub(r'#define enableUARTInt\(x\)[^\n]*', '#define enableUARTInt(x) model_interrupts(x,0)',header) +# Задаёт header по выражению справа; значение используется последующими операциями. header=re.sub(r'#define enableUARTIntW\(x\)[^\n]*', '#define enableUARTIntW(x) model_interrupts(x,1)',header) +# Задаёт header по выражению справа; значение используется последующими операциями. header=re.sub(r'#define Rec_Bloc_Begin[^\n]*', '#define Rec_Bloc_Begin ((uintptr_t)load_memory)',header) +# Задаёт header по выражению справа; значение используется последующими операциями. header=re.sub(r'#define Rec_Bloc_End[^\n]*', '#define Rec_Bloc_End ((uintptr_t)(load_memory+4100))',header) +# Задаёт registers по выражению справа; значение используется последующими операциями. registers=read(root/'Source/External/v120/DSP2833x_headers/include/DSP2833x_Sci.h') +# Задаёт defines по выражению справа; значение используется последующими операциями. defines=''' #include #include @@ -62,12 +107,21 @@ typedef unsigned short Uint16; enum {CMD_MODBUS_3=3,ANS_MODBUS_4=4,CMD_MODBUS_6=6,CMD_MODBUS_16=16, CMD_LOAD=51,CMD_INITLOAD=58,CMD_STD_ANS=66}; ''' -harness=(Path(__file__).with_name('model.inc')).read_text() +# Читает исходный файл или образ для последующей проверки и разбора. +harness=(Path(__file__).with_name('model.inc')).read_text(encoding="utf-8") +# Задаёт before,after по выражению справа; значение используется последующими операциями. before,after=harness.split('/* HANDLERS */') +# Задаёт parser по выражению справа; значение используется последующими операциями. parser=argparse.ArgumentParser();parser.add_argument('--cc',required=True);args=parser.parse_args() +# Задаёт env по выражению справа; значение используется последующими операциями. env=dict(os.environ);env['PATH']=str(Path(args.cc).parent)+os.pathsep+env.get('PATH','') +# Открывает управляемый ресурс tempfile.TemporaryDirectory(prefix='pm35-fifo-') as directory с автоматическим освобождением. with tempfile.TemporaryDirectory(prefix='pm35-fifo-') as directory: + # Задаёт path по выражению справа; значение используется последующими операциями. path=Path(directory);c=path/'model.c';exe=path/'model.exe' - c.write_text(defines+registers+header+'\n'.join(prototypes)+before+body+after) + # Сохраняет подготовленный файл в указанном формате для следующего шага. + c.write_text(defines+registers+header+'\n'.join(prototypes)+before+body+after, encoding="utf-8") + # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. subprocess.run([args.cc,'-std=c99','-O1','-Werror=implicit-function-declaration',str(c),'-o',str(exe)],check=True,env=env) + # Запускает внешний компилятор, генератор или тест; ненулевой результат проверяется параметрами вызова. subprocess.run([str(exe)],check=True,env=env,timeout=20) diff --git a/tests/ump_logger/init_test.c b/tests/ump_logger/init_test.c index 21d47c9..b7af4e2 100644 --- a/tests/ump_logger/init_test.c +++ b/tests/ump_logger/init_test.c @@ -1,56 +1,109 @@ +/* Проверка ump_logger на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Подключает "../../Source/Internal/log_to_mem.c": двухбанковый регистратор событий нагрузки во внешней RAM. */ #include "../../Source/Internal/log_to_mem.c" +/* Описывает структуру mock_gpio GpioDataRegs;; порядок полей определяет расположение данных. */ struct mock_gpio GpioDataRegs; +/* Объявляет READY — данные READY; Desk — аппаратно определённый тип платы; Mode — рабочий адрес или режим платы, выбранный перемычками. Начальное значение задаётся справа от знака равенства. */ int READY = 1, Desk = 6, Mode = 5; +/* Объявляет modbus — массив технологических регистров; слово int на C28x занимает 16 бит; CanTimeOutErrorTR — CAN Time Out ошибка TR. */ int modbus[128], CanTimeOutErrorTR; +/* Объявляет IMPowse — данные IMPowse; WAKEpowse — данные WAKEpowse. */ unsigned long IMPowse, WAKEpowse; +/* Объявляет ADC_table — АЦП table. */ unsigned int ADC_table[4]; +/* Задаёт CHECK = if (!(x)) return __LINE__; данные CHECK. */ #define CHECK(x) if (!(x)) return __LINE__ +/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */ int main(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i. */ unsigned int i; /* Simulate COFF boot with dirty RAM, including a stale active bank. */ + /* Записывает ump_state значением ump_count = ump_cursor = ump_next = 0xA5A5; данные ump_state. */ ump_state = ump_count = ump_cursor = ump_next = 0xA5A5; + /* Записывает ump_period значением ump_divider = 0xA5A5; период записи регистратора в миллисекундных тактах. */ ump_period = ump_divider = 0xA5A5; + /* Записывает ump_time значением ump_sequence = 0xA5A5A5A5UL; миллисекундное время регистратора. */ ump_time = ump_sequence = 0xA5A5A5A5UL; + /* Записывает ump_bank значением ump_archive_bank = 0xA5A5; индекс активного банка регистратора. */ ump_bank = ump_archive_bank = 0xA5A5; + /* Записывает ump_archive_count значением ump_archive_next = ump_generation = 0xA5A5; ump archive число. */ ump_archive_count = ump_archive_next = ump_generation = 0xA5A5; + /* Записывает ump_source значением ump_post = 0xA5A5; данные ump_source. */ ump_source = ump_post = 0xA5A5; + /* Записывает ump_can_header значением ump_can_count = 0xA5A5; ump CAN header. */ ump_can_header = ump_can_count = 0xA5A5; + /* Цикл for (i = 0; i < 3; i++) ump_can_data[i] = 0xA5A5;; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 3; i++) ump_can_data[i] = 0xA5A5; + /* Цикл for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0xA5A5;; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 2; i++) ump_pm67_voltage[i] = 0xA5A5; + /* Записывает ump_prev_commands значением ump_prev_inputs = ump_prev_outputs = 0xA5A5; данные ump_prev_commands. */ ump_prev_commands = ump_prev_inputs = ump_prev_outputs = 0xA5A5; + /* Записывает ump_dac_ramp значением ump_dac_duration = ump_dac_go10 = 0xA5A5; ump ЦАП ramp. */ ump_dac_ramp = ump_dac_duration = ump_dac_go10 = 0xA5A5; + /* Записывает ump_dac_stop10 значением ump_dac_position = 0xA5A5; ump ЦАП stop 10. */ ump_dac_stop10 = ump_dac_position = 0xA5A5; + /* Вызывает ump_log_init. Явно инициализирует оба банка регистратора до включения IRQ; повторный старт записи архив не стирает. */ ump_log_init(); + /* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE) == 0x554D) в текущей последовательности операций. */ CHECK(ump_log_read(UMP_LOG_BASE) == 0x554D); + /* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+1) == 3) в текущей последовательности операций. */ CHECK(ump_log_read(UMP_LOG_BASE+1) == 3); + /* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+2) == 0) в текущей последовательности операций. */ CHECK(ump_log_read(UMP_LOG_BASE+2) == 0); + /* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+3) == 0) в текущей последовательности операций. */ CHECK(ump_log_read(UMP_LOG_BASE+3) == 0); + /* Вызывает CHECK с аргументами (ump_log_read(UMP_LOG_BASE+6) == 20) в текущей последовательности операций. */ CHECK(ump_log_read(UMP_LOG_BASE+6) == 20); + /* Цикл for (i = 7; i <= 8; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 7; i <= 8; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0); + /* Цикл for (i = 12; i <= 15; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 12; i <= 15; i++) CHECK(ump_log_read(UMP_LOG_BASE+i) == 0); + /* Вызывает CHECK с аргументами (ump_bank == 0 && ump_archive_bank == 1) в текущей последовательности операций. */ CHECK(ump_bank == 0 && ump_archive_bank == 1); + /* Вызывает CHECK с аргументами (ump_cursor == 0 && ump_next == 0 && ump_archive_next == 0) в текущей последовательности операций. */ CHECK(ump_cursor == 0 && ump_next == 0 && ump_archive_next == 0); + /* Вызывает CHECK с аргументами (ump_divider == 0 && ump_sequence == 0 && ump_post == 0) в текущей последовательности операций. */ CHECK(ump_divider == 0 && ump_sequence == 0 && ump_post == 0); + /* Вызывает CHECK с аргументами (ump_can_header == 0 && ump_can_count == 0) в текущей последовательности операций. */ CHECK(ump_can_header == 0 && ump_can_count == 0); + /* Цикл for (i = 0; i < 3; i++) CHECK(ump_can_data[i] == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 3; i++) CHECK(ump_can_data[i] == 0); + /* Цикл for (i = 0; i < 2; i++) CHECK(ump_pm67_voltage[i] == 0);; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i = 0; i < 2; i++) CHECK(ump_pm67_voltage[i] == 0); + /* Вызывает CHECK с аргументами (ump_prev_commands == 0 && ump_prev_inputs == 0 && ump_prev_outputs == 0) в текущей последовательности операций. */ CHECK(ump_prev_commands == 0 && ump_prev_inputs == 0 && ump_prev_outputs == 0); + /* Вызывает CHECK с аргументами (ump_dac_ramp == 0 && ump_dac_duration == 0 && ump_dac_go10 == 0) в текущей последовательности операций. */ CHECK(ump_dac_ramp == 0 && ump_dac_duration == 0 && ump_dac_go10 == 0); + /* Вызывает CHECK с аргументами (ump_dac_stop10 == 0 && ump_dac_position == 0) в текущей последовательности операций. */ CHECK(ump_dac_stop10 == 0 && ump_dac_position == 0); + /* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE+1, 20)) в текущей последовательности операций. */ CHECK(ump_log_write(UMP_LOG_BASE+1, 20)); + /* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */ CHECK(ump_log_write(UMP_LOG_BASE, 1)); + /* Вызывает CHECK с аргументами (ump_state == 1 && ump_count == 1) в текущей последовательности операций. */ CHECK(ump_state == 1 && ump_count == 1); + /* Вызывает ump_log_tick. Продвигает время регистратора в Timer1 и снимает записи с заданным периодом. */ ump_log_tick(); + /* Вызывает CHECK с аргументами (ump_time == 1) в текущей последовательности операций. */ CHECK(ump_time == 1); + /* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 0)) в текущей последовательности операций. */ CHECK(ump_log_write(UMP_LOG_BASE, 0)); + /* Записывает ump_archive_count значением 7; ump_generation = 2; ump archive число. */ ump_archive_count = 7; ump_generation = 2; + /* Записывает ump_pm67_voltage[0] значением 123; данные ump_pm67_voltage. */ ump_pm67_voltage[0] = 123; + /* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */ CHECK(ump_log_write(UMP_LOG_BASE, 1)); + /* Вызывает CHECK с аргументами (ump_time == 1 && ump_archive_count == 7 && ump_generation == 2) в текущей последовательности операций. */ CHECK(ump_time == 1 && ump_archive_count == 7 && ump_generation == 2); + /* Вызывает CHECK с аргументами (ump_word(0, 0, 40) == 123) в текущей последовательности операций. */ CHECK(ump_word(0, 0, 40) == 123); + /* Завершает main и возвращает 0. */ return 0; +/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */ } diff --git a/tests/ump_logger/recorder_test.c b/tests/ump_logger/recorder_test.c index 03efb2c..bb78315 100644 --- a/tests/ump_logger/recorder_test.c +++ b/tests/ump_logger/recorder_test.c @@ -1,163 +1,311 @@ +/* Проверка ump_logger на модели ПК. Русские пояснения сохранены в UTF-8. */ +/* Подключает "../../Source/Internal/log_to_mem.c": двухбанковый регистратор событий нагрузки во внешней RAM. */ #include "../../Source/Internal/log_to_mem.c" +/* Подключает "../../Source/Internal/Include/ump_can_protocol.h": настройки и интерфейс ump_can_protocol. */ #include "../../Source/Internal/Include/ump_can_protocol.h" +/* Описывает структуру mock_gpio GpioDataRegs;; порядок полей определяет расположение данных. */ struct mock_gpio GpioDataRegs; +/* Объявляет READY — данные READY; Desk — аппаратно определённый тип платы; Mode — рабочий адрес или режим платы, выбранный перемычками. Начальное значение задаётся справа от знака равенства. */ int READY = 1, Desk = 6, Mode = 5; +/* Объявляет modbus — массив технологических регистров; слово int на C28x занимает 16 бит. */ int modbus[128]; +/* Объявляет CanTimeOutErrorTR — CAN Time Out ошибка TR. */ int CanTimeOutErrorTR; +/* Объявляет IMPowse — данные IMPowse; WAKEpowse — данные WAKEpowse. */ unsigned long IMPowse, WAKEpowse; +/* Объявляет ADC_table — АЦП table. */ unsigned int ADC_table[4]; +/* Задаёт CHECK = if (!(x)) return __LINE__; данные CHECK. */ #define CHECK(x) if (!(x)) return __LINE__ /* Возвращаем номер строки при ошибке, ноль при успехе; CRT не требуется. */ +/* Вызывает __declspec с аргументами (dllexport) int run_tests(void) в текущей последовательности операций. */ __declspec(dllexport) int run_tests(void) +/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { + /* Объявляет i — данные i; generation — данные generation; archived — данные archived; error — ошибка; length — длина. */ unsigned int i, generation, archived, error, length; + /* Объявляет reply — данные reply. */ uint16_t reply[UMP_CAN_MAX_WORDS]; + /* Объявляет sequence — последовательность. */ unsigned long sequence; + /* Вызывает ump_log_init. Явно инициализирует оба банка регистратора до включения IRQ; повторный старт записи архив не стирает. */ ump_log_init(); + /* Вызывает CHECK с аргументами (!ump_log_write(UMP_LOG_BASE+1, 0)) в текущей последовательности операций. */ CHECK(!ump_log_write(UMP_LOG_BASE+1, 0)); + /* Вызывает CHECK с аргументами (!ump_log_write(UMP_LOG_BASE+1, 1001)) в текущей последовательности операций. */ CHECK(!ump_log_write(UMP_LOG_BASE+1, 1001)); + /* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE+1, 1)) в текущей последовательности операций. */ CHECK(ump_log_write(UMP_LOG_BASE+1, 1)); + /* Записывает modbus[127] значением 0x80; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[127] = 0x80; + /* Записывает modbus[0x50] значением 6; modbus[0x51] = 16; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[0x50] = 6; modbus[0x51] = 16; + /* Записывает modbus[0x7B] значением 1234; modbus[0x1C] = 160; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[0x7B] = 1234; modbus[0x1C] = 160; /* PM67 reception is independent of recording; all three CAN slots work. */ + /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */ ump_log_can(0x8000U | 305U, 0xFEDCU, 0, 0); + /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */ ump_log_can(0x4000U | 7U, 0, 456, 0); + /* Вызывает CHECK с аргументами (ump_pm67_voltage[0] == 0xFEDCU && ump_pm67_voltage[1] == 456) в текущей последовательности операций. */ CHECK(ump_pm67_voltage[0] == 0xFEDCU && ump_pm67_voltage[1] == 456); - ump_log_can(305U, 1, 2, 3); /* Masked-out word must not overwrite. */ + ump_log_can(305U, 1, 2, 3); /* Masked-out word must not overwrite. */ /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */ + /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */ ump_log_can(0x2000U | 303U, 0, 0, 123); + /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */ ump_log_can(0x2000U | 6U, 0, 0, 789); + /* Вызывает CHECK с аргументами (ump_pm67_voltage[0] == 123 && ump_pm67_voltage[1] == 789) в текущей последовательности операций. */ CHECK(ump_pm67_voltage[0] == 123 && ump_pm67_voltage[1] == 789); - ump_log_can(0x8000U | 306U, 999, 0, 0); /* Not a one-based CAN address. */ + ump_log_can(0x8000U | 306U, 999, 0, 0); /* Not a one-based CAN address. */ /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */ + /* Вызывает CHECK с аргументами (ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */ CHECK(ump_log_write(UMP_LOG_BASE, 1)); + /* Вызывает CHECK с аргументами (ump_word(0, 0, 40) == 123 && ump_word(0, 0, 41) == 789) в текущей последовательности операций. */ CHECK(ump_word(0, 0, 40) == 123 && ump_word(0, 0, 41) == 789); + /* Вызывает CHECK с аргументами (2UL * UMP_LOG_CAPACITY * UMP_LOG_WORDS <= LOG_PAGE_LEN) в текущей последовательности операций. */ CHECK(2UL * UMP_LOG_CAPACITY * UMP_LOG_WORDS <= LOG_PAGE_LEN); + /* Вызывает CHECK с аргументами (!ump_log_write(UMP_LOG_BASE, 1)) в текущей последовательности операций. */ CHECK(!ump_log_write(UMP_LOG_BASE, 1)); + /* Вызывает CHECK с аргументами (!ump_log_write(UMP_LOG_BASE+1, 20)) в текущей последовательности операций. */ CHECK(!ump_log_write(UMP_LOG_BASE+1, 20)); + /* Цикл for (i=0; i<900; i++) ump_log_tick();; задаёт начальное значение, условие продолжения и шаг перебора. */ for (i=0; i<900; i++) ump_log_tick(); + /* Вызывает CHECK с аргументами (ump_count == UMP_LOG_CAPACITY) в текущей последовательности операций. */ CHECK(ump_count == UMP_LOG_CAPACITY); + /* Вызывает CHECK с аргументами (ump_word(0, 0, 0) == 901-UMP_LOG_CAPACITY) в текущей последовательности операций. */ CHECK(ump_word(0, 0, 0) == 901-UMP_LOG_CAPACITY); + /* Вызывает CHECK с аргументами (ump_word(0, UMP_LOG_CAPACITY-1, 0) == 900) в текущей последовательности операций. */ CHECK(ump_word(0, UMP_LOG_CAPACITY-1, 0) == 900); + /* Вызывает CHECK с аргументами (ump_word(0, 0, 8) == 1234) в текущей последовательности операций. */ CHECK(ump_word(0, 0, 8) == 1234); + /* Вызывает CHECK с аргументами (ump_word(0, 0, 24) == 6) в текущей последовательности операций. */ CHECK(ump_word(0, 0, 24) == 6); /* Короткая CAN-команда должна остаться отдельным событием. */ + /* Записывает modbus[127] значением 0x40; массив технологических регистров; слово int на C28x занимает 16 бит. */ modbus[127] = 0x40; + /* Вызывает ump_log_can. Обновляет последние CAN-данные и напряжения для следующего снимка регистратора. */ ump_log_can(0x807F, 0x40, 0, 0); - CHECK(ump_post == 0); /* A command alone is not an output transition. */ + CHECK(ump_post == 0); /* A command alone is not an output transition. */ /* Вызывает CHECK с аргументами (ump_post == 0) в текущей последовательности операций. */ + /* Записывает GpioDataRegs.GPBDAT.bit.GPIO58 значением 1; аппаратная линия ввода/вывода GPIO58. */ GpioDataRegs.GPBDAT.bit.GPIO58 = 1; - ump_log_io(); /* STOP may be sampled before RES_OUT_2 is cleared. */ + ump_log_io(); /* STOP may be sampled before RES_OUT_2 is cleared. */ /* Вызывает ump_log_io. Обслуживает изменения дискретных входов и выходов из главного цикла. */ + /* Вызывает CHECK с аргументами (ump_post == 0) в текущей последовательности операций. */ CHECK(ump_post == 0); + /* Записывает GpioDataRegs.GPADAT.bit.GPIO3 значением 1; аппаратная линия ввода/вывода GPIO3. */ GpioDataRegs.GPADAT.bit.GPIO3 = 1; + /* Вызывает ump_log_io. Обслуживает изменения дискретных входов и выходов из главного цикла. */ ump_log_io(); + /* Вызывает CHECK с аргументами (ump_post == UMP_POST_POINTS) в текущей последовательности операций. */ CHECK(ump_post == UMP_POST_POINTS); + /* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 2) == 0x103) в текущей последовательности операций. */ CHECK(ump_word(0, ump_count-1, 2) == 0x103); + /* Вызывает CHECK с аргументами (ump_word(0, ump_count-1, 18) == 0x807F) в текущей последовательности операций. */ CHECK(ump_word(0, ump_count-1, 18) == 0x807F); + /* Цикл for (i=0; i