70 lines
5.2 KiB
Markdown
70 lines
5.2 KiB
Markdown
# 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-логгер. Размеры блоков чтения УМП остаются прежними.
|
|
|
|
## Проверка
|
|
|
|
```powershell
|
|
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:
|
|
|
|
```powershell
|
|
./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.
|