Восстановить тайминги CLOCK и DATA канала индикации
Сохранять DATA до спада CLOCK при передаче бита. Закрепить отдельные вызовы DCLK, DOUT, RESET и SENDBIT и прежние настройки оптимизации TI, чтобы сохранить интервалы переключений GPIO при общей сборке с -O3.
This commit is contained in:
@@ -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. Начальное значение задаётся справа от знака равенства. */
|
/* Объявляет readr — данные readr. Начальное значение задаётся справа от знака равенства. */
|
||||||
int readr[5] = {0x08,0x0C,0x10,0x00,0x04};
|
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; назначение модуля — последовательный вывод данных канала индикации. */
|
/* Начинает функцию DCLK; назначение модуля — последовательный вывод данных канала индикации. */
|
||||||
void DCLK(int x)
|
void DCLK(int x)
|
||||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||||
@@ -127,7 +148,7 @@ void RESET()
|
|||||||
void SENDBIT(int x)
|
void SENDBIT(int x)
|
||||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||||
{
|
{
|
||||||
/* Вызывает DOUT с аргументами (x); DCLK(1) в текущей последовательности операций. */
|
/* Выставляет передаваемый бит DATA до подъёма CLOCK, чтобы данные присутствовали на линии на протяжении импульса такта. */
|
||||||
DOUT(x); DCLK(1);
|
DOUT(x); DCLK(1);
|
||||||
/* Условие компиляции POWS0>0: выбранный блок включается в текущий вариант прошивки. */
|
/* Условие компиляции POWS0>0: выбранный блок включается в текущий вариант прошивки. */
|
||||||
#if POWS0>0
|
#if POWS0>0
|
||||||
@@ -135,12 +156,12 @@ void SENDBIT(int x)
|
|||||||
DSP28x_usDelay(POWS0);
|
DSP28x_usDelay(POWS0);
|
||||||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||||||
#endif
|
#endif
|
||||||
/* Вызывает DOUT с аргументами (0) в текущей последовательности операций. */
|
/* Удерживает CLOCK высоким при действительном DATA; POWS0+1 сохраняет прежний аргумент цикловой задержки TI из SENDBIT, а не задаёт число микросекунд. */
|
||||||
DOUT(0);
|
|
||||||
/* Вызывает DSP28x_usDelay с аргументами (POWS0+1) в текущей последовательности операций. */
|
|
||||||
DSP28x_usDelay(POWS0+1);
|
DSP28x_usDelay(POWS0+1);
|
||||||
/* Вызывает DCLK с аргументами (0) в текущей последовательности операций. */
|
/* Сначала опускает CLOCK при ещё действительном DATA; восстанавливает прежний порядок пользователя и сохраняет бит для приёмника, считывающего по спаду. */
|
||||||
DCLK(0);
|
DCLK(0);
|
||||||
|
/* Сбрасывает DATA только после спада CLOCK, чтобы завершающий фронт такта не считывал принудительный ноль вместо единичного бита. */
|
||||||
|
DOUT(0);
|
||||||
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
|
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
|
||||||
#if POWS1>0
|
#if POWS1>0
|
||||||
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
|
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
|
||||||
|
|||||||
Reference in New Issue
Block a user