5.2 KiB
RS232 FIFO для ПМ35 / TMS320F28335
Ветка codex/pm35-uart-fifo. FIFO включён только SCI-A / COM_1 / RS232.
SCI-B / COM_2 / RS485 сохраняет прежние настройки и обработчики без FIFO.
Скорости портов не менялись: RS232 115200; RS485 — прежние 57600/115200.
Source/Internal/Include/RS485.h: RS232_USE_FIFO=1 по умолчанию.
Для сборки прежнего пути передачи определить RS232_USE_FIFO=0.
Работа
- TX заполняет до 16 байт, пополняет при остатке не более 8.
- После постановки последнего байта порог переключается на 0. Следующее
прерывание завершает передачу только после пустого FIFO и
TXEMPTY. Ожидание внутри завершающего ISR ограничено остатком последнего символа; передача всего FIFO внутри ISR не ожидается. - Первый блок ставится в FIFO до разрешения TX-прерывания, под короткой IRQ-блокировкой с восстановлением прежнего состояния.
- Убраны программные задержки перед передачей именно для SCI-A. Данные
BM_CHAR32и упакованный потокBM_PACKEDсохраняют прежний порядок байтов. Нулевая длина не обращается к указателю и не включает передатчик. - RX читает накопленные байты из FIFO. Порог 1 сохраняет немедленный приём
коротких команд и остатка блока.
SCIRXBUFчитается один раз вместе с FE/PE. - Ошибка/переполнение аннулирует пакет и
BS_LoadOK, очищает FIFO. После 3–4 мс тишины обработчик таймера 1 мс возвращает SCI-A к ожиданию адреса. Продолжающийся повреждённый поток продлевает ожидание. CMD_LOAD после ошибки требует нового CMD_INITLOAD. Расчёт паузы предназначен для 115200. - Счётчики отладчика:
rs_a.fifo_rx_errors,rs_a.fifo_overflows.
Это UART-оптимизация. Она не меняет команды/формат логгера УМП и не подключает экспериментальный GAS-логгер. Размеры блоков чтения УМП остаются прежними.
Проверка
python tests/rs232_fifo/run_test.py --cc C:/msys64/mingw64/bin/gcc.exe
Тест извлекает рабочие функции из RS485.c; заменяется только поведение
аппаратных регистров, ожидание продвижения UART и модель 16-битного char C28x.
Проверены TX-длины 0/1/2/7/8/15/16/17/31/120/253/400, упакованный блок 8194,
приём короткого/разделённого пакета и LOAD 8194, FIFO overflow, FE/PE,
восстановление после тишины, остаток сдвигового регистра и независимость SCI-B.
Полная сборка TI C2000 22.6.0.LTS:
./build_logger.ps1 -OptimizeForSize -Rs232Fifo 1 `
-OutputDirectory "$PWD/Bin/Rs232FifoTest" -ImageName PM35_167_rs232_fifo
./build_logger.ps1 -OptimizeForSize -Rs232Fifo 0 `
-OutputDirectory "$PWD/Bin/Rs232NoFifoTest" -ImageName PM35_167_rs232_no_fifo
| Образ | Размер | Запас до параметров EEPROM |
|---|---|---|
FIFO, -O2 --opt_for_speed=0 |
32158 байт | 350 байт |
| Без FIFO, те же параметры оптимизации | 31234 байта | 1274 байта |
Оба BIN прошли проверку структуры SCI8 и лимита 32508 байт существующим
check_firmware.ps1. Старые -O1 --opt_for_speed=3 с FIFO превышают лимит;
для этого варианта обязателен -OptimizeForSize. Проверка запрещает выпуск
слишком большого BIN и не даёт затронуть сохранённые параметры.
Оптимизация размера применяется ко всей сборке, поэтому временные
характеристики приложения нужно проверить на стенде.
На плату образы не загружены. Пока подтверждены сборка и тесты модели; ускорение чтения логгера и устойчивость физического RS232 не измерены. Для стенда сравнить одно и то же чтение архива на двух образах, проверить CMD_LOAD/UPLOAD и параллельный RS485. FIFO не увеличивает baud rate.