Исправить TESTLAMP, запуск CAN и расчёт фазных токов
Сохранить состояние TESTLAMP при кратких провалах входа и исключить повторный вход Timer1 во время передачи индикации. Явно сбрасывать служебный обмен CAN при запуске и выбирать соседнюю фазу по локальному индексу канала АЦП. Сохранить текущую последовательность DATA/CLK и проверочные варианты таймингов, добавить поведенческие тесты и обновить образ прошивки с картой памяти.
This commit is contained in:
@@ -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; последующий оператор выполняется только при истинном условии. */
|
||||
|
||||
Reference in New Issue
Block a user