Files
Balsam_167/Source/Internal/pulto.c
Andrey f741741cf8 Сохранить русские комментарии и настройки проекта в UTF-8
Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
2026-10-12 12:24:48 +03:00

197 lines
16 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Обмен и индикация пульта. Русские пояснения сохранены в UTF-8. */
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */
#include "DSP2833x_SWPrioritizedIsrLevels.h"
/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */
#include "RS485.h"
/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */
#include "message.h"
/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */
#include "filter_bat2.h"
/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */
#include "measure.h"
/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */
#include "package.h"
/* Подключает "pulto.h": обмен и индикация пульта. */
#include "pulto.h"
/* Подключает "kanal.h": последовательный вывод данных канала индикации. */
#include "kanal.h"
/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */
#include "peripher.h"
/* Объявляет isMask — is маска. */
unsigned long isMask;
/* Объявляет isNumb — данные isNumb. */
int isNumb;
/* Объявляет quaLamp — данные quaLamp. Начальное значение задаётся справа от знака равенства. */
int quaLamp = 6;
/* Объявляет Lonely — данные Lonely. Начальное значение задаётся справа от знака равенства. */
unsigned long Lonely=0;
/* Начинает функцию what_is; назначение модуля — обмен и индикация пульта. */
void what_is()
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет count_blink — число blink. */
static unsigned int count_blink;
/* Объявляет numb — данные numb. Начальное значение задаётся справа от знака равенства. */
static int numb=0;
/* Проверяет if(++count_blink >= BLINK_TIME); последующий оператор выполняется только при истинном условии. */
if(++count_blink >= BLINK_TIME)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает count_blink значением 0; число blink. */
count_blink=0;
/* Записывает numb значением 0; данные numb. */
numb++; if(numb==10) numb=0;
/* Записывает isNumb значением numb*1000 + numb*100 + numb*10 +numb; данные isNumb. */
isNumb = numb*1000 + numb*100 + numb*10 +numb;
/* Проверяет if(isMask) isMask = 0; последующий оператор выполняется только при истинном условии. */
if(isMask) isMask = 0;
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else isMask = 0xFFFFFFFF;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
} }
/* Обслуживает периодический обмен и индикацию пульта вместо измерительной платы. */
interrupt void cpu_timer1_isr_PULT(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет cownt — данные cownt; count_bright — число bright. Начальное значение задаётся справа от знака равенства. */
static int cownt=0,count_bright;
/* Объявляет light — данные light; i — данные i. Начальное значение задаётся справа от знака равенства. */
unsigned int light=0, i;
/* Объявляет Alone — данные Alone; READY_FREQ — частота основного такта Timer1 в герцах. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */
unsigned int Alone = 20*READY_FREQ;
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Изменяет счётчик в выражении CpuTimer1.InterruptCount++; на один для следующего шага. */
CpuTimer1.InterruptCount++;
/* Устанавливает биты IER значением MINT13; регистр разрешения прерываний ядра C28x. */
IER |= MINT13; // Set "global" priority
/* Разрешение маскируемых прерываний ядра. */
EINT;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS; // This is needed to disable write to EALLOW protected registers
/* Проверяет if(!cReset) ServiceDog(); последующий оператор выполняется только при истинном условии. */
if(!cReset) ServiceDog();
/* Проверяет if(++CanPowse >= CANPOWSE); последующий оператор выполняется только при истинном условии. */
if(++CanPowse >= CANPOWSE)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает CanPowse значением 0; CAN Powse. */
CanPowse = 0;
/* Записывает CanGO значением 1; CAN GO. */
CanGO = 1;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Переключает аппаратный сигнал через toggle_ONLINE();. */
toggle_ONLINE(); // строб дла ПЛИС
/* Переключает аппаратный сигнал через toggle_RES_OUT_1();. */
toggle_RES_OUT_1(); // типа это готовность
/* Переключает аппаратный сигнал через toggle_RES_OUT_2();. */
toggle_RES_OUT_2(); // на всакий
/* Проверяет if(++Lonely > Alone) Lonely = Alone; последующий оператор выполняется только при истинном условии. */
if(++Lonely > Alone) Lonely = Alone;
/* Проверяет if(++count_bright >= maximum_bright) count_bright = 0; последующий оператор выполняется только при истинном условии. */
if(++count_bright >= maximum_bright) count_bright = 0 ;
/* Цикл for(i=0; i<quaLamp; i++); задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0; i<quaLamp; i++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(count_bright < Bright[i]) light+=(1<<i); последующий оператор выполняется только при истинном условии. */
if(count_bright < Bright[i]) light+=(1<<i);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Проверяет if(++cownt>2) cownt=0; последующий оператор выполняется только при истинном условии. */
if(++cownt>2) cownt=0;
/* Проверяет if(cTestLamp|bTestLamp); последующий оператор выполняется только при истинном условии. */
if(cTestLamp|bTestLamp)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Вызывает what_is с аргументами () в текущей последовательности операций. */
what_is();
/* Проверяет if(cownt == 0) kanal_Send(0,isNumb,4); последующий оператор выполняется только при истинном условии. */
if(cownt == 0) kanal_Send(0,isNumb,4);
/* Проверяет if(cownt == 1) kanal_Send(1,isNumb,4); последующий оператор выполняется только при истинном условии. */
if(cownt == 1) kanal_Send(1,isNumb,4);
/* Вызывает kanal_Send с аргументами (2,isMask,0) в текущей последовательности операций. */
kanal_Send(2,isMask,0);
/* Проверяет if(cownt == 2) kanal_Send(3,isMask,0); последующий оператор выполняется только при истинном условии. */
if(cownt == 2) kanal_Send(3,isMask,0);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else
/* Проверяет if(cLiteFire); последующий оператор выполняется только при истинном условии. */
if(cLiteFire)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(cownt == 0) kanal_Send(0,8888,1); последующий оператор выполняется только при истинном условии. */
if(cownt == 0) kanal_Send(0,8888,1);
/* Проверяет if(cownt == 1) kanal_Send(1,8888,1); последующий оператор выполняется только при истинном условии. */
if(cownt == 1) kanal_Send(1,8888,1);
/* Вызывает kanal_Send с аргументами (2,0xFFFF & light,0) в текущей последовательности операций. */
kanal_Send(2,0xFFFF & light,0);
/* Проверяет if(cownt == 2) kanal_Send(3,0xFFFF,0); последующий оператор выполняется только при истинном условии. */
if(cownt == 2) kanal_Send(3,0xFFFF,0);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else
/* Проверяет if((Lonely >= Alone)); последующий оператор выполняется только при истинном условии. */
if((Lonely >= Alone))
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(cownt == 0) kanal_Send(0,0,0); последующий оператор выполняется только при истинном условии. */
if(cownt == 0) kanal_Send(0,0,0);
/* Проверяет if(cownt == 1) kanal_Send(1,0,0); последующий оператор выполняется только при истинном условии. */
if(cownt == 1) kanal_Send(1,0,0);
/* Вызывает kanal_Send с аргументами (2,0,0) в текущей последовательности операций. */
kanal_Send(2,0,0);
/* Проверяет if(cownt == 2) kanal_Send(3,0,0); последующий оператор выполняется только при истинном условии. */
if(cownt == 2) kanal_Send(3,0,0);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Условие компиляции OBOROT == STRAIGHT: выбранный блок включается в текущий вариант прошивки. */
#if OBOROT == STRAIGHT
/* Проверяет if(cownt == 0) kanal_Send(0,modbus[0],1); последующий оператор выполняется только при истинном условии. */
if(cownt == 0) kanal_Send(0,modbus[0],1);
/* Проверяет if(cownt == 1) kanal_Send(1,modbus[1],1); последующий оператор выполняется только при истинном условии. */
if(cownt == 1) kanal_Send(1,modbus[1],1);
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Проверяет if(cownt == 0) kanal_Send(0,modbus[1],1); последующий оператор выполняется только при истинном условии. */
if(cownt == 0) kanal_Send(0,modbus[1],1);
/* Проверяет if(cownt == 1) kanal_Send(1,modbus[0],1); последующий оператор выполняется только при истинном условии. */
if(cownt == 1) kanal_Send(1,modbus[0],1);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Вызывает kanal_Send с аргументами (2,modbus[2] & light,0) в текущей последовательности операций. */
kanal_Send(2,modbus[2] & light,0);
/* Проверяет if(cownt == 2) kanal_Send(3,modbus[3],0); последующий оператор выполняется только при истинном условии. */
if(cownt == 2) kanal_Send(3,modbus[3],0);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
} }