Исправить TESTLAMP, запуск CAN и расчёт фазных токов

Сохранить состояние TESTLAMP при кратких провалах входа и исключить повторный вход Timer1 во время передачи индикации.
Явно сбрасывать служебный обмен CAN при запуске и выбирать соседнюю фазу по локальному индексу канала АЦП.
Сохранить текущую последовательность DATA/CLK и проверочные варианты таймингов, добавить поведенческие тесты и обновить образ прошивки с картой памяти.
This commit is contained in:
2026-10-13 14:13:43 +03:00
parent fa20ed085b
commit 04a9d989fb
18 changed files with 1983 additions and 655 deletions
+28
View File
@@ -75,6 +75,31 @@ static unsigned int ump_can_waiting;
/* Объявляет ump_can_sent_at — время последней передачи фрагмента ответа CAN. */
static unsigned long ump_can_sent_at;
/* Сбрасывает служебный обмен до включения CAN: загрузка COFF не гарантирует обнуление неинициализированной RAM. */
static void ump_can_init(void)
/* Начинает сброс состояния; InitCan вызывается при запрещённых глобальных прерываниях. */
{
/* Убирает остаточный запрос, чтобы главный цикл не обрабатывал команду из RAM предыдущего запуска. */
ump_can_pending = 0;
/* Сбрасывает идентификатор и функцию запроса; действительные значения поступят из CANa_handler. */
ump_can_tag = 0;
/* Сбрасывает адрес запрошенного регистра до приёма новой команды. */
ump_can_address = 0;
/* Сбрасывает прежнее значение записи или число запрошенных слов. */
ump_can_value = 0;
/* Нулевая длина запрещает отправку старого буфера; новый запрос заполнит все доступные для передачи слова. */
ump_can_length = 0;
/* Начинает следующий подготовленный ответ с первого слова, исключая продолжение старого фрагмента. */
ump_can_index = 0;
/* Убирает прежний идентификатор ответа и код ошибки до подготовки новой команды. */
ump_can_reply_tag = 0;
/* Отменяет ожидание подтверждения старой передачи, которая после включения ещё не запускалась. */
ump_can_waiting = 0;
/* Сбрасывает отметку тайм-аута в тактах Timer1; новый фрагмент установит актуальное время отправки. */
ump_can_sent_at = 0;
/* Завершает сброс управляющих полей; содержимое буфера недоступно при нулевой длине ответа. */
}
/* Настраивает eCAN, скорость, почтовые ящики и маршрутизацию прерываний для выбранного режима платы. */
void InitCan(int Port, int DevNum)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
@@ -92,6 +117,9 @@ void InitCan(int Port, int DevNum)
/* Объявляет id — данные id. Начальное значение задаётся справа от знака равенства. */
long id = 0x80BA0000;
/* Обнуляет состояние служебного обмена до настройки mailbox и разрешения прерываний CAN. */
ump_can_init();
/* Изменяет счётчик в выражении DevNum--; на один для следующего шага. */
DevNum--;
/* Проверяет if(DevNum<0)DevNum=0; последующий оператор выполняется только при истинном условии. */