Перенести исправления строба индикации из 167
Перенести настройки таймингов из13e5bfe373и относящуюся к индикации часть04a9d989fb. Сохранить текущую последовательность DATA/CLOCK ветки 167, удерживать TESTLAMP при кратких провалах входа и исключить повторный вход Timer1. Адаптировать тесты TESTLAMP к типу накопителя и кодировкам проекта 166. Сохранить изменённые исходники и русские комментарии в UTF-8. Проверка: поведенческие и мутационные тесты TESTLAMP, полная сборка 27 модулей TI C2000 21.12.0.STS и линковка, образ SCI8 30174 байта, компиляция канала индикации с общей оптимизацией -O3.
This commit is contained in:
+28
-7
@@ -1,7 +1,7 @@
|
||||
/* Программный канал индикации. digits/readr задают символы и выбор
|
||||
* элементов, DCLK/DOUT и kanal_Send формируют последовательность GPIO.
|
||||
* Это другой интерфейс, чем dCLK/dCS в DAC.c. Похожие имена не
|
||||
* означают общий ЦАП или общий выход запуска нагрузки.
|
||||
/* Программный канал индикации. digits/readr задают символы и выбор
|
||||
* элементов, DCLK/DOUT и kanal_Send формируют последовательность GPIO.
|
||||
* Это другой интерфейс, чем dCLK/dCS в DAC.c. Похожие имена не
|
||||
* означают общий ЦАП или общий выход запуска нагрузки.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
#include "DSP2833x_SWPrioritizedIsrLevels.h"
|
||||
@@ -20,6 +20,27 @@
|
||||
int digits[16] = {63,6,91,79,102,109,125,7,127,111,64,0,0,0,121,0};
|
||||
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)
|
||||
/* Закрепляет для передачи бита настройки из 167: -O1 и --opt_for_speed=3 сохраняют интервалы GPIO независимо от общего уровня оптимизации проекта. */
|
||||
#pragma FUNCTION_OPTIONS(SENDBIT, "--opt_level=1 --opt_for_speed=3")
|
||||
/* Завершает блок настроек TI, не изменяя формат пакетов и существующие счётчики задержек. */
|
||||
#endif
|
||||
|
||||
void DCLK(int x)
|
||||
{
|
||||
if(x) GpioDataRegs.GPASET.bit.GPIO6=1;
|
||||
@@ -88,7 +109,7 @@ void kanal_Send(int adr, long dat, int dot)
|
||||
long Word,data,aliq_part,dg[4];
|
||||
int i,j,bit,byt,addr,sgn=0,punkt=0,aliq_len=0,full_len, isdot=0;
|
||||
|
||||
if(adr>1) // Лампочки
|
||||
if(adr>1) // Адреса каналов выше 1 передают готовую битовую маску ламп; каналы 0 и 1 требуют преобразования числа в сегменты.
|
||||
{
|
||||
Word =dat;
|
||||
}
|
||||
@@ -139,7 +160,7 @@ void kanal_Send(int adr, long dat, int dot)
|
||||
for(i=3;i>0;i--)
|
||||
{
|
||||
if((dg[i]==0)&&(i!=dot))
|
||||
dg[i]=0xF; // Это значит пусто
|
||||
dg[i]=0xF; // Индекс 0xF таблицы digits задаёт пустой символ, скрывая ведущий ноль вне позиции десятичной точки.
|
||||
else break;
|
||||
}
|
||||
|
||||
@@ -148,7 +169,7 @@ void kanal_Send(int adr, long dat, int dot)
|
||||
{
|
||||
if( (dg[i]==0xF)||(i==3))
|
||||
{
|
||||
dg[i]=0xA; // Это значит минус
|
||||
dg[i]=0xA; // Индекс 0xA таблицы digits задаёт знак минуса в свободном разряде отрицательного числа.
|
||||
break;
|
||||
} }
|
||||
|
||||
|
||||
+14
-13
@@ -1,8 +1,8 @@
|
||||
/* Выбор типа платы, направления GPIO и чтение входов. get_Mode
|
||||
* читает аппаратный адрес и выбирает Desk. Один вывод в разных
|
||||
* режимах может иметь разное назначение. Для нагрузки START=GPIO62,
|
||||
* STOP=GPIO58, RES_OUT_2=GPIO3 (активный ноль). Направления заданы
|
||||
* в GPIO_table.h; изменение распиновки требует сверки со схемой.
|
||||
/* Выбор типа платы, направления GPIO и чтение входов. get_Mode
|
||||
* читает аппаратный адрес и выбирает Desk. Один вывод в разных
|
||||
* режимах может иметь разное назначение. Для нагрузки START=GPIO62,
|
||||
* STOP=GPIO58, RES_OUT_2=GPIO3 (активный ноль). Направления заданы
|
||||
* в GPIO_table.h; изменение распиновки требует сверки со схемой.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
#include "filter_bat2.h"
|
||||
@@ -51,10 +51,10 @@ void get_Mode()
|
||||
{
|
||||
EALLOW;
|
||||
|
||||
GpioCtrlRegs.GPAMUX1.all &= 0xFF000000; // 00—11
|
||||
GpioCtrlRegs.GPAMUX2.all &= 0xFF00003F; // 19—27
|
||||
GpioCtrlRegs.GPBMUX1.all &= 0xFFFFFFC0; // 32—34
|
||||
GpioCtrlRegs.GPBMUX2.all &= 0x000FF000; // 48—53, 58—63
|
||||
GpioCtrlRegs.GPAMUX1.all &= 0xFF000000; // Обнуляет двухбитовые поля MUX для GPIO0–11 по карте регистров TMS320F28335, выбирая обычный GPIO и сохраняя назначение GPIO12–15.
|
||||
GpioCtrlRegs.GPAMUX2.all &= 0xFF00003F; // Выбирает обычный GPIO для выводов 19–27: маска сохраняет поля GPIO16–18 и GPIO28–31 в двухбитовой таблице MUX.
|
||||
GpioCtrlRegs.GPBMUX1.all &= 0xFFFFFFC0; // Обнуляет младшие шесть битов MUX, переводя GPIO32–34 в режим обычных входов или выходов без изменения остальных выводов банка.
|
||||
GpioCtrlRegs.GPBMUX2.all &= 0x000FF000; // Сохраняет поля GPIO54–57 и переводит GPIO48–53 и GPIO58–63 в обычный GPIO согласно двухбитовой раскладке GPBMUX2.
|
||||
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO20 = 0;
|
||||
GpioCtrlRegs.GPADIR.bit.GPIO21 = 0;
|
||||
@@ -187,7 +187,7 @@ void get_Buttons()
|
||||
Inputs.all = butt;
|
||||
}
|
||||
|
||||
/* Ничего такого в действительности нет
|
||||
/* Ничего такого в действительности нет
|
||||
if(Desk==dsk_BKST)
|
||||
{ bSecretBt = !GpioDataRegs.GPBDAT.bit.GPIO63;
|
||||
InputRep1 = bSecretBt;
|
||||
@@ -205,7 +205,8 @@ void get_Buttons()
|
||||
|
||||
if(Desk==dsk_EPLT)
|
||||
{
|
||||
bTestLamp = er_anal(GpioDataRegs.GPADAT.bit.GPIO26, &INcount0, 1000, 0);
|
||||
/* Сохраняет TESTLAMP до достижения порога фильтра: 1000 означает число опросов главного цикла, а bTestLamp удерживает прежний режим при кратком провале GPIO26, чтобы рабочие маски не прерывали тест индикации. */
|
||||
bTestLamp = er_anal(GpioDataRegs.GPADAT.bit.GPIO26, &INcount0, 1000, bTestLamp);
|
||||
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO27) butt +=0x0001;
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO24) butt +=0x0002;
|
||||
@@ -223,7 +224,7 @@ void get_Buttons()
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO5 ) butt +=0x0800;
|
||||
|
||||
if(GpioDataRegs.GPBDAT.bit.GPIO48) butt +=0x1000;
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO10) butt +=0x2000; // Секретный вход
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO10) butt +=0x2000; // Публикует активный секретный вход GPIO10 в бите 13 слова Inputs; маска 0x2000 задаёт назначенную ему позицию протокола.
|
||||
|
||||
Inputs.all = butt;
|
||||
}
|
||||
@@ -267,4 +268,4 @@ void get_Buttons()
|
||||
butt += 8 * !GpioDataRegs.GPBDAT.bit.GPIO51;
|
||||
|
||||
Jumpers = butt;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Логика пульта и индикации. cpu_timer1_isr_PULT выбирается
|
||||
* только для dsk_EPLT; для нагрузки работает обработчик из measure.c.
|
||||
* Lonely относится к активности обмена, не к задержке пуска СИФУ.
|
||||
* Не смешивать функции двух режимов при изменении общего таймера.
|
||||
/* Логика пульта и индикации. cpu_timer1_isr_PULT выбирается
|
||||
* только для dsk_EPLT; для нагрузки работает обработчик из measure.c.
|
||||
* Lonely относится к активности обмена, не к задержке пуска СИФУ.
|
||||
* Не смешивать функции двух режимов при изменении общего таймера.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
|
||||
#include "DSP2833x_SWPrioritizedIsrLevels.h"
|
||||
@@ -46,7 +46,8 @@ interrupt void cpu_timer1_isr_PULT(void)
|
||||
|
||||
EALLOW;
|
||||
CpuTimer1.InterruptCount++;
|
||||
IER |= MINT13; // Set "global" priority
|
||||
/* Оставляет только ранее разрешённые источники по таблице приоритетов TI MINT13 и сбрасывает M_INT13 — бит 12 регистра IER, запрещая повторный Timer1 и перемешивание стробов DATA/CLOCK; исходную маску восстановит IRET. */
|
||||
IER &= (MINT13 & ~M_INT13);
|
||||
EINT;
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
@@ -60,8 +61,8 @@ interrupt void cpu_timer1_isr_PULT(void)
|
||||
|
||||
toggle_ONLINE();
|
||||
|
||||
toggle_RES_OUT_1(); // типа это готовность
|
||||
toggle_RES_OUT_2(); // на всакий
|
||||
toggle_RES_OUT_1(); // Переключает резервный выход RES_OUT_1 в каждом такте пульта, сохраняя существующую выдачу признака активности обработчика.
|
||||
toggle_RES_OUT_2(); // Переключает второй резервный выход RES_OUT_2 синхронно с тактом пульта, сохраняя существующее поведение этого режима платы.
|
||||
|
||||
if(++Lonely > Alone) Lonely = Alone;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user