Сохранить русские комментарии и настройки проекта в UTF-8
Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
This commit is contained in:
@@ -1,43 +1,74 @@
|
||||
/* Настройка АЦП, обработка преобразований и первичная фильтрация измерений. Русские пояснения сохранены в UTF-8. */
|
||||
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
|
||||
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
|
||||
/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */
|
||||
#include "DSP2833x_Examples.h" // DSP281x Examples Include File
|
||||
/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */
|
||||
#include "DSP2833x_SWPrioritizedIsrLevels.h"
|
||||
|
||||
/* Подключает "ADC.h": настройка АЦП, обработка преобразований и первичная фильтрация измерений. */
|
||||
#include "ADC.h"
|
||||
|
||||
/* Подключает "log_to_mem.h": двухбанковый регистратор событий нагрузки во внешней RAM. */
|
||||
#include "log_to_mem.h"
|
||||
/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */
|
||||
#include "RS485.h"
|
||||
/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */
|
||||
#include "filter_bat2.h"
|
||||
|
||||
/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */
|
||||
#include "measure.h"
|
||||
/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */
|
||||
#include "message.h"
|
||||
/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */
|
||||
#include "package.h"
|
||||
|
||||
/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */
|
||||
#include "peripher.h"
|
||||
|
||||
/* Объявляет adc_table_lem — АЦП table lem. */
|
||||
Uint16 adc_table_lem[4];
|
||||
Uint16 ADC_table[28]; // Ïîòîìó ÷òî +4 êàëèáð
|
||||
/* Объявляет ADC_table — АЦП table. */
|
||||
Uint16 ADC_table[28]; // Потому что +4 калибр
|
||||
/* Объявляет prev_ok — данные prev_ok. */
|
||||
Uint16 prev_ok[28];
|
||||
|
||||
/* Объявляет COUNT_ONE_CANAL — число ONE CANAL. */
|
||||
unsigned int COUNT_ONE_CANAL;
|
||||
/* Объявляет COUNT_DISCHARGE — число DISCHARGE. */
|
||||
unsigned int COUNT_DISCHARGE;
|
||||
/* Объявляет COUNT_TRANSICIA — число TRANSICIA. */
|
||||
unsigned int COUNT_TRANSICIA;
|
||||
/* Объявляет FILTER_CLIP — данные FILTER_CLIP. */
|
||||
unsigned int FILTER_CLIP;
|
||||
|
||||
/* Объявляет WAKE — данные WAKE; WAKE_TIME — данные WAKE_TIME. */
|
||||
long WAKE, WAKE_TIME;
|
||||
|
||||
// Prototype statements for functions found within this file.
|
||||
/* Принимает результаты последовательности АЦП и обновляет измерительные фильтры в прерывании. */
|
||||
interrupt void adc_isr(void);
|
||||
|
||||
/* Настраивает каналы, последовательность преобразований и запуск АЦП. */
|
||||
void setup_adc()
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Объявляет CLKdiv — данные CLKdiv; HSPCLKdiv — данные HSPCLKdiv; Rate — данные Rate. */
|
||||
long CLKdiv,HSPCLKdiv,Rate;
|
||||
/* Объявляет i — данные i. */
|
||||
int i;
|
||||
|
||||
/* Условие компиляции (CPU_FRQ_150MHZ): выбранный блок включается в текущий вариант прошивки. */
|
||||
#if (CPU_FRQ_150MHZ) // Default - 150 MHz SYSCLKOUT
|
||||
/* Задаёт ADC_MODCLK = 0x3; АЦП MODCLK. */
|
||||
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
|
||||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||||
#endif
|
||||
/* Условие компиляции (CPU_FRQ_100MHZ): выбранный блок включается в текущий вариант прошивки. */
|
||||
#if (CPU_FRQ_100MHZ)
|
||||
/* Задаёт ADC_MODCLK = 0x2; АЦП MODCLK. */
|
||||
#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz
|
||||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||||
#endif
|
||||
|
||||
// Specific clock setting for this example:
|
||||
@@ -47,247 +78,438 @@ void setup_adc()
|
||||
|
||||
// Interrupts that are used in this example are re-mapped to
|
||||
// ISR functions found within this file.
|
||||
/* Разрешение записи в защищённые регистры периферии. */
|
||||
EALLOW; // This is needed to write to EALLOW protected register
|
||||
/* Записывает PieVectTable.ADCINT значением &adc_isr; данные ADCINT. */
|
||||
PieVectTable.ADCINT = &adc_isr;
|
||||
/* Закрытие доступа к защищённым регистрам периферии. */
|
||||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||||
|
||||
/* Инициализирует модуль вызовом InitAdc(); перед его дальнейшим использованием. */
|
||||
InitAdc(); // For this example, init the ADC
|
||||
|
||||
// Enable ADCINT in PIE
|
||||
/* Записывает PieCtrlRegs.PIEIER1.bit.INTx6 значением 1; данные INTx6. */
|
||||
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
|
||||
/* Устанавливает биты IER значением M_INT1; регистр разрешения прерываний ядра C28x. */
|
||||
IER |= M_INT1; // Enable CPU Interrupt 1
|
||||
// EINT; // Enable Global interrupt INTM
|
||||
// ERTM; // Enable Global realtime interrupt DBGM
|
||||
|
||||
/* Цикл for(i=0;i<28;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for(i=0;i<28;i++)
|
||||
/* Записывает ADC_table[i] значением ; АЦП table. */
|
||||
ADC_table[i]=
|
||||
/* Записывает prev_ok[i] значением 0; данные prev_ok. */
|
||||
prev_ok[i] = 0;
|
||||
|
||||
// Configure ADC
|
||||
if(Desk==dsk_LOAD)
|
||||
/* Проверяет if(Desk==dsk_LOAD); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_LOAD)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x0005; данные MAX_CONV1. */
|
||||
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; данные CONV00. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x3; // температура (которой нет)
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV01 значением 0x1; данные CONV01. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; // омега
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV02 значением 0x5; данные CONV02. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x5; // напруга 1
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV03 значением 0x4; данные CONV03. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x4; // напруга 2
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV04 значением 0x7; данные CONV04. */
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x7; // ток 1
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV05 значением 0x2; данные CONV05. */
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x2; // ток 2
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
/* Проверяет if(Desk==dsk_BKST); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_BKST)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x0002; данные MAX_CONV1. */
|
||||
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0002; // Setup 2 conv's on SEQ1
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV00 значением 0x0; данные CONV00. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; //0x5;//0x7; // Setup ADCINA3 as 1st SEQ1 conv.
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV01 значением 0x1; данные CONV01. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x1; //0x4;// Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV02 значением 0x2; данные CONV02. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x2; //0x4;// Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
/* Проверяет if(Desk==dsk_COMM); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_COMM)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x0006; данные MAX_CONV1. */
|
||||
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0006; // Setup 2 conv's on SEQ1
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x5; // ñíà÷àëà òîæå áóäóò òåìïåðàòóðû
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV00 значением 0x5; данные CONV00. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x5; // сначала тоже будут температуры
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV01 значением 0x4; данные CONV01. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x4; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV02 значением 0x7; данные CONV02. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x7; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV03 значением 0x2; данные CONV03. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x2; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV04 значением 0x3; данные CONV04. */
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x3; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV05 значением 0x6; данные CONV05. */
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x6; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV06 значением 0x1; данные CONV06. */
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x1; // Setup ADCINA2 as 2nd SEQ1 conv.
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
if(Desk==dsk_BKSD)
|
||||
/* Проверяет if(Desk==dsk_BKSD); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_BKSD)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x0000; данные MAX_CONV1. */
|
||||
AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x0000; // Setup 2 conv's on SEQ1
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV00 значением 0x0; данные CONV00. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; // Setup ADCINA3 as 1st SEQ1 conv.
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
if(Desk==dsk_SHKF)
|
||||
/* Проверяет if(Desk==dsk_SHKF); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_SHKF)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает AdcRegs.ADCMAXCONV.bit.MAX_CONV1 значением 0x000F; данные MAX_CONV1. */
|
||||
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; данные CONV00. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x2; // 380В Ф1
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV01 значением 0x3; данные CONV01. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x3; // 380В Ф2
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV02 значением 0x6; данные CONV02. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x6; // 31В Ф1
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ1.bit.CONV03 значением 0xC; данные CONV03. */
|
||||
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0xC; // 31В Ф2 ?
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV04 значением 0xA; данные CONV04. */
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0xA; // 31В UC1
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV05 значением 0xB; данные CONV05. */
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0xB; // 31В UC2
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV06 значением 0x7; данные CONV06. */
|
||||
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x7; // 24В ПУ
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ2.bit.CONV07 значением 0x4; данные CONV07. */
|
||||
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; данные CONV08. */
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x5; // 24В ПК было 5
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ3.bit.CONV09 значением 0x1; данные CONV09. */
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x1; // 15В Др
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ3.bit.CONV10 значением 0xE; данные CONV10. */
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0xE; // +24В Дт
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ3.bit.CONV11 значением 0x0; данные CONV11. */
|
||||
AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0; // +24В Дт
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ4.bit.CONV12 значением 0x8; данные CONV12. */
|
||||
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; данные CONV13. */
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0xF;//0xF; // ДТ° 1
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ4.bit.CONV14 значением 0xD; данные CONV14. */
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0xD;//0xD; // ДТ° 2
|
||||
/* Записывает AdcRegs.ADCCHSELSEQ4.bit.CONV15 значением 0x9; данные CONV15. */
|
||||
AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0x9;//0x9;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
/* Записывает AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 значением 1; данные EPWM_SOCA_SEQ1. */
|
||||
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;// Enable SOCA from ePWM to start SEQ1
|
||||
/* Записывает AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 значением 1; данные INT_ENA_SEQ1. */
|
||||
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable SEQ1 interrupt (every EOS)
|
||||
/* Записывает AdcRegs.ADCST.bit.INT_SEQ1_CLR значением 1; данные INT_SEQ1_CLR. */
|
||||
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit
|
||||
|
||||
|
||||
/* Записывает AdcRegs.ADCTRL1.bit.SEQ_CASC значением 1; данные SEQ_CASC. */
|
||||
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; // 1 Cascaded mode
|
||||
|
||||
/* Записывает AdcRegs.ADCTRL1.bit.CONT_RUN значением 0; данные CONT_RUN. */
|
||||
AdcRegs.ADCTRL1.bit.CONT_RUN=0;
|
||||
/* Записывает AdcRegs.ADCTRL1.bit.ACQ_PS значением 15; данные ACQ_PS. */
|
||||
AdcRegs.ADCTRL1.bit.ACQ_PS = 15;
|
||||
|
||||
//AdcRegs.ADCTRL1.bit.CPS=1;
|
||||
|
||||
/* Записывает AdcRegs.ADCTRL2.bit.RST_SEQ1 значением 1; данные RST_SEQ1. */
|
||||
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
|
||||
/* Записывает PieCtrlRegs.PIEACK.all значением PIEACK_GROUP1; представление регистра целым словом без разбиения на битовые поля. */
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
|
||||
|
||||
|
||||
// Assumes ePWM1 clock is already enabled in InitSysCtrl();
|
||||
/* Записывает EPwm1Regs.ETSEL.bit.SOCAEN значением 1; данные SOCAEN. */
|
||||
EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOC on A group
|
||||
/* Записывает EPwm1Regs.ETSEL.bit.SOCASEL значением 4; данные SOCASEL. */
|
||||
EPwm1Regs.ETSEL.bit.SOCASEL = 4; // Select SOC from from CPMA on upcount
|
||||
/* Записывает EPwm1Regs.ETPS.bit.SOCAPRD значением 1; данные SOCAPRD. */
|
||||
EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate pulse on 1st event
|
||||
/* Записывает EPwm1Regs.CMPA.half.CMPA значением 0x0080; данные CMPA. */
|
||||
EPwm1Regs.CMPA.half.CMPA = 0x0080; // Set compare A value
|
||||
|
||||
/* Записывает EPwm1Regs.TBCTL.bit.HSPCLKDIV значением CLKMULT; данные HSPCLKDIV. */
|
||||
EPwm1Regs.TBCTL.bit.HSPCLKDIV = CLKMULT;
|
||||
/* Записывает EPwm1Regs.TBCTL.bit.CLKDIV значением 2; данные CLKDIV. */
|
||||
EPwm1Regs.TBCTL.bit.CLKDIV=2;
|
||||
|
||||
/* Записывает CLKdiv значением 1<<EPwm1Regs.TBCTL.bit.CLKDIV; данные CLKdiv. */
|
||||
CLKdiv = 1<<EPwm1Regs.TBCTL.bit.CLKDIV;
|
||||
/* Проверяет if(EPwm1Regs.TBCTL.bit.HSPCLKDIV) HSPCLKdiv = 2*EPwm1Regs.TBCTL.bit.HSPCLKDIV; последующий оператор выполняется только при истинном условии. */
|
||||
if(EPwm1Regs.TBCTL.bit.HSPCLKDIV) HSPCLKdiv = 2*EPwm1Regs.TBCTL.bit.HSPCLKDIV;
|
||||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||||
else HSPCLKdiv = 1;
|
||||
|
||||
/* Записывает Rate значением (SYSCLKOUT/(HSPCLKdiv*CLKdiv))/ADC_FREQ; данные Rate. */
|
||||
Rate = (SYSCLKOUT/(HSPCLKdiv*CLKdiv))/ADC_FREQ;
|
||||
|
||||
/* Записывает EPwm1Regs.TBPRD значением Rate; данные TBPRD. */
|
||||
EPwm1Regs.TBPRD = Rate; // Set period for ePWM1
|
||||
/* Записывает EPwm1Regs.TBCTL.bit.CTRMODE значением 0; данные CTRMODE. */
|
||||
EPwm1Regs.TBCTL.bit.CTRMODE = 0; // count up and start
|
||||
|
||||
/* Записывает WAKE_TIME значением 2L * ADC_FREQ; данные WAKE_TIME. */
|
||||
WAKE_TIME =2L * ADC_FREQ; // dsk_LOAD;
|
||||
|
||||
/* Проверяет if(Desk==dsk_BKSD); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_BKSD)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает COUNT_ONE_CANAL значением ADC_FREQ/250; число ONE CANAL. */
|
||||
COUNT_ONE_CANAL = ADC_FREQ/250; // 15
|
||||
/* Записывает COUNT_DISCHARGE значением 4; число DISCHARGE. */
|
||||
COUNT_DISCHARGE = 4;
|
||||
/* Записывает COUNT_TRANSICIA значением 9; число TRANSICIA. */
|
||||
COUNT_TRANSICIA = 9;
|
||||
/* Записывает FILTER_CLIP значением 20; данные FILTER_CLIP. */
|
||||
FILTER_CLIP = 20;//40;
|
||||
/* Записывает WAKE_TIME значением 7L * ADC_FREQ; данные WAKE_TIME. */
|
||||
WAKE_TIME =7L * ADC_FREQ;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Проверяет if(Desk==dsk_BKST); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_BKST)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает COUNT_ONE_CANAL значением ADC_FREQ/350; число ONE CANAL. */
|
||||
COUNT_ONE_CANAL = ADC_FREQ/350; // 10
|
||||
/* Записывает COUNT_DISCHARGE значением 1; число DISCHARGE. */
|
||||
COUNT_DISCHARGE = 1;
|
||||
/* Записывает COUNT_TRANSICIA значением 4; число TRANSICIA. */
|
||||
COUNT_TRANSICIA = 4;
|
||||
/* Записывает FILTER_CLIP значением 20; данные FILTER_CLIP. */
|
||||
FILTER_CLIP = 20;//40;
|
||||
/* Записывает WAKE_TIME значением 3L * ADC_FREQ; данные WAKE_TIME. */
|
||||
WAKE_TIME =3L * ADC_FREQ;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Проверяет if(TermoAD); последующий оператор выполняется только при истинном условии. */
|
||||
if(TermoAD)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает COUNT_ONE_CANAL значением ADC_FREQ/15; число ONE CANAL. */
|
||||
COUNT_ONE_CANAL = ADC_FREQ/15; // 250;
|
||||
/* Записывает COUNT_DISCHARGE значением ADC_FREQ/145; число DISCHARGE. */
|
||||
COUNT_DISCHARGE = ADC_FREQ/145; // 25;
|
||||
/* Записывает COUNT_TRANSICIA значением ADC_FREQ/25; число TRANSICIA. */
|
||||
COUNT_TRANSICIA = ADC_FREQ/25; // 150;
|
||||
/* Записывает FILTER_CLIP значением 20; данные FILTER_CLIP. */
|
||||
FILTER_CLIP = 20;//200;
|
||||
/* Записывает WAKE_TIME значением 3L * ADC_FREQ; данные WAKE_TIME. */
|
||||
WAKE_TIME =3L * ADC_FREQ;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Проверяет if(Desk==dsk_LOAD); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_LOAD)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает WAKE_TIME значением 10L * ADC_FREQ; данные WAKE_TIME. */
|
||||
WAKE_TIME =10L * ADC_FREQ;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Проверяет if(Desk==dsk_SHKF); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_SHKF)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает WAKE_TIME значением 1L * ADC_FREQ; данные WAKE_TIME. */
|
||||
WAKE_TIME =1L * ADC_FREQ;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
|
||||
/* Записывает WAKE значением WAKE_TIME; данные WAKE. */
|
||||
WAKE = WAKE_TIME;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
/* Принимает результаты последовательности АЦП и обновляет измерительные фильтры в прерывании. */
|
||||
interrupt void adc_isr(void)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Объявляет cownt_one_canal — данные cownt_one_canal. Начальное значение задаётся справа от знака равенства. */
|
||||
static int cownt_one_canal=0;
|
||||
/* Объявляет cownt_cans — данные cownt_cans. Начальное значение задаётся справа от знака равенства. */
|
||||
static int cownt_cans=0;
|
||||
/* Объявляет code_tpl_canal — данные code_tpl_canal. Начальное значение задаётся справа от знака равенства. */
|
||||
int code_tpl_canal=0;
|
||||
/* Объявляет Temper — данные Temper; Filter — данные Filter. */
|
||||
float Temper,Filter;
|
||||
/* Объявляет i — данные i; n — данные n. */
|
||||
int i,n;
|
||||
|
||||
/* Объявляет ok — данные ok; cwnt_ok — данные cwnt_ok. Начальное значение задаётся справа от знака равенства. */
|
||||
static int ok, cwnt_ok[2]={0,0};
|
||||
|
||||
// Set interrupt priority:
|
||||
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
|
||||
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all;
|
||||
|
||||
/* Устанавливает биты IER значением M_INT1; регистр разрешения прерываний ядра C28x. */
|
||||
IER |= M_INT1;
|
||||
/* Оставляет биты маски IER значением MINT1; регистр разрешения прерываний ядра C28x. */
|
||||
IER &= MINT1; // Set "global" priority
|
||||
/* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG11; представление регистра целым словом без разбиения на битовые поля. */
|
||||
PieCtrlRegs.PIEIER1.all &= MG11;//16; // Set "group" priority
|
||||
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
|
||||
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
|
||||
/* Разрешение маскируемых прерываний ядра. */
|
||||
EINT;
|
||||
|
||||
/* Проверяет if(WAKE) WAKE--; последующий оператор выполняется только при истинном условии. */
|
||||
if(WAKE) WAKE--;
|
||||
/* Проверяет if(!READY) goto fin; последующий оператор выполняется только при истинном условии. */
|
||||
if(!READY) goto fin;
|
||||
|
||||
/* Проверяет if(Caliber_time); последующий оператор выполняется только при истинном условии. */
|
||||
if(Caliber_time)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Проверяет if(!--Caliber_time); последующий оператор выполняется только при истинном условии. */
|
||||
if(!--Caliber_time)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает cTermoCal значением 0; данные cTermoCal. */
|
||||
cTermoCal = 0;
|
||||
/* Записывает cSaveParam значением 1; данные cSaveParam. */
|
||||
cSaveParam = 1;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
} }
|
||||
|
||||
/* Проверяет if(Kurrent); последующий оператор выполняется только при истинном условии. */
|
||||
if(Kurrent)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Цикл for(i=0;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for(i=0;i<4;i++)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает adc_table_lem[i] значением *((&AdcRegs.ADCRESULT0)+i+2) >>4; Current_count(i); АЦП table lem. */
|
||||
adc_table_lem[i] = *((&AdcRegs.ADCRESULT0)+i+2) >>4; Current_count(i);
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
} }
|
||||
|
||||
if(Desk==dsk_LOAD)
|
||||
/* Проверяет if(Desk==dsk_LOAD); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_LOAD)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает Temper значением AdcRegs.ADCRESULT1 >> 4; данные Temper. */
|
||||
Temper = AdcRegs.ADCRESULT1 >> 4;
|
||||
/* Записывает modbus[0x63] значением Temper; массив технологических регистров; слово int на C28x занимает 16 бит. */
|
||||
modbus[0x63] = Temper;
|
||||
/* Записывает Temper значением filterbat(&adc_filter[0],Temper); данные Temper. */
|
||||
Temper = filterbat(&adc_filter[0],Temper);
|
||||
/* Записывает modbus[0x1D] значением (Temper-DAC_04)/(DAC_20-DAC_04)*(200-40)+40; массив технологических регистров; слово int на C28x занимает 16 бит. */
|
||||
modbus[0x1D] = (Temper-DAC_04)/(DAC_20-DAC_04)*(200-40)+40;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
/* Проверяет if(Desk==dsk_SHKF); последующий оператор выполняется только при истинном условии. */
|
||||
if(Desk==dsk_SHKF)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Цикл for(i=0;i<CLKMULT*3;); задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for(i=0;i<CLKMULT*3;)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Проверяет if (++cownt_cans>=tpl_cans) cownt_cans=0; последующий оператор выполняется только при истинном условии. */
|
||||
if (++cownt_cans>=tpl_cans) cownt_cans=0;
|
||||
|
||||
// Èìåííî çäåñü íåò äûð
|
||||
// Именно здесь нет дыр
|
||||
// if(sens_type[cownt_cans])
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Изменяет счётчик в выражении i++; на один для следующего шага. */
|
||||
i++;
|
||||
/* Записывает Temper значением *(&AdcRegs.ADCRESULT0 + cownt_cans) >>4; данные Temper. */
|
||||
Temper= *(&AdcRegs.ADCRESULT0 + cownt_cans) >>4;
|
||||
/* Записывает ADC_table[cownt_cans] значением filterbat(&adc_filter[cownt_cans],Temper); АЦП table. */
|
||||
ADC_table[cownt_cans]=filterbat(&adc_filter[cownt_cans],Temper);
|
||||
/* Проверяет if(sens_type[cownt_cans]==TERMO_AD) Temper_count(cownt_cans,0); последующий оператор выполняется только при истинном условии. */
|
||||
if(sens_type[cownt_cans]==TERMO_AD) Temper_count(cownt_cans,0);
|
||||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||||
else Power_count(cownt_cans);
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
} } }
|
||||
|
||||
/* Проверяет if(TermoSW); последующий оператор выполняется только при истинном условии. */
|
||||
if(TermoSW)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Проверяет if(cownt_one_canal==COUNT_DISCHARGE); последующий оператор выполняется только при истинном условии. */
|
||||
if(cownt_one_canal==COUNT_DISCHARGE)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает code_tpl_canal значением cownt_cans; данные code_tpl_canal. */
|
||||
code_tpl_canal = cownt_cans;
|
||||
|
||||
/* Проверяет if(TermoAD); последующий оператор выполняется только при истинном условии. */
|
||||
if(TermoAD)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Проверяет if(cownt_cans == TPL_CANS ) code_tpl_canal = TERMOPAIR-1; последующий оператор выполняется только при истинном условии. */
|
||||
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; последующий оператор выполняется только при истинном условии. */
|
||||
if(cownt_cans == TPL_CANS+1) code_tpl_canal = TERMOPAIR-2; // потому что 300 и 400 наоборот
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Вызывает select_tpl_canal с аргументами (code_tpl_canal) в текущей последовательности операций. */
|
||||
select_tpl_canal(code_tpl_canal);
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
/* Проверяет if(cownt_one_canal > COUNT_TRANSICIA); последующий оператор выполняется только при истинном условии. */
|
||||
if(cownt_one_canal > COUNT_TRANSICIA)
|
||||
/* Цикл for(i=0;i<TermoSW;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for(i=0;i<TermoSW;i++)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает n значением TermoSW*cownt_cans+i; данные n. */
|
||||
n = TermoSW*cownt_cans+i;
|
||||
|
||||
/* Записывает Temper значением *(&AdcRegs.ADCRESULT0 + i) >>4; данные Temper. */
|
||||
Temper = *(&AdcRegs.ADCRESULT0 + i) >>4;
|
||||
|
||||
/* Записывает ok значением abs(ADC_table[n]-Temper) < FILTER_CLIP; данные ok. */
|
||||
ok = abs(ADC_table[n]-Temper) < FILTER_CLIP;
|
||||
|
||||
/* Проверяет if(ok) cwnt_ok[i]++; последующий оператор выполняется только при истинном условии. */
|
||||
if(ok) cwnt_ok[i]++;
|
||||
|
||||
/* Проверяет if(ok|!prev_ok[n]); последующий оператор выполняется только при истинном условии. */
|
||||
if(ok|!prev_ok[n])
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает Filter значением filterbat(&adc_filter[n],Temper); данные Filter. */
|
||||
Filter = filterbat(&adc_filter[n],Temper);
|
||||
|
||||
|
||||
/* Проверяет if(WAKE)ADC_table[n] = Temper; последующий оператор выполняется только при истинном условии. */
|
||||
if(WAKE)ADC_table[n] = Temper;
|
||||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||||
else ADC_table[n] = Filter;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/*
|
||||
if(cownt_cans == TPL_CANS)
|
||||
@@ -303,36 +525,59 @@ for(i=0;i<1;i++)
|
||||
}
|
||||
}
|
||||
*/
|
||||
/* Проверяет if(++cownt_one_canal>=COUNT_ONE_CANAL); последующий оператор выполняется только при истинном условии. */
|
||||
if(++cownt_one_canal>=COUNT_ONE_CANAL)
|
||||
/* Записывает cownt_one_canal значением 0; данные cownt_one_canal. */
|
||||
{ cownt_one_canal=0;
|
||||
|
||||
/* Вызывает select_tpl_255 с аргументами () в текущей последовательности операций. */
|
||||
select_tpl_255();
|
||||
|
||||
/* Цикл for(i=0;i<TermoSW;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for(i=0;i<TermoSW;i++)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Записывает n значением TermoSW*cownt_cans+i; данные n. */
|
||||
n = TermoSW*cownt_cans+i;
|
||||
/* Вызывает Temper_count с аргументами (n,0) в текущей последовательности операций. */
|
||||
Temper_count(n,0);
|
||||
/* Записывает prev_ok[n] значением cwnt_ok[i]; данные prev_ok. */
|
||||
prev_ok[n] = cwnt_ok[i];
|
||||
/* Записывает cwnt_ok[i] значением 0; данные cwnt_ok. */
|
||||
cwnt_ok[i] = 0;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
/* Проверяет if(++cownt_cans >= TPL_CANS+2); последующий оператор выполняется только при истинном условии. */
|
||||
if(++cownt_cans >= TPL_CANS+2)
|
||||
/* Записывает cownt_cans значением 0; данные cownt_cans. */
|
||||
{ cownt_cans=0;
|
||||
|
||||
/* Цикл for(i=0;i<Owen;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for(i=0;i<Owen;i++)
|
||||
/* Вызывает Temper_count с аргументами (tpl_cans+i,1) в текущей последовательности операций. */
|
||||
Temper_count(tpl_cans+i,1);
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
} } }
|
||||
|
||||
/* Метка fin для перехода внутри функции. */
|
||||
fin:
|
||||
|
||||
// Reinitialize for next ADC sequence
|
||||
/* Записывает AdcRegs.ADCTRL2.bit.RST_SEQ1 значением 1; данные RST_SEQ1. */
|
||||
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; // Reset SEQ1
|
||||
/* Записывает AdcRegs.ADCST.bit.INT_SEQ1_CLR значением 1; данные INT_SEQ1_CLR. */
|
||||
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1; // Clear INT SEQ1 bit
|
||||
/* Записывает PieCtrlRegs.PIEACK.all значением PIEACK_GROUP1; представление регистра целым словом без разбиения на битовые поля. */
|
||||
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // Acknowledge interrupt to PIE
|
||||
|
||||
// Restore registers saved:
|
||||
/* Запрет маскируемых прерываний ядра. */
|
||||
DINT;
|
||||
/* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
|
||||
PieCtrlRegs.PIEIER1.all = TempPIEIER;
|
||||
|
||||
/* Завершает adc_isr без возвращаемого значения. */
|
||||
return;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user