diff --git a/Source/Internal/kanal.c b/Source/Internal/kanal.c index 1aa3e45..c18b8dc 100644 --- a/Source/Internal/kanal.c +++ b/Source/Internal/kanal.c @@ -29,6 +29,27 @@ int digits[16] = {63,6,91,79,102,109,125,7,127,111,64,0,0,0,121,0}; /* Объявляет readr — данные readr. Начальное значение задаётся справа от знака равенства. */ int readr[5] = {0x08,0x0C,0x10,0x00,0x04}; +/* Ограничивает настройки таймингов компилятором TI C2000; модель на ПК не использует эти директивы. */ +#if defined(__TI_COMPILER_VERSION__) +/* Сохраняет отдельный вызов переключения CLOCK: встраивание при -O3 сокращало удержание DATA после фронта. */ +#pragma FUNC_CANNOT_INLINE(DCLK) +/* Возвращает генерацию DCLK как в образе от 06.10.2026: уровень 1 и приоритет скорости 3 сохраняют прежнюю последовательность инструкций GPIO. */ +#pragma FUNCTION_OPTIONS(DCLK, "--opt_level=1 --opt_for_speed=3") +/* Сохраняет отдельный вызов переключения DATA, чтобы длительность импульсов не зависела от встраивания в передатчик. */ +#pragma FUNC_CANNOT_INLINE(DOUT) +/* Возвращает генерацию DOUT с прежними параметрами -O1 и --opt_for_speed=3; значения взяты из старой конфигурации CCS. */ +#pragma FUNCTION_OPTIONS(DOUT, "--opt_level=1 --opt_for_speed=3") +/* Не позволяет встроить разделитель пакетов в цикл передачи и изменить интервалы между переключениями линий. */ +#pragma FUNC_CANNOT_INLINE(RESET) +/* Сохраняет прежнюю последовательность вызовов GPIO и задержек разделителя, используя настройки старого образа. */ +#pragma FUNCTION_OPTIONS(RESET, "--opt_level=1 --opt_for_speed=3") +/* Сохраняет отдельный вызов передачи бита; протокол использует порядок и интервалы фронтов CLOCK и DATA. */ +#pragma FUNC_CANNOT_INLINE(SENDBIT) +/* Возвращает передаче бита настройки старого образа -O1 и --opt_for_speed=3, оставляя остальной проект на -O3. */ +#pragma FUNCTION_OPTIONS(SENDBIT, "--opt_level=1 --opt_for_speed=3") +/* Завершает блок настроек TI, не изменяя формат пакетов и существующие счётчики задержек. */ +#endif + /* Начинает функцию DCLK; назначение модуля — последовательный вывод данных канала индикации. */ void DCLK(int x) /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ @@ -127,7 +148,7 @@ void RESET() void SENDBIT(int x) /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { - /* Вызывает DOUT с аргументами (x); DCLK(1) в текущей последовательности операций. */ + /* Выставляет передаваемый бит DATA до подъёма CLOCK, чтобы данные присутствовали на линии на протяжении импульса такта. */ DOUT(x); DCLK(1); /* Условие компиляции POWS0>0: выбранный блок включается в текущий вариант прошивки. */ #if POWS0>0 @@ -135,12 +156,12 @@ void SENDBIT(int x) DSP28x_usDelay(POWS0); /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif - /* Вызывает DOUT с аргументами (0) в текущей последовательности операций. */ - DOUT(0); - /* Вызывает DSP28x_usDelay с аргументами (POWS0+1) в текущей последовательности операций. */ + /* Удерживает CLOCK высоким при действительном DATA; POWS0+1 сохраняет прежний аргумент цикловой задержки TI из SENDBIT, а не задаёт число микросекунд. */ DSP28x_usDelay(POWS0+1); - /* Вызывает DCLK с аргументами (0) в текущей последовательности операций. */ + /* Сначала опускает CLOCK при ещё действительном DATA; восстанавливает прежний порядок пользователя и сохраняет бит для приёмника, считывающего по спаду. */ DCLK(0); + /* Сбрасывает DATA только после спада CLOCK, чтобы завершающий фронт такта не считывал принудительный ноль вместо единичного бита. */ + DOUT(0); /* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */ #if POWS1>0 /* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */