Перейти на компактные 12-словные записи v4 и сохранять 10 процентов банка после отключения. Добавить трёхсекундное ожидание роста ЗПТ и настраиваемый лимит пусков. Явно инициализировать состояние UART и гарантировать публикацию параметров EEPROM перед запуском Timer2. Сохранить воспроизводимые сборки, регрессионные проверки, документацию и обновлённые результаты сборки; исключить временные артефакты.
113 lines
11 KiB
Markdown
113 lines
11 KiB
Markdown
# Назначение исходников Бальзам-167
|
||
|
||
Все редактируемые исходники C/H, ASM, CMD и Python используют UTF-8 без BOM.
|
||
Русский текст найден рядом с каждой строкой исходников из Git-индекса, однако
|
||
часть пояснений шаблонная и требует содержательной доработки. Существующие уведомления 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 мс; заводское значение 2000 мс устанавливается Default_params.
|
||
Setup_DAC_time исправляет недопустимое сохранённое значение на 600 мс.
|
||
Load_runner дополнительно использует 600 мс для локальной страховки при
|
||
недопустимом значении. LOAD_STATUS=0x7C доступен только для чтения.
|
||
LOAD_MAX_ATTEMPTS=0x7D — сохраняемый лимит 1..65535 пусков, по умолчанию 5;
|
||
ноль при записи отклоняется. Текущий счётчик остаётся в слове 5 блока
|
||
FC03(0x1300, 8), а подготовка тактов ЦАП не обнуляет настроенный лимит.
|
||
|
||
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 и соседних шаблонах.
|