Обновить сборку прошивки 166, TESTLAMP и кодировку исходников
Перенести настройки выпуска в JSON, добавить переносимый сценарий сборки и проверки BIN. Обновить конфигурации CCS, исходники в UTF-8, обработку TESTLAMP, образы прошивки и регрессионные проверки.
This commit is contained in:
+30
-30
@@ -1,8 +1,8 @@
|
||||
/* Íàñòðîéêà ÀÖÏ è îáðàáîòêà àíàëîãîâûõ âûáîðîê. adc_isr îáíîâëÿåò
|
||||
* adc_table_lem[0..3] èç ADCRESULT2..5 >> 4 è âûçûâàåò ðàñ÷¸ò èçìåðåíèé.
|
||||
* READY â 166 ÿâëÿåòñÿ ñ÷¸ò÷èêîì äî íóëÿ, íå ôëàãîì ãîòîâíîñòè.
|
||||
* WAKE çàäà¸ò îòäåëüíîå âðåìÿ óñòàíîâëåíèÿ èçìåðèòåëüíûõ öåïåé.
|
||||
* Íå äîáàâëÿòü îæèäàíèÿ EEPROM/UART â îáðàáîò÷èê âûáîðîê.
|
||||
/* Настройка АЦП и обработка аналоговых выборок. adc_isr обновляет
|
||||
* adc_table_lem[0..3] из ADCRESULT2..5 >> 4 и вызывает расчёт измерений.
|
||||
* READY в 166 является счётчиком до нуля, не флагом готовности.
|
||||
* WAKE задаёт отдельное время установления измерительных цепей.
|
||||
* Не добавлять ожидания EEPROM/UART в обработчик выборок.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
#include "DSP2833x_Examples.h" // DSP281x Examples Include File
|
||||
@@ -21,7 +21,7 @@
|
||||
#include "peripher.h"
|
||||
|
||||
Uint16 adc_table_lem[4];
|
||||
Uint16 adc_table_tpl[28]; // Ïîòîìó ÷òî +4 êàëèáð
|
||||
Uint16 adc_table_tpl[28]; // Потому что +4 калибр
|
||||
|
||||
unsigned long COUNT_WAIT_ONE_CANAL;
|
||||
|
||||
@@ -63,12 +63,12 @@ void setup_adc()
|
||||
{
|
||||
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0005; // Setup 2 conv's on SEQ1
|
||||
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // òåìïåðàòóðà (êîòîðîé íåò)
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // îìåãà
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x5; // íàïðóãà 1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x4; // íàïðóãà 2
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x7; // òîê 1
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x2; // òîê 2
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // температура (которой нет)
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // омега
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x5; // напруга 1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x4; // напруга 2
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x7; // ток 1
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x2; // ток 2
|
||||
}
|
||||
|
||||
if(Desk==dsk_BKST)
|
||||
@@ -82,7 +82,7 @@ void setup_adc()
|
||||
if(Desk==dsk_COMM)
|
||||
{
|
||||
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0006; // Setup 2 conv's on SEQ1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x5; // ñíà÷àëà òîæå áóäóò òåìïåðàòóðû
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x5; // сначала тоже будут температуры
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x4; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x7; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x2; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
@@ -100,23 +100,23 @@ void setup_adc()
|
||||
if(Desk==dsk_SHKF)
|
||||
{
|
||||
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x000F; // Setup 2 conv's on SEQ1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x2; // 380Â Ô1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x3; // 380Â Ô2
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x6; // 31Â Ô1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0xC; // 31Â Ô2 ?
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0xA; // 31Â UC1
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0xB; // 31Â UC2
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x7; // 24Â ÏÓ
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x4; // 24Â ÏÓ
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x2; // 380В Ф1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x3; // 380В Ф2
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x6; // 31В Ф1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0xC; // 31В Ф2 ?
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0xA; // 31В UC1
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0xB; // 31В UC2
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x7; // 24В ПУ
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x4; // 24В ПУ
|
||||
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x5; // 24Â ÏÊ áûëî 5
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x1; // 15Â Äð
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0xE; // +24Â Äò
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0; // +24Â Äò
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x8; // -24Â Äò áûëî 8
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x5; // 24В ПК было 5
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x1; // 15В Др
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0xE; // +24В Дт
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0; // +24В Дт
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x8; // -24В Дт было 8
|
||||
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0xF;//0xF; // ÄÒ° 1
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0xD;//0xD; // ÄÒ° 2
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0xF;//0xF; // ДТ° 1
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0xD;//0xD; // ДТ° 2
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0x9;//0x9;
|
||||
}
|
||||
|
||||
@@ -206,7 +206,7 @@ interrupt void adc_isr(void)
|
||||
{
|
||||
if (++cownt_cans>=tpl_cans) cownt_cans=0;
|
||||
|
||||
// Èìåííî çäåñü íåò äûð
|
||||
// Именно здесь нет дыр
|
||||
// if(sens_type[cownt_cans])
|
||||
{
|
||||
i++;
|
||||
@@ -244,7 +244,7 @@ interrupt void adc_isr(void)
|
||||
if(TermoAD)
|
||||
{
|
||||
if(cownt_cans == TPL_CANS ) code_tpl_canal = TERMOPAIR-1;
|
||||
if(cownt_cans == TPL_CANS+1) code_tpl_canal = TERMOPAIR-2; // ïîòîìó ÷òî 300 è 400 íàîáîðîò
|
||||
if(cownt_cans == TPL_CANS+1) code_tpl_canal = TERMOPAIR-2; // потому что 300 и 400 наоборот
|
||||
}
|
||||
|
||||
select_tpl_canal(code_tpl_canal);
|
||||
|
||||
+16
-16
@@ -1,9 +1,9 @@
|
||||
/* ЦАП нагрузки и аппаратная обёртка импульсов СИФУ. Load_runner
|
||||
* вызывается таймером 1 кГц, расчёт ЦАП делится до DAC_FREQ.
|
||||
* Формула 166 задаёт фиксированный разгон 6..16 мА. DAC_min/max
|
||||
* переводят положение в код, cCalibrDac выбирает ручной код.
|
||||
* WAKEpowse относится к ЦАП, не является разрешением дискрета запуска.
|
||||
* Автомат СИФУ подключён в конце файла через ump_control_impl.h.
|
||||
/* ЦАП нагрузки и аппаратная обёртка импульсов СИФУ. Load_runner
|
||||
* вызывается таймером 1 кГц, расчёт ЦАП делится до DAC_FREQ.
|
||||
* Формула 166 задаёт фиксированный разгон 6..16 мА. DAC_min/max
|
||||
* переводят положение в код, cCalibrDac выбирает ручной код.
|
||||
* WAKEpowse относится к ЦАП, не является разрешением дискрета запуска.
|
||||
* Автомат СИФУ подключён в конце файла через ump_control_impl.h.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
#include "DSP2833x_SWPrioritizedIsrLevels.h"
|
||||
@@ -29,8 +29,8 @@ unsigned long WAKEpowse;
|
||||
volatile unsigned long IMPowse;
|
||||
unsigned int period_dac, time_dac;
|
||||
|
||||
/* Инициализация, не обработка каждого START. 601 отсчёт при 200 Гц
|
||||
* дают около 3 секунд до рабочего расчёта ЦАП после включения.
|
||||
/* Инициализация, не обработка каждого START. 601 отсчёт при 200 Гц
|
||||
* дают около 3 секунд до рабочего расчёта ЦАП после включения.
|
||||
*/
|
||||
void Setup_DAC_time(void)
|
||||
{
|
||||
@@ -76,9 +76,9 @@ void Init_DAC(void)
|
||||
dSEND(0x9002|0x0000); toggle_RES_OUT_1();
|
||||
}
|
||||
|
||||
/* vrot/maxx — доля диапазона между кодами 4 и 20 мА. Маска 0xFFF
|
||||
* сохраняет 12 бит, но не является насыщением. modbus[0x1C] содержит
|
||||
* расчётное задание, не измеренный ток на выходных клеммах.
|
||||
/* vrot/maxx — доля диапазона между кодами 4 и 20 мА. Маска 0xFFF
|
||||
* сохраняет 12 бит, но не является насыщением. modbus[0x1C] содержит
|
||||
* расчётное задание, не измеренный ток на выходных клеммах.
|
||||
*/
|
||||
void Anal_output(long vrot, long maxx)
|
||||
{
|
||||
@@ -87,7 +87,7 @@ void Anal_output(long vrot, long maxx)
|
||||
|
||||
out = DAC_min() + vrot * DAC_max() / maxx - vrot * DAC_min() / maxx ;
|
||||
|
||||
x=0;// !x; тщетно бытие
|
||||
x=0;// !x; тщетно бытие
|
||||
|
||||
if(cCalibrDac) out=DAC_cal();
|
||||
|
||||
@@ -116,9 +116,9 @@ Log_to_mem(modbus[0x1D]);
|
||||
|
||||
}
|
||||
|
||||
/* После половины time_dac счётчик растёт дважды за вызов. Поэтому
|
||||
* LOAD_TIME=30 даёт примерно 22.5 с до конца разгона при 200 Гц.
|
||||
* Существующий профиль 166 исправление импульса СИФУ не меняет.
|
||||
/* После половины time_dac счётчик растёт дважды за вызов. Поэтому
|
||||
* LOAD_TIME=30 даёт примерно 22.5 с до конца разгона при 200 Гц.
|
||||
* Существующий профиль 166 исправление импульса СИФУ не меняет.
|
||||
*/
|
||||
void Load_runner()
|
||||
{
|
||||
@@ -126,7 +126,7 @@ void Load_runner()
|
||||
float sinus=0;
|
||||
int kod;
|
||||
|
||||
/* IMPowse обновляется UMP_pulse_tick(), а не алгоритмом ЦАП. */
|
||||
/* IMPowse обновляется UMP_pulse_tick(), а не алгоритмом ЦАП. */
|
||||
if(++count_dac >= period_dac)
|
||||
{
|
||||
count_dac=0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Таблицы выборок обновляет ADC ISR. Согласованный снимок нескольких
|
||||
* каналов требует защиты копирования, одного указателя недостаточно.
|
||||
/* Таблицы выборок обновляет ADC ISR. Согласованный снимок нескольких
|
||||
* каналов требует защиты копирования, одного указателя недостаточно.
|
||||
*/
|
||||
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
/* Интерфейс ЦАП и СИФУ. Входящие команды — UMP_commands_write,
|
||||
* окончание импульса — UMP_pulse_tick. IMPowse только для диагностики.
|
||||
/* Интерфейс ЦАП и СИФУ. Входящие команды — UMP_commands_write,
|
||||
* окончание импульса — UMP_pulse_tick. IMPowse только для диагностики.
|
||||
*/
|
||||
void Load_runner(void);
|
||||
void Anal_output(long vrot, long maxx);
|
||||
void Init_DAC(void);
|
||||
void Setup_DAC_time(void);
|
||||
|
||||
/* Счётчик пускового импульса и выдержки инициализации доступны логгеру. */
|
||||
/* Счётчик пускового импульса и выдержки инициализации доступны логгеру. */
|
||||
extern volatile unsigned long IMPowse;
|
||||
extern unsigned long WAKEpowse;
|
||||
extern unsigned int period_dac, time_dac;
|
||||
|
||||
/* Все операции безопасны для вызова из main и обработчиков IRQ. */
|
||||
/* Все операции безопасны для вызова из main и обработчиков IRQ. */
|
||||
void UMP_pulse_init(void);
|
||||
void UMP_commands_write(unsigned int commands);
|
||||
void UMP_pulse_tick(void);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Íàïðàâëåíèÿ GPIO äëÿ àïïàðàòíûõ èñïîëíåíèé. Åäèíèöà îçíà÷àåò
|
||||
* âûõîä; àêòèâíóþ ïîëÿðíîñòü çàäàþò peripher.h è ñõåìà ïëàòû.
|
||||
/* Направления GPIO для аппаратных исполнений. Единица означает
|
||||
* выход; активную полярность задают peripher.h и схема платы.
|
||||
*/
|
||||
#define COMM_gpio00_dir 0L
|
||||
#define COMM_gpio01_dir 0L
|
||||
@@ -14,7 +14,7 @@
|
||||
#define COMM_gpio10_dir 0L
|
||||
#define COMM_gpio11_dir 0L
|
||||
|
||||
#define COMM_gpio19_dir 1L // 63 — SPI
|
||||
#define COMM_gpio19_dir 1L // 63 — SPI
|
||||
#define COMM_gpio20_dir 0L // 64 2:9B mode 2
|
||||
#define COMM_gpio21_dir 0L // 65 2:9A mode 4
|
||||
#define COMM_gpio22_dir 0L // 66 2:12C mode 1
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
#define COMM_gpio32_dir 1L // 74 2:10B DIOD green
|
||||
#define COMM_gpio33_dir 0L
|
||||
#define COMM_gpio34_dir 1L // 142 — SCI
|
||||
#define COMM_gpio34_dir 1L // 142 — SCI
|
||||
|
||||
#define COMM_gpio48_dir 1L // 88 2:14C DIOD red
|
||||
#define COMM_gpio49_dir 1L // 89 2:14B select
|
||||
@@ -57,7 +57,7 @@
|
||||
#define BKSD_gpio10_dir 0L // 19 2:6C oil
|
||||
#define BKSD_gpio11_dir 1L // 20 2:3C select
|
||||
|
||||
#define BKSD_gpio19_dir 1L // 63 — SPI
|
||||
#define BKSD_gpio19_dir 1L // 63 — SPI
|
||||
#define BKSD_gpio20_dir 0L // 64 2:9B mode 2
|
||||
#define BKSD_gpio21_dir 0L // 65 2:9A mode 4
|
||||
#define BKSD_gpio22_dir 0L // 66 2:12C mode 1
|
||||
@@ -69,7 +69,7 @@
|
||||
|
||||
#define BKSD_gpio32_dir 1L // 74 2:10B DIOD green
|
||||
#define BKSD_gpio33_dir 0L
|
||||
#define BKSD_gpio34_dir 1L // 142 — SCI
|
||||
#define BKSD_gpio34_dir 1L // 142 — SCI
|
||||
|
||||
#define BKSD_gpio48_dir 1L // 88 2:14C DIOD red
|
||||
#define BKSD_gpio49_dir 0L // 89 2:14B input 2
|
||||
@@ -100,7 +100,7 @@
|
||||
#define BKST_gpio10_dir 0L
|
||||
#define BKST_gpio11_dir 1L // 20 2:3C select
|
||||
|
||||
#define BKST_gpio19_dir 1L // 63 — SPI
|
||||
#define BKST_gpio19_dir 1L // 63 — SPI
|
||||
#define BKST_gpio20_dir 0L // 64 2:9B mode 2
|
||||
#define BKST_gpio21_dir 0L // 65 2:9A mode 4
|
||||
#define BKST_gpio22_dir 0L // 66 2:12C mode 1
|
||||
@@ -112,7 +112,7 @@
|
||||
|
||||
#define BKST_gpio32_dir 1L // 74 2:10B DIOD green
|
||||
#define BKST_gpio33_dir 0L
|
||||
#define BKST_gpio34_dir 1L // 142 — SCI
|
||||
#define BKST_gpio34_dir 1L // 142 — SCI
|
||||
|
||||
#define BKST_gpio48_dir 1L // 88 2:14C DIOD red
|
||||
#define BKST_gpio49_dir 0L
|
||||
@@ -143,7 +143,7 @@
|
||||
#define PULT_gpio10_dir 0L
|
||||
#define PULT_gpio11_dir 0L
|
||||
|
||||
#define PULT_gpio19_dir 1L // 63 — SPI
|
||||
#define PULT_gpio19_dir 1L // 63 — SPI
|
||||
#define PULT_gpio20_dir 0L // 64 2:9B mode 2
|
||||
#define PULT_gpio21_dir 0L // 65 2:9A mode 4
|
||||
#define PULT_gpio22_dir 0L // 66 2:12C mode 1
|
||||
@@ -155,7 +155,7 @@
|
||||
|
||||
#define PULT_gpio32_dir 1L // 74 2:10B DIOD green
|
||||
#define PULT_gpio33_dir 0L
|
||||
#define PULT_gpio34_dir 1L // 142 — SCI
|
||||
#define PULT_gpio34_dir 1L // 142 — SCI
|
||||
|
||||
#define PULT_gpio48_dir 1L // 88 2:14C DIOD red
|
||||
#define PULT_gpio49_dir 0L // 89 2:14B button
|
||||
@@ -186,7 +186,7 @@
|
||||
#define PLT2_gpio10_dir 0L
|
||||
#define PLT2_gpio11_dir 0L
|
||||
|
||||
#define PLT2_gpio19_dir 1L // 63 × SPI
|
||||
#define PLT2_gpio19_dir 1L // 63 Ч SPI
|
||||
#define PLT2_gpio20_dir 0L // 64 2:9B mode 2
|
||||
#define PLT2_gpio21_dir 0L // 65 2:9A mode 4
|
||||
#define PLT2_gpio22_dir 0L // 66 2:12C mode 1
|
||||
@@ -198,7 +198,7 @@
|
||||
|
||||
#define PLT2_gpio32_dir 1L // 74 2:10B DIOD green
|
||||
#define PLT2_gpio33_dir 0L // 75 2:10C button
|
||||
#define PLT2_gpio34_dir 1L // 142 × SCI
|
||||
#define PLT2_gpio34_dir 1L // 142 Ч SCI
|
||||
|
||||
#define PLT2_gpio48_dir 0L // 88 2:14C button
|
||||
#define PLT2_gpio49_dir 0L // 89 2:14B button
|
||||
@@ -229,7 +229,7 @@
|
||||
#define SHKF_gpio10_dir 0L // 19 2:6C input
|
||||
#define SHKF_gpio11_dir 0L // 20 2:3C input
|
||||
|
||||
#define SHKF_gpio19_dir 1L // 63 — SPI
|
||||
#define SHKF_gpio19_dir 1L // 63 — SPI
|
||||
#define SHKF_gpio20_dir 0L // 64 2:9B mode 2
|
||||
#define SHKF_gpio21_dir 0L // 65 2:9A mode 4
|
||||
#define SHKF_gpio22_dir 0L // 66 2:12C mode 1
|
||||
@@ -241,7 +241,7 @@
|
||||
|
||||
#define SHKF_gpio32_dir 0L // 74 2:10B input
|
||||
#define SHKF_gpio33_dir 0L // 75 2:10C input
|
||||
#define SHKF_gpio34_dir 1L // 142 — SCI
|
||||
#define SHKF_gpio34_dir 1L // 142 — SCI
|
||||
|
||||
#define SHKF_gpio48_dir 1L // 88 2:14C DIOD red
|
||||
#define SHKF_gpio49_dir 0L // 89 2:14B input
|
||||
@@ -272,7 +272,7 @@
|
||||
#define LOAD_gpio10_dir 0L
|
||||
#define LOAD_gpio11_dir 0L // 20 2:3C res_in 0
|
||||
|
||||
#define LOAD_gpio19_dir 1L // 63 — SPI
|
||||
#define LOAD_gpio19_dir 1L // 63 — SPI
|
||||
#define LOAD_gpio20_dir 0L // 64 2:9B mode 2
|
||||
#define LOAD_gpio21_dir 0L // 65 2:9A mode 4
|
||||
#define LOAD_gpio22_dir 0L // 66 2:12C mode 1
|
||||
@@ -284,7 +284,7 @@
|
||||
|
||||
#define LOAD_gpio32_dir 1L // 74 2:10B DIOD green
|
||||
#define LOAD_gpio33_dir 0L
|
||||
#define LOAD_gpio34_dir 1L // 142 — SCI
|
||||
#define LOAD_gpio34_dir 1L // 142 — SCI
|
||||
|
||||
#define LOAD_gpio48_dir 1L // 88 2:14C DIOD red
|
||||
#define LOAD_gpio49_dir 0L
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Буферы UART разделяются ISR и main. main обрабатывает
|
||||
* законченный RS_Header. Размеры сверять с 16-битной ABI DSP.
|
||||
/* Буферы UART разделяются ISR и main. main обрабатывает
|
||||
* законченный RS_Header. Размеры сверять с 16-битной ABI DSP.
|
||||
*/
|
||||
#ifndef _RS485
|
||||
#define _RS485
|
||||
@@ -32,30 +32,30 @@ typedef struct
|
||||
{
|
||||
volatile struct SCI_REGS *SciRegs;
|
||||
|
||||
unsigned int commnumber; // Номер порта
|
||||
unsigned long RS_Length; // Длина пакета
|
||||
unsigned int commnumber; // Номер порта
|
||||
unsigned long RS_Length; // Длина пакета
|
||||
|
||||
unsigned int *pRS_RecvPtr; // Буфер приема
|
||||
unsigned int *pRS_SendPtr; // Буфер посылки
|
||||
unsigned int *pRS_RecvPtr; // Буфер приема
|
||||
unsigned int *pRS_SendPtr; // Буфер посылки
|
||||
unsigned int *pRecvPtr;
|
||||
|
||||
unsigned int RS_PrevCmd; // Предыдущаа комманда
|
||||
unsigned int RS_Cmd; // Текущаа комманда
|
||||
unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Заголовок
|
||||
unsigned int flag_TIMEOUT_to_Send; // Флаг ожиданиа таймаута на отсылку
|
||||
unsigned int flag_TIMEOUT_to_Receive; // Флаг ожиданиа таймаута на прием
|
||||
unsigned int RS_DataReady; // Флаг готовности RS данных
|
||||
unsigned int buffer[MAX_SEND_LENGTH]; // Буфер дла отсылки по RS
|
||||
unsigned int RS_PrevCmd; // Предыдущаа комманда
|
||||
unsigned int RS_Cmd; // Текущаа комманда
|
||||
unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Заголовок
|
||||
unsigned int flag_TIMEOUT_to_Send; // Флаг ожиданиа таймаута на отсылку
|
||||
unsigned int flag_TIMEOUT_to_Receive; // Флаг ожиданиа таймаута на прием
|
||||
unsigned int RS_DataReady; // Флаг готовности RS данных
|
||||
unsigned int buffer[MAX_SEND_LENGTH]; // Буфер дла отсылки по RS
|
||||
|
||||
unsigned int addr_answer; // адрес куда отвечать в режиме ведущего
|
||||
unsigned int addr_recive; // адрес по которому нас запросили
|
||||
unsigned int flag_LEADING; // Флаг режима контроллера (по умолчанию ведомый)
|
||||
unsigned int addr_answer; // адрес куда отвечать в режиме ведущего
|
||||
unsigned int addr_recive; // адрес по которому нас запросили
|
||||
unsigned int flag_LEADING; // Флаг режима контроллера (по умолчанию ведомый)
|
||||
unsigned long RS_RecvLen;
|
||||
unsigned long RS_SLength; // Длина пакета дла посылки
|
||||
unsigned long RS_SendLen; // Количество байт уже передали
|
||||
char RS_SendBlockMode; // Режим передачи
|
||||
char RS_Flag9bit; // дла RS485????????
|
||||
int BS_LoadOK; // Флаг успешности приема блока
|
||||
unsigned long RS_SLength; // Длина пакета дла посылки
|
||||
unsigned long RS_SendLen; // Количество байт уже передали
|
||||
char RS_SendBlockMode; // Режим передачи
|
||||
char RS_Flag9bit; // дла RS485????????
|
||||
int BS_LoadOK; // Флаг успешности приема блока
|
||||
int RS_FlagBegin;
|
||||
int RS_HeaderCnt;
|
||||
int RS_FlagSkiping;
|
||||
@@ -67,39 +67,39 @@ typedef struct
|
||||
extern RS_DATA rs_a,rs_b;
|
||||
|
||||
extern unsigned int
|
||||
RS_Len[70]; /* Действительнаа длина команды (отладочной) + 1 */
|
||||
RS_Len[70]; /* Действительнаа длина команды (отладочной) + 1 */
|
||||
|
||||
interrupt void RSA_RX_Handler(void);
|
||||
interrupt void RSA_TX_Handler(void);
|
||||
interrupt void RSB_RX_Handler(void);
|
||||
interrupt void RSB_TX_Handler(void);
|
||||
|
||||
/* иницилизациа переменных rs_a,rs_b*/
|
||||
/* иницилизациа переменных rs_a,rs_b*/
|
||||
void create_uart_vars(char size_cmd15);
|
||||
|
||||
/** Повторнаа инициализациа последовательного порта, используетса после подвиса */
|
||||
/** Настройка режима приема/передачи */
|
||||
/** Повторнаа инициализациа последовательного порта, используетса после подвиса */
|
||||
/** Настройка режима приема/передачи */
|
||||
void RS_SetBitMode(RS_DATA *rs_arr, int n);
|
||||
|
||||
/** Посылка блока байтов.
|
||||
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param buf адрес массива
|
||||
@param len количество байт
|
||||
/** Посылка блока байтов.
|
||||
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param buf адрес массива
|
||||
@param len количество байт
|
||||
@see RS_BSend, RS_TRANSMIT_INTR
|
||||
*/
|
||||
int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
|
||||
|
||||
/** Посылка блока упакованных байтов.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param buf адрес массива
|
||||
@param len количество 8-битных байт
|
||||
/** Посылка блока упакованных байтов.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param buf адрес массива
|
||||
@param len количество 8-битных байт
|
||||
@see RS_Send, RS_TRANSMIT_INTR
|
||||
*/
|
||||
int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
|
||||
|
||||
/** Инициализациа последовательного порта */
|
||||
void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - скорость линии в бодах */
|
||||
/** Инициализациа последовательного порта */
|
||||
void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - скорость линии в бодах */
|
||||
|
||||
void RS_SetLineMode(RS_DATA *rs_arr, int bit, char parity, int stop);
|
||||
void RS_SetLineSpeed(RS_DATA *rs_arr, unsigned long speed);
|
||||
@@ -107,17 +107,17 @@ void RS_SetLineSpeed(RS_DATA *rs_arr, unsigned long speed);
|
||||
// Transmit a character from the SCI'
|
||||
#define SCI_send(x,y) x->SciRegs->SCITXBUF=(unsigned char)(y)
|
||||
|
||||
// Ожидание завершениа передачи UART
|
||||
// Ожидание завершениа передачи UART
|
||||
// wait for TRDY =1 for empty state
|
||||
#define RS_Wait4OK(x) while(!(x->SciRegs->SCICTL2.bit.TXEMPTY))
|
||||
|
||||
/** Переключение линии на прием */
|
||||
/** Переключение линии на прием */
|
||||
#define RS_Line_to_receive(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 1;
|
||||
|
||||
/** Переключение линии на передачу */
|
||||
/** Переключение линии на передачу */
|
||||
#define RS_Line_to_send(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 0;
|
||||
|
||||
/** Разрешение прерываний по получению символа и ошибкам от UART */
|
||||
/** Разрешение прерываний по получению символа и ошибкам от UART */
|
||||
#define enableUARTInt(x) x->SciRegs->SCICTL2.all=2
|
||||
#define enableUARTIntW(x) x->SciRegs->SCICTL2.all=1
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Коды CMD_* являются частью формата обмена с ПК. Новые команды
|
||||
* добавляются без перенумерации существующих значений.
|
||||
/* Коды CMD_* являются частью формата обмена с ПК. Новые команды
|
||||
* добавляются без перенумерации существующих значений.
|
||||
*/
|
||||
#ifndef _BIOS_DSP
|
||||
#define _BIOS_DSP
|
||||
@@ -36,67 +36,67 @@ enum {
|
||||
|
||||
CMD_VECTOR=61,
|
||||
CMD_IMPULSE,
|
||||
/* стандартные команды */
|
||||
/* стандартные команды */
|
||||
CMD_STD=65, CMD_STD_ANS
|
||||
};
|
||||
|
||||
enum {false=0, true};
|
||||
|
||||
|
||||
/** Возвращает номер комманды, если есть или -1 если транзакций не было */
|
||||
/** Возвращает номер комманды, если есть или -1 если транзакций не было */
|
||||
int get_command(RS_DATA *rs_arr);
|
||||
|
||||
/** Стандартный ответ, без параметров */
|
||||
/** Стандартный ответ, без параметров */
|
||||
void Answer(RS_DATA *rs_arr,int n);
|
||||
|
||||
/* начальные установки (не работает)*/
|
||||
/* начальные установки (не работает)*/
|
||||
void init(RS_DATA *rs_arr);
|
||||
|
||||
/**@name Комманды
|
||||
* Комманды, вызываемые через последовательный канал*/
|
||||
/**@name Комманды
|
||||
* Комманды, вызываемые через последовательный канал*/
|
||||
//@{
|
||||
|
||||
/** Инициировать загрузку блока.
|
||||
Настраивает прием блока данных */
|
||||
/** Инициировать загрузку блока.
|
||||
Настраивает прием блока данных */
|
||||
void initload(RS_DATA *rs_arr);
|
||||
|
||||
/** Загрузка блока.
|
||||
Вызываетса после загрузки блока через RS */
|
||||
/** Загрузка блока.
|
||||
Вызываетса после загрузки блока через RS */
|
||||
void load(RS_DATA *rs_arr);
|
||||
|
||||
/** Выполнить программу в формате Serial Boot.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес программы беретса из заголовка и
|
||||
сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load
|
||||
/** Выполнить программу в формате Serial Boot.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес программы беретса из заголовка и
|
||||
сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load
|
||||
@see load */
|
||||
void run (RS_DATA *rs_arr);
|
||||
|
||||
/** Прочитать ачейку памати */
|
||||
/** Прочитать ачейку памати */
|
||||
void peek(RS_DATA *rs_arr);
|
||||
|
||||
/** Записать в ачейку памати */
|
||||
/** Записать в ачейку памати */
|
||||
void poke(RS_DATA *rs_arr);
|
||||
|
||||
/** Передать блок памати */
|
||||
/** Передать блок памати */
|
||||
void upload(RS_DATA *rs_arr);
|
||||
|
||||
/** Прошить XILINX.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load,
|
||||
так же смотрит магическое слово в начале прошивки
|
||||
/** Прошить XILINX.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load,
|
||||
так же смотрит магическое слово в начале прошивки
|
||||
@see load */
|
||||
void xflash(RS_DATA *rs_arr);
|
||||
|
||||
/** Прошить TMS.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
|
||||
/** Прошить TMS.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
|
||||
@see load */
|
||||
void tflash(RS_DATA *rs_arr);
|
||||
|
||||
|
||||
/* расширенные команды дла биоса */
|
||||
/* расширенные команды дла биоса */
|
||||
void extendbios(RS_DATA *rs_arr);
|
||||
|
||||
|
||||
|
||||
@@ -1,48 +1,48 @@
|
||||
/* Заводские калибровки по версии BALSAM и типу платы. Здесь
|
||||
* определяются массивы, а не только extern; не дублировать подключение.
|
||||
/* Заводские калибровки по версии BALSAM и типу платы. Здесь
|
||||
* определяются массивы, а не только extern; не дублировать подключение.
|
||||
*/
|
||||
#if BALSAM == 166 //-------------------------------------------------------------
|
||||
int def_cal[][8] = {
|
||||
|
||||
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
|
||||
4936, 4877, 4972, 4857, 1960, 1920, 2610, 2570, // Борт 0
|
||||
4876, 5005, 4876, 4847, 1950, 1965, 2600, 2615, // Борт 1
|
||||
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
|
||||
4936, 4877, 4972, 4857, 1960, 1920, 2610, 2570, // Борт 0
|
||||
4876, 5005, 4876, 4847, 1950, 1965, 2600, 2615, // Борт 1
|
||||
|
||||
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
|
||||
3820, 3790, 3505, 3380, 1718, 673, 854, 14, // Борт 0
|
||||
3835, 3785, 3522, 3332, 1697, 653, 860, 17, // Борт 1
|
||||
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
|
||||
3820, 3790, 3505, 3380, 1718, 673, 854, 14, // Борт 0
|
||||
3835, 3785, 3522, 3332, 1697, 653, 860, 17, // Борт 1
|
||||
|
||||
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
|
||||
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
|
||||
1281, 1272, 0, 0, 2049, 2050, 2749, 2750 };
|
||||
#endif //---------------------------------------------------------------------
|
||||
|
||||
#if BALSAM == 165 //-------------------------------------------------------------
|
||||
int def_cal[][8] = {
|
||||
|
||||
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
|
||||
5130, 4960, 4925, 5070, 1881, 1881, 2506, 2516, // Борт 0
|
||||
5020, 5040, 4950, 5030, 1871, 1879, 2507, 2514, // Борт 1
|
||||
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
|
||||
5130, 4960, 4925, 5070, 1881, 1881, 2506, 2516, // Борт 0
|
||||
5020, 5040, 4950, 5030, 1871, 1879, 2507, 2514, // Борт 1
|
||||
|
||||
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
|
||||
3890, 3865, 5100, 4850, 1730, 675, 854, 14, // Борт 0
|
||||
3845, 3800, 3250, 3100, 1044, 0, 860, 17, // Борт 1
|
||||
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
|
||||
3890, 3865, 5100, 4850, 1730, 675, 854, 14, // Борт 0
|
||||
3845, 3800, 3250, 3100, 1044, 0, 860, 17, // Борт 1
|
||||
|
||||
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
|
||||
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
|
||||
1289, 1280, 0, 0, 2073, 2071, 2773, 2771 };
|
||||
#endif //---------------------------------------------------------------------
|
||||
|
||||
#if BALSAM == 164 //-------------------------------------------------------------
|
||||
int def_cal[][8] = {
|
||||
|
||||
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
|
||||
7573, 7573, 7573, 7573, 1979, 1888, 2592, 2513, // Борт 0
|
||||
7573, 7573, 7573, 7573, 1970, 1907, 2584, 2558, // Борт 1
|
||||
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
|
||||
7573, 7573, 7573, 7573, 1979, 1888, 2592, 2513, // Борт 0
|
||||
7573, 7573, 7573, 7573, 1970, 1907, 2584, 2558, // Борт 1
|
||||
|
||||
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
|
||||
3920, 3905, 3300, 3220, 1015, 0, 854, 14, // Борт 0
|
||||
3835, 3785, 5100, 4600, 1750, 680, 860, 17, // Борт 1
|
||||
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
|
||||
3920, 3905, 3300, 3220, 1015, 0, 854, 14, // Борт 0
|
||||
3835, 3785, 5100, 4600, 1750, 680, 860, 17, // Борт 1
|
||||
|
||||
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
|
||||
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
|
||||
1266, 1267, 0, 0, 2063, 2040, 2678, 2655 };
|
||||
#endif //---------------------------------------------------------------------
|
||||
|
||||
@@ -51,15 +51,15 @@
|
||||
#if PXXXXX == 1 //-------------------------------------------------------------
|
||||
int def_cal[][6] = {
|
||||
|
||||
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
|
||||
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Борт 0
|
||||
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Борт 1
|
||||
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
|
||||
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Борт 0
|
||||
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Борт 1
|
||||
|
||||
// УМП UA UC IA IC 20mA 4mA
|
||||
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Борт 0
|
||||
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Борт 1
|
||||
// УМП UA UC IA IC 20mA 4mA
|
||||
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Борт 0
|
||||
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Борт 1
|
||||
|
||||
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
|
||||
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
|
||||
1270, 1270, 0, 0, 1950, 1950, 2600, 2600 };
|
||||
#endif //---------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Собственный, общий и специальные адреса последовательного обмена.
|
||||
* main задаёт адреса через set_cntrl_addr до начала обмена.
|
||||
/* Собственный, общий и специальные адреса последовательного обмена.
|
||||
* main задаёт адреса через set_cntrl_addr до начала обмена.
|
||||
*/
|
||||
#ifndef _CNTRL_ADR
|
||||
#define _CNTRL_ADR
|
||||
@@ -8,22 +8,22 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** адрес контроллера дла посылки всем АИНам */
|
||||
/** адрес контроллера дла посылки всем АИНам */
|
||||
extern int ADDR_FOR_ALL;
|
||||
|
||||
/** адрес контроллера дла посылки ответа */
|
||||
/** адрес контроллера дла посылки ответа */
|
||||
extern const int ADDR_ANSWER;
|
||||
|
||||
/** адреса терминала дла посылки ответа */
|
||||
/** адреса терминала дла посылки ответа */
|
||||
extern const int ADDR_TERMINAL;
|
||||
|
||||
/* Адрес контроллера */
|
||||
/* Адрес контроллера */
|
||||
extern int CNTRL_ADDR;
|
||||
|
||||
/* Универсальный адрес контроллера */
|
||||
/* Универсальный адрес контроллера */
|
||||
extern const int CNTRL_ADDR_UNIVERSAL;
|
||||
|
||||
/** Установка адреса контроллера дла прошивки */
|
||||
/** Установка адреса контроллера дла прошивки */
|
||||
void set_cntrl_addr (int cntrl_addr,int cntrl_addr_for_all);
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Интерфейсы CRC. Различать буфер кадра и массив слов EEPROM;
|
||||
* результат зависит от порядка обработки байтов.
|
||||
/* Интерфейсы CRC. Различать буфер кадра и массив слов EEPROM;
|
||||
* результат зависит от порядка обработки байтов.
|
||||
*/
|
||||
typedef unsigned short WORD;
|
||||
typedef unsigned char byte;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Коэффициенты и изменяемая история фильтра. Каждый независимый
|
||||
* канал должен иметь отдельный экземпляр FILTERBAT.
|
||||
/* Коэффициенты и изменяемая история фильтра. Каждый независимый
|
||||
* канал должен иметь отдельный экземпляр FILTERBAT.
|
||||
*/
|
||||
#ifndef _FILTER_BAT2
|
||||
#define _FILTER_BAT2
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Интерфейс канала индикации. Он не формирует START_DPTB
|
||||
* и не должен использоваться вместо функций управления нагрузкой.
|
||||
/* Интерфейс канала индикации. Он не формирует START_DPTB
|
||||
* и не должен использоваться вместо функций управления нагрузкой.
|
||||
*/
|
||||
void kanal_Send(int adr, long dat, int dot);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* ×àñòîòû è ñîñòîÿíèÿ èçìåðåíèé. READY â 166 — ñ÷¸ò÷èê äî íóëÿ.
|
||||
* READY_FREQ çàäà¸ò òàéìåð ÑÈÔÓ, DAC_FREQ — ðàñ÷¸ò ÖÀÏ.
|
||||
/* Частоты и состояния измерений. READY в 166 — счётчик до нуля.
|
||||
* READY_FREQ задаёт таймер СИФУ, DAC_FREQ — расчёт ЦАП.
|
||||
*/
|
||||
#ifndef _MEASURE
|
||||
#define _MEASURE
|
||||
@@ -65,14 +65,14 @@ typedef union
|
||||
#define NOER 0xE000//C
|
||||
#define EROR 0x01FF
|
||||
|
||||
#define READY_FREQ (500.0 * 2)// Ãö
|
||||
#define BLINK_FREQ 2 // Ãö
|
||||
#define READY_FREQ (500.0 * 2)// Гц
|
||||
#define BLINK_FREQ 2 // Гц
|
||||
#define BLINK_TIME (READY_FREQ / BLINK_FREQ)
|
||||
|
||||
#define CANPOWSE 20
|
||||
|
||||
#define ADC_FREQ 3750 //3885.0//777//2000//20000 //777 //3885 // Ãö (777*5)
|
||||
#define DAC_FREQ 200//5 // Ãö
|
||||
#define ADC_FREQ 3750 //3885.0//777//2000//20000 //777 //3885 // Гц (777*5)
|
||||
#define DAC_FREQ 200//5 // Гц
|
||||
|
||||
#define LOAD_TIME 30//15 // sec
|
||||
|
||||
@@ -87,23 +87,23 @@ extern unsigned int Caliber_time;
|
||||
|
||||
#define ZERO 27
|
||||
|
||||
#define Cooling 5 // (°Ñ) Ãèñòåðåçèñ ïî ñíàòèþ ïåðåãðåâà
|
||||
#define Cooling 5 // (°С) Гистерезис по снатию перегрева
|
||||
|
||||
#define COSPi6 0.86602540378443864676372317075294
|
||||
|
||||
#define RADIX2 1.4142135623730950488016887242097
|
||||
|
||||
#define POWER_380 0 // ïèòàíèå 380Â
|
||||
#define POWER_38O 1 // ïèòàíèå 380Â
|
||||
#define POWER_380 0 // питание 380В
|
||||
#define POWER_38O 1 // питание 380В
|
||||
|
||||
#define CURRENT 2 // òîê
|
||||
#define VOLTAGE 3 // íàïðàæåíèå
|
||||
#define CURRENT 2 // ток
|
||||
#define VOLTAGE 3 // напражение
|
||||
|
||||
#define POWER_31 4 // ïèòàíèå 31Â
|
||||
#define POWER_27 5 // ïèòàíèå 24Â
|
||||
#define POWER_24 6 // ïèòàíèå 24Â
|
||||
#define POWER_15 7 // ïèòàíèå 15Â
|
||||
#define TERMO_AD 8 // òåðìîäàò÷èê ìåëêîñõåìà
|
||||
#define POWER_31 4 // питание 31В
|
||||
#define POWER_27 5 // питание 24В
|
||||
#define POWER_24 6 // питание 24В
|
||||
#define POWER_15 7 // питание 15В
|
||||
#define TERMO_AD 8 // термодатчик мелкосхема
|
||||
|
||||
extern int TPL_CANS,tpl_cans;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Технологические регистры и Modbus. ANSWER_LEN ограничивает
|
||||
* массив modbus; адресом логгера 0x1000 индексировать его нельзя.
|
||||
/* Технологические регистры и Modbus. ANSWER_LEN ограничивает
|
||||
* массив modbus; адресом логгера 0x1000 индексировать его нельзя.
|
||||
*/
|
||||
#ifndef MESSAGE_H
|
||||
#define MESSAGE_H
|
||||
@@ -14,8 +14,8 @@ typedef unsigned char CHAR;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
unsigned char Address; // Адрес контроллера
|
||||
unsigned char Number; // Номер команды
|
||||
unsigned char Address; // Адрес контроллера
|
||||
unsigned char Number; // Номер команды
|
||||
|
||||
BAITE byte0;
|
||||
BAITE byte1;
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#define REVERSE 1
|
||||
|
||||
/* Выбирает исполнение 166: соответствующие калибровки и обратный порядок индикаторов задаются условными блоками ниже. */
|
||||
#define BALSAM 166
|
||||
#define BALSAM 165
|
||||
|
||||
#if BALSAM == 166
|
||||
#define OBOROT REVERSE
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/* Физические GPIO с учётом режима и полярности. set означает
|
||||
* активировать функцию, не всегда выставить 1. START/STOP нагрузки
|
||||
* активны единицей, RES_OUT_2 нулём. Дискретами владеет автомат СИФУ.
|
||||
/* Физические GPIO с учётом режима и полярности. set означает
|
||||
* активировать функцию, не всегда выставить 1. START/STOP нагрузки
|
||||
* активны единицей, RES_OUT_2 нулём. Дискретами владеет автомат СИФУ.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Состояния пульта dsk_EPLT. Обработчик таймера нагрузки
|
||||
* определён отдельно в measure.c.
|
||||
/* Состояния пульта dsk_EPLT. Обработчик таймера нагрузки
|
||||
* определён отдельно в measure.c.
|
||||
*/
|
||||
//void what_is(void);
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
/* Автомат SPI EEPROM продвигает таймер 2. Синхронное ожидание
|
||||
* требует разрешённых IRQ. PAGE_LEN/WORD_LEN задают адресацию страниц.
|
||||
/* Автомат SPI EEPROM продвигает таймер 2. Синхронное ожидание
|
||||
* требует разрешённых IRQ. PAGE_LEN/WORD_LEN задают адресацию страниц.
|
||||
*/
|
||||
#ifndef __SPISE2P_H__
|
||||
|
||||
#define __SPISE2P_H__
|
||||
|
||||
// Ёмкость памати в байтах
|
||||
// Ёмкость памати в байтах
|
||||
#define SEEPROM_LEN 0x10000
|
||||
|
||||
#define NULL 0
|
||||
@@ -97,25 +97,25 @@ void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *data);
|
||||
#define WORD_LEN 1
|
||||
#endif
|
||||
|
||||
/* Установка драйвера сериальной EEPROM. **
|
||||
** Инициализациа SPI и проч. Также настройка таймера. **
|
||||
** Драйвер работает на прерываниах от таймера 2! */
|
||||
/* Установка драйвера сериальной EEPROM. **
|
||||
** Инициализациа SPI и проч. Также настройка таймера. **
|
||||
** Драйвер работает на прерываниах от таймера 2! */
|
||||
void InitSeeprom(void);
|
||||
|
||||
/* Запись блока в SEEPROM. Параметры таковы: **
|
||||
** adres - адрес в епромке, куда писать. **
|
||||
** adres = 0..0x8000, если длина слова 8 бит **
|
||||
** adres = 0..0x4000, если длина слова 16 бит **
|
||||
** buf - указатель на памать, откуда писать. **
|
||||
** size - длина блока в байтах. По-любому в байтах! */
|
||||
/* Запись блока в SEEPROM. Параметры таковы: **
|
||||
** adres - адрес в епромке, куда писать. **
|
||||
** adres = 0..0x8000, если длина слова 8 бит **
|
||||
** adres = 0..0x4000, если длина слова 16 бит **
|
||||
** buf - указатель на памать, откуда писать. **
|
||||
** size - длина блока в байтах. По-любому в байтах! */
|
||||
void Seeprom_write(unsigned int adres, unsigned int buf[], unsigned int size);
|
||||
|
||||
/* Чтение блока из SEEPROM. Параметры таковы: **
|
||||
** adres - адрес в епромке, откуда читать. **
|
||||
** adres = 0..0x8000, если длина слова 8 бит **
|
||||
** adres = 0..0x4000, если длина слова 16 бит **
|
||||
** buf - указатель на памать, куда читать. **
|
||||
** size - длина блока в байтах. По-любому в байтах! */
|
||||
/* Чтение блока из SEEPROM. Параметры таковы: **
|
||||
** adres - адрес в епромке, откуда читать. **
|
||||
** adres = 0..0x8000, если длина слова 8 бит **
|
||||
** adres = 0..0x4000, если длина слова 16 бит **
|
||||
** buf - указатель на памать, куда читать. **
|
||||
** size - длина блока в байтах. По-любому в байтах! */
|
||||
void Seeprom_read(unsigned int adres, unsigned int buf[], unsigned int size);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/* Инициализация памяти и задержки. pause_us не использовать
|
||||
* для длительности дискретов; их отсчитывает аппаратный таймер.
|
||||
/* Инициализация памяти и задержки. pause_us не использовать
|
||||
* для длительности дискретов; их отсчитывает аппаратный таймер.
|
||||
*/
|
||||
#ifndef TOOLS_H
|
||||
#define TOOLS_H
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
/* Подключается только из DAC.c; в host-тесте — с подменой GPIO/IRQ. */
|
||||
/* Подключается только из DAC.c; в host-тесте — с подменой GPIO/IRQ. */
|
||||
#ifndef UMP_CONTROL_IMPL_H
|
||||
#define UMP_CONTROL_IMPL_H
|
||||
/* Аппаратная обёртка автомата. Храним её в существующем DAC.c, чтобы
|
||||
* старый проект CCS и новый CCS12 собирали одинаковый набор исходников.
|
||||
* Все входы ниже сохраняют прежнюю маску IRQ; нельзя просто делать EINT
|
||||
* при выходе, поскольку вызов возможен из уже защищённого обработчика. */
|
||||
/* Аппаратная обёртка автомата. Храним её в существующем DAC.c, чтобы
|
||||
* старый проект CCS и новый CCS12 собирали одинаковый набор исходников.
|
||||
* Все входы ниже сохраняют прежнюю маску IRQ; нельзя просто делать EINT
|
||||
* при выходе, поскольку вызов возможен из уже защищённого обработчика. */
|
||||
static volatile UMP_PULSE_STATE ump_pulse;
|
||||
static volatile unsigned int ump_pulse_enabled;
|
||||
|
||||
static void UMP_apply_outputs(unsigned int previous_output, unsigned int previous_relay)
|
||||
{
|
||||
if (previous_output != ump_pulse.output) {
|
||||
/* Сначала снимаем старый сигнал, затем выставляем новый.
|
||||
* Промежуточное состояние — оба выключены, а не оба включены. */
|
||||
/* Сначала снимаем старый сигнал, затем выставляем новый.
|
||||
* Промежуточное состояние — оба выключены, а не оба включены. */
|
||||
clear_START_DPTB();
|
||||
clear_STOP_DPTB();
|
||||
if (ump_pulse.output == UMP_PULSE_START) set_START_DPTB();
|
||||
@@ -22,8 +22,8 @@ static void UMP_apply_outputs(unsigned int previous_output, unsigned int previou
|
||||
if (ump_pulse.relay) set_RES_OUT_2();
|
||||
else clear_RES_OUT_2();
|
||||
}
|
||||
/* Старое имя оставлено для протокола логгера. Это теперь отражение
|
||||
* таймера автомата, а не переменная, которую одновременно правит main. */
|
||||
/* Старое имя оставлено для протокола логгера. Это теперь отражение
|
||||
* таймера автомата, а не переменная, которую одновременно правит main. */
|
||||
IMPowse = ump_pulse.remaining;
|
||||
}
|
||||
|
||||
@@ -34,8 +34,8 @@ void UMP_pulse_init(void)
|
||||
ump_pulse_init(&ump_pulse, Commands);
|
||||
clear_START_DPTB(); clear_STOP_DPTB(); clear_RES_OUT_2();
|
||||
IMPowse = 0;
|
||||
/* Разрешаем обработку только после загрузки параметров и настройки
|
||||
* ЦАП. Команды до этой точки не исполняются задним числом. */
|
||||
/* Разрешаем обработку только после загрузки параметров и настройки
|
||||
* ЦАП. Команды до этой точки не исполняются задним числом. */
|
||||
ump_pulse_enabled = 1;
|
||||
}
|
||||
__restore_interrupts(saved);
|
||||
@@ -47,9 +47,9 @@ void UMP_commands_write(unsigned int commands)
|
||||
unsigned int output = ump_pulse.output, relay = ump_pulse.relay;
|
||||
Commands = commands;
|
||||
if (Desk == dsk_LOAD && ump_pulse_enabled) {
|
||||
/* Выполняем фронт в момент принятия слова. Нет очереди, которую
|
||||
* main должен опросить после длительного обращения к EEPROM.
|
||||
* Здесь только несколько операций с памятью/GPIO, без ожиданий. */
|
||||
/* Выполняем фронт в момент принятия слова. Нет очереди, которую
|
||||
* main должен опросить после длительного обращения к EEPROM.
|
||||
* Здесь только несколько операций с памятью/GPIO, без ожиданий. */
|
||||
ump_pulse_accept(&ump_pulse, commands, (unsigned int)READY_FREQ);
|
||||
UMP_apply_outputs(output, relay);
|
||||
}
|
||||
@@ -70,11 +70,11 @@ void UMP_pulse_tick(void)
|
||||
void UMP_reset_parameter_commands(void)
|
||||
{
|
||||
unsigned int saved = __disable_interrupts();
|
||||
/* EEPROM содержит параметры, но не является источником команд пуска.
|
||||
* Сохраняем последние принятые START/STOP и историю фронтов автомата.
|
||||
* Нельзя обнулить их при Load/Default: таймер ЦАП читает тот же уровень,
|
||||
* а следующий повтор пакета с единицей не должен стать ложным фронтом.
|
||||
* Другие режимы платы сохраняют прежнее поведение полного сброса. */
|
||||
/* EEPROM содержит параметры, но не является источником команд пуска.
|
||||
* Сохраняем последние принятые START/STOP и историю фронтов автомата.
|
||||
* Нельзя обнулить их при Load/Default: таймер ЦАП читает тот же уровень,
|
||||
* а следующий повтор пакета с единицей не должен стать ложным фронтом.
|
||||
* Другие режимы платы сохраняют прежнее поведение полного сброса. */
|
||||
if (Desk == dsk_LOAD) Commands &= UMP_START_MASK | UMP_STOP_MASK;
|
||||
else Commands = 0;
|
||||
__restore_interrupts(saved);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* Управление импульсами СИФУ. Чистый автомат без доступа к GPIO.
|
||||
* Один и тот же код используется прошивкой и host-тестом.
|
||||
* ВАЖНО: вызывающая сторона сериализует init/accept/tick запретом IRQ.
|
||||
* volatile обеспечивает обращения к общему состоянию, но не заменяет
|
||||
* критическую секцию: обновление нескольких полей не является атомарным.
|
||||
/* Управление импульсами СИФУ. Чистый автомат без доступа к GPIO.
|
||||
* Один и тот же код используется прошивкой и host-тестом.
|
||||
* ВАЖНО: вызывающая сторона сериализует init/accept/tick запретом IRQ.
|
||||
* volatile обеспечивает обращения к общему состоянию, но не заменяет
|
||||
* критическую секцию: обновление нескольких полей не является атомарным.
|
||||
*/
|
||||
#ifndef UMP_PULSE_H
|
||||
#define UMP_PULSE_H
|
||||
@@ -21,10 +21,10 @@ typedef struct {
|
||||
|
||||
static void ump_pulse_init(volatile UMP_PULSE_STATE *s, unsigned int commands)
|
||||
{
|
||||
/* Уже активная команда при окончании загрузки не является новым пуском.
|
||||
* Снимаем физические выходы отдельно в аппаратной обёртке.
|
||||
* Если начальное слово нулевое, первая свежая единица будет принята:
|
||||
* больше не нужен случайный проход main, успевший прочитать ноль. */
|
||||
/* Уже активная команда при окончании загрузки не является новым пуском.
|
||||
* Снимаем физические выходы отдельно в аппаратной обёртке.
|
||||
* Если начальное слово нулевое, первая свежая единица будет принята:
|
||||
* больше не нужен случайный проход main, успевший прочитать ноль. */
|
||||
s->previous = commands;
|
||||
s->remaining = 0;
|
||||
s->output = UMP_PULSE_NONE;
|
||||
@@ -35,23 +35,23 @@ static void ump_pulse_accept(volatile UMP_PULSE_STATE *s,
|
||||
unsigned int commands, unsigned int ticks)
|
||||
{
|
||||
unsigned int rising = commands & ~s->previous;
|
||||
/* История относится к каждому принятому слову CAN/RS, а не к редким
|
||||
* снимкам main. Поэтому даже 1->0->1 между проходами main замечается.
|
||||
* Повторные пакеты с удерживаемой единицей не продлевают импульс. */
|
||||
/* История относится к каждому принятому слову CAN/RS, а не к редким
|
||||
* снимкам main. Поэтому даже 1->0->1 между проходами main замечается.
|
||||
* Повторные пакеты с удерживаемой единицей не продлевают импульс. */
|
||||
s->previous = commands;
|
||||
if (commands & UMP_STOP_MASK) {
|
||||
/* STOP имеет приоритет даже при одновременном фронте START.
|
||||
* Его удержание запрещает новый START. Запрещённый пуск не ставим
|
||||
* в очередь: снятие STOP не должно неожиданно запускать СИФУ. */
|
||||
/* STOP имеет приоритет даже при одновременном фронте START.
|
||||
* Его удержание запрещает новый START. Запрещённый пуск не ставим
|
||||
* в очередь: снятие STOP не должно неожиданно запускать СИФУ. */
|
||||
if (rising & UMP_STOP_MASK) {
|
||||
s->output = UMP_PULSE_STOP;
|
||||
s->remaining = ticks;
|
||||
s->relay = 0;
|
||||
}
|
||||
} else if (rising & UMP_START_MASK) {
|
||||
/* Новый START после снятия команды STOP переключает выходы.
|
||||
* Новый фронт во время START продлевает существующий импульс,
|
||||
* как раньше; отдельный электрический фронт здесь не обещается. */
|
||||
/* Новый START после снятия команды STOP переключает выходы.
|
||||
* Новый фронт во время START продлевает существующий импульс,
|
||||
* как раньше; отдельный электрический фронт здесь не обещается. */
|
||||
s->output = UMP_PULSE_START;
|
||||
s->remaining = ticks;
|
||||
s->relay = 1;
|
||||
@@ -60,9 +60,9 @@ static void ump_pulse_accept(volatile UMP_PULSE_STATE *s,
|
||||
|
||||
static void ump_pulse_tick(volatile UMP_PULSE_STATE *s)
|
||||
{
|
||||
/* Единственный владелец отсчёта — таймер 1 кГц. main не участвует
|
||||
* в завершении импульса, поэтому EEPROM не растягивает его.
|
||||
* RES_OUT_2 сохраняет последнее состояние после конца импульса. */
|
||||
/* Единственный владелец отсчёта — таймер 1 кГц. main не участвует
|
||||
* в завершении импульса, поэтому EEPROM не растягивает его.
|
||||
* RES_OUT_2 сохраняет последнее состояние после конца импульса. */
|
||||
if (s->remaining && --s->remaining == 0)
|
||||
s->output = UMP_PULSE_NONE;
|
||||
}
|
||||
|
||||
+105
-105
@@ -1,8 +1,8 @@
|
||||
/* Низкоуровневый UART двух портов. RX ISR собирает RS_Header,
|
||||
* TX ISR продолжает передачу. RS_DataReady передаёт готовый кадр
|
||||
* в main для проверки CRC; приём байтов ещё не означает исполнения.
|
||||
* RS_Send содержит ожидания UART и не относится к быстрому пути СИФУ.
|
||||
* Размеры буферов нужно понимать с учётом 16-битной ABI C2000.
|
||||
/* Низкоуровневый UART двух портов. RX ISR собирает RS_Header,
|
||||
* TX ISR продолжает передачу. RS_DataReady передаёт готовый кадр
|
||||
* в main для проверки CRC; приём байтов ещё не означает исполнения.
|
||||
* RS_Send содержит ожидания UART и не относится к быстрому пути СИФУ.
|
||||
* Размеры буферов нужно понимать с учётом 16-битной ABI C2000.
|
||||
*/
|
||||
//#include "big_dsp_module.h"
|
||||
|
||||
@@ -28,7 +28,7 @@ static char size_cmd15=1;
|
||||
void RS_RX_Handler(RS_DATA *rs_arr);
|
||||
void RS_TX_Handler(RS_DATA *rs_arr);
|
||||
|
||||
/** Обработчик прерываний UART - принато */
|
||||
/** Обработчик прерываний UART - принато */
|
||||
interrupt void RSA_RX_Handler(void)
|
||||
{
|
||||
// Set interrupt priority:
|
||||
@@ -101,7 +101,7 @@ interrupt void RSB_TX_Handler(void)
|
||||
PieCtrlRegs.PIEIER9.all = TempPIEIER;
|
||||
}
|
||||
|
||||
/** Обработчик прерываний UART - принато */
|
||||
/** Обработчик прерываний UART - принато */
|
||||
void RS_RX_Handler(RS_DATA *rs_arr)
|
||||
{
|
||||
char Rc;
|
||||
@@ -109,16 +109,16 @@ void RS_RX_Handler(RS_DATA *rs_arr)
|
||||
|
||||
// led1_on();
|
||||
|
||||
for(;;) // 'goto' это не оператор азыка С
|
||||
for(;;) // 'goto' это не оператор азыка С
|
||||
{
|
||||
if(!rs_arr->SciRegs->SCIRXST.bit.RXRDY) // Receiver ready flag
|
||||
{
|
||||
PieCtrlRegs.PIEACK.bit.ACK9 |= 1;
|
||||
rs_arr->SciRegs->SCIFFRX.bit.RXFFINTCLR=1; // Clear INT flag
|
||||
return; // кстати это единственный выход из прерываниа
|
||||
return; // кстати это единственный выход из прерываниа
|
||||
}
|
||||
|
||||
Rc = rs_arr->SciRegs->SCIRXBUF.bit.RXDT; // Читаем символ в любом случае
|
||||
Rc = rs_arr->SciRegs->SCIRXBUF.bit.RXDT; // Читаем символ в любом случае
|
||||
|
||||
if(rs_arr->SciRegs->SCIRXST.bit.RXERROR) // Receiver error flag
|
||||
{
|
||||
@@ -128,110 +128,110 @@ void RS_RX_Handler(RS_DATA *rs_arr)
|
||||
continue;
|
||||
}
|
||||
|
||||
if(rs_arr->RS_DataReady) continue; // Не забрали данные
|
||||
if(rs_arr->RS_DataReady) continue; // Не забрали данные
|
||||
|
||||
if (rs_arr->RS_Flag9bit==1) // дла RS485????????
|
||||
if (rs_arr->RS_Flag9bit==1) // дла RS485????????
|
||||
{
|
||||
// Инициализируем переменные и флаги
|
||||
rs_arr->RS_FlagBegin = true; // Ждем заголовок
|
||||
// Инициализируем переменные и флаги
|
||||
rs_arr->RS_FlagBegin = true; // Ждем заголовок
|
||||
rs_arr->RS_RecvLen = 0;
|
||||
rs_arr->RS_FlagSkiping = false;
|
||||
rs_arr->RS_HeaderCnt = 0;
|
||||
rs_arr->RS_Cmd = 0;
|
||||
}
|
||||
|
||||
if(rs_arr->RS_FlagSkiping) continue; // Не нам
|
||||
if(rs_arr->RS_FlagSkiping) continue; // Не нам
|
||||
|
||||
if (rs_arr->RS_FlagBegin) // Заголовок
|
||||
if (rs_arr->RS_FlagBegin) // Заголовок
|
||||
{
|
||||
if (rs_arr->RS_HeaderCnt==0) // Адрес контроллера или стандартнаа команда
|
||||
if (rs_arr->RS_HeaderCnt==0) // Адрес контроллера или стандартнаа команда
|
||||
{
|
||||
if( (Rc == CNTRL_ADDR_UNIVERSAL) || (Rc == CNTRL_ADDR && CNTRL_ADDR!=0) || ((Rc == rs_arr->addr_answer) && rs_arr->flag_LEADING)
|
||||
|| ((Rc == ADDR_FOR_ALL && ADDR_FOR_ALL!=0) && !rs_arr->flag_LEADING))
|
||||
|
||||
{
|
||||
rs_arr->addr_recive=Rc; // запомнили адрес по которому нас запросили
|
||||
rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // Первый байт
|
||||
RS_SetBitMode(rs_arr,8); // перестроились в 8-бит режим
|
||||
rs_arr->addr_recive=Rc; // запомнили адрес по которому нас запросили
|
||||
rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // Первый байт
|
||||
RS_SetBitMode(rs_arr,8); // перестроились в 8-бит режим
|
||||
}
|
||||
else
|
||||
{
|
||||
rs_arr->RS_FlagSkiping = true; // Не нашему контроллеру
|
||||
rs_arr->RS_FlagBegin = false; // остались в 9-бит режиме
|
||||
rs_arr->RS_FlagSkiping = true; // Не нашему контроллеру
|
||||
rs_arr->RS_FlagBegin = false; // остались в 9-бит режиме
|
||||
// led1_off();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // Второй байт и т.д.
|
||||
rs_arr->RS_Header[rs_arr->RS_HeaderCnt++] = Rc; // Второй байт и т.д.
|
||||
|
||||
if (rs_arr->RS_HeaderCnt == 7 && rs_arr->RS_Cmd==CMD_MODBUS_16 && !rs_arr->flag_LEADING)
|
||||
{
|
||||
RS_Len[CMD_MODBUS_16] = (10+Rc);
|
||||
}
|
||||
|
||||
// если второй байт - это команда
|
||||
// если второй байт - это команда
|
||||
if (rs_arr->RS_HeaderCnt == 2)
|
||||
{
|
||||
rs_arr->RS_Cmd = Rc;
|
||||
// Проверка длины посылки
|
||||
// CMD_LOAD - младшаа на данный момент
|
||||
// CMD_STD_ANS - старшаа на данный момент
|
||||
// Проверка длины посылки
|
||||
// CMD_LOAD - младшаа на данный момент
|
||||
// CMD_STD_ANS - старшаа на данный момент
|
||||
if ((rs_arr->RS_Cmd < CMD_MODBUS_3) || (rs_arr->RS_Cmd > CMD_STD_ANS) || (RS_Len[rs_arr->RS_Cmd]<3)
|
||||
|| ((rs_arr->RS_Cmd == CMD_LOAD)&&(rs_arr->RS_PrevCmd != CMD_INITLOAD))
|
||||
)
|
||||
{
|
||||
RS_SetBitMode(rs_arr,9); // Получили все перестроились в 9-бит дла RS485?
|
||||
rs_arr->RS_HeaderCnt = 0; // Потому что команда не та
|
||||
RS_SetBitMode(rs_arr,9); // Получили все перестроились в 9-бит дла RS485?
|
||||
rs_arr->RS_HeaderCnt = 0; // Потому что команда не та
|
||||
rs_arr->RS_FlagBegin = true;
|
||||
rs_arr->RS_FlagSkiping = false;
|
||||
rs_arr->RS_Cmd=0;
|
||||
// led1_off();
|
||||
continue;
|
||||
}
|
||||
if (rs_arr->RS_Cmd == CMD_LOAD) // Дла этой команды заголовок очень короткий
|
||||
rs_arr->RS_FlagBegin = false;// дальше идут данные
|
||||
if (rs_arr->RS_Cmd == CMD_LOAD) // Дла этой команды заголовок очень короткий
|
||||
rs_arr->RS_FlagBegin = false;// дальше идут данные
|
||||
}
|
||||
|
||||
if( (rs_arr->RS_HeaderCnt >= RS_Len[rs_arr->RS_Cmd]) ||
|
||||
(rs_arr->RS_HeaderCnt >= sizeof(rs_arr->RS_Header)))
|
||||
{ // Получили заголовок
|
||||
RS_SetBitMode(rs_arr,9); // Получили все перестроились в 9-бит дла RS485?
|
||||
{ // Получили заголовок
|
||||
RS_SetBitMode(rs_arr,9); // Получили все перестроились в 9-бит дла RS485?
|
||||
rs_arr->RS_FlagBegin = false;
|
||||
rs_arr->RS_FlagSkiping = true;
|
||||
rs_arr->RS_DataReady = true;
|
||||
rs_arr->RS_Cmd=0;
|
||||
// led1_off();
|
||||
} } }
|
||||
else // Поток данных
|
||||
else // Поток данных
|
||||
{
|
||||
if(rs_arr->pRS_RecvPtr<(unsigned int *)Rec_Bloc_Begin || rs_arr->pRS_RecvPtr>(unsigned int *)Rec_Bloc_End)
|
||||
{
|
||||
rs_arr->pRS_RecvPtr = (unsigned int *)Rec_Bloc_Begin; // На программу надейса, а сам не плошай
|
||||
rs_arr->pRecvPtr = (unsigned int *)Rec_Bloc_Begin; // На программу надейса, а сам не плошай
|
||||
rs_arr->pRS_RecvPtr = (unsigned int *)Rec_Bloc_Begin; // На программу надейса, а сам не плошай
|
||||
rs_arr->pRecvPtr = (unsigned int *)Rec_Bloc_Begin; // На программу надейса, а сам не плошай
|
||||
}
|
||||
if(rs_arr->RS_PrevCmd != CMD_INITLOAD) continue; // Мы здесь оказались по какой-то чудовищной ошибке
|
||||
if(rs_arr->RS_PrevCmd != CMD_INITLOAD) continue; // Мы здесь оказались по какой-то чудовищной ошибке
|
||||
|
||||
if(rs_arr->RS_DataReady) // Если данные в основном цикле не забраны,
|
||||
{ // то пропускаем следующую посылку
|
||||
rs_arr->RS_FlagSkiping = true; // Игнорируем до следующего заголовка
|
||||
if(rs_arr->RS_DataReady) // Если данные в основном цикле не забраны,
|
||||
{ // то пропускаем следующую посылку
|
||||
rs_arr->RS_FlagSkiping = true; // Игнорируем до следующего заголовка
|
||||
// led1_off();
|
||||
continue;
|
||||
}
|
||||
RS_BytePtr = rs_arr->RS_RecvLen++ % 2;
|
||||
if(RS_BytePtr) *rs_arr->pRS_RecvPtr++ |= Rc; // Получили слово
|
||||
if(RS_BytePtr) *rs_arr->pRS_RecvPtr++ |= Rc; // Получили слово
|
||||
else *rs_arr->pRS_RecvPtr = Rc<<8;
|
||||
|
||||
if(rs_arr->RS_Length <= rs_arr->RS_RecvLen) // Конец посылки
|
||||
if(rs_arr->RS_Length <= rs_arr->RS_RecvLen) // Конец посылки
|
||||
{
|
||||
rs_arr->RS_PrevCmd = rs_arr->RS_Header[1] = CMD_LOAD;
|
||||
RS_SetBitMode(rs_arr,9); // Получили все данные перестроились в 9-бит дла RS485?
|
||||
rs_arr->RS_FlagSkiping = true; // Игнорируем до следующего заголовка
|
||||
rs_arr->RS_DataReady = true; // Флаг в основной цикл - данные получены
|
||||
RS_SetBitMode(rs_arr,9); // Получили все данные перестроились в 9-бит дла RS485?
|
||||
rs_arr->RS_FlagSkiping = true; // Игнорируем до следующего заголовка
|
||||
rs_arr->RS_DataReady = true; // Флаг в основной цикл - данные получены
|
||||
// led1_off();
|
||||
} } } }
|
||||
|
||||
/** Обработчик прерываний UART - послано */
|
||||
/** Обработчик прерываний UART - послано */
|
||||
void RS_TX_Handler(RS_DATA *rs_arr)
|
||||
{
|
||||
char RS_BytePtr;
|
||||
@@ -241,19 +241,19 @@ void RS_TX_Handler(RS_DATA *rs_arr)
|
||||
{
|
||||
if(++rs_arr->RS_SendLen >= rs_arr->RS_SLength)
|
||||
{
|
||||
enableUARTInt(rs_arr); /* Запрещаем прерываниа по передаче */
|
||||
enableUARTInt(rs_arr); /* Запрещаем прерываниа по передаче */
|
||||
}
|
||||
SCI_send(rs_arr,*(rs_arr->pRS_SendPtr++));
|
||||
|
||||
if(rs_arr->RS_SendLen >= rs_arr->RS_SLength)
|
||||
{
|
||||
RS_Wait4OK(rs_arr);
|
||||
// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Пауза дла PC */
|
||||
// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Пауза дла PC */
|
||||
|
||||
RS_SetBitMode(rs_arr,9); /* Передали все перестроились в 9-бит дла RS485?*/
|
||||
RS_Line_to_receive(rs_arr); /* режим приема RS485 */
|
||||
RS_SetBitMode(rs_arr,9); /* Передали все перестроились в 9-бит дла RS485?*/
|
||||
RS_Line_to_receive(rs_arr); /* режим приема RS485 */
|
||||
|
||||
rs_arr->flag_TIMEOUT_to_Send=false; /* сбросили флаг ожиданиа таймаута */
|
||||
rs_arr->flag_TIMEOUT_to_Send=false; /* сбросили флаг ожиданиа таймаута */
|
||||
}
|
||||
}
|
||||
else /* BM_PACKED */
|
||||
@@ -262,7 +262,7 @@ void RS_TX_Handler(RS_DATA *rs_arr)
|
||||
RS_BytePtr = (rs_arr->RS_SendLen++) % 2;
|
||||
if(rs_arr->RS_SendLen >= rs_arr->RS_SLength)
|
||||
{
|
||||
enableUARTInt(rs_arr); /* Запрещаем прерываниа по передаче */
|
||||
enableUARTInt(rs_arr); /* Запрещаем прерываниа по передаче */
|
||||
}
|
||||
if(RS_BytePtr) SCI_send(rs_arr, LOBYTE( *(rs_arr->pRS_SendPtr++) ));
|
||||
else SCI_send(rs_arr, HIBYTE( *rs_arr->pRS_SendPtr ));
|
||||
@@ -270,9 +270,9 @@ void RS_TX_Handler(RS_DATA *rs_arr)
|
||||
if(rs_arr->RS_SendLen >= rs_arr->RS_SLength)
|
||||
{
|
||||
RS_Wait4OK(rs_arr);
|
||||
// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Пауза дла PC */
|
||||
// RS_SetBitMode(rs_arr,9); /* Передали все перестроились в 9-бит дла RS485?*/
|
||||
// RS_Line_to_receive(); /* режим приема RS485 */
|
||||
// for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Пауза дла PC */
|
||||
// RS_SetBitMode(rs_arr,9); /* Передали все перестроились в 9-бит дла RS485?*/
|
||||
// RS_Line_to_receive(); /* режим приема RS485 */
|
||||
|
||||
}
|
||||
}
|
||||
@@ -281,7 +281,7 @@ void RS_TX_Handler(RS_DATA *rs_arr)
|
||||
// rs_arr->SciRegs->SCIFFTX.bit.TXINTCLR=1; // Clear INT flag
|
||||
}
|
||||
|
||||
/** Инициализациа массива длин команд */
|
||||
/** Инициализациа массива длин команд */
|
||||
void setup_arr_cmd_length()
|
||||
{
|
||||
int i;
|
||||
@@ -307,89 +307,89 @@ void setup_arr_cmd_length()
|
||||
RS_Len[CMD_EXTEND] = 18;
|
||||
}
|
||||
|
||||
/** Настройка режима приема/передачи */
|
||||
/** Настройка режима приема/передачи */
|
||||
void RS_SetBitMode(RS_DATA *rs_arr,int n)
|
||||
{
|
||||
if(n == 8)
|
||||
{
|
||||
RS_SetLineMode(rs_arr,8,'N',1); /* режим линии */
|
||||
RS_SetLineMode(rs_arr,8,'N',1); /* режим линии */
|
||||
rs_arr->RS_Flag9bit=0;
|
||||
}
|
||||
if(n == 9)
|
||||
{
|
||||
RS_SetLineMode(rs_arr,8,'N',1); /* режим линии */
|
||||
RS_SetLineMode(rs_arr,8,'N',1); /* режим линии */
|
||||
rs_arr->RS_Flag9bit=1;
|
||||
} }
|
||||
|
||||
/** Посылка блока байтов.
|
||||
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param buf адрес массива
|
||||
@param len количество байт
|
||||
/** Посылка блока байтов.
|
||||
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
|
||||
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
|
||||
@param buf адрес массива
|
||||
@param len количество байт
|
||||
@see RS_BSend, RS_TRANSMIT_INTR */
|
||||
/* Передачу продолжает TX ISR. Здесь есть старые программные паузы
|
||||
* и ожидания UART: не вызывать из CAN ISR или секции автомата СИФУ.
|
||||
/* Передачу продолжает TX ISR. Здесь есть старые программные паузы
|
||||
* и ожидания UART: не вызывать из CAN ISR или секции автомата СИФУ.
|
||||
*/
|
||||
int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf,unsigned long len)
|
||||
{
|
||||
unsigned int i;
|
||||
for (i=0; i <= 30000; i++){} /* Пауза дла PC */
|
||||
for (i=0; i <= 30000; i++){} /* Пауза дла PC */
|
||||
|
||||
RS_Line_to_send(rs_arr); /* режим передачи RS485 */
|
||||
RS_Line_to_send(rs_arr); /* режим передачи RS485 */
|
||||
|
||||
for (i=0; i <= 10000; i++){} /* Пауза дла PC */
|
||||
for (i=0; i <= 10000; i++){} /* Пауза дла PC */
|
||||
|
||||
rs_arr->RS_SLength = len; /* Настраиваем переменные */
|
||||
rs_arr->RS_SLength = len; /* Настраиваем переменные */
|
||||
rs_arr->pRS_SendPtr = pBuf + 1;
|
||||
|
||||
rs_arr->RS_SendBlockMode = BM_CHAR32;
|
||||
|
||||
RS_Wait4OK(rs_arr); /* Дожидаемса ухода */
|
||||
RS_SetBitMode(rs_arr,8); /* Остальные в 8-бит режиме */
|
||||
RS_Wait4OK(rs_arr); /* Дожидаемса ухода */
|
||||
RS_SetBitMode(rs_arr,8); /* Остальные в 8-бит режиме */
|
||||
|
||||
rs_arr->RS_SendLen = 1; /* Два байта уже передали */
|
||||
rs_arr->RS_SendLen = 1; /* Два байта уже передали */
|
||||
if(len > 1)
|
||||
{
|
||||
enableUARTIntW(rs_arr); /* Разрешаем прерываниа по передаче */
|
||||
SCI_send(rs_arr, *pBuf); // Передаем второй байт по прерыванию
|
||||
enableUARTIntW(rs_arr); /* Разрешаем прерываниа по передаче */
|
||||
SCI_send(rs_arr, *pBuf); // Передаем второй байт по прерыванию
|
||||
}
|
||||
else
|
||||
{
|
||||
SCI_send(rs_arr, *pBuf); // Передаем второй байт по прерыванию
|
||||
RS_Wait4OK(rs_arr); /* Дожидаемса ухода без прерываниа */
|
||||
for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Пауза дла PC */
|
||||
RS_SetBitMode(rs_arr,9); /* Обратно в 9-бит режим */
|
||||
RS_Line_to_receive(rs_arr); /* режим приема RS485 */
|
||||
SCI_send(rs_arr, *pBuf); // Передаем второй байт по прерыванию
|
||||
RS_Wait4OK(rs_arr); /* Дожидаемса ухода без прерываниа */
|
||||
for (i=0; i <= TIME_WAIT_RS_BYTE_OUT; i++){} /* Пауза дла PC */
|
||||
RS_SetBitMode(rs_arr,9); /* Обратно в 9-бит режим */
|
||||
RS_Line_to_receive(rs_arr); /* режим приема RS485 */
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Посылка блока упакованных байтов
|
||||
// Посылка блока упакованных байтов
|
||||
int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len)
|
||||
{
|
||||
|
||||
RS_Line_to_send(rs_arr); // режим передачи RS485
|
||||
RS_Line_to_send(rs_arr); // режим передачи RS485
|
||||
|
||||
rs_arr->RS_SLength = len; // Настраиваем переменные
|
||||
rs_arr->RS_SLength = len; // Настраиваем переменные
|
||||
rs_arr->pRS_SendPtr = pBuf;
|
||||
rs_arr->RS_SendBlockMode = BM_PACKED;
|
||||
|
||||
RS_Wait4OK(rs_arr); // Ожидаем очистки и ухода последнего байта
|
||||
RS_SetBitMode(rs_arr,8); /* Остальные в 8-бит режиме */
|
||||
RS_Wait4OK(rs_arr); // Ожидаем очистки и ухода последнего байта
|
||||
RS_SetBitMode(rs_arr,8); /* Остальные в 8-бит режиме */
|
||||
|
||||
rs_arr->RS_SendLen = 1; // Один байт уже передали
|
||||
rs_arr->RS_SendLen = 1; // Один байт уже передали
|
||||
|
||||
enableUARTIntW(rs_arr); /* Разрешаем прерываниа по передаче */
|
||||
enableUARTIntW(rs_arr); /* Разрешаем прерываниа по передаче */
|
||||
|
||||
SCI_send(rs_arr,HIBYTE(*pBuf));// Передаем первый байт
|
||||
SCI_send(rs_arr,HIBYTE(*pBuf));// Передаем первый байт
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** Устанавливает скорость обмена.
|
||||
@param speed скорость RS в бод */
|
||||
/** Устанавливает скорость обмена.
|
||||
@param speed скорость RS в бод */
|
||||
/** Устанавливает скорость обмена.
|
||||
@param speed скорость RS в бод */
|
||||
/** Устанавливает скорость обмена.
|
||||
@param speed скорость RS в бод */
|
||||
void RS_SetLineSpeed(RS_DATA *rs_arr,unsigned long speed)
|
||||
{
|
||||
long SciBaud;
|
||||
@@ -403,7 +403,7 @@ void RS_SetLineSpeed(RS_DATA *rs_arr,unsigned long speed)
|
||||
}
|
||||
|
||||
|
||||
/** Инициализациа последовательного порта */
|
||||
/** Инициализациа последовательного порта */
|
||||
void create_uart_vars(char size_cmd15_set)
|
||||
{
|
||||
size_cmd15=size_cmd15_set;
|
||||
@@ -413,7 +413,7 @@ void create_uart_vars(char size_cmd15_set)
|
||||
|
||||
|
||||
|
||||
/** Инициализациа последовательного порта */
|
||||
/** Инициализациа последовательного порта */
|
||||
|
||||
void setup_uart(char commnumber, unsigned long speed_baud)
|
||||
{
|
||||
@@ -478,14 +478,14 @@ void setup_uart(char commnumber, unsigned long speed_baud)
|
||||
SciRegs->SCICTL1.bit.RXENA=1;
|
||||
|
||||
SciRegs->SCIFFTX.bit.SCIFFENA=0; // fifo off
|
||||
SciRegs->SCIFFRX.bit.RXFFIL=1; // Длина наименьшей команды
|
||||
SciRegs->SCIFFRX.bit.RXFFIL=1; // Длина наименьшей команды
|
||||
|
||||
setup_arr_cmd_length();
|
||||
RS_SetLineSpeed(rs_arr,speed_baud); // скорость линии
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
enableUARTInt(rs_arr); // разрешение прерываний UART
|
||||
RS_SetLineSpeed(rs_arr,speed_baud); // скорость линии
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
enableUARTInt(rs_arr); // разрешение прерываний UART
|
||||
RS_SetBitMode(rs_arr,9);
|
||||
rs_arr->RS_PrevCmd = 0; // не было никаких команд
|
||||
rs_arr->RS_PrevCmd = 0; // не было никаких команд
|
||||
rs_arr->flag_TIMEOUT_to_Send = 0;
|
||||
rs_arr->flag_LEADING = 0;
|
||||
|
||||
@@ -493,10 +493,10 @@ void setup_uart(char commnumber, unsigned long speed_baud)
|
||||
SciRegs->SCICTL1.bit.SWRESET=1; // Relinquish SCI from Reset
|
||||
}
|
||||
|
||||
/** Настройка режима линии.
|
||||
@param bit количество бит данных
|
||||
@param parity режим четности (N,O,E,M,S)
|
||||
@param stop количество стоповых бит */
|
||||
/** Настройка режима линии.
|
||||
@param bit количество бит данных
|
||||
@param parity режим четности (N,O,E,M,S)
|
||||
@param stop количество стоповых бит */
|
||||
void RS_SetLineMode(RS_DATA *rs_arr, int bit, char parity, int stop)
|
||||
{
|
||||
volatile struct SCI_REGS *SciRegs;
|
||||
@@ -539,7 +539,7 @@ void clear_timer_rs_live(RS_DATA *rs_arr)
|
||||
rs_arr->time_wait_rs_out=0;
|
||||
}
|
||||
|
||||
/* проверка на живучесть RS */
|
||||
/* проверка на живучесть RS */
|
||||
void test_rs_live(RS_DATA *rs_arr)
|
||||
{
|
||||
/* if (rs_arr->time_wait_rs_out < RS_TIME_OUT)
|
||||
@@ -547,6 +547,6 @@ void test_rs_live(RS_DATA *rs_arr)
|
||||
else
|
||||
{
|
||||
rs_arr->time_wait_rs_out=0;
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_SetBitMode(rs_arr,9);
|
||||
}*/ }
|
||||
|
||||
+59
-59
@@ -1,8 +1,8 @@
|
||||
/* Служебные команды доступа к памяти и загрузки. get_command
|
||||
* проверяет завершённый RS-кадр и CRC перед диспетчеризацией в main.
|
||||
* Произвольная запись памяти сервисной командой не проходит
|
||||
* автомат фронтов СИФУ. Формат CMD_* согласован с загрузчиком ПК;
|
||||
* нельзя перенумеровывать команды при расширении протокола.
|
||||
/* Служебные команды доступа к памяти и загрузки. get_command
|
||||
* проверяет завершённый RS-кадр и CRC перед диспетчеризацией в main.
|
||||
* Произвольная запись памяти сервисной командой не проходит
|
||||
* автомат фронтов СИФУ. Формат CMD_* согласован с загрузчиком ПК;
|
||||
* нельзя перенумеровывать команды при расширении протокола.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
|
||||
#include "RS485.h"
|
||||
@@ -14,14 +14,14 @@
|
||||
//#include "spartan_tools.h"
|
||||
//#include "big_dsp_module.h"
|
||||
|
||||
int flag_DEBUG = false; /* Флаг отладочного режима */
|
||||
int flag_DEBUG = false; /* Флаг отладочного режима */
|
||||
|
||||
|
||||
//static unsigned int *RecvPtr;
|
||||
//static int BS_LoadOK = false; /** Флаг успешности приема блока */
|
||||
//static int BS_LoadOK = false; /** Флаг успешности приема блока */
|
||||
|
||||
/**********************************************************/
|
||||
/* Прототипы функций, используемых и определенных в файле */
|
||||
/* Прототипы функций, используемых и определенных в файле */
|
||||
/**********************************************************/
|
||||
//static int _getbyte(int *addr, int offs);
|
||||
|
||||
@@ -36,60 +36,60 @@ void write_memory(unsigned long addr, unsigned int data)
|
||||
}
|
||||
|
||||
|
||||
/** Возвращает номер комманды, если есть или -1 если транзакций не было */
|
||||
/** Возвращает номер комманды, если есть или -1 если транзакций не было */
|
||||
int get_command(RS_DATA *rs_arr)
|
||||
{
|
||||
int cmd;
|
||||
unsigned int crc, rcrc;
|
||||
|
||||
if(rs_arr->RS_DataReady) // Данные по RS пришли
|
||||
if(rs_arr->RS_DataReady) // Данные по RS пришли
|
||||
{
|
||||
rs_arr->RS_DataReady = false;
|
||||
cmd = rs_arr->RS_Header[1]; // Прочитали номер команды
|
||||
cmd = rs_arr->RS_Header[1]; // Прочитали номер команды
|
||||
|
||||
// Провераем длину команды дла считываниа CRC
|
||||
// Провераем длину команды дла считываниа CRC
|
||||
if((RS_Len[cmd]<3) || (RS_Len[cmd]>MAX_RECEIVE_LENGTH))
|
||||
{
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_SetBitMode(rs_arr,9);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if(cmd == CMD_LOAD) // Если команда загрузки
|
||||
if(cmd == CMD_LOAD) // Если команда загрузки
|
||||
{
|
||||
rs_arr->RS_PrevCmd = cmd;
|
||||
return cmd; // Нет проверки crc
|
||||
return cmd; // Нет проверки crc
|
||||
}
|
||||
else // Все остальные команды
|
||||
else // Все остальные команды
|
||||
{
|
||||
// Считываем crc из посылки
|
||||
// Считываем crc из посылки
|
||||
crc = (rs_arr->RS_Header[RS_Len[cmd]-1] << 8) |
|
||||
(rs_arr->RS_Header[RS_Len[cmd]-2]) ;
|
||||
}
|
||||
// Рассчитываем crc из посылки
|
||||
// Рассчитываем crc из посылки
|
||||
rcrc = 0xffff;
|
||||
rcrc = get_crc_16( rcrc, rs_arr->RS_Header, (RS_Len[cmd]-2) );
|
||||
|
||||
if(crc == rcrc) // Провераем crc
|
||||
if(crc == rcrc) // Провераем crc
|
||||
{
|
||||
rs_arr->RS_PrevCmd = cmd;
|
||||
return cmd;
|
||||
}
|
||||
else
|
||||
{
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_SetBitMode(rs_arr,9);
|
||||
} }
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/** Стандартный ответ, без параметров */
|
||||
/** Стандартный ответ, без параметров */
|
||||
void Answer(RS_DATA *rs_arr,int n)
|
||||
{
|
||||
int crc;
|
||||
|
||||
flag_DEBUG = true; // Флаг отладочного режима
|
||||
flag_DEBUG = true; // Флаг отладочного режима
|
||||
|
||||
rs_arr->buffer[0] = rs_arr->addr_recive; //CNTRL_ADDR;
|
||||
rs_arr->buffer[1] = n;
|
||||
@@ -105,7 +105,7 @@ void Answer(RS_DATA *rs_arr,int n)
|
||||
RS_Send(rs_arr,rs_arr->buffer, 6);
|
||||
}
|
||||
|
||||
/* Внутреннаа ф-циа */
|
||||
/* Внутреннаа ф-циа */
|
||||
static char _getbyte(unsigned int *addr, int32 offs)
|
||||
{
|
||||
unsigned int *address;
|
||||
@@ -118,7 +118,7 @@ static char _getbyte(unsigned int *addr, int32 offs)
|
||||
}
|
||||
|
||||
|
||||
/* начальные установки (не работает)*/
|
||||
/* начальные установки (не работает)*/
|
||||
void init(RS_DATA *rs_arr)
|
||||
{
|
||||
/*
|
||||
@@ -141,13 +141,13 @@ void init(RS_DATA *rs_arr)
|
||||
*/
|
||||
}
|
||||
|
||||
/**@name Комманды
|
||||
* Комманды, вызываемые через последовательный канал
|
||||
/**@name Комманды
|
||||
* Комманды, вызываемые через последовательный канал
|
||||
*/
|
||||
//@{
|
||||
|
||||
/** Инициировать загрузку блока.
|
||||
Настраивает прием блока данных */
|
||||
/** Инициировать загрузку блока.
|
||||
Настраивает прием блока данных */
|
||||
void initload(RS_DATA *rs_arr)
|
||||
{
|
||||
unsigned long Address;
|
||||
@@ -171,8 +171,8 @@ void initload(RS_DATA *rs_arr)
|
||||
Answer(rs_arr,CMD_INITLOAD);
|
||||
}
|
||||
|
||||
/** Загрузка блока.
|
||||
Вызываетса после загрузки блока через RS */
|
||||
/** Загрузка блока.
|
||||
Вызываетса после загрузки блока через RS */
|
||||
void load(RS_DATA *rs_arr)
|
||||
{
|
||||
unsigned int rcrc, crc;
|
||||
@@ -197,27 +197,27 @@ void load(RS_DATA *rs_arr)
|
||||
else
|
||||
{
|
||||
rs_arr->BS_LoadOK = false;
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_SetBitMode(rs_arr,9);
|
||||
} }
|
||||
|
||||
/** Выполнить программу в формате Serial Boot.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес программы беретса из заголовка и
|
||||
сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load
|
||||
/** Выполнить программу в формате Serial Boot.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес программы беретса из заголовка и
|
||||
сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load
|
||||
@see load */
|
||||
void run (RS_DATA *rs_arr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/** Прочитать ачейку памати */
|
||||
/** Прочитать ачейку памати */
|
||||
void peek(RS_DATA *rs_arr)
|
||||
{
|
||||
unsigned long Address;
|
||||
unsigned int Data, crc;
|
||||
|
||||
flag_DEBUG = true; // Флаг отладочного режима
|
||||
flag_DEBUG = true; // Флаг отладочного режима
|
||||
|
||||
Address = rs_arr->RS_Header[5] & 0xFF;
|
||||
Address = (Address<<8) | (rs_arr->RS_Header[4] & 0xFF);
|
||||
@@ -250,7 +250,7 @@ void peek(RS_DATA *rs_arr)
|
||||
|
||||
}
|
||||
|
||||
/** Записать в ачейку памати */
|
||||
/** Записать в ачейку памати */
|
||||
void poke(RS_DATA *rs_arr)
|
||||
{
|
||||
unsigned long Address;
|
||||
@@ -272,12 +272,12 @@ void poke(RS_DATA *rs_arr)
|
||||
Answer(rs_arr,CMD_POKE);
|
||||
}
|
||||
|
||||
/** Передать блок памати */
|
||||
/** Передать блок памати */
|
||||
void upload(RS_DATA *rs_arr)
|
||||
{
|
||||
int32 Address, Length, crc;
|
||||
|
||||
no_write = 1; // Флаг отладочного режима
|
||||
no_write = 1; // Флаг отладочного режима
|
||||
// stopp=1;
|
||||
|
||||
Address = rs_arr->RS_Header[5] & 0xFF;
|
||||
@@ -297,10 +297,10 @@ void upload(RS_DATA *rs_arr)
|
||||
crc = get_crc_16( crc, rs_arr->buffer, 2);
|
||||
crc = get_crc_16b( crc, (unsigned int *)Address, Length);
|
||||
|
||||
RS_Send(rs_arr,rs_arr->buffer, 1); // <=2 байт по флагу
|
||||
RS_Send(rs_arr,rs_arr->buffer, 1); // <=2 байт по флагу
|
||||
|
||||
rs_arr->buffer[0] = CMD_UPLOAD;
|
||||
RS_Send(rs_arr,rs_arr->buffer, 1); // <=2 байт по флагу
|
||||
RS_Send(rs_arr,rs_arr->buffer, 1); // <=2 байт по флагу
|
||||
|
||||
RS_Wait4OK(rs_arr);
|
||||
RS_BSend(rs_arr,(unsigned int*)Address, Length);
|
||||
@@ -314,21 +314,21 @@ void upload(RS_DATA *rs_arr)
|
||||
|
||||
}
|
||||
|
||||
/** Прошить XILINX.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load,
|
||||
так же смотрит магическое слово в начале прошивки
|
||||
/** Прошить XILINX.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load,
|
||||
так же смотрит магическое слово в начале прошивки
|
||||
@see load */
|
||||
void xflash(RS_DATA *rs_arr)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/** Прошить TMS.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
|
||||
/** Прошить TMS.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
|
||||
@see load */
|
||||
void tflash(RS_DATA *rs_arr)
|
||||
{
|
||||
@@ -337,7 +337,7 @@ void tflash(RS_DATA *rs_arr)
|
||||
/*
|
||||
if(!rs_arr->BS_LoadOK)
|
||||
{
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_SetBitMode(rs_arr,9);
|
||||
return;
|
||||
}
|
||||
@@ -362,7 +362,7 @@ void tflash(RS_DATA *rs_arr)
|
||||
|
||||
if( (Address2 < 0x100000) || (Address2 > 0x180000) || ((Address2+LengthW) > 0x180000) )
|
||||
{
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_Line_to_receive(rs_arr); // режим приема RS485
|
||||
RS_SetBitMode(rs_arr,9);
|
||||
return;
|
||||
}
|
||||
@@ -374,10 +374,10 @@ void tflash(RS_DATA *rs_arr)
|
||||
return;
|
||||
}
|
||||
|
||||
/** Прошить TMS.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
|
||||
/** Прошить TMS.
|
||||
@precondition Должна быть произведена загрузка блока
|
||||
Адрес и длина прошивки беретса из заголовка и
|
||||
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
|
||||
@see load */
|
||||
void extendbios(RS_DATA *rs_arr)
|
||||
{
|
||||
@@ -403,10 +403,10 @@ void extendbios(RS_DATA *rs_arr)
|
||||
|
||||
switch ( code )
|
||||
{
|
||||
// Прошиваем EPROM Из RAM
|
||||
// Прошиваем EPROM Из RAM
|
||||
case 4: Seeprom_write(Address1,(unsigned int*)Address2,Length);
|
||||
break;
|
||||
// Читаем из EPROM в RAM
|
||||
// Читаем из EPROM в RAM
|
||||
case 5: Seeprom_read(Address1,(unsigned int*)Address2,Length);
|
||||
break;
|
||||
|
||||
|
||||
+10
-10
@@ -1,7 +1,7 @@
|
||||
/* Адресация последовательного протокола. set_cntrl_addr задаёт
|
||||
* собственный и общий адрес. CAN ID вычисляется отдельно из Mode.
|
||||
* Общий RS-адрес не заменяет собственный во всех ответах: для
|
||||
* логгера SetGUI использовать собственный адрес платы (обычно 5/6).
|
||||
/* Адресация последовательного протокола. set_cntrl_addr задаёт
|
||||
* собственный и общий адрес. CAN ID вычисляется отдельно из Mode.
|
||||
* Общий RS-адрес не заменяет собственный во всех ответах: для
|
||||
* логгера SetGUI использовать собственный адрес платы (обычно 5/6).
|
||||
*/
|
||||
#include "cntrl_adr.h"
|
||||
|
||||
@@ -11,25 +11,25 @@
|
||||
#define ADDR_UNIVERSAL_DEF 10
|
||||
|
||||
|
||||
/** Установка адреса контроллера дла посылки всем АИНам */
|
||||
/** Установка адреса контроллера дла посылки всем АИНам */
|
||||
int ADDR_FOR_ALL = ADDR_FOR_ALL_DEF;
|
||||
|
||||
/** Установка адреса контроллера дла посылки ответа */
|
||||
/** Установка адреса контроллера дла посылки ответа */
|
||||
const int ADDR_ANSWER = ADDR_ANSWER_DEF;
|
||||
|
||||
/** Установка адреса терминала дла посылки ответа */
|
||||
/** Установка адреса терминала дла посылки ответа */
|
||||
const int ADDR_TERMINAL = ADDR_TERMINAL_DEF;
|
||||
|
||||
/* Универсальный адрес контроллера */
|
||||
/* Универсальный адрес контроллера */
|
||||
const int CNTRL_ADDR_UNIVERSAL=ADDR_UNIVERSAL_DEF;
|
||||
|
||||
/* Адрес контроллера */
|
||||
/* Адрес контроллера */
|
||||
int CNTRL_ADDR=1;
|
||||
|
||||
int cntr_addr_c;
|
||||
int cntr_addr_c_all;
|
||||
|
||||
/** Установка адреса контроллера дла прошивки */
|
||||
/** Установка адреса контроллера дла прошивки */
|
||||
void set_cntrl_addr (int cntrl_addr,int cntrl_addr_for_all)
|
||||
{
|
||||
CNTRL_ADDR = cntrl_addr;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* CRC кадров обмена и параметров EEPROM. get_crc_16 работает
|
||||
* с представлением буфера протокола, get_crc16 обрабатывает оба
|
||||
* байта каждого слова параметров. Порядок байтов существенен.
|
||||
* Нельзя заменять эти функции реализацией для ПК без проверки
|
||||
* представления данных и особенностей 16-битной ABI C2000.
|
||||
/* CRC кадров обмена и параметров EEPROM. get_crc_16 работает
|
||||
* с представлением буфера протокола, get_crc16 обрабатывает оба
|
||||
* байта каждого слова параметров. Порядок байтов существенен.
|
||||
* Нельзя заменять эти функции реализацией для ПК без проверки
|
||||
* представления данных и особенностей 16-битной ABI C2000.
|
||||
*/
|
||||
#include "crc16.h"
|
||||
#define MAKE_TABS 0 /* Builds tables below */
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Рекурсивный фильтр. FILTERBAT хранит коэффициенты и историю
|
||||
* двух входов/выходов; каждый вызов изменяет переданный экземпляр.
|
||||
* Независимым каналам нужны отдельные состояния. Синхронизации
|
||||
* здесь нет: смену коэффициентов согласовывает вызывающий код.
|
||||
/* Рекурсивный фильтр. FILTERBAT хранит коэффициенты и историю
|
||||
* двух входов/выходов; каждый вызов изменяет переданный экземпляр.
|
||||
* Независимым каналам нужны отдельные состояния. Синхронизации
|
||||
* здесь нет: смену коэффициентов согласовывает вызывающий код.
|
||||
*/
|
||||
#include "filter_bat2.h"
|
||||
|
||||
|
||||
@@ -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"
|
||||
@@ -88,7 +88,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) // Лампочки
|
||||
{
|
||||
Word =dat;
|
||||
}
|
||||
@@ -139,7 +139,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; // Это значит пусто
|
||||
else break;
|
||||
}
|
||||
|
||||
@@ -148,7 +148,7 @@ void kanal_Send(int adr, long dat, int dot)
|
||||
{
|
||||
if( (dg[i]==0xF)||(i==3))
|
||||
{
|
||||
dg[i]=0xA; // Это значит минус
|
||||
dg[i]=0xA; // Это значит минус
|
||||
break;
|
||||
} }
|
||||
|
||||
|
||||
+56
-56
@@ -1,8 +1,8 @@
|
||||
/* Измерения, диагностика и периодическое обслуживание. ADC ISR
|
||||
* поставляет выборки; таймер 1 обслуживает индикацию и телеметрию.
|
||||
* Для dsk_LOAD он сначала завершает импульс СИФУ, затем вызывает
|
||||
* расчёт ЦАП и снимок логгера. Частоты находятся в measure.h;
|
||||
* при их изменении требуется пересчитать зависимые интервалы.
|
||||
/* Измерения, диагностика и периодическое обслуживание. ADC ISR
|
||||
* поставляет выборки; таймер 1 обслуживает индикацию и телеметрию.
|
||||
* Для dsk_LOAD он сначала завершает импульс СИФУ, затем вызывает
|
||||
* расчёт ЦАП и снимок логгера. Частоты находятся в measure.h;
|
||||
* при их изменении требуется пересчитать зависимые интервалы.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
|
||||
#include "DSP2833x_SWPrioritizedIsrLevels.h"
|
||||
@@ -20,13 +20,13 @@
|
||||
#include "message.h"
|
||||
#include "log_to_mem.h"
|
||||
|
||||
#include <math.h> // Это чтобы мерить амплитуду! sqrt без этого будет крив!!!
|
||||
#include <math.h> // Это чтобы мерить амплитуду! sqrt без этого будет крив!!!
|
||||
|
||||
unsigned int CanPowse=CANPOWSE,CanGO=0;
|
||||
|
||||
unsigned int Maska[2][8];
|
||||
|
||||
int TPL_CANS=0; // Количество температурных каналов
|
||||
int TPL_CANS=0; // Количество температурных каналов
|
||||
int tpl_cans=0;
|
||||
int cal_addr=0;
|
||||
|
||||
@@ -53,23 +53,23 @@ int Curr_Edge;
|
||||
|
||||
float powK[] =
|
||||
{
|
||||
0.127, // питание 380В
|
||||
0.127, // питание 380В
|
||||
0.127, // питание 380В
|
||||
0.127, // питание 380В
|
||||
|
||||
1.000, // ток
|
||||
1.000, // напражение
|
||||
1.000, // ток
|
||||
1.000, // напражение
|
||||
|
||||
0.0076, // питание 31В
|
||||
0.0076, // питание 24В
|
||||
0.0076, // питание 24В
|
||||
0.0076, // питание 15В
|
||||
1.0000, // термодатчик мелкосхема
|
||||
0.0076, // питание 31В
|
||||
0.0076, // питание 24В
|
||||
0.0076, // питание 24В
|
||||
0.0076, // питание 15В
|
||||
1.0000, // термодатчик мелкосхема
|
||||
};
|
||||
|
||||
FILTERBAT def_FILTERBAT = DEF_FILTERBAT;
|
||||
FILTERBAT adc_filter[20+4]; // макс.TPL*2 + 4 калибр
|
||||
FILTERBAT out_filter[20+4]; // макс.TPL*2 + 4 напраж
|
||||
FILTERBAT zer_filter[4]; // 4 напраж
|
||||
FILTERBAT adc_filter[20+4]; // макс.TPL*2 + 4 калибр
|
||||
FILTERBAT out_filter[20+4]; // макс.TPL*2 + 4 напраж
|
||||
FILTERBAT zer_filter[4]; // 4 напраж
|
||||
|
||||
long sens_count[24+4];
|
||||
|
||||
@@ -79,7 +79,7 @@ float K_T1,K_T2;
|
||||
interrupt void cpu_timer1_isr_SENS(void);
|
||||
|
||||
/********************************************************************/
|
||||
/* Расчет модула тока из показаний двух фаз */
|
||||
/* Расчет модула тока из показаний двух фаз */
|
||||
/********************************************************************/
|
||||
float im_calc(float ia,float ib)
|
||||
{
|
||||
@@ -115,8 +115,8 @@ interrupt void cpu_timer1_isr_SENS(void)
|
||||
|
||||
int TST;
|
||||
|
||||
#define err_lamp work_lamp // это дла шкапа,
|
||||
#define alm_lamp heat_lamp // чтоб было понатнее
|
||||
#define err_lamp work_lamp // это дла шкапа,
|
||||
#define alm_lamp heat_lamp // чтоб было понатнее
|
||||
|
||||
EALLOW;
|
||||
CpuTimer1.InterruptCount++;
|
||||
@@ -140,10 +140,10 @@ interrupt void cpu_timer1_isr_SENS(void)
|
||||
|
||||
if(Desk==dsk_LOAD)
|
||||
{
|
||||
/* Снять истёкший импульс до расчёта ЦАП, независимо от main. */
|
||||
/* Снять истёкший импульс до расчёта ЦАП, независимо от main. */
|
||||
UMP_pulse_tick();
|
||||
Load_runner();
|
||||
/* База времени 1 мс; снимок содержит результат текущего шага ЦАП. */
|
||||
/* База времени 1 мс; снимок содержит результат текущего шага ЦАП. */
|
||||
ump_log_tick();
|
||||
return;
|
||||
}
|
||||
@@ -156,9 +156,9 @@ interrupt void cpu_timer1_isr_SENS(void)
|
||||
((Desk==dsk_COMM) && heat_lamp) ) set_RES_OUT_1();
|
||||
else clear_RES_OUT_1();
|
||||
|
||||
if(work_lamp) set_LED_OUT_1(); // Она же err_lamp дла шкапа
|
||||
if(work_lamp) set_LED_OUT_1(); // Она же err_lamp дла шкапа
|
||||
else clear_LED_OUT_1();
|
||||
if(heat_lamp) set_LED_OUT_2(); // Она же alm_lamp дла шкапа
|
||||
if(heat_lamp) set_LED_OUT_2(); // Она же alm_lamp дла шкапа
|
||||
else clear_LED_OUT_2();
|
||||
}
|
||||
|
||||
@@ -360,37 +360,37 @@ void Init_packMask()
|
||||
switch(Desk)
|
||||
{
|
||||
case dsk_EPLT:
|
||||
Maska[m_SLOW][0]|= 0x000F; // Полученное
|
||||
Maska[m_SLOW][6]|= 0x01FC; // Яркость ламп и одиночество
|
||||
Maska[m_FAST][0]|= 0x000F; // Включает R0–R3 в быструю обратную связь VPU для ПМ67; четыре младших бита маски исключают ожидание медленного обхода параметров.
|
||||
Maska[m_SLOW][6]|= 0x01FC; // Яркость ламп и одиночество
|
||||
break;
|
||||
|
||||
default:
|
||||
for(i=0;i<can;i++)
|
||||
{
|
||||
Maska[m_FAST][ i /16]|=(1<<( i %16)); // Диагностика
|
||||
Maska[m_FAST][(i+24)/16]|=(1<<((i+24)%16)); // Показаниа
|
||||
Maska[m_FAST][ i /16]|=(1<<( i %16)); // Диагностика
|
||||
Maska[m_FAST][(i+24)/16]|=(1<<((i+24)%16)); // Показаниа
|
||||
}
|
||||
for(i=0;i<3; i++)
|
||||
Maska[m_SLOW][i+3] = Maska[m_FAST][i]; // Уставки
|
||||
Maska[m_SLOW][i+3] = Maska[m_FAST][i]; // Уставки
|
||||
|
||||
if(Desk==dsk_BKSD) Maska[m_SLOW][7]|= 0x0300; // Калибровка термодатчиков
|
||||
if(Desk==dsk_BKSD) Maska[m_SLOW][7]|= 0x0300; // Калибровка термодатчиков
|
||||
else
|
||||
Maska[m_SLOW][7]|= 0x0F00; // Калибровка термодатчиков
|
||||
Maska[m_SLOW][7]|= 0x0F00; // Калибровка термодатчиков
|
||||
if(Kurrent)
|
||||
{ Maska[m_SLOW][7]|= 0x000F; // Ноль датчиков напражениа
|
||||
Maska[m_SLOW][7]|= 0x00F0; // Калибровка датчиков напражениа
|
||||
Maska[m_FAST][6]|= 0x3F00; // Фазные значениа
|
||||
{ Maska[m_SLOW][7]|= 0x000F; // Ноль датчиков напражениа
|
||||
Maska[m_SLOW][7]|= 0x00F0; // Калибровка датчиков напражениа
|
||||
Maska[m_FAST][6]|= 0x3F00; // Фазные значениа
|
||||
}
|
||||
|
||||
if(Desk==dsk_LOAD)
|
||||
{ Maska[m_SLOW][7]|= 0x0030; // Калибровка ЦАП
|
||||
Maska[m_FAST][7]|= 0xE000; // Дублировать команды
|
||||
Maska[m_FAST][1]|= 0x3000; // Управлающий ток СИФУ
|
||||
{ Maska[m_SLOW][7]|= 0x0030; // Калибровка ЦАП
|
||||
Maska[m_FAST][7]|= 0xE000; // Дублировать команды
|
||||
Maska[m_FAST][1]|= 0x3000; // Управлающий ток СИФУ
|
||||
} }
|
||||
|
||||
Maska[m_FAST][1]|= 0x0001; // Дискретные входы
|
||||
Maska[m_SLOW][6]|= 0x0007; // Яркость ламп и периоды посылок
|
||||
Maska[m_SLOW][7]|= 0xE000; // Адрес, команды, и чтоб не вылазило
|
||||
Maska[m_FAST][1]|= 0x0001; // Дискретные входы
|
||||
Maska[m_SLOW][6]|= 0x0007; // Яркость ламп и периоды посылок
|
||||
Maska[m_SLOW][7]|= 0xE000; // Адрес, команды, и чтоб не вылазило
|
||||
}
|
||||
|
||||
int er_anal(int term, long * count, long edge, int pre)
|
||||
@@ -449,26 +449,26 @@ void Current_count(int chan)
|
||||
|
||||
modbus[0x64+chan] = Numb;
|
||||
|
||||
// Средний (он же нулевой) уровень показаний АЦП
|
||||
// Средний (он же нулевой) уровень показаний АЦП
|
||||
zer_count[chan] += (Numb-zer_count[chan])/(5.0 * ADC_FREQ);
|
||||
Zero_lev[chan] = (int)(filterbat(&zer_filter[chan],zer_count[chan]));
|
||||
|
||||
// Мгновенное значение фазы
|
||||
// Мгновенное значение фазы
|
||||
Current = (Numb - Zero_lev[chan]) * powK[chan];
|
||||
|
||||
// Действующее (среднеквадратичное) значение фазы
|
||||
// Действующее (среднеквадратичное) значение фазы
|
||||
lev_quadr[chan] += ((Current*Current)-lev_quadr[chan])/(1.0 * ADC_FREQ);
|
||||
lev_count[chan] = sqrt(lev_quadr[chan]);
|
||||
|
||||
// Запомним
|
||||
// Запомним
|
||||
if(ist)
|
||||
{
|
||||
if(Desk==dsk_COMM) aCurrent =-Current;
|
||||
else aCurrent = Current; // Запомнили мгновенное значение - дла амплитуды
|
||||
else aCurrent = Current; // Запомнили мгновенное значение - дла амплитуды
|
||||
}
|
||||
else
|
||||
{
|
||||
// Вычисление амплитуды
|
||||
// Вычисление амплитуды
|
||||
Amplitude = filterbat(&out_filter[sens], im_calc(Current,aCurrent));
|
||||
|
||||
if(sens_type[chan]==VOLTAGE)
|
||||
@@ -485,7 +485,7 @@ modbus[0x64+chan] = Numb;
|
||||
sens_data[sens-1] = Level;
|
||||
}
|
||||
|
||||
// Действующее (среднеквадратичное) значение третьей фазы
|
||||
// Действующее (среднеквадратичное) значение третьей фазы
|
||||
Numb =-Current-aCurrent;
|
||||
lev_quadr[thrd] += (Numb*Numb-lev_quadr[thrd])/(1.0 * ADC_FREQ);
|
||||
lev_count[thrd] = sqrt(lev_quadr[thrd]);
|
||||
@@ -511,12 +511,12 @@ modbus[0x68+fazz+1] = lev_count[chan];
|
||||
modbus[0x68+fazz+2] = lev_count[thrd];
|
||||
}
|
||||
|
||||
// Это максимальное
|
||||
// Это максимальное
|
||||
Numb = lev_count[chan];
|
||||
if(Numb<lev_count[pair]) Numb = lev_count[pair];
|
||||
if(Numb<lev_count[thrd]) Numb = lev_count[thrd];
|
||||
|
||||
// Зашиты!
|
||||
// Зашиты!
|
||||
error.all = 0;
|
||||
no_ignor = !sens_error[chan].bit.Ignor;
|
||||
|
||||
@@ -659,7 +659,7 @@ void Temper_count(int chan)
|
||||
|
||||
if(chan>tpl_cans) return;
|
||||
|
||||
// Kun именно чтоб скомпенсировать нечетность
|
||||
// Kun именно чтоб скомпенсировать нечетность
|
||||
if(kun&1) Numb = (Numb-K300_2)*K_T2+ZERO;
|
||||
else Numb = (Numb-K300_1)*K_T1+ZERO;
|
||||
}
|
||||
@@ -706,7 +706,7 @@ sens_data[chan+8] = adc_table_tpl[chan];
|
||||
error.all = 0;
|
||||
no_ignor = !sens_error[chan].bit.Ignor;
|
||||
|
||||
// Обрыв или неисправность
|
||||
// Обрыв или неисправность
|
||||
if(Temper==-20 || Temper==200)
|
||||
{
|
||||
error.bit.Tear = 1;
|
||||
@@ -714,7 +714,7 @@ sens_data[chan+8] = adc_table_tpl[chan];
|
||||
}
|
||||
else
|
||||
|
||||
// Перегрев
|
||||
// Перегрев
|
||||
if(((Temper>sens_hi_edge[chan]-Cooling) && (sens_error[chan].bit.Hyper)) ||
|
||||
(Temper>sens_hi_edge[chan]) )
|
||||
{
|
||||
@@ -724,7 +724,7 @@ sens_data[chan+8] = adc_table_tpl[chan];
|
||||
}
|
||||
else
|
||||
|
||||
// Предупреждение по температуре
|
||||
// Предупреждение по температуре
|
||||
if(Temper>sens_lo_edge[chan])
|
||||
{
|
||||
error.bit.Over = 1;
|
||||
@@ -796,7 +796,7 @@ void Power_count(int chan)
|
||||
error.bit.Stop = 1;
|
||||
} }
|
||||
|
||||
/* Повышенное напражение
|
||||
/* Повышенное напражение
|
||||
if(Power > sens_hi_edge[chan])
|
||||
{
|
||||
error.bit.Hyper = 1;
|
||||
|
||||
@@ -65,7 +65,7 @@ void Default_params()
|
||||
}
|
||||
else
|
||||
{
|
||||
Cancount[m_FAST] = 10; // пауза между посылками CAN
|
||||
Cancount[m_FAST] = 12; // пауза между посылками CAN
|
||||
Brightness = 8;
|
||||
}
|
||||
|
||||
|
||||
@@ -205,15 +205,14 @@ void get_Buttons()
|
||||
|
||||
if(Desk==dsk_EPLT)
|
||||
{
|
||||
/* Фильтрует TESTLAMP на GPIO26 накопителем INcount0 с порогом 1000 опросов главного цикла; прежний bTestLamp удерживает режим теста при кратких провалах входа до подтверждения нового состояния фильтром. */
|
||||
bTestLamp = er_anal(GpioDataRegs.GPADAT.bit.GPIO26, &INcount0, 1000, bTestLamp);
|
||||
/* Таймер пульта включает местный тест после непрерывного удержания TESTLAMP в течение 2 с; число проходов main не влияет на задержку. */
|
||||
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO27) butt +=0x0001;
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO24) butt +=0x0002;
|
||||
if(GpioDataRegs.GPBDAT.bit.GPIO53) butt +=0x0004;
|
||||
if(GpioDataRegs.GPBDAT.bit.GPIO50) butt +=0x0008;
|
||||
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO26) butt +=0x0010;
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO26) butt +=0x0010; // Передаёт исходное состояние TESTLAMP в бите 4 слова Inputs (0x10), по которому основной контроллер вызывает сброс ошибок при коротком нажатии.
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO23) butt +=0x0020;
|
||||
if(GpioDataRegs.GPBDAT.bit.GPIO52) butt +=0x0040;
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO4 ) butt +=0x0080;
|
||||
|
||||
+15
-6
@@ -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"
|
||||
@@ -43,6 +43,7 @@ interrupt void cpu_timer1_isr_PULT(void)
|
||||
static int cownt=0,count_bright;
|
||||
unsigned int light=0, i;
|
||||
unsigned int Alone = 20*READY_FREQ;
|
||||
static unsigned int test_lamp_hold_ticks = 0; // Считает длительность непрерывного нажатия GPIO26 в тиках READY_FREQ; насыщение на пороге исключает переполнение при долгом удержании.
|
||||
|
||||
EALLOW;
|
||||
CpuTimer1.InterruptCount++;
|
||||
@@ -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(); // Формирует на резервном выходе 1 меандр с частотой READY_FREQ/2 (500 Гц) для контроля работы таймера пульта.
|
||||
toggle_RES_OUT_2(); // Дублирует переключения таймера на резервном выходе 2 с частотой READY_FREQ/2 (500 Гц) для контроля активности пульта.
|
||||
|
||||
if(++Lonely > Alone) Lonely = Alone;
|
||||
|
||||
@@ -74,6 +75,14 @@ interrupt void cpu_timer1_isr_PULT(void)
|
||||
|
||||
if(++cownt>2) cownt=0;
|
||||
|
||||
if(GpioDataRegs.GPADAT.bit.GPIO26) // Единица GPIO26 означает нажатие TESTLAMP, как и бит 4 Inputs; таймер измеряет удержание независимо от загрузки main.
|
||||
{ // Накапливает время текущего нажатия перед включением местного теста ламп.
|
||||
if(test_lamp_hold_ticks < 2U * (unsigned int)READY_FREQ) // Две секунды при частоте READY_FREQ Гц соответствуют 2000 тикам текущего таймера 1000 Гц.
|
||||
test_lamp_hold_ticks++; // Добавляет один период таймера (1 мс); после достижения порога счётчик сохраняет значение до отпускания.
|
||||
} // Завершает обработку удерживаемой кнопки.
|
||||
else test_lamp_hold_ticks = 0; // При отпускании обнуляет время, чтобы отдельные короткие нажатия не складывались в длинное.
|
||||
bTestLamp = (test_lamp_hold_ticks >= 2U * (unsigned int)READY_FREQ); // Включает местный тест после 2 с удержания и выключает при отпускании; короткое нажатие остаётся сигналом сброса для основного контроллера.
|
||||
|
||||
if(cTestLamp|bTestLamp)
|
||||
{
|
||||
what_is();
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/* SPI EEPROM. Seeprom_read/write разбивают запрос на страницы
|
||||
* и синхронно ждут spiSe2pFree. SPI-автомат продвигает таймер 2
|
||||
* каждые 100 мкс. При запрете этого IRQ ожидание не завершится.
|
||||
* Тайм-аут в старом драйвере отсутствует. Дискреты СИФУ теперь
|
||||
* не зависят от того, завершилось ли это ожидание в main.
|
||||
/* SPI EEPROM. Seeprom_read/write разбивают запрос на страницы
|
||||
* и синхронно ждут spiSe2pFree. SPI-автомат продвигает таймер 2
|
||||
* каждые 100 мкс. При запрете этого IRQ ожидание не завершится.
|
||||
* Тайм-аут в старом драйвере отсутствует. Дискреты СИФУ теперь
|
||||
* не зависят от того, завершилось ли это ожидание в main.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
|
||||
|
||||
@@ -25,8 +25,8 @@ int ccc=0;
|
||||
/******* SPI bus Serial EEPROM driver Initialization routine ********/
|
||||
/********************************************************************/
|
||||
|
||||
/* Блокирует main до завершения страниц. Запрет IRQ остановит
|
||||
* SPI-автомат. CAN и таймер СИФУ должны прерывать это ожидание.
|
||||
/* Блокирует main до завершения страниц. Запрет IRQ остановит
|
||||
* SPI-автомат. CAN и таймер СИФУ должны прерывать это ожидание.
|
||||
*/
|
||||
void Seeprom_write( unsigned int adres,
|
||||
unsigned int buf[],
|
||||
@@ -59,8 +59,8 @@ void Seeprom_write( unsigned int adres,
|
||||
CpuTimer2Regs.TCR.all = 0x4010; // Use write-only instruction to set TSS bit = 1
|
||||
}
|
||||
|
||||
/* Чтение также синхронное для main, тайм-аут не реализован.
|
||||
* При зависании проверить step/SPI и работу таймера 2.
|
||||
/* Чтение также синхронное для main, тайм-аут не реализован.
|
||||
* При зависании проверить step/SPI и работу таймера 2.
|
||||
*/
|
||||
void Seeprom_read( unsigned int adres,
|
||||
unsigned int buf[],
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* Внешняя память и программные задержки. init_zone7 готовит XINTF
|
||||
* до первого обращения к .logg; времена шины зависят от частоты DSP
|
||||
* и аппаратной памяти. pause_us занимает CPU циклом и используется
|
||||
* при инициализации. Длительность СИФУ должна задаваться таймером.
|
||||
/* Внешняя память и программные задержки. init_zone7 готовит XINTF
|
||||
* до первого обращения к .logg; времена шины зависят от частоты DSP
|
||||
* и аппаратной памяти. pause_us занимает CPU циклом и используется
|
||||
* при инициализации. Длительность СИФУ должна задаваться таймером.
|
||||
*/
|
||||
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
|
||||
|
||||
Reference in New Issue
Block a user