1 Commits

Author SHA1 Message Date
9b15d9837a Испр. опечатку dac_stop 2026-09-22 07:52:36 +03:00
177 changed files with 3178 additions and 28935 deletions

View File

@@ -1,6 +0,0 @@
# Общая кодировка редактируемых файлов проекта.
root = true
# Русские комментарии сохраняются без BOM в UTF-8.
[*]
charset = utf-8

58
.gitignore vendored
View File

@@ -1,60 +1,2 @@
# Исключает из Git артефакты по шаблону ниже.
/Debug/
# Исключает из Git артефакты по шаблону ниже.
/UKSSTMS320F28335.CS_/
# Исключает из Git артефакты по шаблону ниже.
/Bin/UKSSTMS320F28335_*.bin
# Исключает из Git артефакты по шаблону ниже.
/Bin/LoggerFix/
# Исключает из Git артефакты по шаблону ниже.
/Bin/LoggerEepromFix/
# Исключает из Git артефакты по шаблону ниже.
/Bin/Rs232FifoTest/
# Исключает из Git артефакты по шаблону ниже.
/Bin/Rs232NoFifoTest/
# Исключает из Git артефакты по шаблону ниже.
/Bin/UartFifoTest/
# Исключает из Git артефакты по шаблону ниже.
/Bin/*.pending
# Исключает из Git артефакты по шаблону ниже.
/UKSSTMS320F28335/Generated/
# Исключает из Git артефакты по шаблону ниже.
/Bin/FirmwareIdentity/
# Исключает из Git артефакты по шаблону ниже.
/Bin/*.bin.manifest.json
# Исключает из Git артефакты по шаблону ниже.
/Bin/*.bin.sha256
# Кэш Python восстанавливается автоматически и не относится к исходникам прошивки.
**/__pycache__/
# Загруженные локальные инструменты документации не нужны для хранения изменений проекта.
/Doc/.tools/
# HTML-документация и диагностические журналы Doxygen создаются из исходных документов.
/Doc/build/
# Объекты компиляции восстанавливаются скриптами сборки и зависят от локальных инструментов TI.
/Bin/**/obj/
# Паспорт и заголовок конкретной сборки генерируются перед компиляцией из версии и состояния Git.
/Bin/**/generated/
# Исполняемые образы TI в экспериментальных каталогах являются результатом компиляции.
/Bin/**/*.out
# Карты новых сборок воспроизводятся линкером; ранее отслеживаемые карты остаются в Git.
/Bin/**/*.map
# HEX новых сборок дублирует локальные OUT/BIN; уже отслеживаемые образы сохраняются в истории.
/Bin/**/*.hex
# Листинги TI создаются из OUT для проверки порядка машинных инструкций EEPROM.
/Bin/**/*disassembly*.txt
# Кандидат SCI8 предназначен для проверки перед выпуском окончательного образа.
/Bin/**/*.candidate
# Локальные загрузочные образы пересоздаются из исходников и скриптов соответствующей сборки.
/Bin/**/*.bin
# Манифест конкретного образа содержит время и состояние локальной сборки.
/Bin/**/*.bin.manifest.json
# Контрольная сумма создаётся вместе с локальным загрузочным образом.
/Bin/**/*.bin.sha256
# Журналы компиляции и диагностики зависят от локального запуска инструментов.
/Bin/**/*.log
# Копии паспорта в каталогах с отметкой времени дублируют генерируемые метаданные сборки.
/Bin/**/firmware_identity.json
# Снимки интерфейса, использованные для проверки состава каналов, являются локальными артефактами.
/Bin/**/logger_channels.png
# Снимки предпросмотра защиты используются только при визуальной проверке интерфейса.
/Bin/**/gui_preview.png

1
Bin/.gitignore vendored
View File

@@ -1,2 +1 @@
# Исключает из Git артефакты по шаблону ниже.
/UKSSTMS320F28335.out

File diff suppressed because one or more lines are too long

View File

@@ -1,41 +0,0 @@
{
"schema": 1,
"product": "Balsam-167-PM35",
"target": "TMS320F28335",
"version": [
1,
1,
2
],
"build_id": "c6c9128+",
"built_at_utc": "2026-10-09T13:10:25+00:00",
"source": {
"commit": "c6c91282387adc789a7ebbc6f7e763d02b549789",
"dirty": true
},
"templates": {
"commit": "86ece3ea907cc92db73390eaae7551dd01b54e2c",
"dirty": true
},
"identity_contract": 1,
"identity_register_count": 12,
"eeprom": "M95M02",
"eeprom_bytes": 262144,
"firmware_limit_bytes": 261884,
"gas": {
"enabled": true,
"version": 1,
"profile": 167,
"info_words": 8,
"register_count": 128,
"transports": [
"modbus_rtu",
"ump_service_can"
],
"info_base": 24320,
"register_base": 20480
},
"file": "UKSSTMS320F28335_GAS_M95M02.bin",
"size_bytes": 33174,
"sha256": "a1c186e5f114ea2f77ac5f18a60424c79f53b1e3a49e0343ac9bd96979f0347e"
}

View File

@@ -1 +0,0 @@
a1c186e5f114ea2f77ac5f18a60424c79f53b1e3a49e0343ac9bd96979f0347e UKSSTMS320F28335_GAS_M95M02.bin

View File

@@ -1,16 +0,0 @@
[
{
"after_bytes": 32472,
"profile": 0,
"gas_added_bytes": 0,
"binary_identical": true,
"before_bytes": 32472
},
{
"after_bytes": 33174,
"profile": 1,
"gas_added_bytes": 410,
"binary_identical": false,
"before_bytes": 32764
}
]

View File

@@ -1,358 +0,0 @@
/* Последовательный вывод данных канала индикации. Русские пояснения сохранены в UTF-8. */
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */
#include "DSP2833x_SWPrioritizedIsrLevels.h"
/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */
#include "filter_bat2.h"
/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */
#include "measure.h"
/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */
#include "RS485.h"
/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */
#include "message.h"
/* Подключает "kanal.h": последовательный вывод данных канала индикации. */
#include "kanal.h"
/* Подключает "pulto.h": обмен и индикация пульта. */
#include "pulto.h"
/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */
#include "package.h"
/* Подключает "tools.h": настройка внешней памяти и служебные задержки. */
#include "tools.h"
/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */
#include "peripher.h"
/* Объявляет digits — данные digits. Начальное значение задаётся справа от знака равенства. */
int digits[16] = {63,6,91,79,102,109,125,7,127,111,64,0,0,0,121,0};
/* Объявляет readr — данные readr. Начальное значение задаётся справа от знака равенства. */
int readr[5] = {0x08,0x0C,0x10,0x00,0x04};
/* Ограничивает настройки таймингов компилятором TI C2000; модель на ПК не использует эти директивы. */
#if defined(__TI_COMPILER_VERSION__)
/* Сохраняет отдельный вызов переключения CLOCK: встраивание при -O3 сокращало удержание DATA после фронта. */
#pragma FUNC_CANNOT_INLINE(DCLK)
/* Возвращает генерацию DCLK как в образе от 06.10.2026: уровень 1 и приоритет скорости 3 сохраняют прежнюю последовательность инструкций GPIO. */
#pragma FUNCTION_OPTIONS(DCLK, "--opt_level=1 --opt_for_speed=3")
/* Сохраняет отдельный вызов переключения DATA, чтобы длительность импульсов не зависела от встраивания в передатчик. */
#pragma FUNC_CANNOT_INLINE(DOUT)
/* Возвращает генерацию DOUT с прежними параметрами -O1 и --opt_for_speed=3; значения взяты из старой конфигурации CCS. */
#pragma FUNCTION_OPTIONS(DOUT, "--opt_level=1 --opt_for_speed=3")
/* Не позволяет встроить разделитель пакетов в цикл передачи и изменить интервалы между переключениями линий. */
#pragma FUNC_CANNOT_INLINE(RESET)
/* Сохраняет прежнюю последовательность вызовов GPIO и задержек разделителя, используя настройки старого образа. */
#pragma FUNCTION_OPTIONS(RESET, "--opt_level=1 --opt_for_speed=3")
/* Сохраняет отдельный вызов передачи бита; протокол использует порядок и интервалы фронтов CLOCK и DATA. */
#pragma FUNC_CANNOT_INLINE(SENDBIT)
/* Возвращает передаче бита настройки старого образа -O1 и --opt_for_speed=3, оставляя остальной проект на -O3. */
#pragma FUNCTION_OPTIONS(SENDBIT, "--opt_level=1 --opt_for_speed=3")
/* Завершает блок настроек TI, не изменяя формат пакетов и существующие счётчики задержек. */
#endif
/* Начинает функцию DCLK; назначение модуля — последовательный вывод данных канала индикации. */
void DCLK(int x)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(x) GpioDataRegs.GPASET.bit.GPIO6=1; последующий оператор выполняется только при истинном условии. */
if(x) GpioDataRegs.GPASET.bit.GPIO6=1;
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else GpioDataRegs.GPACLEAR.bit.GPIO6=1;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Начинает функцию DOUT; назначение модуля — последовательный вывод данных канала индикации. */
void DOUT(int x)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(x) GpioDataRegs.GPASET.bit.GPIO8=1; последующий оператор выполняется только при истинном условии. */
if(x) GpioDataRegs.GPASET.bit.GPIO8=1;
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else GpioDataRegs.GPACLEAR.bit.GPIO8=1;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Условие компиляции CLKMULT==1: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==1
/* Задаёт POWS0 = 0L; данные POWS0. */
#define POWS0 0L
/* Задаёт POWS1 = 10L; данные POWS1. */
#define POWS1 10L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT==2: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==2
/* Задаёт POWS0 = 0L; данные POWS0. */
#define POWS0 0L
/* Задаёт POWS1 = 30L; данные POWS1. */
#define POWS1 30L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT==3: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==3
/* Задаёт POWS0 = 1L; данные POWS0. */
#define POWS0 1L
/* Задаёт POWS1 = 50L; данные POWS1. */
#define POWS1 50L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT==4: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==4
/* Задаёт POWS0 = 2L; данные POWS0. */
#define POWS0 2L
/* Задаёт POWS1 = 60L; данные POWS1. */
#define POWS1 60L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT==5: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==5
/* Задаёт POWS0 = 4L; данные POWS0. */
#define POWS0 4L
/* Задаёт POWS1 = 80L; данные POWS1. */
#define POWS1 80L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Начинает функцию RESET; назначение модуля — последовательный вывод данных канала индикации. */
void RESET()
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Вызывает DCLK с аргументами (0) в текущей последовательности операций. */
DCLK(0);
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS1>0
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
DSP28x_usDelay(POWS1);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Вызывает DOUT с аргументами (1) в текущей последовательности операций. */
DOUT(1);
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS1>0
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
DSP28x_usDelay(POWS1);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Вызывает DOUT с аргументами (0) в текущей последовательности операций. */
DOUT(0);
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS1>0
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
DSP28x_usDelay(POWS1);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Начинает функцию SENDBIT; назначение модуля — последовательный вывод данных канала индикации. */
void SENDBIT(int x)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Выставляет передаваемый бит DATA до подъёма CLOCK, сохраняя его на протяжении высокого уровня такта. */
DOUT(x); DCLK(1);
/* Условие компиляции POWS0>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS0>0
/* Вызывает DSP28x_usDelay с аргументами (POWS0) в текущей последовательности операций. */
DSP28x_usDelay(POWS0);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Вариант A: задержка перед спадом CLOCK продлевает высокий уровень при действительном DATA; POWS0+1 — прежний счётчик циклов TI, не микросекунды. */
DSP28x_usDelay(POWS0+1);
/* Опускает CLOCK при ещё действительном DATA, чтобы сохранить передаваемый бит на отрицательном фронте такта. */
DCLK(0);
/* Сбрасывает DATA после спада CLOCK; в варианте A дополнительной задержки между спадом и сбросом нет. */
DOUT(0);
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS1>0
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
DSP28x_usDelay(POWS1);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Начинает функцию kanal_Send; назначение модуля — последовательный вывод данных канала индикации. */
void kanal_Send(int adr, long dat, int dot)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет Word — слово; data — данные; aliq_part — данные aliq_part; dg — данные dg. */
long Word,data,aliq_part,dg[4];
/* Объявляет i — данные i; j — данные j; bit — представление регистра отдельными битовыми полями; byt — данные byt; addr — данные addr. Начальное значение задаётся справа от знака равенства. */
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; слово. */
Word =dat;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(dat<0) sgn=1; последующий оператор выполняется только при истинном условии. */
if(dat<0) sgn=1;
/* Записывает data значением labs(dat); данные. */
data = labs(dat);
/* Проверяет if(dot>=0 и dot<4) isdot = 1; последующий оператор выполняется только при истинном условии. */
if(dot>=0 && dot<4) isdot = 1;
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else dot=0;
/* Записывает aliq_part значением data; данные aliq_part. */
aliq_part = data;
/* Цикл for(i=0;i<dot;i++) aliq_part/=10;; задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0;i<dot;i++) aliq_part/=10;
/* Записывает dat значением aliq_part; данные dat. */
dat = aliq_part;
/* Повторяет или ожидает, пока выполняется while(dat>0). */
while(dat>0)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Делит dat значением 10; данные dat. */
aliq_len++; dat/=10;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Записывает dat значением data; данные dat. */
dat = data;
/* Записывает full_len значением aliq_len+sgn; данные full_len. */
full_len = aliq_len+sgn;
/* Проверяет if(full_len==0) full_len=1; последующий оператор выполняется только при истинном условии. */
if(full_len==0) full_len=1;
/* Увеличивает full_len значением dot; данные full_len. */
full_len += dot;
/* Цикл for(i=0; i<(full_len-4);i++); задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0; i<(full_len-4);i++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Начинает цикл с проверкой условия после тела: первый проход выполняется всегда. */
dot--; dat/=10;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Проверяет if(dot<0) dot=0; последующий оператор выполняется только при истинном условии. */
if(dot<0) dot=0;
/* Записывает punkt значением 1<<dot; данные punkt. */
punkt = 1<<dot;
/* Проверяет if(punkt==1) punkt=0; последующий оператор выполняется только при истинном условии. */
if(punkt==1) punkt=0;
/* Записывает dg[3] значением (dat)/1000; данные dg. */
dg[3] = (dat)/1000;
/* Записывает dg[2] значением (dat%1000)/100; данные dg. */
dg[2] = (dat%1000)/100;
/* Записывает dg[1] значением (dat%100)/10; данные dg. */
dg[1] = (dat%100)/10;
/* Записывает dg[0] значением (dat%10); данные dg. */
dg[0] = (dat%10);
/* Проверяет if(dg[0]+dg[1]+dg[2]+dg[3]==0); последующий оператор выполняется только при истинном условии. */
if(dg[0]+dg[1]+dg[2]+dg[3]==0)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает punkt значением 0; dot=0; sgn=0; данные punkt. */
punkt=0; dot=0; sgn=0;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Проверяет if(isdot); последующий оператор выполняется только при истинном условии. */
if(isdot)
/* Цикл for(i=3;i>0;i--); задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=3;i>0;i--)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if((dg[i]==0) и (i!=dot)); последующий оператор выполняется только при истинном условии. */
if((dg[i]==0)&&(i!=dot))
/* Записывает dg[i] значением 0xF; данные dg. */
dg[i]=0xF; // Это значит пусто
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else break;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Проверяет if(sgn); последующий оператор выполняется только при истинном условии. */
if(sgn)
/* Цикл for(i=1;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=1;i<4;i++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if( (dg[i]==0xF) или (i==3)); последующий оператор выполняется только при истинном условии. */
if( (dg[i]==0xF)||(i==3))
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает dg[i] значением 0xA; данные dg. */
dg[i]=0xA; // Это значит минус
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
break;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
} }
/* Цикл for(i=0;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0;i<4;i++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает dg[i] значением digits[dg[i]]; данные dg. */
dg[i] = digits[dg[i]];
/* Проверяет if((punkt>>i)&1) dg[i]+= 128; последующий оператор выполняется только при истинном условии. */
if((punkt>>i)&1) dg[i]+= 128;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Записывает Word значением ((dg[0] ) & 0x000000FF) | ((dg[1]<<8 ) & 0x0000FF00) |; слово. */
Word = ((dg[0] ) & 0x000000FF) | ((dg[1]<<8 ) & 0x0000FF00) |
/* Продолжает список аргументов, полей или выражение ((dg[2]<<16) & 0x00FF0000) | ((dg[3]<<24) & 0xFF000000);; порядок элементов сохраняется. */
((dg[2]<<16) & 0x00FF0000) | ((dg[3]<<24) & 0xFF000000);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Записывает addr значением readr[adr]; данные addr. */
addr = readr[adr];
/* Цикл for (i=0;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
for (i=0;i<4;i++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(addr>0x10) break; последующий оператор выполняется только при истинном условии. */
if(addr>0x10) break;
/* Цикл for (j=0;j<8;j++); задаёт начальное значение, условие продолжения и шаг перебора. */
for (j=0;j<8;j++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает bit значением Word & 1; Word >>= 1; представление регистра отдельными битовыми полями. */
bit = Word & 1; Word >>= 1;
/* Вызывает SENDBIT с аргументами (bit) в текущей последовательности операций. */
SENDBIT(bit);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Записывает byt значением addr; данные byt. */
byt = addr;
/* Цикл for (j=0;j<6;j++); задаёт начальное значение, условие продолжения и шаг перебора. */
for (j=0;j<6;j++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает bit значением byt & 1; byt >>= 1; представление регистра отдельными битовыми полями. */
bit = byt & 1; byt >>= 1;
/* Вызывает SENDBIT с аргументами (bit) в текущей последовательности операций. */
SENDBIT(bit);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Изменяет счётчик в выражении addr++; на один для следующего шага. */
addr++;
/* Вызывает RESET с аргументами () в текущей последовательности операций. */
RESET();
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}

View File

@@ -1,358 +0,0 @@
/* Последовательный вывод данных канала индикации. Русские пояснения сохранены в UTF-8. */
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */
#include "DSP2833x_SWPrioritizedIsrLevels.h"
/* Подключает "filter_bat2.h": накопительный фильтр измерительных каналов. */
#include "filter_bat2.h"
/* Подключает "measure.h": обработка датчиков, вычисление величин и миллисекундный такт системы. */
#include "measure.h"
/* Подключает "RS485.h": приём и передача SCI-A/SCI-B, упаковка команд и FIFO первого порта. */
#include "RS485.h"
/* Подключает "message.h": обработка Modbus, заводские параметры и сохранение настроек. */
#include "message.h"
/* Подключает "kanal.h": последовательный вывод данных канала индикации. */
#include "kanal.h"
/* Подключает "pulto.h": обмен и индикация пульта. */
#include "pulto.h"
/* Подключает "package.h": адреса устройств, типы плат и псевдонимы технологических регистров. */
#include "package.h"
/* Подключает "tools.h": настройка внешней памяти и служебные задержки. */
#include "tools.h"
/* Подключает "peripher.h": перемычки режима платы, дискретные входы и выходы. */
#include "peripher.h"
/* Объявляет digits — данные digits. Начальное значение задаётся справа от знака равенства. */
int digits[16] = {63,6,91,79,102,109,125,7,127,111,64,0,0,0,121,0};
/* Объявляет readr — данные readr. Начальное значение задаётся справа от знака равенства. */
int readr[5] = {0x08,0x0C,0x10,0x00,0x04};
/* Ограничивает настройки таймингов компилятором TI C2000; модель на ПК не использует эти директивы. */
#if defined(__TI_COMPILER_VERSION__)
/* Сохраняет отдельный вызов переключения CLOCK: встраивание при -O3 сокращало удержание DATA после фронта. */
#pragma FUNC_CANNOT_INLINE(DCLK)
/* Возвращает генерацию DCLK как в образе от 06.10.2026: уровень 1 и приоритет скорости 3 сохраняют прежнюю последовательность инструкций GPIO. */
#pragma FUNCTION_OPTIONS(DCLK, "--opt_level=1 --opt_for_speed=3")
/* Сохраняет отдельный вызов переключения DATA, чтобы длительность импульсов не зависела от встраивания в передатчик. */
#pragma FUNC_CANNOT_INLINE(DOUT)
/* Возвращает генерацию DOUT с прежними параметрами -O1 и --opt_for_speed=3; значения взяты из старой конфигурации CCS. */
#pragma FUNCTION_OPTIONS(DOUT, "--opt_level=1 --opt_for_speed=3")
/* Не позволяет встроить разделитель пакетов в цикл передачи и изменить интервалы между переключениями линий. */
#pragma FUNC_CANNOT_INLINE(RESET)
/* Сохраняет прежнюю последовательность вызовов GPIO и задержек разделителя, используя настройки старого образа. */
#pragma FUNCTION_OPTIONS(RESET, "--opt_level=1 --opt_for_speed=3")
/* Сохраняет отдельный вызов передачи бита; протокол использует порядок и интервалы фронтов CLOCK и DATA. */
#pragma FUNC_CANNOT_INLINE(SENDBIT)
/* Возвращает передаче бита настройки старого образа -O1 и --opt_for_speed=3, оставляя остальной проект на -O3. */
#pragma FUNCTION_OPTIONS(SENDBIT, "--opt_level=1 --opt_for_speed=3")
/* Завершает блок настроек TI, не изменяя формат пакетов и существующие счётчики задержек. */
#endif
/* Начинает функцию DCLK; назначение модуля — последовательный вывод данных канала индикации. */
void DCLK(int x)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(x) GpioDataRegs.GPASET.bit.GPIO6=1; последующий оператор выполняется только при истинном условии. */
if(x) GpioDataRegs.GPASET.bit.GPIO6=1;
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else GpioDataRegs.GPACLEAR.bit.GPIO6=1;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Начинает функцию DOUT; назначение модуля — последовательный вывод данных канала индикации. */
void DOUT(int x)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(x) GpioDataRegs.GPASET.bit.GPIO8=1; последующий оператор выполняется только при истинном условии. */
if(x) GpioDataRegs.GPASET.bit.GPIO8=1;
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else GpioDataRegs.GPACLEAR.bit.GPIO8=1;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Условие компиляции CLKMULT==1: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==1
/* Задаёт POWS0 = 0L; данные POWS0. */
#define POWS0 0L
/* Задаёт POWS1 = 10L; данные POWS1. */
#define POWS1 10L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT==2: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==2
/* Задаёт POWS0 = 0L; данные POWS0. */
#define POWS0 0L
/* Задаёт POWS1 = 30L; данные POWS1. */
#define POWS1 30L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT==3: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==3
/* Задаёт POWS0 = 1L; данные POWS0. */
#define POWS0 1L
/* Задаёт POWS1 = 50L; данные POWS1. */
#define POWS1 50L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT==4: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==4
/* Задаёт POWS0 = 2L; данные POWS0. */
#define POWS0 2L
/* Задаёт POWS1 = 60L; данные POWS1. */
#define POWS1 60L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT==5: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT==5
/* Задаёт POWS0 = 4L; данные POWS0. */
#define POWS0 4L
/* Задаёт POWS1 = 80L; данные POWS1. */
#define POWS1 80L
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Начинает функцию RESET; назначение модуля — последовательный вывод данных канала индикации. */
void RESET()
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Вызывает DCLK с аргументами (0) в текущей последовательности операций. */
DCLK(0);
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS1>0
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
DSP28x_usDelay(POWS1);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Вызывает DOUT с аргументами (1) в текущей последовательности операций. */
DOUT(1);
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS1>0
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
DSP28x_usDelay(POWS1);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Вызывает DOUT с аргументами (0) в текущей последовательности операций. */
DOUT(0);
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS1>0
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
DSP28x_usDelay(POWS1);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Начинает функцию SENDBIT; назначение модуля — последовательный вывод данных канала индикации. */
void SENDBIT(int x)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Выставляет передаваемый бит DATA до подъёма CLOCK, сохраняя его на протяжении высокого уровня такта. */
DOUT(x); DCLK(1);
/* Условие компиляции POWS0>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS0>0
/* Вызывает DSP28x_usDelay с аргументами (POWS0) в текущей последовательности операций. */
DSP28x_usDelay(POWS0);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Опускает CLOCK при ещё действительном DATA, чтобы сохранить передаваемый бит на отрицательном фронте такта. */
DCLK(0);
/* Вариант B: задержка между DCLK(0) и DOUT(0) удерживает DATA после спада CLOCK; POWS0+1 — прежний счётчик циклов TI, не микросекунды. */
DSP28x_usDelay(POWS0+1);
/* Сбрасывает DATA после завершения паузы удержания, возвращая линию к нулю перед следующим битом. */
DOUT(0);
/* Условие компиляции POWS1>0: выбранный блок включается в текущий вариант прошивки. */
#if POWS1>0
/* Вызывает DSP28x_usDelay с аргументами (POWS1) в текущей последовательности операций. */
DSP28x_usDelay(POWS1);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Начинает функцию kanal_Send; назначение модуля — последовательный вывод данных канала индикации. */
void kanal_Send(int adr, long dat, int dot)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет Word — слово; data — данные; aliq_part — данные aliq_part; dg — данные dg. */
long Word,data,aliq_part,dg[4];
/* Объявляет i — данные i; j — данные j; bit — представление регистра отдельными битовыми полями; byt — данные byt; addr — данные addr. Начальное значение задаётся справа от знака равенства. */
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; слово. */
Word =dat;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(dat<0) sgn=1; последующий оператор выполняется только при истинном условии. */
if(dat<0) sgn=1;
/* Записывает data значением labs(dat); данные. */
data = labs(dat);
/* Проверяет if(dot>=0 и dot<4) isdot = 1; последующий оператор выполняется только при истинном условии. */
if(dot>=0 && dot<4) isdot = 1;
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else dot=0;
/* Записывает aliq_part значением data; данные aliq_part. */
aliq_part = data;
/* Цикл for(i=0;i<dot;i++) aliq_part/=10;; задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0;i<dot;i++) aliq_part/=10;
/* Записывает dat значением aliq_part; данные dat. */
dat = aliq_part;
/* Повторяет или ожидает, пока выполняется while(dat>0). */
while(dat>0)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Делит dat значением 10; данные dat. */
aliq_len++; dat/=10;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Записывает dat значением data; данные dat. */
dat = data;
/* Записывает full_len значением aliq_len+sgn; данные full_len. */
full_len = aliq_len+sgn;
/* Проверяет if(full_len==0) full_len=1; последующий оператор выполняется только при истинном условии. */
if(full_len==0) full_len=1;
/* Увеличивает full_len значением dot; данные full_len. */
full_len += dot;
/* Цикл for(i=0; i<(full_len-4);i++); задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0; i<(full_len-4);i++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Начинает цикл с проверкой условия после тела: первый проход выполняется всегда. */
dot--; dat/=10;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Проверяет if(dot<0) dot=0; последующий оператор выполняется только при истинном условии. */
if(dot<0) dot=0;
/* Записывает punkt значением 1<<dot; данные punkt. */
punkt = 1<<dot;
/* Проверяет if(punkt==1) punkt=0; последующий оператор выполняется только при истинном условии. */
if(punkt==1) punkt=0;
/* Записывает dg[3] значением (dat)/1000; данные dg. */
dg[3] = (dat)/1000;
/* Записывает dg[2] значением (dat%1000)/100; данные dg. */
dg[2] = (dat%1000)/100;
/* Записывает dg[1] значением (dat%100)/10; данные dg. */
dg[1] = (dat%100)/10;
/* Записывает dg[0] значением (dat%10); данные dg. */
dg[0] = (dat%10);
/* Проверяет if(dg[0]+dg[1]+dg[2]+dg[3]==0); последующий оператор выполняется только при истинном условии. */
if(dg[0]+dg[1]+dg[2]+dg[3]==0)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает punkt значением 0; dot=0; sgn=0; данные punkt. */
punkt=0; dot=0; sgn=0;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Проверяет if(isdot); последующий оператор выполняется только при истинном условии. */
if(isdot)
/* Цикл for(i=3;i>0;i--); задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=3;i>0;i--)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if((dg[i]==0) и (i!=dot)); последующий оператор выполняется только при истинном условии. */
if((dg[i]==0)&&(i!=dot))
/* Записывает dg[i] значением 0xF; данные dg. */
dg[i]=0xF; // Это значит пусто
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else break;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Проверяет if(sgn); последующий оператор выполняется только при истинном условии. */
if(sgn)
/* Цикл for(i=1;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=1;i<4;i++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if( (dg[i]==0xF) или (i==3)); последующий оператор выполняется только при истинном условии. */
if( (dg[i]==0xF)||(i==3))
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает dg[i] значением 0xA; данные dg. */
dg[i]=0xA; // Это значит минус
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
break;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
} }
/* Цикл for(i=0;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0;i<4;i++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает dg[i] значением digits[dg[i]]; данные dg. */
dg[i] = digits[dg[i]];
/* Проверяет if((punkt>>i)&1) dg[i]+= 128; последующий оператор выполняется только при истинном условии. */
if((punkt>>i)&1) dg[i]+= 128;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Записывает Word значением ((dg[0] ) & 0x000000FF) | ((dg[1]<<8 ) & 0x0000FF00) |; слово. */
Word = ((dg[0] ) & 0x000000FF) | ((dg[1]<<8 ) & 0x0000FF00) |
/* Продолжает список аргументов, полей или выражение ((dg[2]<<16) & 0x00FF0000) | ((dg[3]<<24) & 0xFF000000);; порядок элементов сохраняется. */
((dg[2]<<16) & 0x00FF0000) | ((dg[3]<<24) & 0xFF000000);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Записывает addr значением readr[adr]; данные addr. */
addr = readr[adr];
/* Цикл for (i=0;i<4;i++); задаёт начальное значение, условие продолжения и шаг перебора. */
for (i=0;i<4;i++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(addr>0x10) break; последующий оператор выполняется только при истинном условии. */
if(addr>0x10) break;
/* Цикл for (j=0;j<8;j++); задаёт начальное значение, условие продолжения и шаг перебора. */
for (j=0;j<8;j++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает bit значением Word & 1; Word >>= 1; представление регистра отдельными битовыми полями. */
bit = Word & 1; Word >>= 1;
/* Вызывает SENDBIT с аргументами (bit) в текущей последовательности операций. */
SENDBIT(bit);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Записывает byt значением addr; данные byt. */
byt = addr;
/* Цикл for (j=0;j<6;j++); задаёт начальное значение, условие продолжения и шаг перебора. */
for (j=0;j<6;j++)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает bit значением byt & 1; byt >>= 1; представление регистра отдельными битовыми полями. */
bit = byt & 1; byt >>= 1;
/* Вызывает SENDBIT с аргументами (bit) в текущей последовательности операций. */
SENDBIT(bit);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Изменяет счётчик в выражении addr++; на один для следующего шага. */
addr++;
/* Вызывает RESET с аргументами () в текущей последовательности операций. */
RESET();
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}

View File

@@ -1,37 +0,0 @@
Бальзам-167: два проверочных варианта задержки индикации
Дата сборки: 12.10.2026.
A_delay_before_clock_fall
BIN: UKSSTMS320F28335_A_delay_before_clock_fall_fa20ed0+.bin
Дополнительная задержка стоит ПЕРЕД спадом CLOCK.
Последовательность: DSP28x_usDelay(POWS0+1); DCLK(0); DOUT(0).
Назначение: продлить высокий уровень CLOCK при действительном DATA.
Размер: 32246 байт. Запас до области параметров AT25256B: 262 байта.
SHA-256: C28337E35996AED330E22BC014EF9D15D06C9A1F5CFCCCE27EAD75FB1AC565F9
B_delay_after_clock_fall
BIN: UKSSTMS320F28335_B_delay_after_clock_fall_fa20ed0+.bin
Дополнительная задержка стоит ПОСЛЕ спада CLOCK, МЕЖДУ DCLK(0) и DOUT(0).
Последовательность: DCLK(0); DSP28x_usDelay(POWS0+1); DOUT(0).
Назначение: удержать DATA после спада CLOCK перед сбросом линии данных.
Размер: 32248 байт. Запас до области параметров AT25256B: 260 байт.
SHA-256: 1ABA3835FFA39649E9922E107B6DBAAA2605F7C4ED80631D583973EFC2DEC215
В каждом варианте только одна дополнительная задержка POWS0+1.
В обоих вариантах DATA сохраняется до спада CLOCK и сбрасывается после него.
Общие условные задержки POWS0 и POWS1 и разделитель RESET сохранены.
При CLKMULT=2 значения POWS0+1=1 и POWS1=30 являются аргументами
цикловой функции TI DSP28x_usDelay, а не длительностями в микросекундах.
Оба варианта полностью собраны TI C2000 22.6.0.LTS из текущего проекта.
Базовый коммит: fa20ed085bdca15fec47c79b72f50525653e103d; сборки помечены dirty.
Для каждого варианта при компиляции подставлен отдельный kanal.c,
сохранённый рядом с его BIN. Основной Source/Internal/kanal.c при подготовке
этой пары не изменялся. Общие параметры компиляции и прочие модули одинаковы;
паспорта также содержат собственное время сборки каждого варианта.
Проверено: полный цикл компиляции и линковки, структура SCI8 и предел EEPROM,
соответствие итогового BIN кандидату hex2000, расположение задержек в машинном
коде SENDBIT, передача 0 и 1 на обоих фронтах в модели логических уровней,
одинаковый код DCLK/DOUT между вариантами и прежний код разделителя RESET.
Физические длительности сигналов и отсутствие строба требуют проверки на плате.

File diff suppressed because one or more lines are too long

View File

@@ -1,48 +0,0 @@
Бальзам-167: проверочная прошивка с исправлением TESTLAMP
Сборка: 13.10.2026, 11:00:35 (Москва, UTC+3).
Готовый образ:
UKSSTMS320F28335_testlamp_fix_fa20ed0+.bin
Размер: 32272 байта. Запас до параметров AT25256B: 236 байт.
SHA-256: bfe4c3c9b55bb5022f38f254929f893e5eaab57ef3d3fa31771a6b6f97f877a4
Паспорт: UKSSTMS320F28335_testlamp_fix_fa20ed0+.bin.manifest.json
Архив этой сборки: fa20ed08+_2026-10-13_11-00-35_UTC+3.
Исправления:
1. В get_Buttons для dsk_EPLT накопительный фильтр получает предыдущее
значение bTestLamp вместо постоянного нуля. Раньше даже один низкий
отсчёт GPIO26 при удержании кнопки сразу отключал тест, а следующий
высокий отсчёт мог снова его включить. Это переключало пакеты ламп
и семисегментных индикаторов между рабочим и тестовым режимами.
Порог 1000 по-прежнему измеряется опросами главного цикла.
2. cpu_timer1_isr_PULT ограничивает IER маской MINT13 и исключает собственный
Timer1 (INT13). Прежнее IER |= MINT13 включало дополнительные источники
вместо ограничения приоритетов и могло разрешить повторный вход Timer1.
Вложенная передача больше не может перемешать DATA/CLK, счётчик каналов
и фазу яркости. В машинном коде перед EINT проверено AND IER, #0x0139.
Штатная тестовая последовательность what_is сохранена: цифры меняются
и тестовая маска ламп переключается каждые 500 тактов Timer1 (0,5 секунды).
Это исправление относится к частому нерегулярному мерцанию поверх теста.
Порядок уровней и задержек SENDBIT/RESET взят из текущего kanal.c проекта;
для этой сборки он не изменялся. В образ вошли уже имевшиеся правки
ecan.c, measure.c и kanal.c.
Проверено:
- настоящие get_Buttons, er_anal, what_is и обработчик пульта в хостовой
модели при O3; короткие провалы входа при удержании TESTLAMP;
- тестовые пакеты ламп и цифр при уже включённой рабочей лампе;
- отсутствие повторного входа ISR, отпускание и удалённая команда теста;
- сохранение обычного PWM: шесть включённых тактов из десяти;
- возвращение каждой старой ошибки отдельно вызывает провал теста;
- полная компиляция и линковка TI C2000 22.6.0.LTS, O3, COFF, FPU32;
- SCI8, четыре RAM-блока, границы AT25256B и совпадение BIN с кандидатом;
- UTF-8 и русские пояснения к изменённому и добавленному коду.
Повторная проверка: python tests/testlamp/run_test.py
Повторная сборка: python Bin/TestLampFix/rebuild.py
На физической плате эта прошивка пока не проверена. Для проверки повторить
сценарий пользователя: включённые рабочие лампы, нажатие и удержание TESTLAMP,
затем отпускание. Штатные изменения теста раз в 0,5 секунды сохраняются;
быстрых переключений между тестовыми и рабочими показаниями быть не должно.

File diff suppressed because one or more lines are too long

Binary file not shown.

Binary file not shown.

View File

@@ -2,7 +2,7 @@
TMS320C2000 Hex Converter v5.2.7
********************************************************************************
INPUT FILE NAME: <UKSSTMS320F28335.out>
INPUT FILE NAME: <C:\Dima\Project\Balsam_167\Bin\UKSSTMS320F28335.out>
OUTPUT FORMAT: Binary
PHYSICAL MEMORY PARAMETERS
@@ -12,20 +12,20 @@ PHYSICAL MEMORY PARAMETERS
BOOT LOADER PARAMETERS
Table Type: SERIAL PORT (SCI 8 bit Mode)
Entry Point: 0x0000a8d1
Entry Point: 0x0000b198
OUTPUT TRANSLATION MAP
--------------------------------------------------------------------------------
00000000..003fffff Page=0 Memory Width=8 ROM Width=8
--------------------------------------------------------------------------------
OUTPUT FILES: UKSSTMS320F28335_c6c91282.bin.pending [b0..b7]
OUTPUT FILES: C:\Dima\Project\Balsam_167\Bin\UKSSTMS320F28335.bin [b0..b7]
CONTENTS: 00000000..00007ffb BOOT TABLE
.cinit : dest=0000c000 size=00000273 width=00000002
.text : dest=00008000 size=00003bfc width=00000002
.econst : dest=0000c274 size=0000012b width=00000002
.switch : dest=0000c3a0 size=0000004c width=00000002
CONTENTS: 00000000..00006e67 BOOT TABLE
.cinit : dest=0000b35f size=00000283 width=00000002
.text : dest=00008000 size=0000335f width=00000002
.econst : dest=0000c000 size=00000112 width=00000002
.switch : dest=0000c112 size=00000028 width=00000002
--------------------------------------------------------------------------------
00000000..003fffff Page=1 Memory Width=8 ROM Width=8 "*DEFAULT PAGE 1*"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

Binary file not shown.

View File

@@ -1,140 +0,0 @@
# Проверка комментариев и кодировки
Проверка относится к редактируемым исходникам C/H, ASM, CMD, тестовым INC и Python.
Для каждой непустой строки кода проверяется русский текст на ней или непосредственно перед ней.
Пустые строки, текст комментариев и содержимое многострочных строк данных не считаются кодом.
Качество и достоверность пояснений этой проверкой не устанавливаются; совпадение возможно и в строковом литерале.
Охват: исходники из Git-индекса. Сгенерированные файлы и подключённые соседние библиотеки проверяются отдельно.
Исходные уведомления TI сохранены. JSON-паспорта, индексы IDE, таблицы XLS и двоичные
результаты сборки не допускают исходных комментариев; их назначение описано в документации.
UTF-8 проверен в 157 текстовых файлах. Строк кода: 18866.
| Файл | Строк кода | С русским текстом рядом |
| --- | ---: | ---: |
| Bin/EepromPublishFix/rebuild.py | 41 | 41 |
| Bin/StartupWait3s/rebuild.py | 41 | 41 |
| Bin/UartColdStart/rebuild.py | 41 | 41 |
| F28335.cmd | 69 | 69 |
| Source/External/v120/DSP2833x_common/include/DSP2833x_DefaultIsr.h | 89 | 89 |
| Source/External/v120/DSP2833x_common/include/DSP2833x_Dma_defines.h | 44 | 44 |
| Source/External/v120/DSP2833x_common/include/DSP2833x_EPwm_defines.h | 89 | 89 |
| Source/External/v120/DSP2833x_common/include/DSP2833x_Examples.h | 33 | 33 |
| Source/External/v120/DSP2833x_common/include/DSP2833x_GlobalPrototypes.h | 156 | 156 |
| Source/External/v120/DSP2833x_common/include/DSP2833x_I2c_defines.h | 58 | 58 |
| Source/External/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h | 5097 | 5097 |
| Source/External/v120/DSP2833x_common/include/DSP28x_Project.h | 5 | 5 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_ADC_cal.asm | 8 | 8 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_Adc.c | 14 | 14 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_CpuTimers.c | 45 | 45 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_PieCtrl.c | 37 | 37 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_PieVect.c | 143 | 143 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedDefaultIsr.c | 1012 | 1012 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_SWPrioritizedPieVect.c | 392 | 392 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_SysCtrl.c | 188 | 188 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_Xintf.c | 123 | 123 |
| Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm | 7 | 7 |
| Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_BIOS.cmd | 107 | 107 |
| Source/External/v120/DSP2833x_headers/cmd/DSP2833x_Headers_nonBIOS.cmd | 108 | 108 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_Adc.h | 201 | 201 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_CpuTimers.h | 93 | 93 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_DMA.h | 142 | 142 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_DevEmu.h | 57 | 57 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_Device.h | 287 | 287 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_ECan.h | 948 | 948 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_ECap.h | 94 | 94 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_EPwm.h | 297 | 297 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_EQep.h | 165 | 165 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_Gpio.h | 320 | 320 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_I2c.h | 126 | 126 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_Mcbsp.h | 584 | 584 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_PieCtrl.h | 107 | 107 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_PieVect.h | 141 | 141 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_Sci.h | 142 | 142 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_Spi.h | 109 | 109 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_SysCtrl.h | 259 | 259 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_XIntrupt.h | 44 | 44 |
| Source/External/v120/DSP2833x_headers/include/DSP2833x_Xintf.h | 77 | 77 |
| Source/External/v120/DSP2833x_headers/source/DSP2833x_GlobalVariableDefs.c | 301 | 301 |
| Source/Internal/ADC.c | 244 | 244 |
| Source/Internal/DAC.c | 253 | 253 |
| Source/Internal/Include/ADC.h | 4 | 4 |
| Source/Internal/Include/DAC.h | 11 | 11 |
| Source/Internal/Include/GPIO_table.h | 329 | 329 |
| Source/Internal/Include/RS485.h | 84 | 84 |
| Source/Internal/Include/bios_dsp.h | 42 | 42 |
| Source/Internal/Include/caliber.h | 35 | 35 |
| Source/Internal/Include/cntrl_adr.h | 17 | 17 |
| Source/Internal/Include/crc16.h | 6 | 6 |
| Source/Internal/Include/ecan.h | 4 | 4 |
| Source/Internal/Include/eeprom_config.h | 9 | 9 |
| Source/Internal/Include/filter_bat2.h | 36 | 36 |
| Source/Internal/Include/gas167.h | 17 | 17 |
| Source/Internal/Include/kanal.h | 1 | 1 |
| Source/Internal/Include/log_to_mem.h | 36 | 36 |
| Source/Internal/Include/measure.h | 90 | 90 |
| Source/Internal/Include/message.h | 32 | 32 |
| Source/Internal/Include/package.h | 128 | 128 |
| Source/Internal/Include/peripher.h | 128 | 128 |
| Source/Internal/Include/pulto.h | 1 | 1 |
| Source/Internal/Include/spise2p.h | 74 | 74 |
| Source/Internal/Include/tools.h | 5 | 5 |
| Source/Internal/Include/ump_can_protocol.h | 8 | 8 |
| Source/Internal/RS485.c | 534 | 534 |
| Source/Internal/bios.c | 236 | 236 |
| Source/Internal/cntrl_adr.c | 17 | 17 |
| Source/Internal/crc16.c | 158 | 158 |
| Source/Internal/ecan.c | 236 | 236 |
| Source/Internal/filter_bat2.c | 12 | 12 |
| Source/Internal/gas167.c | 54 | 54 |
| Source/Internal/kanal.c | 153 | 153 |
| Source/Internal/log_to_mem.c | 217 | 217 |
| Source/Internal/main.c | 167 | 167 |
| Source/Internal/measure.c | 625 | 625 |
| Source/Internal/message.c | 293 | 293 |
| Source/Internal/peripher.c | 227 | 227 |
| Source/Internal/pulto.c | 88 | 88 |
| Source/Internal/shared_ump.c | 4 | 4 |
| Source/Internal/spise2p.c | 326 | 326 |
| Source/Internal/tools.c | 31 | 31 |
| UKSSTMS320F28335/28335_RAM_lnk.cmd | 58 | 58 |
| UKSSTMS320F28335/firmware_version.h | 6 | 6 |
| UKSSTMS320F28335/prepare_identity.py | 41 | 41 |
| tests/comments/run_test.py | 129 | 129 |
| tests/eeprom_profiles/check_publication.py | 18 | 18 |
| tests/eeprom_profiles/run_test.py | 20 | 20 |
| tests/eeprom_profiles/spi_test.c | 46 | 46 |
| tests/eeprom_profiles/stubs/DSP2833x_Device.h | 22 | 22 |
| tests/firmware_identity/check_build.py | 35 | 35 |
| tests/firmware_identity/port_test.c | 29 | 29 |
| tests/gas167/check_image.py | 44 | 44 |
| tests/gas167/gas167_test.c | 213 | 213 |
| tests/gas167/run_test.py | 49 | 49 |
| tests/load_control/load_control_test.c | 170 | 170 |
| tests/load_control/run_test.py | 15 | 15 |
| tests/load_control/stubs/DSP2833x_Device.h | 9 | 9 |
| tests/load_control/stubs/DSP2833x_SWPrioritizedIsrLevels.h | 0 | 0 |
| tests/load_control/stubs/RS485.h | 0 | 0 |
| tests/load_control/stubs/filter_bat2.h | 0 | 0 |
| tests/load_control/stubs/measure.h | 4 | 4 |
| tests/load_control/stubs/message.h | 1 | 1 |
| tests/load_control/stubs/package.h | 18 | 18 |
| tests/load_control/stubs/peripher.h | 14 | 14 |
| tests/load_control/stubs/tools.h | 0 | 0 |
| tests/rs232_fifo/model.inc | 122 | 122 |
| tests/rs232_fifo/run_test.py | 53 | 53 |
| tests/ump_logger/init_test.c | 44 | 44 |
| tests/ump_logger/recorder_test.c | 152 | 152 |
| tests/ump_logger/run_init_test.py | 30 | 30 |
| tests/ump_logger/run_test.py | 34 | 34 |
| tests/ump_logger/stubs/ADC.h | 1 | 1 |
| tests/ump_logger/stubs/DAC.h | 1 | 1 |
| tests/ump_logger/stubs/DSP2833x_Device.h | 9 | 9 |
| tests/ump_logger/stubs/RS485.h | 0 | 0 |
| tests/ump_logger/stubs/filter_bat2.h | 0 | 0 |
| tests/ump_logger/stubs/measure.h | 2 | 2 |
| tests/ump_logger/stubs/message.h | 0 | 0 |
| tests/ump_logger/stubs/package.h | 11 | 11 |
| tests/ump_logger/stubs/peripher.h | 0 | 0 |
| tests/ump_logger/test_firmware_image.py | 51 | 51 |
| tests/ump_logger/ti_syntax.h | 2 | 2 |

View File

@@ -1,288 +0,0 @@
# SPI и управление ЦАП в Бальзам 167
Дата анализа: 23.09.2026. Рассмотрена текущая рабочая копия проекта `167`.
Документ описывает существующий код и предложения; прошивка в рамках этого анализа не изменялась.
## 1. Как устроено сейчас
ЦАП обслуживает **программный SPI через GPIO**, реализованный в `DAC.c`.
Аппаратный SPI-A используется отдельно для EEPROM в `spise2p.c`.
Изменение `SpiaRegs.SPIBRR` не меняет скорость передачи в ЦАП.
| Сигнал ЦАП | Вывод DSP | Имя в таблице платы | Действие |
|---|---|---|---|
| CS | GPIO59 | csdac, 1:13B | 0 на время кадра, затем 1 |
| DIN / MOSI | GPIO60 | didac, 1:13A | данные от DSP к ЦАП |
| SCLK | GPIO63 | clkdac, 1:14A | 16 тактов на слово |
Обозначения контактов взяты из комментариев `GPIO_table.h`, а не из проверенной схемы.
MISO в драйвере отсутствует: код отправляет команды, но не читает подтверждение или статус ЦАП.
Для платы нагрузки `get_Mode()` выбирает обычные GPIO и выходные направления этих линий.
Цепочка работы:
```text
CPU Timer1: 1000 Гц, период 1 мс
→ cpu_timer1_isr_SENS(), только Desk == dsk_LOAD
→ Load_runner()
→ каждые 5 вызовов: расчёт задания / инициализация
→ Anal_output(kod, time_dac)
→ dSEND(16-битное слово)
→ GPIO59, GPIO60, GPIO63
→ ump_log_tick()
```
`READY_FREQ=1000`, `DAC_FREQ=200`, поэтому `period_dac=5`.
200 Гц — частота обновления задания, **не частота SCLK**.
`LOAD_TIME=30`, `time_dac=6000` — количество шагов, используемое в расчёте разгона.
Вызов `dSEND` синхронный: обработчик таймера занят, пока не выставлены все биты.
## 2. Что происходит внутри одного SPI-кадра
Функция `dSEND(word)` выполняет:
1. Опускает CS и вызывает `DSP28x_usDelay(1L)`.
2. Повторяет 16 раз: SCLK=1 → DIN=старший бит → сдвиг слова влево → задержка → SCLK=0 → задержка.
3. Поднимает CS.
Передача начинается со старшего бита: D15 … D0. После кадра SCLK остаётся в 0,
DIN — в состоянии последнего бита. Между кадрами CS остаётся в 1.
Перед первым кадром `dSEND` отдельно не устанавливает исходное состояние SCLK.
Последовательность одного бита:
```text
SCLK ↑ → выставить DIN → выдержать время → SCLK ↓ → выдержать время
```
Новый бит устанавливается **после восходящего фронта**, но до нисходящего.
Следовательно, код рассчитан на чтение данных по нисходящему фронту; это
вывод из последовательности операций, а не подтверждение режима конкретной микросхемы.
При SCLK idle=0 такое поведение соответствует замыслу SPI mode 1.
Если приёмник читает по восходящему фронту, нужного setup-time здесь нет.
Нельзя менять фронты по привычному примеру SPI mode 0 без проверки схемы и паспорта ЦАП.
Из исходников установлены такие слова:
| Вызов | Передаваемое слово |
|---|---|
| `Init_DAC()` | `0x9002` |
| Обычное обновление | `0x8000 | (out & 0x0FFF)` |
| Ручная калибровка | `0x8000 | (DAC_cal() & 0x0FFF)` |
Локальная переменная `x` в `Anal_output()` каждый раз получает 0. Ветка отправки
без `0x8000` сейчас не выполняется. Точный смысл командных битов, номера канала,
режима питания и `0x9002` нельзя достоверно назвать: маркировка ЦАП в исследованных
исходниках не указана. Нужны схема или название установленной микросхемы.
После отправки `0x9002` функция `Init_DAC()` также переключает `RES_OUT_1` —
для платы нагрузки это GPIO9. Это отдельная линия с неизвестным здесь
электрическим назначением; считать её аппаратным RESET или LDAC без схемы нельзя.
## 3. Задержки и влияние прерываний
`DSP28x_usDelay(1L)` **не задаёт 1 мкс**. Ассемблерная функция принимает счётчик
циклов своего внутреннего цикла. Для микросекунд библиотека предоставляет макрос
`DELAY_US`, который предварительно пересчитывает время.
В комментарии самой ассемблерной функции приведена модель `9 + 5 × LoopCount`
тактов процессора. Она применима с оговорками о памяти без wait-state; вызовы,
GPIO-записи, цикл C и прерывания дополнительно влияют на реальную длительность.
Поэтому по числу `1L` нельзя вычислять частоту SCLK как 500 кГц или 1 МГц.
В проекте `XCLKIN=30 МГц`, `CLKMULT=2`, PLL множитель 4, делитель 2:
расчётная частота SYSCLKOUT — **60 МГц**, если входной генератор соответствует
константе. При этом `CPU_RATE` для макроса `DELAY_US` остался `6.667 нс`
(150 МГц). Это несоответствие не участвует в прямом вызове `DSP28x_usDelay(1L)`,
но помешает простой замене на `DELAY_US(1)`: сначала надо согласовать CPU_RATE
с фактической частотой. При 60 МГц период такта примерно 16.667 нс.
В таймерном ISR выполняется `EINT` после настройки `IER/MINT13`.
В текущей таблице приоритетов Group9 имеет уровень 1, Timer1 — 4;
разрешённые прерывания CAN/UART могут удлинять части SPI-кадра.
Сам `dSEND` не запрещает прерывания и не имеет защиты от повторного входа.
В найденных вызовах передача ЦАП идёт из `Load_runner`; добавлять второго
вызывающего без организации единого владельца передачи нельзя.
Это не доказывает потерю данных: некоторые ЦАП допускают произвольное растяжение
SCLK. Следует проверить паспортные ограничения и измерить минимальные и
максимальные времена под нагрузкой CAN/RS. Полный запрет прерываний на кадр
может уменьшить разброс, но увеличит задержку обработки связи.
## 4. Инициализация и расчёт аналогового выхода
`Setup_DAC_time()` задаёт `WAKEpowse=601`. Счётчик уменьшается с частотой 200 Гц.
Во время примерно трёхсекундной стартовой фазы `Init_DAC()` вызывается шесть раз,
при остатках 600, 500, 400, 300, 200, 100. После этого начинается обычный вывод.
Команда `cInitDac` вызывает повторную инициализацию; на этом шаге слово задания
не отправляется. При остановленном УМП счётчик `x` в `Load_runner` также вызывает
периодическую инициализацию примерно раз в 5.12 с. Это другая переменная `x`,
не связанная с постоянным нулём в `Anal_output`.
Расчёт кода:
```text
out = DAC_min + vrot × DAC_max / maxx − vrot × DAC_min / maxx
при cCalibrDac: out = DAC_cal
затем out &= 0x0FFF
```
Два деления здесь целочисленные. Их нельзя без проверки заменить одним:
`DAC_min + vrot × (DAC_max − DAC_min) / maxx` может дать другое округление.
Сначала нужно определить требуемое округление и допустимость изменения результата.
В `modbus[0x7B]` сохраняется отправленный 12-битный код, а в `modbus[0x1C]` —
расчётное задание в десятых долях мА. Это **не измерение выходного тока**.
В режиме `cCalibrDac` эти значения могут описывать разные вещи: в ЦАП уходит
ручной код, а `0x1C` остаётся результатом формулы разгона.
## 5. Что стоит исправить в первую очередь
### 5.1. Порядок запуска таймера — высокий приоритет
В `main()` выполняются `timer_Init(); EnableInterrupts();`, а затем загрузка
параметров и только после неё `Setup_DAC_time()`.
В `cpu_timer1_isr_SENS` перед `Load_runner()` нет проверки `READY`.
До настройки глобальные `period_dac`, `time_dac`, `WAKEpowse` нулевые.
Если в этом промежутке сработает Timer1 на плате нагрузки, условие счётчика
проходит при нулевом `period_dac`, стартовая задержка отсутствует, и путь может
дойти до `Anal_output(..., 0)` — деления на ноль. Это найденный путь выполнения,
не результат воспроизведения на железе.
Предложение: до допуска обслуживания ЦАП настроить GPIO в известное состояние,
загрузить/проверить параметры и выполнить `Setup_DAC_time`. Для этого можно
отдельно разрешать ветку ЦАП флагом готовности или запускать Timer1 позднее.
Нельзя просто отключить все прерывания на время загрузки: EEPROM использует Timer2.
Дополнительно проверять `maxx > 0` и допустимость `period_dac` перед расчётом.
### 5.2. Ошибка ограничения уставки
В `Load_runner` есть строка:
```c
if (dac_stop > 16) dac_go = 16;
```
При превышении конечной уставки меняется начальная. Вероятное намерение —
ограничивать `dac_stop`, но это надо подтвердить требованиями к разгонной
характеристике. Ранее `dac_go` ограничивается диапазоном 0..5, а эта строка
может сразу заменить его на 16. Следующая проверка способна поднять `dac_stop`
до 17. Это влияет на ток независимо от исправности SPI.
Предложение: описать допустимые пары начальной/конечной уставок в мА,
проверять их совместно и протестировать границы. Внутри алгоритма из обеих
уставок вычитается 4 мА; ограничения должны учитывать это смещение.
### 5.3. Маскирование вместо насыщения
`out & 0xFFF` обрезает старшие биты, но не ограничивает числовое значение:
4096 превращается в 0, −1 — в 4095. При ошибочной калибровке или выходе
за диапазон это создаёт скачок кода.
Предложение: сначала проверить входные данные и ограничить результат
диапазоном 0..4095, затем сформировать командное слово. Для ошибочных параметров
явно определить поведение: отказ, удержание предыдущего кода или заданное
проектом аварийное значение. Не выбирать «0» автоматически: код и ток связаны
калибровкой и внешней схемой.
### 5.4. Реальная длительность разгона
После половины диапазона `count_load` увеличивается дважды за шаг:
один раз в `if(count_load > time_dac/2)`, второй — в `++count_load`.
Поэтому достижение конца при `LOAD_TIME=30` занимает примерно **22.5 с**,
а не 30 с, без учёта начальной фазы и задержек исполнения.
Это может быть намеренной двухступенчатой характеристикой.
Предложение: явно описать её либо перейти к расчёту по прошедшему времени,
если требование действительно состоит в линейном разгоне за 30 с.
## 6. Улучшения непосредственно SPI
| Изменение | Польза | Что проверить |
|---|---|---|
| Явный `dac_bus_init`: CS=1, SCLK в idle, DIN определён; затем включение выходов | Предсказуемый первый кадр | Схема, подтяжки, активные уровни |
| Именованные задержки setup/hold/high/low/CS-high | Понятные временные ограничения | Паспорт ЦАП и фактическая частота DSP |
| Имена констант вместо `0x9002`, `0x8000`, `0xFFF` | Ясный смысл команд | Сначала установить модель ЦАП |
| Один владелец передачи и флаг занятости | Исключает наложение двух кадров | Все вызывающие и разрешённые ISR |
| Отдельные функции расчёта кода и отправки слова | Проверка алгоритма без железа | Сохранение округления и масштаба |
| Диагностика отправок/максимальной длительности | Показывает нагрузку и задержки | Счётчик отправок не считать ACK от ЦАП |
| Удаление неиспользуемого `wast()` и недостижимой ветки `x` | Упрощает чтение | Не затронуть другой `x` в Load_runner |
Не следует повышать DAC_FREQ ради ускорения SPI: меняется алгоритм обновления,
число шагов и стартовые интервалы. Для других частот проверить целочисленность
отношения READY_FREQ/DAC_FREQ и диапазон 16-битного `time_dac` на C28x.
Текущие 6000 шагов помещаются; будущие LOAD_TIME/DAC_FREQ могут вызвать переполнение.
Вариант без переделки платы: сохранить GPIO-передачу, нормировать её тайминги,
измерить длительность кадра и только затем решать, нужна ли короткая критическая секция.
Не переносить отправку в основной цикл без анализа задержек: в проекте есть
блокирующие операции EEPROM. Если переносить — использовать явную очередь/последнее
задание с оговорённым временем обслуживания и отдельными командами инициализации.
## 7. Можно ли перейти на аппаратный SPI
У F28335 один SPI-A. Его выводы могут быть GPIO16/17/18/19 или GPIO54/55/56/57.
GPIO60 и GPIO63 не имеют функции SPISIMOA/SPICLKA, поэтому текущие DIN/SCLK
не переводятся на SPI-A одной настройкой mux. Нужны изменения соединений.
Это подтверждается [таблицами выводов TI, SPRS439Q](https://www.ti.com/lit/ds/symlink/tms320f28335.pdf).
В данном проекте SPI-A уже обслуживает EEPROM на GPIO16/17/18 и CS=GPIO19.
Вариант общей шины требует подключения ЦАП к тем же MOSI/SCLK и отдельного CS,
проверки электрической совместимости и последовательного доступа к SPI-A.
Если меняются длина слова/фаза/частота, переключать настройки можно только
после завершения предыдущей операции. Текущий автомат EEPROM работает через
Timer2 и сам меняет формат слова: потребуется общий владелец шины.
Сначала достаточно рассмотреть один 16-битный аппаратный кадр с ограниченным
ожиданием либо прерыванием завершения. FIFO/DMA усложнят короткую передачу;
их необходимость следует обосновывать измерениями. CS надо отпускать после
фактического окончания сдвига последнего бита, а не сразу после записи TXBUF.
Возможность DMA именно для выбранного периферийного блока отдельно проверять
по TRM, не переносить механически решение STM32.
Для будущего порта STM32 можно сохранить общий расчёт и формат слова,
а отправку реализовать аппаратным SPI на выводах конкретной платы. Нынешний
эмулятор лишь генерирует поля ЦАП в журнале; он не подтверждает физические
SPI-фронты и выходной ток устройства.
## 8. Практический порядок работ и проверка
1. Установить модель ЦАП, назначение GPIO9, схемные инверсии и требования timing.
2. Исправить порядок готовности ЦАП при запуске и защитить деление на ноль.
3. Согласовать диапазоны уставок, исправить ограничение и обрезание кода.
4. Снять текущие CS/SCLK/DIN при запуске, рабочем разгоне и нагрузке CAN/RS.
5. Нормировать программные задержки; аппаратный SPI выбирать по результатам измерений.
Логический анализатор подключить к CS, SCLK, DIN и общей земле; при необходимости
добавить GPIO9. Записать 16 бит каждого кадра, порядок битов, `0x9002`,
минимум/середину/максимум кода, setup/hold DIN, CS setup/hold, SCLK high/low,
длину кадра и интервал обновления. Отдельно проверить первый кадр после сброса.
Частоту дискретизации анализатора выбрать по измеренному SCLK с запасом.
Осциллографом проверить форму фронтов и выбросы, внешним измерителем — ток.
После правок проверить граничные и ошибочные уставки, `maxx=0`, калибровку,
разгон/останов, cInitDac, сохранение параметров EEPROM одновременно с CAN/RS.
Тесты расчёта должны фиксировать требуемое округление и поведение вне диапазона;
программная трасса GPIO — количество фронтов и порядок данных. Проверка GPIO
на компьютере не заменяет измерение времён на собранной плате.
## 9. Основания анализа
Факты о текущем поведении взяты из следующих файлов; номера строк относятся
к рабочей копии на дату анализа:
- [Формирование кадра, инициализация, расчёт выхода и разгон](C:/setcorp/git/tms_periph_28335/167/Source/Internal/DAC.c:45).
- [Запуск таймера и порядок инициализации](C:/setcorp/git/tms_periph_28335/167/Source/Internal/main.c:26).
- [Вызов Load_runner из ISR](C:/setcorp/git/tms_periph_28335/167/Source/Internal/measure.c:119).
- [Частоты и время разгона](C:/setcorp/git/tms_periph_28335/167/Source/Internal/Include/measure.h:73).
- [Назначение линий платы](C:/setcorp/git/tms_periph_28335/167/Source/Internal/Include/GPIO_table.h:294).
- [Mux и направления GPIO](C:/setcorp/git/tms_periph_28335/167/Source/Internal/peripher.c:44).
- [Аппаратный SPI EEPROM](C:/setcorp/git/tms_periph_28335/167/Source/Internal/spise2p.c:98).
- [Счётчик ассемблерной задержки](C:/setcorp/git/tms_periph_28335/167/Source/External/v120/DSP2833x_common/source/DSP2833x_usDelay.asm:62).
- [Настройки PLL и CPU_RATE](C:/setcorp/git/tms_periph_28335/167/Source/External/v120/DSP2833x_common/include/DSP2833x_Examples.h:66).
- [Приоритеты прерываний](C:/setcorp/git/tms_periph_28335/167/Source/External/v120/DSP2833x_common/include/DSP2833x_SWPrioritizedIsrLevels.h:61).
Модель ЦАП и электрическая схема не установлены. Режим выборки, назначение
командных битов и допустимые длительности нельзя считать подтверждёнными
до сверки с документацией конкретной микросхемы. Сборка/прошивка и стендовые
измерения в рамках подготовки этого документа не выполнялись.

View File

@@ -1,136 +0,0 @@
# EEPROM 167: выбор AT25256B / M95M02
Маркировка платы `ATMLH516 5EBL` определяет AT25256B: **256 Кбит**, то есть
**32 768 байт**. Расшифровка и характеристики приведены в
[даташите Microchip](https://ww1.microchip.com/downloads/aemDocuments/documents/MPD/ProductDocuments/DataSheets/AT25128B-AT25256B-128-256-Kbit-SPI-Serial-EEPROM-Industrial-Grade-Data-Sheet-DS20006193.pdf).
Константы общей разметки находятся в
[templates/include/balsam167_eeprom_layout.h](../../newProject/SETGUI/third_party/templates/c/set-protocol/include/balsam167_eeprom_layout.h).
`spise2p.h` использует их для физического размера, количества слов и длины
страницы. `message.c` — для адреса параметров. Размер массива параметров
проверяется относительно `ANSWER_LEN` на этапе компиляции.
`F28335.cmd` включает тот же заголовок и экспортирует символы `_EEPROM_*` в
`.map`. Путь к templates/c/set-protocol добавлен в search path линкера CLI и CCS.
EEPROM не стала секцией CPU MEMORY: SPI-образ загружается в RAM загрузчиком.
Расположение `.text`, `.cinit`, `.econst`, `.switch` не менялось.
| Область | Начало, байт | Конец, исключая | Размер |
|---|---:|---:|---:|
| Прошивка SCI8 | `0x0000` | `0x7EFC` | 32 508 |
| Параметры | `0x7EFC` | `0x7FFE` | 258 |
| Неиспользуемое слово | `0x7FFE` | `0x8000` | 2 |
`check_firmware.ps1` получает размер и резерв из общего заголовка и сверяет
резерв с `ANSWER_LEN`. При нестандартном checkout передайте `-TemplatesRoot`;
`build_logger.ps1` делает это автоматически. Исторические параметры не перенесены.
Чтение с платы, единицы адресов, порядок байтов и сохранение дампа описаны в
[руководстве SETGUI](../../newProject/SETGUI/docs/BALSAM167_EEPROM.md).
Для старой прошивки reader использует CMD_PEEK (2 байта за запрос).
Версия 0.1.1 также поддерживает блочное чтение FC03, регистры 0x8000..0xBFFF,
до 120 слов (240 байт) за запрос. Полный дамп требует 137 запросов.
Границы и формат заданы в templates, GUI использует тонкий Python-порт.
Блочное чтение выполняется с разрешёнными прерываниями для работы SPI Timer2.
Запись через это окно запрещена; параметры и их расположение не изменяются.
Размер каждого нового BIN проверяется при сборке; прежний вариант с одним
PEEK занимал 32 286 байт. Точный размер новой сборки указан в её manifest.
Для реального увеличения памяти потребовались бы другая микросхема, проверка
SPI-загрузчика и драйвера, а не только правка линкера.
## Выбор типа памяти (прошивка 0.1.2)
По умолчанию остаётся AT25256B. Автоматического определения ёмкости нет:
контрольные записи для определения типа не выполняются. Выбранный тип должен
совпадать с физической микросхемой до запуска программы и чтения параметров.
### CCS12
Откройте `Source/Internal/Include/eeprom_config.h`:
```c
#define EEPROM_M95M02 0 /* AT25256B, 32 КиБ */
/* Для установленной M95M02 измените значение на 1. */
```
После изменения выполните **Project → Clean**, затем **Rebuild**. Этот файл
читают драйвер, обработчик команд и F28335.cmd; post-build использует тот же
выбор. Не задавайте противоречащий ему отдельный define только компилятору CCS:
тогда компилятор, линкер и проверка BIN могут получить разные настройки.
### Сборка скриптом
```powershell
./build_logger.ps1 -Eeprom AT25256B -OutputDirectory ./Bin/EepromProfiles/AT25256B -ImageName UKSSTMS320F28335_AT25256B
./build_logger.ps1 -Eeprom M95M02 -OutputDirectory ./Bin/EepromProfiles/M95M02 -ImageName UKSSTMS320F28335_M95M02
```
Параметр скрипта передаётся компилятору, линкеру и проверке размера; исходный
config не меняется. Скрипт по умолчанию собирает AT25256B. Рядом с BIN создаются
manifest и SHA-256; поле `eeprom` в manifest различает аппаратные варианты.
UART остаётся 115200; алгоритм UART и FIFO не изменялся.
| Параметр | AT25256B | M95M02-DR |
|---|---:|---:|
| Ёмкость, байт | 32768 | 262144 |
| Адрес SPI | 2 байта | 3 байта |
| Страница записи, байт | 64 | 256 |
| Начало параметров, байт | 0x7EFC | 0x3FEFC |
| Начало параметров, слова | 0x3F7E | 0x1FF7E |
| Конец параметров, исключая | 0x7FFE | 0x3FFFE |
| Максимальная область BIN | 32508 | 261884 |
Последние два байта не используются. У M95M02 старшие адресные биты передаются
отдельным восьмибитным тактом, затем младшие 16 бит. Адреса и длины драйвера
расширены до 32 бит только в сборке M95M02. Запись делится по физическим страницам;
готовность определяется WIP в регистре состояния. На плате с новым чипом ещё
нужна проверка записи/считывания и холодного SPI boot; тесты на ПК не заменяют её.
### SETGUI
На вкладках **EEPROM 167** и **Загрузка / запуск / прошивка** есть синхронный
чекбокс **M95M02 · 256 КиБ**. Снято — AT25256B · 32 КиБ. Он выбирает протокол
и допустимый диапазон ПК, но не перепрограммирует тип EEPROM работающей платы.
Во время чтения/загрузки переключатель блокируется.
Для полного дампа нажмите «Вся EEPROM»: 32768 либо 262144 байта. Длина блока
остаётся 240 байт. M95M02 требует блочного чтения; автоматический переход на
PEEK запрещён. Неподходящая прошивка должна отклонить запрос, а не вернуть
повторяющиеся первые 32 КиБ как полный дамп. Дамп можно передать кнопкой
«Сравнить с файлом…» напрямую в сравнение BIN.
При загрузке BIN проверяется поле `eeprom`, если оно присутствует в manifest.
Старые файлы без этого поля не позволяют проверить тип. Команда «В SEEPROM»
использует отдельный подкод M95M02; старая прошивка его не исполняет. Операция
может завершиться таймаутом при несовпадении типа; это не успешная запись.
GUI ограничивает отдельную загрузку в RAM существующим пределом 199993 байт:
ёмкость EEPROM 256 КиБ сама по себе не увеличивает буфер загрузки или RAM CPU.
### Замена микросхемы и параметры
Сначала сохраните полный дамп старой EEPROM и настройки платы. После установки
M95M02 запустите её сборку через CCS, запишите соответствующий BIN и сохраните
параметры штатной командой Save. Параметры автоматически не мигрируют с 0x7EFC
на 0x3FEFC. Простое копирование старого полного дампа в начало новой памяти
не переносит настройки в их новую область и оставляет старый вариант прошивки.
### Общий протокол templates
Реализация и границы: `balsam167_eeprom_layout.h`, `balsam167_eeprom_block.h`,
`periph28335.c`. Публичные функции `*_profile` получают 0 (AT25256B) или 1
(M95M02); старые функции и структура reader из четырёх uint32_t сохранены.
Python — тонкий ctypes-порт. Профили ПМ67/2812 и STM этим выбором не изменяются.
Для M95M02 используется частное расширение окна FC03: адрес 0x8000…0xFFFF,
quantity = 0x8000 | (bank << 8) | word_count, bank 0…3, word_count 1…120.
Каждый запрос содержит свой банк 64 КиБ; общего переключаемого банкового
регистра нет. Блок не пересекает границу банка. Это не стандартное количество
регистров Modbus — пользоваться следует общим API templates.
Подкод EXTEND записи: 4 для AT25256B, 0x44 для M95M02. Адрес назначения в словах,
размер в байтах. Обе стороны проверяют границу области прошивки.
Проверки: C-тест полного дампа 256 КиБ с нечётного адреса, все переходы банков,
CRC и выход за границы; Qt-тесты выбора и запрета fallback; host-тест реального
SPI-автомата `python tests/eeprom_profiles/run_test.py`; сборка обоих вариантов TI.

View File

@@ -1,167 +0,0 @@
# 167: версия работающей прошивки, SHA-256 и выпуск
## Что подключено
167 использует общий `templates/c/firmware-info`, а не копию Climate.
Работающий ПМ35 отдаёт 12 регистров версии через RS и служебный CAN.
После сборки на компьютере создаются SHA-256 BIN и JSON-паспорт.
Общая подробная инструкция, включая перенос на TMS320F2812 и STM32:
[BUILD_IDENTITY.md](../../newProject/SETGUI/third_party/templates/c/firmware-info/BUILD_IDENTITY.md).
| Файл проекта | Роль |
|---|---|
| `UKSSTMS320F28335/firmware_version.h` | Редактируемый номер выпуска: FIRMWARE_VERSION_MAJOR/MINOR/PATCH |
| `UKSSTMS320F28335/firmware_identity.json` | Product и target; версия берётся из C-заголовка |
| `Source/Internal/shared_ump.c` | Подключение общей таблицы версии и привязка к UMP ПМ35 |
| `UKSSTMS320F28335/prepare_identity.py` | Генерация идентичности из C-заголовка перед CCS Debug/Release |
| `build_logger.ps1` | Полный CLI build: prepare, compile, link, SCI8, size check, seal |
| `build_bin.bat` | Debug post-build: проверка SCI8 и паспорт конечного BIN |
| `tests/firmware_identity/port_test.c` | Host-проверка привязки версии к реальному порту 167 |
Номер `0.1.0` — начальная версия разработки этого механизма; он не выдаётся за
историческую версию предыдущих BIN. Назначайте release-номер вручную перед выпуском.
## Сборка из PowerShell
Из корня 167:
```powershell
./build_logger.ps1 -OutputDirectory "$PWD/Bin/FirmwareIdentity" `
-ImageName UKSSTMS320F28335
```
По умолчанию применяется `-O2 --opt_for_speed=0`. Результаты:
```text
Bin/FirmwareIdentity/UKSSTMS320F28335.bin
Bin/FirmwareIdentity/UKSSTMS320F28335.bin.manifest.json
Bin/FirmwareIdentity/UKSSTMS320F28335.bin.sha256
Bin/FirmwareIdentity/generated/firmware_identity.h
Bin/FirmwareIdentity/generated/firmware_identity.json
```
Проверка файла перед передачей:
```powershell
python ../newProject/SETGUI/third_party/templates/c/firmware-info/tools/identity.py verify `
--image Bin/FirmwareIdentity/UKSSTMS320F28335.bin `
--manifest Bin/FirmwareIdentity/UKSSTMS320F28335.bin.manifest.json
```
CLI принимает `-TemplatesRoot`, если общий checkout расположен иначе. Все
исходники общего механизма собираются непосредственно из этого checkout.
## Сборка CCS
В `.cproject` добавлены pre-build и include paths `${BuildDirectory}/generated` и
`templates/c/firmware-info/include`. После изменения настроек закройте/откройте
проект в IDE, затем выполните Clean/Rebuild.
Pre-build требует Python 3.10+ и Git в PATH процесса CCS. `Generated` принадлежит
этому проекту: не запускайте Debug/Release одновременно. Для параллельных
сборок используйте CLI с разными output-каталогами.
Штатный Debug post-build создаёт в `Bin`:
```text
UKSSTMS320F28335_<commit>.bin
UKSSTMS320F28335_<commit>.bin.manifest.json
UKSSTMS320F28335_<commit>.bin.sha256
```
Имя BIN исторически содержит HEAD без dirty-суффикса; достоверные признаки dirty
находятся внутри ответа версии и паспорта. Не определяйте чистоту только по имени.
Release-конфигурация получает embedded identity через pre-build, но её старый
проект не имел автоматического BIN post-build. Для готового проверенного BIN с
паспортом используйте описанный CLI либо настройте release-конверсию по общей
инструкции; нельзя запускать Debug `build_bin.bat` на Release и ожидать другой `.out`.
Если CCS пишет `Error ... (ignored)`, сборка не считается успешной: убедитесь,
что последняя проверка и `seal` завершились без ошибок. Старый BIN с таким же
именем может оставаться на диске после неудачной сборки.
## Как прочитать версию
По прямому RS232/RS485: Modbus **03**, адрес начала **4608 (`0x1200`)**, **12 слов**.
Это zero-based адрес в запросе, а не обозначение `4xxxx` в интерфейсе терминала.
Адрес ведомого остаётся текущим `CNTRL_ADDR`. Возвращается стандартный RTU-ответ
с 24 байтами данных и CRC; дополнительного legacy padding в этом окне нет.
| Адрес | Содержимое |
|---|---|
| `0x1200` | Версия формата = 1 |
| `0x1201..0x1203` | Major, minor, patch |
| `0x1204` | Год UTC |
| `0x1205` | Месяц:день, старший:младший октет |
| `0x1206` | Час:минута UTC |
| `0x1207` | Секунда |
| `0x1208..0x120B` | 8 ASCII-символов Build ID, по два на слово |
По служебному CAN ПМ35: запрос UMP функции 03, `0x1200`, 12 слов; ответ состоит
из шести фрагментов. Используется выбранный Mode и существующий token запроса.
CAN ПМ67 не переназначается. Запись функции 06 в окно версии запрещена.
Старый образ может вернуть исключение или неизвестный контракт. Это не следует
заменять «ожидаемой» версией выбранного BIN. После прошивки переподключитесь или
явно обновите чтение: ответ должен поступить с устройства, а не из кэша GUI.
## Что сравнивать после заливки
Сравните SemVer, все поля UTC и Build ID с паспортом именно загруженного BIN.
`+` означает локальные изменения приложения **или templates**; полный Git SHA
и состояние обоих деревьев записаны в JSON. Проверка SHA на ПК подтверждает
целостность файла, но не заменяет проверку программатором записанной памяти.
В контракте нет аппаратного product ID и хеша всей памяти. Подключённый профиль
должен оставаться ПМ35/167, а файл — `product=Balsam-167-PM35`,
`target=TMS320F28335`. Не переносите файл на ПМ67 только по похожему имени.
## Влияние на память и параметры
С проверенными настройками текущий образ занимает **32 286 байт**, предел —
**32 508**, запас **222 байта**. Механизм добавил 116 байт относительно сборки
без него. Это результат конкретной сборки, не обещание для следующих изменений.
Таблица версии — часть `.econst` прошивки. Её не сохраняют в область параметров;
старые настройки не могут подменить версию после обновления. Размер буфера лога
и размещение EEPROM-параметров не менялись. Дата не разбирается на MCU, SHA-256
не вычисляется на MCU. Проверка размера `check_firmware.ps1` остаётся обязательной.
## Проверки и ограничения
Проверка соответствия паспорта **реально встроенной** таблице в собранном SCI8:
```powershell
python tests/firmware_identity/check_build.py Bin/FirmwareIdentity/UKSSTMS320F28335.bin
```
Этот независимый тест также сверяет SHA и размер, проходит boot-блоки и ищет
точное 12-словное представление версии. Он обнаружит старый объект версии или
паспорт другой сборки. Это тест для 167, не транспортный код для GUI.
Host-тест реального порта (GCC должен быть в PATH):
```powershell
$templates = '../newProject/SETGUI/third_party/templates'
gcc -std=c99 -Wall -Wextra -Werror `
"-I$templates/c/firmware-info/include" -IBin/FirmwareIdentity/generated `
"-I$templates/c/set-protocol" "-I$templates/c/set-protocol/ports/tms320f28335" `
tests/firmware_identity/port_test.c Source/Internal/shared_ump.c `
-o Bin/FirmwareIdentity/port_test.exe
./Bin/FirmwareIdentity/port_test.exe
python tests/ump_logger/test_firmware_image.py
python tests/ump_logger/run_test.py
python tests/ump_logger/run_init_test.py
```
Проверены полный TI build 167, формат SCI8, host-тесты протокола и регистратора,
общие тесты identity/SHA, компиляция общего C-кода TI C28x без FPU и ARM Cortex-M4.
Это не аппаратная проверка TMS2812/STM32 и не полноценная сборка другого проекта.
Физическое чтение нового окна версии и проверку после загрузки нужно выполнить
на стенде. В SETGUI на вкладке «Загрузка / запуск / прошивка» доступны
«Прочитать версию с платы» и «Проверить файл»: показаны SemVer, дата UTC,
Build ID и сравнение с выбранным BIN. Для проверки файла держите рядом его
`.bin.manifest.json`; GUI проверяет product/target, размер и SHA-256 и повторяет
проверку перед передачей. BIN без паспорта отмечается как непроверенный старый
образ; неверный паспорт блокирует загрузку. После RESET прочитайте версию снова.

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,119 +0,0 @@
# periph_28335: общая панель RS/CAN и регистратор УМП
## Где находятся панели
В верхнем ряду вкладок, рядом с **Altera Logic**, появилась **periph_28335**.
Внутри неё:
- **Dima / CAN terminal** — существующий CAN-терминал, его проекты, узлы и настройки адаптера;
- **rs232_periph_28335** — существующие операции RS232/485, Modbus и настройки COM;
- **Логгер УМП** — единая панель графиков и архива для обоих транспортов.
В общей группе CAN остались «Шина CAN / мост» и «DevBoard_V1».
В общей группе RS232/485 остался RS_TERMINAL_2812.
Терминалы сохраняют свои соединения: перенос вкладок не создаёт новые порты.
## Онлайн и чтение по CAN
1. Откройте **periph_28335 → Dima / CAN terminal → Настройки**.
2. Выберите Candle/gs_usb либо SLCAN/Lawicel и канал адаптера.
Для штатной прошивки Бальзам 167 используется CAN 250000 бит/с.
Нажмите «Подключить».
3. Перейдите в соседнюю вкладку **Логгер УМП**.
4. В строке **Связь логгера** выберите **CAN · адаптер Dima**.
5. Укажите **CAN-плата (Mode)**: физический номер платы в прошивке, 1..16.
Платы нагрузки Бальзам 167 имеют номера 5/6; выбирайте фактически подключённую.
Это не RS-адрес 16 и не индекс строки таблицы Dima. Выбор проекта в Dima
не меняет CAN-адрес регистратора: он явно определяется этим полем.
6. Нажмите **Начать запись** или **Онлайн**, если запись на плате уже идёт.
Остальные действия, флажки, легенда, единицы мА и CSV одинаковы для RS и CAN.
7. После команды отключения и секунды постинтервала нажмите
**Прочитать отключение**. Запись текущего банка на плате продолжается.
Кнопка **Настройки связи** открывает настройки выбранного транспорта.
Состояние адаптера/порта и адреса CAN постоянно отображаются над графиком.
**Прервать обмен** останавливает чтение GUI, не посылая команду остановки
регистратора или УМП. При переключении канала/платы незавершённые запросы
отменяются, поздние ответы не продолжают старую цепочку.
Для RS выберите **RS232/485** и настройте COM в соседней RS-панели:
обычно 115200, адрес 16. Сообщения «не подключён» и «занят запросом» разделены.
Отключение RS-порта не останавливает CAN-просмотр. CAN-разрыв не мешает RS.
Демо, если оно включено в сборке, по-прежнему работает без физической платы.
## Изменения прошивки
Для CAN требуется новая прошивка этой ветки. Предыдущая версия регистратора
умела отдавать данные только через Modbus. Старая плата игнорирует новые
служебные запросы; GUI сообщает о тайм-ауте без изменения команд УМП.
- MBOX0: прежняя передача технологических данных, ID 0xBA0010 + Mode - 1.
- MBOX1: прежний приём команд, ID 0xBA0000 + Mode - 1; дополнительно
распознаётся служебный заголовок 0x1F00 и длина ровно 8 байт.
- MBOX2: отдельные ответы регистратора, ID 0xBA0020 + Mode - 1.
Биты маски записи регистров у служебного запроса равны нулю. Обработчик
перехватывает его до изменения modbus[] и до журналирования CAN-команд:
опрос собственного журнала не заполняет журнал.
Запрос ставится в очередь из ISR. Основной цикл формирует целый снимок
под короткой блокировкой IRQ и отправляет максимум один кадр за вызов
UMP_CAN_service(). Ожидания передачи в цикле нет. Перед следующим
фрагментом приоритет отдаётся ожидающей штатной телеметрии MBOX0.
Если ACK служебного mailbox не приходит 250 тиков таймера, передача
отменяется. При этом штатные CAN-команды и MBOX0 не отменяются.
По CAN доступны те же расширенные адреса 0x1000 / 0x1010 / 0x1100,
состав записи и версия снимка 2. Новый протокол не даёт писать через
служебный запрос в технологические адреса 0..127.
## Формат кадров
CAN 2.0B, расширенный ID, 8 байт данных. Порядок соответствует существующей
прошивке: MDL (слова 1,2), затем MDH (заголовок, слово 0). Каждое слово
содержит сначала старший байт.
Запрос: `[адрес BE16, значение/длина BE16, 0x1F00 BE16, token:function BE16]`.
Функция 3 — чтение, 6 — запись; token — номер запроса 1..255.
Ответ: `[данные0 BE16, данные1 BE16, (0x1F00+индекс) BE16, token:error BE16]`.
Номер фрагмента 0..61, в нём два слова снимка. Ошибка 0 означает успех,
1 — неизвестная функция, 2 — неверный адрес/диапазон, 3 — запрещённое значение.
У записи успешный ответ содержит эхо адреса и значения.
Пример: Mode=5, token=7, чтение статуса 16 слов.
Запрос ID `0x00BA0004`, данные `10 00 00 10 1F 00 07 03`.
Ответы ID `0x00BA0024`, восемь фрагментов по два слова.
Онлайн-снимок из 124 слов передаётся 62 фрагментами.
GUI принимает только ответ выбранной платы с номером текущего запроса,
восстанавливает порядок фрагментов, игнорирует одинаковые дубликаты и
отклоняет противоречащие. Неполный снимок не попадает на график.
После потери подтверждения записи GUI прямо сообщает, что команда могла
выполниться; автоматического повторного старта регистратора нет.
Онлайн показывает последние три записи из полного снимка. При высокой
нагрузке шины/низкой скорости возможны пропуски онлайн-отображения;
они считаются существующим счётчиком. Архив читается целиком по блокам.
Предполагается один активный читатель архива: его курсор общий для RS/CAN.
Одновременное управление архивным курсором из двух независимых программ
не поддерживается.
## Проверки и ограничения
Пройдены тесты протокола, сборки всех 62 фрагментов, неверного адреса/токена,
пропущенных и повторных фрагментов, ACK и ошибок, отмены при смене канала,
иерархии вкладок и сохранения RS/демо. Набор тестов выполнен на Qt 6 и Qt 5.
В прошивке проверен настоящий код формирования ответов через host-тест;
изменённые C-файлы прошли проверку синтаксиса Clang с исходными заголовками.
Сборка TI/CCS, проверка MAP и испытание CAN на реальной плате ещё требуются.
Особенно проверить тайминги IRQ и приоритет штатной телеметрии на нагруженной
шине. Файлы прошивки Bin/*.out/hex не заменены. Архив остаётся в ОЗУ:
команда отключения фиксирует его, пропадание питания стирает.
## Общее ядро templates
Сервер CAN/RS логгера подключён через `Source/Internal/shared_ump.c`.
Для сборки требуется соседний `../../templates`. Контракт и порты:
`templates/c/set-protocol/docs/UMP_PROTOCOL.md`.

View File

@@ -1,97 +0,0 @@
# RS232 FIFO для ПМ35 / TMS320F28335
Ветка `pm35-uart-fifo`. FIFO включён **только SCI-A / COM_1 / RS232**.
SCI-B / COM_2 / RS485 сохраняет прежние настройки и обработчики без FIFO.
Скорости портов не менялись: RS232 115200; RS485 — прежние 57600/115200.
`Source/Internal/Include/RS485.h`: `RS232_USE_FIFO=1` по умолчанию.
Для сборки прежнего пути передачи определить `RS232_USE_FIFO=0`.
## Работа
- TX заполняет до 16 байт, пополняет при остатке не более 8.
- После постановки последнего байта порог переключается на 0. Следующее
прерывание завершает передачу только после пустого FIFO и `TXEMPTY`.
Ожидание внутри завершающего ISR ограничено остатком последнего символа;
передача всего FIFO внутри ISR не ожидается.
- Первый блок ставится в FIFO до разрешения TX-прерывания, под короткой
IRQ-блокировкой с восстановлением прежнего состояния.
- Убраны программные задержки перед передачей именно для SCI-A. Данные
`BM_CHAR32` и упакованный поток `BM_PACKED` сохраняют прежний порядок байтов.
Нулевая длина не обращается к указателю и не включает передатчик.
- RX читает накопленные байты из FIFO. Порог 1 сохраняет немедленный приём
коротких команд и остатка блока. `SCIRXBUF` читается один раз вместе с FE/PE.
- Ошибка/переполнение аннулирует пакет и `BS_LoadOK`, очищает FIFO. После
3–4 мс тишины обработчик таймера 1 мс возвращает SCI-A к ожиданию адреса.
Продолжающийся повреждённый поток продлевает ожидание. CMD_LOAD после
ошибки требует нового CMD_INITLOAD. Расчёт паузы предназначен для 115200.
- Счётчики отладчика: `rs_a.fifo_rx_errors`, `rs_a.fifo_overflows`.
## Расчёт скорости и диагностика приёма
FIFO остаётся включённым. Для SCI используется формула TI SPRUI07:
`baud = LSPCLK / (8 * (BRR + 1))`. Функция `RS_SetLineSpeed` округляет
отношение `LSPCLK / (8 * baud)` и вычитает единицу перед записью BRR.
При LSPCLK 60 МГц и заданных 115200 бод регистры должны содержать
`SCIHBAUD=0`, `SCILBAUD=64` (`0x40`). Реальная скорость — 115384,6 бод,
отклонение +0,16 %. Прежнее значение 65 давало 113636,4 бод; сама по себе
эта разница не доказывает причину наблюдавшегося отказа на плате.
GPIO28 настраивается как асинхронный вход SCI-A с подтяжкой к уровню покоя.
Прерывание RXERROR разрешается во время приёма: BREAK при пустом FIFO
не может вызвать прерывание по порогу RXFFIL. Во время передачи оно
отключается вместе с RX FIFO, чтобы ошибка RX не сбрасывала активный TX.
Для просмотра в CCS добавлены поля в RAM:
| Поле `rs_a` | Назначение |
|---|---|
| `fifo_rx_bytes` | Количество прочитанных из FIFO байтов, включая повреждённые |
| `fifo_rx_last_word` | Последнее слово SCIRXBUF; данные в битах 7:0, FE/PE в битах 15:14 |
| `fifo_rx_last_status` | SCIRXST последней ошибки до сброса; BREAK/FE/OE/PE в битах 5/4/3/2 |
| `fifo_rx_last_error_word` | Повреждённое слово FE/PE либо ноль при общей ошибке до чтения FIFO |
Смотрите эти поля и отдельные регистры управления. Чтение SCIRXBUF в Watch
изменяет состояние приёмника; для просмотра данных TI предусматривает
SCIRXEMU. Описание регистров: [TI SPRUI07](https://www.ti.com/lit/ug/sprui07/sprui07.pdf).
Это UART-оптимизация. Она не меняет команды/формат логгера УМП и не подключает
экспериментальный GAS-логгер. Размеры блоков чтения УМП остаются прежними.
## Проверка
```powershell
python tests/rs232_fifo/run_test.py --cc C:/msys64/mingw64/bin/gcc.exe
```
Тест извлекает рабочие функции из `RS485.c`; заменяется только поведение
аппаратных регистров, ожидание продвижения UART и модель 16-битного char C28x.
Проверены TX-длины 0/1/2/7/8/15/16/17/31/120/253/400, упакованный блок 8194,
приём короткого/разделённого пакета и LOAD 8194, FIFO overflow, FE/PE,
восстановление после тишины, остаток сдвигового регистра и независимость SCI-B.
Полная сборка TI C2000 22.6.0.LTS:
```powershell
./build_logger.ps1 -OptimizeForSize -Rs232Fifo 1 `
-OutputDirectory "$PWD/Bin/Rs232FifoTest" -ImageName PM35_167_rs232_fifo
./build_logger.ps1 -OptimizeForSize -Rs232Fifo 0 `
-OutputDirectory "$PWD/Bin/Rs232NoFifoTest" -ImageName PM35_167_rs232_no_fifo
```
| Образ | Размер | Запас до параметров EEPROM |
|---|---:|---:|
| FIFO, `-O2 --opt_for_speed=0` | 32158 байт | 350 байт |
| Без FIFO, те же параметры оптимизации | 31234 байта | 1274 байта |
Оба BIN прошли проверку структуры SCI8 и лимита 32508 байт существующим
`check_firmware.ps1`. Старые `-O1 --opt_for_speed=3` с FIFO превышают лимит;
для этого варианта обязателен `-OptimizeForSize`. Проверка запрещает выпуск
слишком большого BIN и не даёт затронуть сохранённые параметры.
Оптимизация размера применяется ко всей сборке, поэтому временные
характеристики приложения нужно проверить на стенде.
На плату образы не загружены. Пока подтверждены сборка и тесты модели;
ускорение чтения логгера и устойчивость физического RS232 не измерены.
Для стенда сравнить одно и то же чтение архива на двух образах, проверить
CMD_LOAD/UPLOAD и параллельный RS485. FIFO не увеличивает baud rate.

View File

@@ -1,112 +0,0 @@
# Назначение исходников Бальзам-167
Все редактируемые исходники C/H, ASM, CMD и Python используют UTF-8 без BOM.
Русский текст найден рядом с каждой строкой исходников из Git-индекса, однако
часть пояснений шаблонная и требует содержательной доработки. Существующие уведомления TI
и сведения о поставляемых файлах сохранены. Таблица формального покрытия,
ограничения проверки и результаты проверки качества находятся в [COMMENT_AUDIT.md](COMMENT_AUDIT.md) и
../tests/comments/run_test.py.
## Порядок работы
main.c сначала настраивает системные такты, PIE, внешнюю RAM, адрес платы,
CAN и оба SCI. Затем запускает EEPROM, очищает RAM журнала, явно инициализирует
регистратор и автомат LOAD, настраивает Timer1 и разрешает прерывания.
Параметры читаются из EEPROM; для LOAD Setup_DAC_time применяет длительность
нарастания тока и проверяет сохранённый тайм-аут CAN. Главный цикл обслуживает
команды, сохранение параметров, события регистратора и передачу служебного CAN.
Timer1 задаёт основную частоту READY_FREQ=1000 Гц. Для измерительной платы
обработчик находится в measure.c, для пульта — в pulto.c. Автомат нагрузки
выполняется в Timer1: он владеет START/STOP/разрешением и обновлением тока ЦАП.
Главный цикл не включает нагрузку поверх состояния защиты. Timer2 продвигает
автомат EEPROM; ожидание SPI не выполняется внутри длительной блокировки IRQ.
## Внутренние модули
| Файл | Назначение и важные ограничения |
| --- | --- |
| main.c | Порядок запуска, общий цикл, команды загрузчика и Modbus; COM_1 115200 с FIFO. |
| ADC.c | Настройка каналов АЦП, обработка преобразований и обновление фильтров. |
| measure.c | Типы датчиков, температурные/токовые/мощностные расчёты, диагностика, периодический такт. |
| filter_bat2.c | Накопительный фильтр; история и сумма обновляются вместе с новым отсчётом. |
| DAC.c | Передача слов ЦАП и автомат нагрузки: свежесть CAN, напряжение, STOP и настраиваемый лимит пусков. |
| ecan.c | Штатные CAN-кадры и отдельный служебный обмен УМП/GAS; ISR принимает, главный цикл передаёт ответ. |
| RS485.c | SCI-A/SCI-B, разбор кадров и упаковка слов; FIFO используется только первым портом. |
| message.c | FC03/FC06, маршрутизация УМП/GAS, заводские и сохраняемые параметры. |
| gas167.c | Карта 167/v1; проверка всего диапазона до чтения; ограничение записи такое же, как у обычного Modbus. |
| log_to_mem.c | Два банка RAM регистратора, события START/STOP/CAN/RS, замороженный архив и чтение через УМП. |
| shared_ump.c | Подключение общего протокола и паспорта из соседнего репозитория; логика общей библиотеки здесь не дублируется. |
| spise2p.c | SPI EEPROM: команда, адрес, порции данных, границы страниц и ожидание окончания записи. |
| bios.c | Последовательный загрузчик, команды памяти и EXTEND; адрес EEPROM проверяется отдельно от RAM. |
| cntrl_adr.c | Установка собственного/универсального адреса устройства. |
| peripher.c | Аппаратные перемычки, тип платы, кнопки, выбор канала и служебные GPIO. |
| kanal.c | Последовательная передача битов индикации выбранного канала. |
| pulto.c | Периодический обработчик и обмен пульта. |
| crc16.c | Таблицы и алгоритмы CRC для используемых пакетов. |
| tools.c | Внешняя шина XINTF Zone7 и задержки в микросекундах. |
## Заголовки проекта
package.h определяет аппаратные адреса и псевдонимы modbus. Стартовый ток
находится в 0x50, конечный — в 0x51. Сохраняемый LOAD_CAN_TIMEOUT занимает 0x52:
разрешено 1..60000 мс; заводское значение 2000 мс устанавливается Default_params.
Setup_DAC_time исправляет недопустимое сохранённое значение на 600 мс.
Load_runner дополнительно использует 600 мс для локальной страховки при
недопустимом значении. LOAD_STATUS=0x7C доступен только для чтения.
LOAD_MAX_ATTEMPTS=0x7D — сохраняемый лимит 1..65535 пусков, по умолчанию 5;
ноль при записи отклоняется. Текущий счётчик остаётся в слове 5 блока
FC03(0x1300, 8), а подготовка тактов ЦАП не обнуляет настроенный лимит.
eeprom_config.h выбирает физическую микросхему при сборке. spise2p.h задаёт
ширину адреса, длину страницы и типы задания SPI. gas167.h описывает границы
профиля и контракт снимка. log_to_mem.h задаёт формат точек и ёмкость банков.
RS485.h описывает состояние портов, буферы, FIFO и тайм-ауты.
measure.h хранит частоты, типы датчиков и битовые состояния диагностики.
caliber.h содержит заводские калибровочные значения. GPIO_table.h и peripher.h
задают аппаратные сигналы. Остальные заголовки объявляют интерфейсы одноимённых
модулей.
## Слово C28x и физические байты
На C28x int и char имеют ширину 16 бит. Адреса технологических регистров и GAS
считаются словами. Размеры EEPROM, загрузочного SCI8 BIN и октеты RTU считаются
8-битными байтами. Поэтому преобразование адреса EEPROM в байты выполняется
явно. Хостовые проверки используют uint16_t и модель аппаратных регистров,
чтобы обычные 8-битные char/32-битные int ПК не меняли смысл пакетов.
F28335.cmd размещает код в RAM и экспортирует абсолютные символы границ EEPROM.
EEPROM не является памятью, доступной ядру напрямую: ROM загружает образ по SPI
в RAM. Увеличение EEPROM не расширяет .text или RAM регистратора. Секция .logg
остаётся в Zone7A. Подробные пределы: [EEPROM_LAYOUT.md](EEPROM_LAYOUT.md).
## Поставляемые TI файлы
DSP2833x_headers/include содержит структуры аппаратных регистров и их битовые
поля. GlobalVariableDefs.c размещает структуры в именованных секциях; файлы
Headers_BIOS.cmd/Headers_nonBIOS.cmd связывают их с аппаратными адресами.
Рабочая сборка использует nonBIOS.
DSP2833x_common содержит начальную настройку тактов, таймеров, АЦП, PIE и XINTF,
таблицы векторов и программные приоритеты ISR. В SWPrioritizedIsrLevels.h
приоритет 0 исключает источник, меньшее ненулевое значение означает более
высокий приоритет; MINT и MG вычисляют соответствующие маски.
ADC_cal.asm и usDelay.asm обеспечивают фабричную калибровку/задержку C28x.
Комментарии описывают исходный порядок инструкций; код поставляемых модулей
не изменён.
## Настройки и результаты сборки
.project регистрирует связанные исходники и заголовки, .cproject задаёт Debug,
Release, флаги, пути и pre/post-build. .ccsproject описывает устройство и
инструментарий, .settings/*.prefs — настройки Eclipse/CCS. Эти XML и properties
содержат русские комментарии без изменения значений опций.
firmware_identity.json — входные product/target. Паспорт BIN и
profile-comparison.json — структурированные данные; комментарии JSON
недопустимы. Их поля описаны в FIRMWARE_IDENTITY.md и GAS_167_M95M02.md.
.bin/.hex/.out/.map, EXE, LIB и XLS — данные или результаты сторонних инструментов;
их нельзя снабжать комментариями как исходный C-код. .paf2/.sbl и корневые
.pjt/.lkf относятся к старым данным IDE/сборки. postBuildStep_Debug.old и fixya.bat
сохранены как старые служебные сценарии; действующие шаги CCS определены в
.cproject и соседних шаблонах.

View File

@@ -1,269 +0,0 @@
# Логгер запуска и отключения УМП: прошивка Бальзам 167 и SetGUI
## Назначение и работа оператора
В SetGUI открыть ПМ35 → Настройки, выбрать COM, скорость (обычно 115200)
и адрес контроллера (для рассматриваемого УМП — 5). Затем открыть вкладку **Логгер УМП**.
Подключение используется существующее: прямой RS232/RS485 Modbus RTU.
CAN-команды от управляющего контроллера фиксируются самой платой нагрузки.
1. **Начать запись** включает только регистратор, не пуск УМП.
Период снимков по умолчанию 20 мс, диапазон 1–1000 мс.
2. Левые флажки выбирают отображаемые сигналы. Аналоги рисуются линиями,
дискретные сигналы — отдельными дорожками. Выбор не меняет состав
записи на плате: скрытую кривую можно включить после захвата.
3. **Онлайн** подключает график к уже идущей записи, в том числе после
восстановления соединения. Тайм-аут не посылает плате команду останова.
4. Фактическое включение STOP при переходе работающей нагрузки к снятому
разрешению запускает фиксацию отключения. Постинтервал содержит 10%
банка — 76 последующих точек, включая события CAN и I/O. Повторные
STOP при уже остановленной нагрузке архив не заменяют.
5. **Прочитать отключение** загружает архив, не останавливая запись на плате.
На время чтения и просмотра архива онлайн-график приостанавливается;
вернуться к нему можно кнопкой **Онлайн**.
6. **Остановить и прочитать** останавливает только регистратор и читает
текущий банк. При этом существующий архив отключения остаётся доступным.
7. **Сохранить CSV** сохраняет поля загруженного/онлайн-буфера, выбранные
правыми флажками «Запись в лог», а также время и код события. Выбор
не зависит от видимости кривой. Множители графика не изменяют значения CSV.
**Буфер GUI** задаёт число последних точек: от 800 до 100000, по умолчанию
10000. Это отдельный буфер ПК, не ёмкость банка платы и не непрерывная
запись на диск. **Сохранить график из GUI** позволяет выгрузить накопленную
онлайн-историю после чтения архива платы.
При разрыве связи журнал на плате продолжает работать. Архив хранится в ОЗУ
до следующей фиксации отключения либо перезагрузки/пропадания питания.
EEPROM не используется: под отключением в этой задаче понимается команда
управляющего контроллера, а не потеря питания.
## Память и точность
Использована существующая секция `.logg` по адресу 0x200000: 64000
16-битных слов. Два банка по 760 записей × 12 слов занимают 18240 слов.
Ёмкость в точках сохранена; сокращённая запись освобождает оставшуюся часть
выделенного массива. При триггере сохраняются до 683 предыдущих точек,
событие отключения и 76 последующих точек. При периоде 20 мс и отсутствии
дополнительных событий постинтервал составляет примерно 1,52 секунды.
События CAN и дискретов сокращают его временную длительность, но не число
зарезервированных точек. Архив после заполнения постинтервала фиксируется,
а запись продолжается в другом банке.
Время — 32-битный счётчик миллисекунд записи. Он идёт только при включённом
регистраторе и не является абсолютным временем. События в одном тике имеют
одинаковую отметку; порядок сохраняется порядком записей. На перезапуске
регистратора счётчик продолжает прежнюю шкалу, при перезагрузке платы — 0.
Онлайн-опрос возвращает до десяти последних записей каждые 40 мс. Он не гарантирует
передачу каждого события при высоком CAN-трафике, медленном UART или паузах
GUI. Номера записей позволяют убрать дубликаты и явно показать пропуски.
Полный сохранившийся фрагмент следует читать кнопкой архива. Частота 20 мс
выбрана с учётом размера кадра; на низких скоростях нужна большая пауза
снимков и подходящий тайм-аут RS.
Все писатели и чтение одного Modbus-блока используют короткие критические
секции с восстановлением прежнего состояния IRQ. Внутри нет ожидания UART,
EEPROM, выделения памяти или копирования целого банка. Реальную задержку
прерываний и длительность критических секций нужно измерить на F28335.
## Состав записи v4: 12 слов
Из прошивки и списка графиков удалены 32 неотмеченных канала с двух
скриншотов: остатки импульса/инициализации, код и калибровки ЦАП,
измерения, ошибки, сырые CAN-слова/счётчики, маска команд, параметры
разгона и каналы АЦП. Рабочие калибровочные регистры и сами измерения
для управления платой продолжают использоваться по назначению.
В интерфейсе осталось 15 каналов:
| Группа | Каналы |
|---|---|
| Ток и уставки | Расчётное задание тока, начальная уставка, конечная уставка — мА |
| Напряжения | ЗПТ1: U1 + U2 (ПМ67, рег. 306); ЗПТ2: U3 + U4 (ПМ67, рег. 9) — В |
| Команды | Пуск УМП, сброс УМП |
| Входы | OMEGA, Start_1, Res_in |
| Выходы | START_DPTB, STOP_DPTB, RES_OUT_2 |
| События | Событие отключения, усечение постинтервала |
«Усечение постинтервала» оставлено для чтения прежних журналов; текущая
прошивка v4 бит 9 события не устанавливает. Расчётное задание тока —
команда аналоговому выходу, а не измеренный физический ток петли.
Для отображения физических единиц у пяти аналоговых каналов нужен
множитель ×1,000. Сохранённые пользовательские множители восстанавливаются
при запуске GUI; например, ×94,000 меняет только высоту кривой, не ток платы.
| Слова | Данные | Единицы/смысл |
|---|---|---|
| 0–1 | Время, младшее/старшее слово | мс записи |
| 2 | Событие | 1 — период, 2 — CAN, 3 — I/O, 4 — RS, 5 — конец постинтервала |
| 2, бит 8 | Событие отключения | флаг поверх причины |
| 2, бит 9 | Усечение постинтервала | совместимость со старыми журналами; в текущем v4 равен 0 |
| 3 | Команды пуска и сброса | только биты 7 и 6; отдельной кривой маски команд больше нет |
| 4 | Входы OMEGA, Start_1, Res_in | биты 0, 1, 2 |
| 5 | Выходы START_DPTB, STOP_DPTB, RES_OUT_2 | биты 0, 1, 2 |
| 6 | Расчётное задание тока | 0,1 мА; GUI/CSV показывает мА |
| 7–8 | Начальная/конечная уставки | целые мА |
| 9–10 | ЗПТ1/ЗПТ2 | беззнаковые слова, масштаб 1 В/ед. |
| 11 | Нулевой резерв | чётная длина для передачи CAN парами слов |
Напряжения принимаются из технологических CAN-кадров с нулевыми индексами
305 и 8. Учитываются все три позиции и биты маски 0x8000/0x4000/0x2000.
Они хранятся отдельно от массива modbus[0..127], обновляются и при выключенном
логгере. Запись содержит последние принятые значения; до первого приёма — 0.
При потере связи остаётся последнее значение: отдельного признака свежести нет.
Клиент не преобразует напряжения в знаковые измерения. Свежесть выбранного
ЗПТ и защита роста напряжения описаны отдельно в `UMP_VOLTAGE_PROTECTION.md`.
При штатных 6 мА пуск сначала передаёт это задание и получает 3 секунды
на рост ЗПТ до 30 В; после этого работает прежняя защита и лимит попыток.
## Протокол расширения Modbus
Технологические адреса 0..127 сохранены. Новая область использует полный
16-битный адрес; исходная реализация игнорировала старший байт.
Сначала GUI читает 16 слов 0x1000 и проверяет сигнатуру, версию, размер записи
и тип платы. До успешной проверки расширенные записи запрещены.
Обычный ответ расширения не содержит исторических хвостовых нулей.
Между ответом и следующим запросом GUI выдерживает паузу RTU.
FC03, 0x1000, 16 слов:
| Смещение | Значение |
|---|---|
| 0,1 | 0x554D, версия 4 |
| 2,3 | состояние и число записей выбранного источника |
| 4,5 | 12 слов в записи, 760 записей в банке |
| 6 | период периодических снимков, мс |
| 7,8 | счётчик времени, младшее/старшее слово |
| 9,10 | Desk (требуется 6 / dsk_LOAD), Mode |
| 11 | частота временной базы, 1000 Гц |
| 12 | поколение архива, mod 65536 |
| 13 | число записей архива |
| 14 | верхняя оценка оставшихся миллисекунд: число точек × период, до 65535 |
| 15 | состояние текущего регистратора независимо от выбора источника |
Состояния: 0 — ещё не запущен, 1 — запись, 3 — остановлен/архив.
FC06:
- 0x1000: 1 — новый текущий журнал, 0 — остановить его;
- 0x1001: период 1..1000, менять только при остановленном журнале;
- 0x1002: хронологический индекс первой записи окна 0..759;
- 0x1003: источник окна, 0 — текущий остановленный банк, 1 — архив отключения.
FC03, 0x1010, до 120 слов: окно от установленного индекса; для целых записей v4 читать 12, 24, …, 120 слов.
CAN допускает кратные 12 до 120 слов и прежние размеры v2/v3; RTU допускает 1..120 слов.
Чтение текущего банка этим окном во время записи не выдаёт изменяющиеся
данные. GUI сначала останавливает его; архив можно читать при работающем
текущем банке. После всех блоков GUI повторно проверяет поколение архива;
при замене во время чтения результат не подменяет предыдущий график.
FC03, 0x1100, ровно 124 слова: онлайн-блок. Слова 0,1 — 32-битный номер
первой записи, 2 — число записей 0..10, 3 — поколение архива, далее до десяти
записей по 12 слов. Неиспользованные слова равны нулю. Окно онлайн не
зависит от курсора/выбора архива. Разделение 0x1010 и 0x1100 предотвращает
пересечение двух окон.
Недопустимые диапазоны и значения возвращают исключения Modbus 2/3.
CRC и разбор стандартного ответа GUI используют существующее общее ядро.
SetGUI распознаёт v2 (40 слов, 800 записей), v3 (42 слова, 760 записей)
и v4 (12 слов, 760 записей). Для v2 ЗПТ недоступны (NaN). Старые архивы
декодируются по прежним индексам, но удалённые каналы в панели и CSV больше
не создаются. Валидаторы RTU/CAN поддерживают компактные размеры записи.
Исходники протокола подключаются к прошивке из templates/c/set-protocol.
## Проверка и запуск
Текущая проверенная сборка с пуском 3 секунды и сокращённым журналом:
`Bin/StartupWait3s/UKSSTMS320F28335_startup_3s_378e06a+.bin`.
Размер — 32180 байт; для AT25256B допустимы 32508 байт, запас — 328 байт.
Рядом находятся OUT, MAP, манифест и SHA-256. Для чтения v4 используйте
обновлённый SETGUI и перезапустите приложение после изменения исходников.
Воспроизводимая сборка из корня проекта: `python Bin/StartupWait3s/rebuild.py`.
Скрипт использует установленный TI C2000 22.6, ABI COFF, `-O2`,
`--opt_for_speed=0` и секции функций. Все модули пересобираются в отдельный
каталог; до формирования готового BIN проверяются профиль AT25256B,
граница 32508 байт, блоки RAM и точка входа SCI8. Сохраняются паспорт и SHA-256.
Из CCS используется та же карта памяти и настройки проекта. В include-path
нужны каталоги общего `c/set-protocol`, его порта `ports/tms320f28335`
и сгенерированного паспорта. Обе используемые копии библиотеки поддерживают v4:
`../newProject/templates` и `../newProject/SETGUI/third_party/templates`.
При загрузке `main()` вызывает `ump_log_init()` до включения прерываний.
Это обязательно для TI COFF: стартовый код не обнуляет неинициализированные
переменные `.ebss`. Без явной инициализации состояние, счётчики и номера
банков могут содержать остаточные значения RAM. Очистка `.logg` функцией
`clear_mem()` эти переменные не затрагивает. Повторный запуск записи через
FC06 не вызывает загрузочную инициализацию и сохраняет архив и шкалу времени.
Регрессия `python tests/ump_logger/run_init_test.py` (GCC в PATH) проверяет
запуск с ненулевой RAM и отрицательный контроль без инициализации;
внешняя библиотека `templates/c/set-protocol` для этого теста не нужна.
Изменены исходники прошивки и SetGUI; новый образ собран в отдельном каталоге.
Проверены TI-компиляция, линковка и формат SCI8 для AT25256B. Физические
уровни GPIO и ток после загрузки образа проверяются на плате.
Автотест C в tests/ump_logger компилирует непосредственно log_to_mem.c
с подменой GPIO/IRQ. Проверяет кольцо, граничные адреса, обе команды
отключения, защиту триггера от переполнения, переключение банков,
сохранность архива во время дальнейшей записи, токовое задание и оба ЗПТ.
Это проверка алгоритма на компьютере, не проверка таймингов и 16-битной ABI
TI. Отдельно выполнена синтаксическая проверка изменённых C-файлов Clang
с исходными заголовками и декларациями TI-интринсиков.
Проверенный набор SetGUI: `tests/test_ump_logger.py`,
`tests/test_ump_logger_can.py`, `tests/test_ump_voltage_protection.py` — 93 теста.
Они проверяют единицы мА, битовые сигналы, временные метки, несовместимую
прошивку, порядок команд, архив при активной записи, замену поколения,
дубликаты/пропуски онлайн, потерю связи и флажки графиков.
Проверка на стенде: включить запись → подать CAN-пуск → изменить уставку →
подать откл. → дождаться заполнения 76 точек постинтервала → прочитать
архив и сверить задание, внешний ток и дискретные уровни; затем повторить
с разрывом RS.
Период 1 мс проверить отдельно под максимальной CAN-нагрузкой.
Исторически для сборки v3 требовался templates/main начиная с коммита c0ee7c4
(поддержка CAN-чтения 42/84 слов и порт TMS320F28335).
## Пересечение образа 34a95bc5 с параметрами EEPROM
Образ `UKSSTMS320F28335_34a95bc5.bin` имеет размер 32518 байт.
`Save_params` записывает 129 слов с адреса `0x3FFF-(128+1)`;
драйвер EEPROM умножает адрес на 2. Параметры начинаются с байта 32508.
Последние 10 байт BIN пересекаются с параметрами: два последних адреса
таблицы переходов `ump_log_read` (регистры 0x100E/0x100F) и завершающее
нулевое слово загрузочной таблицы. Сохранение параметров повреждает эту
часть образа для последующей загрузки. Это установленный дефект образа;
причину таймаута на конкретной плате нужно подтвердить повторной проверкой.
В исправлении временный снимок RS перенесён со стека в статический буфер:
обработчики RS вызываются последовательно из main, а перед возвратом
снимок полностью кодируется в собственный буфер UART. CAN имеет свой буфер.
Сборка `build_logger.ps1` использует параметры CCS Debug (-O1, speed=3)
и создаёт отдельный `Bin/LoggerEepromFix/UKSSTMS320F28335_logger_eeprom_fix.bin`.
Проверенный размер — 32494 байта, запас до параметров — 14 байт.
Оба сценария сборки вызывают `check_firmware.ps1` до публикации BIN.
Проверяются размер, формат SCI8, полнота блоков и конец загрузочной таблицы.
При превышении границы остаётся только файл `.pending`; готовый BIN
не публикуется. Проверка: `python tests/ump_logger/test_firmware_image.py`.
После перепрошивки требуется проверка на плате; проверка на ПК её не заменяет.
## Исправление ожидания EEPROM при запуске через CCS
В сборке CCS с O3 подтверждён перенос записей полей `readData` и `writeData`
за цикл ожидания `spiSe2pFree()`. Указатель `msgPtr` и флаг `csr` были volatile,
но содержимое дескриптора — нет. Timer2 получал запрос с незаполненными
адресом, длиной и указателем буфера, поэтому `Load_params()` мог не завершиться,
хотя UART уже принял команду. Все три поля `SE2P_DATA` теперь volatile.
В дизассемблере исправленного OUT записи всех полей предшествуют флагу запроса.
Для проверки старой AT25256B подготовлен
`Bin/EepromPublishFix/UKSSTMS320F28335_eeprom_fix.out` и одноимённый BIN с build_id.
Сборка `python Bin/EepromPublishFix/rebuild.py` явно задаёт `EEPROM_M95M02=0`
и O3; размер проверенного BIN — 32074 байта, запас до параметров — 434 байта.
Проверка порядка инструкций:
`python tests/eeprom_profiles/check_publication.py Bin/EepromPublishFix/disassembly.txt`.
На листинге прежнего OUT эта проверка падает, на исправленном проходит для чтения
и записи. Пройдены модели обоих профилей EEPROM и UART. Запуск на плате
после загрузки исправленного OUT ещё требует подтверждения.

View File

@@ -1,146 +0,0 @@
# Контроль роста ЗПТ при пуске УМП
УМП с адресом 5 (`Mode=5`) контролирует ЗПТ1 — CAN-индекс 305
(регистр ПМ67 306). УМП 6 контролирует ЗПТ2 — CAN-индекс 8
(регистр ПМ67 9). Масштаб исходного слова: 1 единица = 1 В.
## Условия и последовательность
Начальный безопасный код задания соответствует 4 мА по `DAC_min()`.
Рост напряжения считается достаточным при ЗПТ **не меньше 30 В**.
Проверяется расчётное задание ЦАП, а не измеренный выходной ток.
Ручная калибровка не подменяет задание при активной команде пуска
или удерживаемом STOP.
Если очередной шаг рампы требует **строго больше 6 мА**, а свежее
CAN-напряжение меньше 30 В и в текущей попытке ещё не достигало порога,
в ЦАП сначала передаётся задание **6 мА**. Положение рампы удерживается.
УМП получает **3 секунды** на рост ЗПТ до 30 В: это 600 отправленных
токовых кадров при 200 Гц. Отсчёт начинается с первой отправки 6 мА;
команда инициализации ЦАП не расходует выдержку. До достижения порога
даже начальная уставка выше 6 мА ограничивается этим током. Уставки
ниже 6 мА сначала проходят обычный разгон до указанной границы.
При свежем ЗПТ **не меньше 30 В** разгон продолжается с сохранённого
положения без нового START. После подтверждённого роста напряжения
рабочая защита снова действует сразу: шаг выше 6 мА при ЗПТ ниже 30 В
не передаётся в ЦАП и не получает повторной стартовой выдержки.
Если за 3 секунды свежего обмена ЗПТ не достигло 30 В либо напряжение
упало после успешного пуска, вместо повышенного задания выполняется:
1. Снимается START, включается STOP, снимается разрешение RES_OUT_2.
2. Положение рампы обнуляется, передаётся код 4 мА без подмены калибровкой.
3. STOP остаётся включённым **1000 мс от момента его установки**.
4. Когда код 4 мА отправлен, прошла секунда и есть свежее ЗПТ,
снимается STOP, сразу выставляется START, затем разрешение.
5. Новая рампа начинается с нулевого положения с исходными уставками
`DAC_go`/`DAC_stop`; новая попытка получает собственные 3 секунды
ожидания при 6 мА, если ЗПТ ещё не достигло 30 В.
Первый START входит в настраиваемый лимит регистра **0x7D**: по умолчанию
**всего 5 попыток**, не 5 дополнительных. Через FC06 или штатный CAN можно
записать **1…65535**; ноль отклоняется без изменения предыдущей настройки.
После последней разрешённой неудачи удерживаются STOP и 4 мА, разрешение
снято, дополнительный START не выдаётся. Ошибка снимается командой `cUMPstart=0`;
затем можно подать новый пуск. Изменение лимита само по себе не снимает
ошибку и не выдаёт START. Уменьшение лимита во время STOP проверяется перед
следующей попыткой. Команда RESET имеет приоритет перед START.
Для задания пяти пусков используйте `FC06(0x007D, 5)` либо `FC06(0x507D, 5)`
в GAS-профиле M95M02. Чтение `0x7D` возвращает лимит; текущий счётчик остаётся
в слове 5 диагностического блока `FC03(0x1300, 8)`. Настройка сохраняется
штатной командой **Save**. Ноль из старой EEPROM заменяется на 5 при запуске;
ненулевое сохранённое значение трактуется как лимит.
Отпускание RESET с оставшимся START=1 само по себе не перезапускает УМП.
Выходами и рампой управляет один обработчик Timer1 (1 мс). Основной цикл
больше не формирует независимые фронты START/STOP. Расчёт/отправка ЦАП
остались с периодом 5 мс. Импульс START длится до 1000 мс, но защита
или RESET прекращают его раньше.
## Отсутствие CAN
Заводской таймаут из `Default_params` — **2000 мс**, диапазон настройки **1…60000 мс**. Если сохранённый параметр недопустим, `Setup_DAC_time` применяет **600 мс**; такой же запасной таймаут используется локально в `Load_runner`.
Свежесть подтверждается только получением нужного ЗПТ в полном
технологическом CAN-кадре с соответствующим битом маски. Другое
напряжение, сервисные запросы, команды и произвольные CAN-пакеты
таймаут не сбрасывают. До первого значения напряжение считается неизвестным.
При таймауте работающая рампа удерживает последнее положение и отправленный
код. Стартовая выдержка при 6 мА также приостанавливается и возобновляется
после нового выбранного ЗПТ. Попытка не считается неудачной, STOP по одному
таймауту не включается.
После свежего ЗПТ рост продолжается; если оно меньше 30 В при задании
больше 6 мА, выполняется защитный STOP. Если обмен исчез во время
сброса, STOP держится и после секунды — до свежего напряжения.
Первый пуск также ждёт свежего значения.
Настройка хранится в технологическом регистре `0x52` платы нагрузки.
Значение 0 в старом EEPROM заменяется на 600 мс при запуске.
Для сохранения изменения используйте штатную команду сохранения параметров.
## Диагностика и эмуляция в GUI
Во вкладке **Логгер УМП** добавлены:
- **Защита ЗПТ: прочитать** — состояние защиты, число попыток, напряжение.
- **Эмуляция: нет CAN** — получение своего ЗПТ игнорируется платой;
после заданного таймаута рампа удерживается.
- **Эмуляция: ЗПТ не растёт** — для проверки защиты используется 0 В,
хотя настоящие кадры продолжают поступать. Реальные напряжения в
журнале не подменяются. Этот режим действительно вызывает STOP/пуски.
- **Задать таймаут** — запись значения в плату с обязательным чтением обратно.
Кнопки эмуляции включаются после проверки сигнатуры прошивки. Их положение
меняется только после подтверждённого чтения обратно. Два режима можно
включать независимо; при отсутствии свежести проверка роста приостановлена.
Эмуляция живёт только в RAM, не сохраняется в EEPROM и выключена после
перезагрузки. GUI показывает активную эмуляцию отдельно от реального ЗПТ.
При онлайн-чтении GUI опрашивает защиту каждые 500 мс и показывает
**«НЕИСПРАВНОСТЬ: ЗПТ не достигло 30 В за 5 попыток»**.
Старые прошивки без блока защиты продолжают обычное онлайн-чтение;
эмуляция для них недоступна.
Технологический регистр `0x7C` — статус только для чтения;
`0x7D` — записываемый сохраняемый лимит попыток. Оба включены в быстрый CAN-цикл.
Статус: бит 0 — ошибка исчерпания настроенного лимита, бит 1 — нет свежего ЗПТ,
бит 2 — сброс перед повтором, бит 3 — работа рампы,
биты 4/5 — активная эмуляция отсутствия CAN/роста ЗПТ.
Локальный блок RTU и служебного CAN: FC03 `0x1300`, ровно 8 слов:
| Смещение | Значение |
|---|---|
| 0 | Сигнатура `0x5550` |
| 1 | Версия 1 |
| 2 | Эмуляция: бит 0 — нет CAN, бит 1 — нет роста |
| 3 | Таймаут, мс |
| 4 | Статус защиты |
| 5 | Число попыток |
| 6 | Последнее реальное CAN-напряжение, В |
| 7 | Возраст значения, мс; 65535 до первого значения |
FC06 допускает запись только `0x1302` (0…3) и `0x1303` (1…60000).
Диагностический обмен не обновляет возраст технологического напряжения.
## Проверки
`python tests/load_control/run_test.py` компилирует непосредственно
`DAC.c` с подменой GPIO/IRQ. Проверяются выбор ЗПТ, маски CAN, таймаут,
удержание кода, граница 30 В, порядок STOP/START, точная пауза 1000 мс,
лимиты 1, 2, 5, 7 и 65535 пусков, изменение лимита во время STOP, RESET, эмуляция и невозможность подмены 4 мА калибровкой.
Стартовые регрессии для адресов 5 и 6 проверяют отправку 6 мА вместо
мгновенного сброса, границу выдержки 3000 мс, успешный рост ЗПТ во время
ожидания, немедленную защиту после успешного пуска, повышенную начальную
уставку, паузу CAN и пропуск отсчёта при инициализации ЦАП.
GUI: `tests/test_ump_voltage_protection.py` в SETGUI плюс регрессии логгера.
Сборка: `build_logger.ps1 -OutputDirectory Bin/VoltageProtection
-ImageName UKSSTMS320F28335_voltage_protection`. Размер проверяется до
публикации BIN; для AT25256B предел — 32508 байт. В режиме оптимизации
функции разнесены по секциям, чтобы линкер удалял неиспользуемые функции.
Это проверки на компьютере. Физический ток 4 мА, уровни разрешения,
STOP и интервал 1 с нужно проверить на стенде с установленной прошивкой.

View File

@@ -1,4 +1,3 @@
/* Распределение памяти линкером и абсолютные границы загрузочного образа EEPROM. Русские пояснения сохранены в UTF-8. */
/*
// TI File $Revision: /main/10 $
// Checkin $Date: July 9, 2008 13:43:56 $
@@ -17,24 +16,24 @@
/* ======================================================
// For Code Composer Studio V2.2 and later
// ---------------------------------------
// In addition to this memory linker command file,
// add the header linker command file directly to the project.
// In addition to this memory linker command file,
// add the header linker command file directly to the project.
// The header linker command file is required to link the
// peripheral structures to the proper locations within
// peripheral structures to the proper locations within
// the memory map.
//
// The header linker files are found in <base>\DSP2833x_Headers\cmd
//
//
// For BIOS applications add: DSP2833x_Headers_BIOS.cmd
// For nonBIOS applications add: DSP2833x_Headers_nonBIOS.cmd
// For nonBIOS applications add: DSP2833x_Headers_nonBIOS.cmd
========================================================= */
/* ======================================================
// For Code Composer Studio prior to V2.2
// --------------------------------------
// 1) Use one of the following -l statements to include the
// 1) Use one of the following -l statements to include the
// header linker command file in the project. The header linker
// file is required to link the peripheral structures to the proper
// file is required to link the peripheral structures to the proper
// locations within the memory map */
/* Uncomment this line to include file only for non-BIOS applications */
@@ -44,209 +43,159 @@
/* -l DSP2833x_Headers_BIOS.cmd */
/* 2) In your project add the path to <base>\DSP2833x_headers\cmd to the
library search path under project->build options, linker tab,
library search path under project->build options, linker tab,
library search path (-i).
/*========================================================= */
/* Define the memory block start/length for the F28335
/* Define the memory block start/length for the F28335
PAGE 0 will be used to organize program sections
PAGE 1 will be used to organize data sections
Notes:
Notes:
Memory blocks on F28335 are uniform (ie same
physical memory) in both PAGE 0 and PAGE 1.
physical memory) in both PAGE 0 and PAGE 1.
That is the same memory region should not be
defined for both PAGE 0 and PAGE 1.
Doing so will result in corruption of program
and/or data.
Doing so will result in corruption of program
and/or data.
L0/L1/L2 and L3 memory blocks are mirrored - that is
they can be accessed in high memory or low memory.
For simplicity only one instance is used in this
linker file.
Contiguous SARAM memory blocks can be combined
if required to create a larger memory block.
linker file.
Contiguous SARAM memory blocks can be combined
if required to create a larger memory block.
*/
/* Serial EEPROM is NOT CPU-addressable RAM/Flash. Do not add a fake MEMORY
* region at address zero: SPI boot copies its table into the RAM areas below.
* Export its physical layout as absolute byte/word symbols for .map/debugging.
* The final SCI8 image size (including boot headers) is checked after hex2000. */
/* Подключает "Source/Internal/Include/eeprom_config.h": выбор профиля физически установленной EEPROM при сборке. */
#include "Source/Internal/Include/eeprom_config.h"
/* Подключает "include/balsam167_eeprom_layout.h": настройки и интерфейс balsam167_eeprom_layout. */
#include "include/balsam167_eeprom_layout.h"
/* Записывает _EEPROM_TOTAL_BYTES значением BALSAM167_EEPROM_BYTES; данные _EEPROM_TOTAL_BYTES. */
_EEPROM_TOTAL_BYTES = BALSAM167_EEPROM_BYTES;
/* Записывает _EEPROM_FIRMWARE_LIMIT_BYTES значением BALSAM167_EEPROM_FIRMWARE_BYTES; данные _EEPROM_FIRMWARE_LIMIT_BYTES. */
_EEPROM_FIRMWARE_LIMIT_BYTES = BALSAM167_EEPROM_FIRMWARE_BYTES;
/* Записывает _EEPROM_PARAMS_START_WORD значением BALSAM167_EEPROM_PARAMS_START_WORD; EEPROM PARAMS START слово. */
_EEPROM_PARAMS_START_WORD = BALSAM167_EEPROM_PARAMS_START_WORD;
/* Записывает _EEPROM_PARAMS_START_BYTE значением BALSAM167_EEPROM_FIRMWARE_BYTES; данные _EEPROM_PARAMS_START_BYTE. */
_EEPROM_PARAMS_START_BYTE = BALSAM167_EEPROM_FIRMWARE_BYTES;
/* Записывает _EEPROM_PARAMS_END_BYTE значением BALSAM167_EEPROM_PARAMS_END_WORD * 2; данные _EEPROM_PARAMS_END_BYTE. */
_EEPROM_PARAMS_END_BYTE = BALSAM167_EEPROM_PARAMS_END_WORD * 2;
/* Начинает описание физических блоков памяти для линкера. */
MEMORY
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
PAGE 0: /* Program Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */
PAGE 0: /* Program Memory */
/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
ZONE0 : origin = 0x004000, length = 0x001000 /* XINTF zone 0 */ /* Записывает origin значением 0x004000, length = 0x001000; данные origin. */
RAML0 : origin = 0x008000, length = 0x004000 /* on-chip RAM block L0 */ /* Записывает origin значением 0x008000, length = 0x004000; данные origin. */
ZONE0 : origin = 0x004000, length = 0x001000 /* XINTF zone 0 */
RAML0 : origin = 0x008000, length = 0x004000 /* on-chip RAM block L0 */
/* RAML1 : origin = 0x009000, length = 0x001000 /* on-chip RAM block L1 */
/* RAML2 : origin = 0x00A000, length = 0x001000 /* on-chip RAM block L2 */
// RAML3 : origin = 0x00B000, length = 0x001000 /* on-chip RAM block L3 */
RAML4 : origin = 0x00C000, length = 0x001000 /* on-chip RAM block L1 */ /* Записывает origin значением 0x00C000, length = 0x001000; данные origin. */
RAML4 : origin = 0x00C000, length = 0x001000 /* on-chip RAM block L1 */
ZONE6 : origin = 0x0100000, length = 0x100000 /* XINTF zone 6 */ /* Записывает origin значением 0x0100000, length = 0x100000; данные origin. */
FLASHH : origin = 0x300000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x300000, length = 0x008000; данные origin. */
FLASHG : origin = 0x308000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x308000, length = 0x008000; данные origin. */
FLASHF : origin = 0x310000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x310000, length = 0x008000; данные origin. */
FLASHE : origin = 0x318000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x318000, length = 0x008000; данные origin. */
FLASHD : origin = 0x320000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x320000, length = 0x008000; данные origin. */
FLASHC : origin = 0x328000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x328000, length = 0x008000; данные origin. */
FLASHA : origin = 0x338000, length = 0x007F80 /* on-chip FLASH */ /* Записывает origin значением 0x338000, length = 0x007F80; данные origin. */
CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */ /* Записывает origin значением 0x33FF80, length = 0x000076; данные origin. */
BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */ /* Записывает origin значением 0x33FFF6, length = 0x000002; данные origin. */
CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */ /* Записывает origin значением 0x33FFF8, length = 0x000008; данные origin. */
OTP : origin = 0x380400, length = 0x000400 /* on-chip OTP */ /* Записывает origin значением 0x380400, length = 0x000400; данные origin. */
ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved memory */ /* Записывает origin значением 0x380080, length = 0x000009; данные origin. */
ZONE6 : origin = 0x0100000, length = 0x100000 /* XINTF zone 6 */
FLASHH : origin = 0x300000, length = 0x008000 /* on-chip FLASH */
FLASHG : origin = 0x308000, length = 0x008000 /* on-chip FLASH */
FLASHF : origin = 0x310000, length = 0x008000 /* on-chip FLASH */
FLASHE : origin = 0x318000, length = 0x008000 /* on-chip FLASH */
FLASHD : origin = 0x320000, length = 0x008000 /* on-chip FLASH */
FLASHC : origin = 0x328000, length = 0x008000 /* on-chip FLASH */
FLASHA : origin = 0x338000, length = 0x007F80 /* on-chip FLASH */
CSM_RSVD : origin = 0x33FF80, length = 0x000076 /* Part of FLASHA. Program with all 0x0000 when CSM is in use. */
BEGIN : origin = 0x33FFF6, length = 0x000002 /* Part of FLASHA. Used for "boot to Flash" bootloader mode. */
CSM_PWL : origin = 0x33FFF8, length = 0x000008 /* Part of FLASHA. CSM password locations in FLASHA */
OTP : origin = 0x380400, length = 0x000400 /* on-chip OTP */
ADC_CAL : origin = 0x380080, length = 0x000009 /* ADC_cal function in Reserved memory */
IQTABLES : origin = 0x3FE000, length = 0x000b50 /* IQ Math Tables in Boot ROM */
IQTABLES2 : origin = 0x3FEB50, length = 0x00008c /* IQ Math Tables in Boot ROM */
FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* FPU Tables in Boot ROM */
ROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */
RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */
VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */
IQTABLES : origin = 0x3FE000, length = 0x000b50 /* IQ Math Tables in Boot ROM */ /* Записывает origin значением 0x3FE000, length = 0x000b50; данные origin. */
IQTABLES2 : origin = 0x3FEB50, length = 0x00008c /* IQ Math Tables in Boot ROM */ /* Записывает origin значением 0x3FEB50, length = 0x00008c; данные origin. */
FPUTABLES : origin = 0x3FEBDC, length = 0x0006A0 /* FPU Tables in Boot ROM */ /* Записывает origin значением 0x3FEBDC, length = 0x0006A0; данные origin. */
ROM : origin = 0x3FF27C, length = 0x000D44 /* Boot ROM */ /* Записывает origin значением 0x3FF27C, length = 0x000D44; данные origin. */
RESET : origin = 0x3FFFC0, length = 0x000002 /* part of boot ROM */ /* Записывает origin значением 0x3FFFC0, length = 0x000002; данные origin. */
VECTORS : origin = 0x3FFFC2, length = 0x00003E /* part of boot ROM */ /* Записывает origin значением 0x3FFFC2, length = 0x00003E; данные origin. */
PAGE 1 : /* Data Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */
PAGE 1 : /* Data Memory */
/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
/* Registers remain on PAGE1 */
BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */ /* Записывает origin значением 0x000000, length = 0x000050; данные origin. */
RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */ /* Записывает origin значением 0x000050, length = 0x0003B0; данные origin. */
RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */ /* Записывает origin значением 0x000400, length = 0x000400; данные origin. */
RAML5 : origin = 0x00D000, length = 0x003000 /* on-chip RAM block L1 */ /* Записывает origin значением 0x00D000, length = 0x003000; данные origin. */
BOOT_RSVD : origin = 0x000000, length = 0x000050 /* Part of M0, BOOT rom will use this for stack */
RAMM0 : origin = 0x000050, length = 0x0003B0 /* on-chip RAM block M0 */
RAMM1 : origin = 0x000400, length = 0x000400 /* on-chip RAM block M1 */
RAML5 : origin = 0x00D000, length = 0x003000 /* on-chip RAM block L1 */
/* RAML6 : origin = 0x00E000, length = 0x001000 /* on-chip RAM block L1 */
/* RAML7 : origin = 0x00F000, length = 0x001000 /* on-chip RAM block L1 */
ZONE7A : origin = 0x0200000, length = 0x00FC00 /* XINTF zone 7 - program space */ /* Записывает origin значением 0x0200000, length = 0x00FC00; данные origin. */
ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */ /* Записывает origin значением 0x20FC00, length = 0x000400; данные origin. */
FLASHB : origin = 0x330000, length = 0x008000 /* on-chip FLASH */ /* Записывает origin значением 0x330000, length = 0x008000; данные origin. */
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
ZONE7A : origin = 0x0200000, length = 0x00FC00 /* XINTF zone 7 - program space */
ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */
FLASHB : origin = 0x330000, length = 0x008000 /* on-chip FLASH */
}
/* Allocate sections to memory blocks.
Note:
codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
execution when booting to flash
ramfuncs user defined section to store functions that will be copied from Flash into RAM
*/
/* Начинает описание размещения секций объектных файлов для линкера. */
*/
SECTIONS
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Allocate program areas: */
/* Keep initialization tables out of the code RAM block. */
/* Записывает PAGE значением 0; данные PAGE. */
.cinit : > RAML4 PAGE = 0
/* Записывает PAGE значением 0; данные PAGE. */
.cinit : > RAML0 PAGE = 0
.pinit : > RAML0 PAGE = 0
/* Записывает PAGE значением 0; данные PAGE. */
.text : > RAML0 PAGE = 0
/* Записывает PAGE значением 0; данные PAGE. */
codestart : > BEGIN PAGE = 0
/* Записывает LOAD значением RAML4,; данные LOAD. */
ramfuncs : LOAD = RAML4,
/* Записывает RUN значением RAML4,; данные RUN. */
RUN = RAML4,
/* Вызывает LOAD_START с аргументами (_RamfuncsLoadStart), в текущей последовательности операций. */
ramfuncs : LOAD = RAML4,
RUN = RAML4,
LOAD_START(_RamfuncsLoadStart),
/* Вызывает LOAD_END с аргументами (_RamfuncsLoadEnd), в текущей последовательности операций. */
LOAD_END(_RamfuncsLoadEnd),
/* Вызывает RUN_START с аргументами (_RamfuncsRunStart), в текущей последовательности операций. */
RUN_START(_RamfuncsRunStart),
/* Записывает PAGE значением 0; данные PAGE. */
PAGE = 0
/* Записывает PAGE значением 0; данные PAGE. */
csmpasswds : > CSM_PWL PAGE = 0
/* Записывает PAGE значением 0; данные PAGE. */
csm_rsvd : > CSM_RSVD PAGE = 0
/* Allocate uninitalized data sections: */
/* Записывает PAGE значением 1; данные PAGE. */
.stack : > RAMM1 PAGE = 1
/* Записывает PAGE значением 1; данные PAGE. */
.ebss : > RAML5 PAGE = 1
/* Записывает PAGE значением 0; данные PAGE. */
.esysmem : > RAML0 PAGE = 0
/* Записывает PAGE значением 1; данные PAGE. */
.logg : > ZONE7A PAGE = 1
/* Initalized sections go in Flash */
/* For SDFlash to program these, they must be allocated to page 0 */
/* Записывает PAGE значением 0; данные PAGE. */
.econst : > RAML4 PAGE = 0
/* Записывает PAGE значением 0; данные PAGE. */
.switch : > RAML4 PAGE = 0
.switch : > RAML4 PAGE = 0
/* Allocate IQ math areas: */
IQmath : > FLASHC PAGE = 0 /* Math Code */ /* Записывает PAGE значением 0; данные PAGE. */
/* Записывает PAGE значением 0, TYPE = NOLOAD; данные PAGE. */
IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD
IQmath : > FLASHC PAGE = 0 /* Math Code */
IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD
/* Uncomment the section below if calling the IQNexp() or IQexp()
functions from the IQMath.lib library in order to utilize the
relevant IQ Math table in Boot ROM (This saves space and Boot ROM
functions from the IQMath.lib library in order to utilize the
relevant IQ Math table in Boot ROM (This saves space and Boot ROM
is 1 wait-state). If this section is not uncommented, IQmathTables2
will be loaded into other memory (SARAM, Flash, etc.) and will take
up space, but 0 wait-state is possible.
*/
/*
IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
IQmathTables2 : > IQTABLES2, PAGE = 0, TYPE = NOLOAD
{
IQmath.lib<IQNexpTable.obj> (IQmathTablesRam)
}
*/
/* Записывает PAGE значением 0, TYPE = NOLOAD; данные PAGE. */
FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
/* Allocate DMA-accessible RAM sections: * /
DMARAML4 : > RAML4, PAGE = 1
DMARAML5 : > RAML5, PAGE = 1
/* DMARAML6 : > RAML6, PAGE = 1
DMARAML7 : > RAML7, PAGE = 1
*/
*/
/* Allocate 0x400 of XINTF Zone 7 to storing data */
/* Записывает PAGE значением 1; данные PAGE. */
ZONE7DATA : > ZONE7B, PAGE = 1
/* .reset is a standard section used by the compiler. It contains the */
/* .reset is a standard section used by the compiler. It contains the */
/* the address of the start of _c_int00 for C Code. /*
/* When using the boot ROM this section and the CPU vector */
/* table is not needed. Thus the default type is set here to */
/* DSECT */
/* Записывает PAGE значением 0, TYPE = DSECT; данные PAGE. */
/* DSECT */
.reset : > RESET, PAGE = 0, TYPE = DSECT
/* Записывает PAGE значением 0, TYPE = DSECT; данные PAGE. */
vectors : > VECTORS PAGE = 0, TYPE = DSECT
/* Allocate ADC_cal function (pre-programmed by factory into TI reserved memory) */
/* Записывает load значением ADC_CAL, PAGE = 0, TYPE = NOLOAD; данные load. */
.adc_cal : load = ADC_CAL, PAGE = 0, TYPE = NOLOAD
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/*

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание DefaultIsr для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/1 $
// Checkin $Date: August 18, 2006 13:45:37 $
//###########################################################################
@@ -12,223 +11,135 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Начинает условие: DSP2833x_DEFAULT_ISR_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef DSP2833x_DEFAULT_ISR_H
/* Определяет защитный символ или переключатель DSP2833x_DEFAULT_ISR_H для последующей компиляции. */
#define DSP2833x_DEFAULT_ISR_H
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
//---------------------------------------------------------------------------
// Default Interrupt Service Routine Declarations:
//
// The following function prototypes are for the
//
// The following function prototypes are for the
// default ISR routines used with the default PIE vector table.
// This default vector table is found in the DSP2833x_PieVect.h
// file.
// This default vector table is found in the DSP2833x_PieVect.h
// file.
//
// Non-Peripheral Interrupts:
/* Объявляет обработчик INT13_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void INT13_ISR(void); // XINT13 or CPU-Timer 1
/* Объявляет обработчик INT14_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void INT14_ISR(void); // CPU-Timer2
/* Объявляет обработчик DATALOG_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DATALOG_ISR(void); // Datalogging interrupt
/* Объявляет обработчик RTOSINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void RTOSINT_ISR(void); // RTOS interrupt
/* Объявляет обработчик EMUINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EMUINT_ISR(void); // Emulation interrupt
/* Объявляет обработчик NMI_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void NMI_ISR(void); // Non-maskable interrupt
/* Объявляет обработчик ILLEGAL_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ILLEGAL_ISR(void); // Illegal operation TRAP
/* Объявляет обработчик USER1_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER1_ISR(void); // User Defined trap 1
/* Объявляет обработчик USER2_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER2_ISR(void); // User Defined trap 2
/* Объявляет обработчик USER3_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER3_ISR(void); // User Defined trap 3
/* Объявляет обработчик USER4_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER4_ISR(void); // User Defined trap 4
/* Объявляет обработчик USER5_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER5_ISR(void); // User Defined trap 5
/* Объявляет обработчик USER6_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER6_ISR(void); // User Defined trap 6
/* Объявляет обработчик USER7_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER7_ISR(void); // User Defined trap 7
/* Объявляет обработчик USER8_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER8_ISR(void); // User Defined trap 8
/* Объявляет обработчик USER9_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER9_ISR(void); // User Defined trap 9
/* Объявляет обработчик USER10_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER10_ISR(void); // User Defined trap 10
/* Объявляет обработчик USER11_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER11_ISR(void); // User Defined trap 11
/* Объявляет обработчик USER12_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER12_ISR(void); // User Defined trap 12
// Group 1 PIE Interrupt Service Routines:
/* Объявляет обработчик SEQ1INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SEQ1INT_ISR(void); // ADC Sequencer 1 ISR
/* Объявляет обработчик SEQ2INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SEQ2INT_ISR(void); // ADC Sequencer 2 ISR
/* Объявляет обработчик XINT1_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT1_ISR(void); // External interrupt 1
/* Объявляет обработчик XINT2_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT2_ISR(void); // External interrupt 2
/* Объявляет обработчик ADCINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ADCINT_ISR(void); // ADC
/* Объявляет обработчик TINT0_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void TINT0_ISR(void); // Timer 0
/* Объявляет обработчик WAKEINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void WAKEINT_ISR(void); // WD
// Group 2 PIE Interrupt Service Routines:
/* Объявляет обработчик EPWM1_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM1_TZINT_ISR(void); // EPWM-1
/* Объявляет обработчик EPWM2_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM2_TZINT_ISR(void); // EPWM-2
/* Объявляет обработчик EPWM3_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM3_TZINT_ISR(void); // EPWM-3
/* Объявляет обработчик EPWM4_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM4_TZINT_ISR(void); // EPWM-4
/* Объявляет обработчик EPWM5_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM5_TZINT_ISR(void); // EPWM-5
/* Объявляет обработчик EPWM6_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM6_TZINT_ISR(void); // EPWM-6
// Group 3 PIE Interrupt Service Routines:
/* Объявляет обработчик EPWM1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM1_INT_ISR(void); // EPWM-1
/* Объявляет обработчик EPWM2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM2_INT_ISR(void); // EPWM-2
/* Объявляет обработчик EPWM3_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM3_INT_ISR(void); // EPWM-3
/* Объявляет обработчик EPWM4_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM4_INT_ISR(void); // EPWM-4
/* Объявляет обработчик EPWM5_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM5_INT_ISR(void); // EPWM-5
/* Объявляет обработчик EPWM6_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM6_INT_ISR(void); // EPWM-6
// Group 4 PIE Interrupt Service Routines:
/* Объявляет обработчик ECAP1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP1_INT_ISR(void); // ECAP-1
/* Объявляет обработчик ECAP2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP2_INT_ISR(void); // ECAP-2
/* Объявляет обработчик ECAP3_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP3_INT_ISR(void); // ECAP-3
/* Объявляет обработчик ECAP4_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP4_INT_ISR(void); // ECAP-4
/* Объявляет обработчик ECAP5_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP5_INT_ISR(void); // ECAP-5
/* Объявляет обработчик ECAP6_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP6_INT_ISR(void); // ECAP-6
// Group 5 PIE Interrupt Service Routines:
/* Объявляет обработчик EQEP1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EQEP1_INT_ISR(void); // EQEP-1
/* Объявляет обработчик EQEP2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EQEP2_INT_ISR(void); // EQEP-2
// Group 6 PIE Interrupt Service Routines:
/* Объявляет обработчик SPIRXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SPIRXINTA_ISR(void); // SPI-A
/* Объявляет обработчик SPITXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SPITXINTA_ISR(void); // SPI-A
/* Объявляет обработчик MRINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void MRINTA_ISR(void); // McBSP-A
/* Объявляет обработчик MXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void MXINTA_ISR(void); // McBSP-A
/* Объявляет обработчик MRINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void MRINTB_ISR(void); // McBSP-B
/* Объявляет обработчик MXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void MXINTB_ISR(void); // McBSP-B
// Group 7 PIE Interrupt Service Routines:
/* Объявляет обработчик DINTCH1_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH1_ISR(void); // DMA-Channel 1
/* Объявляет обработчик DINTCH2_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH2_ISR(void); // DMA-Channel 2
/* Объявляет обработчик DINTCH3_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH3_ISR(void); // DMA-Channel 3
/* Объявляет обработчик DINTCH4_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH4_ISR(void); // DMA-Channel 4
/* Объявляет обработчик DINTCH5_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH5_ISR(void); // DMA-Channel 5
/* Объявляет обработчик DINTCH6_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH6_ISR(void); // DMA-Channel 6
// Group 8 PIE Interrupt Service Routines:
/* Объявляет обработчик I2CINT1A_ISR; обслуживает источник прерывания и его аппаратные флаги. */
// Group 8 PIE Interrupt Service Routines:
interrupt void I2CINT1A_ISR(void); // I2C-A
/* Объявляет обработчик I2CINT2A_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void I2CINT2A_ISR(void); // I2C-A
/* Объявляет обработчик SCIRXINTC_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCIRXINTC_ISR(void); // SCI-C
/* Объявляет обработчик SCITXINTC_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCITXINTC_ISR(void); // SCI-C
// Group 9 PIE Interrupt Service Routines:
/* Объявляет обработчик SCIRXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCIRXINTA_ISR(void); // SCI-A
/* Объявляет обработчик SCITXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCITXINTA_ISR(void); // SCI-A
/* Объявляет обработчик SCIRXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCIRXINTB_ISR(void); // SCI-B
/* Объявляет обработчик SCITXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCITXINTB_ISR(void); // SCI-B
/* Объявляет обработчик ECAN0INTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAN0INTA_ISR(void); // eCAN-A
/* Объявляет обработчик ECAN1INTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAN1INTA_ISR(void); // eCAN-A
/* Объявляет обработчик ECAN0INTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAN0INTB_ISR(void); // eCAN-B
/* Объявляет обработчик ECAN1INTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAN1INTB_ISR(void); // eCAN-B
// Group 10 PIE Interrupt Service Routines:
// Group 11 PIE Interrupt Service Routines:
// Group 11 PIE Interrupt Service Routines:
// Group 12 PIE Interrupt Service Routines:
/* Объявляет обработчик XINT3_ISR; обслуживает источник прерывания и его аппаратные флаги. */
// Group 12 PIE Interrupt Service Routines:
interrupt void XINT3_ISR(void); // External interrupt 3
/* Объявляет обработчик XINT4_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT4_ISR(void); // External interrupt 4
/* Объявляет обработчик XINT5_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT5_ISR(void); // External interrupt 5
/* Объявляет обработчик XINT6_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT6_ISR(void); // External interrupt 6
/* Объявляет обработчик XINT7_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT7_ISR(void); // External interrupt 7
/* Объявляет обработчик LVF_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void LVF_ISR(void); // Latched overflow flag
/* Объявляет обработчик LUF_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void LUF_ISR(void); // Latched underflow flag
// Catch-all for Reserved Locations For testing purposes:
/* Объявляет интерфейс функции PIE_RESERVED; реализация вызывается через этот прототип. */
interrupt void PIE_RESERVED(void); // Reserved for test
/* Объявляет обработчик rsvd_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void rsvd_ISR(void); // for test
/* Объявляет обработчик INT_NOTUSED_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void INT_NOTUSED_ISR(void); // for unused interrupts
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif /* extern "C" */
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // end of DSP2833x_DEFAULT_ISR_H definition
//===========================================================================

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание Dma_defines для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/2 $
// Checkin $Date: August 14, 2007 16:32:29 $
//###########################################################################
@@ -12,112 +11,69 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Начинает условие: DSP2833x_DMA_DEFINES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef DSP2833x_DMA_DEFINES_H
/* Определяет защитный символ или переключатель DSP2833x_DMA_DEFINES_H для последующей компиляции. */
#define DSP2833x_DMA_DEFINES_H
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// MODE
//==========================
// PERINTSEL bits
/* Задаёт DMA_SEQ1INT = 1; DMA 1 INT. */
#define DMA_SEQ1INT 1
/* Задаёт DMA_SEQ2INT = 2; DMA 2 INT. */
#define DMA_SEQ2INT 2
/* Задаёт DMA_XINT1 = 3; DMA 1. */
#define DMA_XINT1 3
/* Задаёт DMA_XINT2 = 4; DMA 2. */
#define DMA_XINT2 4
/* Задаёт DMA_XINT3 = 5; DMA 3. */
#define DMA_XINT3 5
/* Задаёт DMA_XINT4 = 6; DMA 4. */
#define DMA_XINT4 6
/* Задаёт DMA_XINT5 = 7; DMA 5. */
#define DMA_XINT5 7
/* Задаёт DMA_XINT6 = 8; DMA 6. */
#define DMA_XINT6 8
/* Задаёт DMA_XINT7 = 9; DMA 7. */
#define DMA_XINT7 9
/* Задаёт DMA_XINT13 = 10; DMA 13. */
#define DMA_XINT13 10
/* Задаёт DMA_TINT0 = 11; DMA 0. */
#define DMA_TINT0 11
/* Задаёт DMA_TINT1 = 12; DMA 1. */
#define DMA_TINT1 12
/* Задаёт DMA_TINT2 = 13; DMA 2. */
#define DMA_TINT2 13
/* Задаёт DMA_MXEVTA = 14; DMA MXEVTA. */
#define DMA_MXEVTA 14
/* Задаёт DMA_MREVTA = 15; DMA MREVTA. */
#define DMA_MREVTA 15
/* Задаёт DMA_MXREVTB = 16; DMA MXREVTB. */
#define DMA_MXREVTB 16
/* Задаёт DMA_MREVTB = 17; DMA MREVTB. */
#define DMA_MREVTB 17
// OVERINTE bit
/* Задаёт OVRFLOW_DISABLE = 0x0; OVRFLOW запрет. */
#define OVRFLOW_DISABLE 0x0
/* Задаёт OVEFLOW_ENABLE = 0x1; OVEFLOW разрешение. */
#define OVEFLOW_ENABLE 0x1
// PERINTE bit
/* Задаёт PERINT_DISABLE = 0x0; PERINT запрет. */
#define PERINT_DISABLE 0x0
/* Задаёт PERINT_ENABLE = 0x1; PERINT разрешение. */
#define PERINT_ENABLE 0x1
// CHINTMODE bits
/* Задаёт CHINT_BEGIN = 0x0; данные CHINT_BEGIN. */
#define CHINT_BEGIN 0x0
/* Задаёт CHINT_END = 0x1; данные CHINT_END. */
#define CHINT_END 0x1
// ONESHOT bits
/* Задаёт ONESHOT_DISABLE = 0x0; ONESHOT запрет. */
#define ONESHOT_DISABLE 0x0
/* Задаёт ONESHOT_ENABLE = 0x1; ONESHOT разрешение. */
#define ONESHOT_ENABLE 0x1
// CONTINOUS bit
/* Задаёт CONT_DISABLE = 0x0; CONT запрет. */
#define CONT_DISABLE 0x0
/* Задаёт CONT_ENABLE = 0x1; CONT разрешение. */
#define CONT_ENABLE 0x1
// SYNCE bit
/* Задаёт SYNC_DISABLE = 0x0; синхронизация запрет. */
#define SYNC_DISABLE 0x0
/* Задаёт SYNC_ENABLE = 0x1; синхронизация разрешение. */
#define SYNC_ENABLE 0x1
// SYNCSEL bit
/* Задаёт SYNC_SRC = 0x0; синхронизация SRC. */
#define SYNC_SRC 0x0
/* Задаёт SYNC_DST = 0x1; синхронизация DST. */
#define SYNC_DST 0x1
// DATASIZE bit
/* Задаёт SIXTEEN_BIT = 0x0; SIXTEEN бит. */
#define SIXTEEN_BIT 0x0
/* Задаёт THIRTYTWO_BIT = 0x1; THIRTYTWO бит. */
#define THIRTYTWO_BIT 0x1
// CHINTE bit
/* Задаёт CHINT_DISABLE = 0x0; CHINT запрет. */
#define CHINT_DISABLE 0x0
/* Задаёт CHINT_ENABLE = 0x1; CHINT разрешение. */
#define CHINT_ENABLE 0x1
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif /* extern "C" */
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // - end of DSP2833x_EPWM_DEFINES_H
//===========================================================================

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание EPwm_defines для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/1 $
// Checkin $Date: August 18, 2006 13:45:39 $
//###########################################################################
@@ -6,212 +5,135 @@
// FILE: DSP2833x_EPwm_defines.h
//
// TITLE: #defines used in ePWM examples examples
//
//
//###########################################################################
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
// $Release Date: August 1, 2008 $
//###########################################################################
/* Начинает условие: DSP2833x_EPWM_DEFINES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef DSP2833x_EPWM_DEFINES_H
/* Определяет защитный символ или переключатель DSP2833x_EPWM_DEFINES_H для последующей компиляции. */
#define DSP2833x_EPWM_DEFINES_H
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// TBCTL (Time-Base Control)
//==========================
// CTRMODE bits
/* Задаёт TB_COUNT_UP = 0x0; TB число UP. */
#define TB_COUNT_UP 0x0
/* Задаёт TB_COUNT_DOWN = 0x1; TB число DOWN. */
#define TB_COUNT_DOWN 0x1
/* Задаёт TB_COUNT_UPDOWN = 0x2; TB число UPDOWN. */
#define TB_COUNT_UPDOWN 0x2
/* Задаёт TB_FREEZE = 0x3; данные TB_FREEZE. */
#define TB_FREEZE 0x3
// PHSEN bit
/* Задаёт TB_DISABLE = 0x0; TB запрет. */
#define TB_DISABLE 0x0
/* Задаёт TB_ENABLE = 0x1; TB разрешение. */
#define TB_ENABLE 0x1
// PRDLD bit
/* Задаёт TB_SHADOW = 0x0; данные TB_SHADOW. */
#define TB_SHADOW 0x0
/* Задаёт TB_IMMEDIATE = 0x1; данные TB_IMMEDIATE. */
#define TB_IMMEDIATE 0x1
// SYNCOSEL bits
/* Задаёт TB_SYNC_IN = 0x0; TB синхронизация IN. */
#define TB_SYNC_IN 0x0
/* Задаёт TB_CTR_ZERO = 0x1; данные TB_CTR_ZERO. */
#define TB_CTR_ZERO 0x1
/* Задаёт TB_CTR_CMPB = 0x2; данные TB_CTR_CMPB. */
#define TB_CTR_CMPB 0x2
/* Задаёт TB_SYNC_DISABLE = 0x3; TB синхронизация запрет. */
#define TB_SYNC_DISABLE 0x3
// HSPCLKDIV and CLKDIV bits
/* Задаёт TB_DIV1 = 0x0; данные TB_DIV1. */
#define TB_DIV1 0x0
/* Задаёт TB_DIV2 = 0x1; данные TB_DIV2. */
#define TB_DIV2 0x1
/* Задаёт TB_DIV4 = 0x2; данные TB_DIV4. */
#define TB_DIV4 0x2
// PHSDIR bit
/* Задаёт TB_DOWN = 0x0; данные TB_DOWN. */
#define TB_DOWN 0x0
/* Задаёт TB_UP = 0x1; данные TB_UP. */
#define TB_UP 0x1
// CMPCTL (Compare Control)
//==========================
// LOADAMODE and LOADBMODE bits
/* Задаёт CC_CTR_ZERO = 0x0; данные CC_CTR_ZERO. */
#define CC_CTR_ZERO 0x0
/* Задаёт CC_CTR_PRD = 0x1; данные CC_CTR_PRD. */
#define CC_CTR_PRD 0x1
/* Задаёт CC_CTR_ZERO_PRD = 0x2; данные CC_CTR_ZERO_PRD. */
#define CC_CTR_ZERO_PRD 0x2
/* Задаёт CC_LD_DISABLE = 0x3; CC LD запрет. */
#define CC_LD_DISABLE 0x3
// SHDWAMODE and SHDWBMODE bits
/* Задаёт CC_SHADOW = 0x0; данные CC_SHADOW. */
#define CC_SHADOW 0x0
/* Задаёт CC_IMMEDIATE = 0x1; данные CC_IMMEDIATE. */
#define CC_IMMEDIATE 0x1
// AQCTLA and AQCTLB (Action Qualifier Control)
//=============================================
// ZRO, PRD, CAU, CAD, CBU, CBD bits
/* Задаёт AQ_NO_ACTION = 0x0; данные AQ_NO_ACTION. */
#define AQ_NO_ACTION 0x0
/* Задаёт AQ_CLEAR = 0x1; AQ очистка. */
#define AQ_CLEAR 0x1
/* Задаёт AQ_SET = 0x2; AQ установка. */
#define AQ_SET 0x2
/* Задаёт AQ_TOGGLE = 0x3; данные AQ_TOGGLE. */
#define AQ_TOGGLE 0x3
// DBCTL (Dead-Band Control)
//==========================
// OUT MODE bits
/* Задаёт DB_DISABLE = 0x0; DB запрет. */
#define DB_DISABLE 0x0
/* Задаёт DBA_ENABLE = 0x1; DBA разрешение. */
#define DBA_ENABLE 0x1
/* Задаёт DBB_ENABLE = 0x2; DBB разрешение. */
#define DBB_ENABLE 0x2
/* Задаёт DB_FULL_ENABLE = 0x3; DB FULL разрешение. */
#define DB_FULL_ENABLE 0x3
// POLSEL bits
/* Задаёт DB_ACTV_HI = 0x0; данные DB_ACTV_HI. */
#define DB_ACTV_HI 0x0
/* Задаёт DB_ACTV_LOC = 0x1; данные DB_ACTV_LOC. */
#define DB_ACTV_LOC 0x1
/* Задаёт DB_ACTV_HIC = 0x2; данные DB_ACTV_HIC. */
#define DB_ACTV_HIC 0x2
/* Задаёт DB_ACTV_LO = 0x3; данные DB_ACTV_LO. */
#define DB_ACTV_LO 0x3
// IN MODE
/* Задаёт DBA_ALL = 0x0; данные DBA_ALL. */
#define DBA_ALL 0x0
/* Задаёт DBB_RED_DBA_FED = 0x1; данные DBB_RED_DBA_FED. */
#define DBB_RED_DBA_FED 0x1
/* Задаёт DBA_RED_DBB_FED = 0x2; данные DBA_RED_DBB_FED. */
#define DBA_RED_DBB_FED 0x2
/* Задаёт DBB_ALL = 0x3; данные DBB_ALL. */
#define DBB_ALL 0x3
// CHPCTL (chopper control)
//==========================
// CHPEN bit
/* Задаёт CHP_DISABLE = 0x0; CHP запрет. */
#define CHP_DISABLE 0x0
/* Задаёт CHP_ENABLE = 0x1; CHP разрешение. */
#define CHP_ENABLE 0x1
// CHPFREQ bits
/* Задаёт CHP_DIV1 = 0x0; данные CHP_DIV1. */
#define CHP_DIV1 0x0
/* Задаёт CHP_DIV2 = 0x1; данные CHP_DIV2. */
#define CHP_DIV2 0x1
/* Задаёт CHP_DIV3 = 0x2; данные CHP_DIV3. */
#define CHP_DIV3 0x2
/* Задаёт CHP_DIV4 = 0x3; данные CHP_DIV4. */
#define CHP_DIV4 0x3
/* Задаёт CHP_DIV5 = 0x4; данные CHP_DIV5. */
#define CHP_DIV5 0x4
/* Задаёт CHP_DIV6 = 0x5; данные CHP_DIV6. */
#define CHP_DIV6 0x5
/* Задаёт CHP_DIV7 = 0x6; данные CHP_DIV7. */
#define CHP_DIV7 0x6
/* Задаёт CHP_DIV8 = 0x7; данные CHP_DIV8. */
#define CHP_DIV8 0x7
// CHPDUTY bits
/* Задаёт CHP1_8TH = 0x0; данные CHP1_8TH. */
#define CHP1_8TH 0x0
/* Задаёт CHP2_8TH = 0x1; данные CHP2_8TH. */
#define CHP2_8TH 0x1
/* Задаёт CHP3_8TH = 0x2; данные CHP3_8TH. */
#define CHP3_8TH 0x2
/* Задаёт CHP4_8TH = 0x3; данные CHP4_8TH. */
#define CHP4_8TH 0x3
/* Задаёт CHP5_8TH = 0x4; данные CHP5_8TH. */
#define CHP5_8TH 0x4
/* Задаёт CHP6_8TH = 0x5; данные CHP6_8TH. */
#define CHP6_8TH 0x5
/* Задаёт CHP7_8TH = 0x6; данные CHP7_8TH. */
#define CHP7_8TH 0x6
// TZSEL (Trip Zone Select)
//==========================
// CBCn and OSHTn bits
/* Задаёт TZ_DISABLE = 0x0; TZ запрет. */
#define TZ_DISABLE 0x0
/* Задаёт TZ_ENABLE = 0x1; TZ разрешение. */
#define TZ_ENABLE 0x1
// TZCTL (Trip Zone Control)
//==========================
// TZA and TZB bits
/* Задаёт TZ_HIZ = 0x0; данные TZ_HIZ. */
#define TZ_HIZ 0x0
/* Задаёт TZ_FORCE_HI = 0x1; TZ принудительная установка HI. */
#define TZ_FORCE_HI 0x1
/* Задаёт TZ_FORCE_LO = 0x2; TZ принудительная установка LO. */
#define TZ_FORCE_LO 0x2
/* Задаёт TZ_NO_CHANGE = 0x3; данные TZ_NO_CHANGE. */
#define TZ_NO_CHANGE 0x3
// ETSEL (Event Trigger Select)
//=============================
/* Задаёт ET_CTR_ZERO = 0x1; данные ET_CTR_ZERO. */
#define ET_CTR_ZERO 0x1
/* Задаёт ET_CTR_PRD = 0x2; данные ET_CTR_PRD. */
#define ET_CTR_PRD 0x2
/* Задаёт ET_CTRU_CMPA = 0x4; данные ET_CTRU_CMPA. */
#define ET_CTRU_CMPA 0x4
/* Задаёт ET_CTRD_CMPA = 0x5; данные ET_CTRD_CMPA. */
#define ET_CTRD_CMPA 0x5
/* Задаёт ET_CTRU_CMPB = 0x6; данные ET_CTRU_CMPB. */
#define ET_CTRU_CMPB 0x6
/* Задаёт ET_CTRD_CMPB = 0x7; данные ET_CTRD_CMPB. */
#define ET_CTRD_CMPB 0x7
// ETPS (Event Trigger Pre-scale)
//===============================
// INTPRD, SOCAPRD, SOCBPRD bits
/* Задаёт ET_DISABLE = 0x0; ET запрет. */
#define ET_DISABLE 0x0
/* Задаёт ET_1ST = 0x1; данные ET_1ST. */
#define ET_1ST 0x1
/* Задаёт ET_2ND = 0x2; данные ET_2ND. */
#define ET_2ND 0x2
/* Задаёт ET_3RD = 0x3; данные ET_3RD. */
#define ET_3RD 0x3
@@ -219,33 +141,22 @@ extern "C" {
// HRPWM (High Resolution PWM)
//================================
// HRCNFG
/* Задаёт HR_Disable = 0x0; HR запрет. */
#define HR_Disable 0x0
/* Задаёт HR_REP = 0x1; данные HR_REP. */
#define HR_REP 0x1
/* Задаёт HR_FEP = 0x2; данные HR_FEP. */
#define HR_FEP 0x2
/* Задаёт HR_BEP = 0x3; данные HR_BEP. */
#define HR_BEP 0x3
/* Задаёт HR_CMP = 0x0; данные HR_CMP. */
#define HR_CMP 0x0
/* Задаёт HR_PHS = 0x1; данные HR_PHS. */
#define HR_PHS 0x1
/* Задаёт HR_CTR_ZERO = 0x0; данные HR_CTR_ZERO. */
#define HR_CTR_ZERO 0x0
/* Задаёт HR_CTR_PRD = 0x1; данные HR_CTR_PRD. */
#define HR_CTR_PRD 0x1
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif /* extern "C" */
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // - end of DSP2833x_EPWM_DEFINES_H
//===========================================================================

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание Examples для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/9 $
// Checkin $Date: July 2, 2008 14:31:12 $
//###########################################################################
@@ -12,17 +11,12 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Начинает условие: DSP2833x_EXAMPLES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef DSP2833x_EXAMPLES_H
/* Определяет защитный символ или переключатель DSP2833x_EXAMPLES_H для последующей компиляции. */
#define DSP2833x_EXAMPLES_H
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
@@ -31,11 +25,9 @@ extern "C" {
-----------------------------------------------------------------------------*/
//#define DSP28_DIVSEL 0 // Enable /4 for SYSCLKOUT
//#define DSP28_DIVSEL 1 // Enable /4 for SYSCKOUT
/* Задаёт DSP28_DIVSEL = 2; данные DSP28_DIVSEL. */
#define DSP28_DIVSEL 2 // Enable /2 for SYSCLKOUT
//#define DSP28_DIVSEL 3 // Enable /1 for SYSCLKOUT
/* Задаёт DSP28_PLLCR = CLKMULT*2; данные DSP28_PLLCR. */
#define DSP28_PLLCR CLKMULT*2
//#define DSP28_PLLCR 10
@@ -82,7 +74,6 @@ extern "C" {
In this case, the CPU_RATE will be 10.000L
Uncomment the line: #define CPU_RATE 10.000L
-----------------------------------------------------------------------------*/
/* Задаёт CPU_RATE = 6.667L; данные CPU_RATE. */
#define CPU_RATE 6.667L // for a 150MHz CPU clock speed (SYSCLKOUT)
//#define CPU_RATE 7.143L // for a 140MHz CPU clock speed (SYSCLKOUT)
//#define CPU_RATE 8.333L // for a 120MHz CPU clock speed (SYSCLKOUT)
@@ -102,19 +93,12 @@ extern "C" {
(for examples) - either 150 MHz (for 28335 and 28334) or 100 MHz
(for 28332). User does not have to change anything here.
-----------------------------------------------------------------------------*/
/* Условие компиляции DSP28_28332: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_28332 // DSP28_28332 device only
/* Задаёт CPU_FRQ_100MHZ = 1; данные CPU_FRQ_100MHZ. */
#define CPU_FRQ_100MHZ 1 // 100 Mhz CPU Freq (20 MHz input freq)
/* Задаёт CPU_FRQ_150MHZ = 0; данные CPU_FRQ_150MHZ. */
#define CPU_FRQ_150MHZ 0
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Задаёт CPU_FRQ_100MHZ = 0; данные CPU_FRQ_100MHZ. */
#define CPU_FRQ_100MHZ 0 // DSP28_28335||DSP28_28334
/* Задаёт CPU_FRQ_150MHZ = 1; данные CPU_FRQ_150MHZ. */
#define CPU_FRQ_150MHZ 1 // 150 MHz CPU Freq (30 MHz input freq) by DEFAULT
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
@@ -122,52 +106,35 @@ extern "C" {
// Include Example Header Files:
//
/* Подключает "DSP2833x_GlobalPrototypes.h": поставляемое TI описание GlobalPrototypes для семейства C2833x. */
#include "DSP2833x_GlobalPrototypes.h" // Prototypes for global functions within the
// .c files.
/* Подключает "DSP2833x_ePwm_defines.h": поставляемое TI описание ePwm_defines для семейства C2833x. */
#include "DSP2833x_ePwm_defines.h" // Macros used for PWM examples.
/* Подключает "DSP2833x_Dma_defines.h": поставляемое TI описание Dma_defines для семейства C2833x. */
#include "DSP2833x_Dma_defines.h" // Macros used for DMA examples.
/* Подключает "DSP2833x_I2C_defines.h": поставляемое TI описание I2C_defines для семейства C2833x. */
#include "DSP2833x_I2C_defines.h" // Macros used for I2C examples.
/* Задаёт PARTNO_28335 = 0xEF; данные PARTNO_28335. */
#define PARTNO_28335 0xEF
/* Задаёт PARTNO_28334 = 0xEE; данные PARTNO_28334. */
#define PARTNO_28334 0xEE
/* Задаёт PARTNO_28332 = 0xED; данные PARTNO_28332. */
#define PARTNO_28332 0xED
/* Задаёт PARTNO_28235 = 0xE8; данные PARTNO_28235. */
#define PARTNO_28235 0xE8
/* Задаёт PARTNO_28234 = 0xE7; данные PARTNO_28234. */
#define PARTNO_28234 0xE7
/* Задаёт PARTNO_28232 = 0xE6; данные PARTNO_28232. */
#define PARTNO_28232 0xE6
// Include files not used with DSP/BIOS
/* Начинает условие: DSP28_BIOS ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef DSP28_BIOS
/* Подключает "DSP2833x_DefaultISR.h": поставляемое TI описание DefaultISR для семейства C2833x. */
#include "DSP2833x_DefaultISR.h"
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// DO NOT MODIFY THIS LINE.
/* Задаёт DELAY_US = DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L); данные DELAY_US. */
#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L)
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif /* extern "C" */
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // end of DSP2833x_EXAMPLES_H definition

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание GlobalPrototypes для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/11 $
// Checkin $Date: May 12, 2008 14:30:08 $
//###########################################################################
@@ -12,320 +11,174 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Начинает условие: DSP2833x_GLOBALPROTOTYPES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef DSP2833x_GLOBALPROTOTYPES_H
/* Определяет защитный символ или переключатель DSP2833x_GLOBALPROTOTYPES_H для последующей компиляции. */
#define DSP2833x_GLOBALPROTOTYPES_H
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Задаёт C-соглашение о связывании имён при включении заголовка из C++. */
extern "C" {
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/*---- shared global function prototypes -----------------------------------*/
/* Объявляет интерфейс функции InitAdc; реализация вызывается через этот прототип. */
extern void InitAdc(void);
/* Объявляет интерфейс функции DMAInitialize; реализация вызывается через этот прототип. */
extern void DMAInitialize(void);
// DMA Channel 1
/* Объявляет интерфейс функции DMACH1AddrConfig; реализация вызывается через этот прототип. */
extern void DMACH1AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
/* Объявляет интерфейс функции DMACH1BurstConfig; реализация вызывается через этот прототип. */
extern void DMACH1BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
/* Объявляет интерфейс функции DMACH1TransferConfig; реализация вызывается через этот прототип. */
extern void DMACH1TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
/* Объявляет интерфейс функции DMACH1WrapConfig; реализация вызывается через этот прототип. */
extern void DMACH1WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
/* Объявляет интерфейс функции DMACH1ModeConfig; реализация вызывается через этот прототип. */
extern void DMACH1ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
/* Объявляет интерфейс функции StartDMACH1; реализация вызывается через этот прототип. */
extern void StartDMACH1(void);
// DMA Channel 2
/* Объявляет интерфейс функции DMACH2AddrConfig; реализация вызывается через этот прототип. */
extern void DMACH2AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
/* Объявляет интерфейс функции DMACH2BurstConfig; реализация вызывается через этот прототип. */
extern void DMACH2BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
/* Объявляет интерфейс функции DMACH2TransferConfig; реализация вызывается через этот прототип. */
extern void DMACH2TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
/* Объявляет интерфейс функции DMACH2WrapConfig; реализация вызывается через этот прототип. */
extern void DMACH2WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
/* Объявляет интерфейс функции DMACH2ModeConfig; реализация вызывается через этот прототип. */
extern void DMACH2ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
/* Объявляет интерфейс функции StartDMACH2; реализация вызывается через этот прототип. */
extern void StartDMACH2(void);
// DMA Channel 3
/* Объявляет интерфейс функции DMACH3AddrConfig; реализация вызывается через этот прототип. */
extern void DMACH3AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
/* Объявляет интерфейс функции DMACH3BurstConfig; реализация вызывается через этот прототип. */
extern void DMACH3BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
/* Объявляет интерфейс функции DMACH3TransferConfig; реализация вызывается через этот прототип. */
extern void DMACH3TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
/* Объявляет интерфейс функции DMACH3WrapConfig; реализация вызывается через этот прототип. */
extern void DMACH3WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
/* Объявляет интерфейс функции DMACH3ModeConfig; реализация вызывается через этот прототип. */
extern void DMACH3ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
/* Объявляет интерфейс функции StartDMACH3; реализация вызывается через этот прототип. */
extern void StartDMACH3(void);
// DMA Channel 4
/* Объявляет интерфейс функции DMACH4AddrConfig; реализация вызывается через этот прототип. */
extern void DMACH4AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
/* Объявляет интерфейс функции DMACH4BurstConfig; реализация вызывается через этот прототип. */
extern void DMACH4BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
/* Объявляет интерфейс функции DMACH4TransferConfig; реализация вызывается через этот прототип. */
extern void DMACH4TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
/* Объявляет интерфейс функции DMACH4WrapConfig; реализация вызывается через этот прототип. */
extern void DMACH4WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
/* Объявляет интерфейс функции DMACH4ModeConfig; реализация вызывается через этот прототип. */
extern void DMACH4ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
/* Объявляет интерфейс функции StartDMACH4; реализация вызывается через этот прототип. */
extern void StartDMACH4(void);
// DMA Channel 5
/* Объявляет интерфейс функции DMACH5AddrConfig; реализация вызывается через этот прототип. */
extern void DMACH5AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
/* Объявляет интерфейс функции DMACH5BurstConfig; реализация вызывается через этот прототип. */
extern void DMACH5BurstConfig(Uint16 bsize, int16 srcbstep, int16 desbstep);
/* Объявляет интерфейс функции DMACH5TransferConfig; реализация вызывается через этот прототип. */
extern void DMACH5TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
/* Объявляет интерфейс функции DMACH5WrapConfig; реализация вызывается через этот прототип. */
extern void DMACH5WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
/* Объявляет интерфейс функции DMACH5ModeConfig; реализация вызывается через этот прототип. */
extern void DMACH5ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
/* Объявляет интерфейс функции StartDMACH5; реализация вызывается через этот прототип. */
extern void StartDMACH5(void);
// DMA Channel 6
/* Объявляет интерфейс функции DMACH6AddrConfig; реализация вызывается через этот прототип. */
extern void DMACH6AddrConfig(volatile Uint16 *DMA_Dest,volatile Uint16 *DMA_Source);
/* Объявляет интерфейс функции DMACH6BurstConfig; реализация вызывается через этот прототип. */
extern void DMACH6BurstConfig(Uint16 bsize,Uint16 srcbstep, int16 desbstep);
/* Объявляет интерфейс функции DMACH6TransferConfig; реализация вызывается через этот прототип. */
extern void DMACH6TransferConfig(Uint16 tsize, int16 srctstep, int16 deststep);
/* Объявляет интерфейс функции DMACH6WrapConfig; реализация вызывается через этот прототип. */
extern void DMACH6WrapConfig(Uint16 srcwsize, int16 srcwstep, Uint16 deswsize, int16 deswstep);
/* Объявляет интерфейс функции DMACH6ModeConfig; реализация вызывается через этот прототип. */
extern void DMACH6ModeConfig(Uint16 persel, Uint16 perinte, Uint16 oneshot, Uint16 cont, Uint16 synce, Uint16 syncsel, Uint16 ovrinte, Uint16 datasize, Uint16 chintmode, Uint16 chinte);
/* Объявляет интерфейс функции StartDMACH6; реализация вызывается через этот прототип. */
extern void StartDMACH6(void);
/* Объявляет интерфейс функции InitPeripherals; реализация вызывается через этот прототип. */
extern void InitPeripherals(void);
/* Условие компиляции DSP28_ECANA: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_ECANA
/* Объявляет интерфейс функции InitECan; реализация вызывается через этот прототип. */
extern void InitECan(void);
/* Объявляет интерфейс функции InitECana; реализация вызывается через этот прототип. */
extern void InitECana(void);
/* Объявляет интерфейс функции InitECanGpio; реализация вызывается через этот прототип. */
extern void InitECanGpio(void);
/* Объявляет интерфейс функции InitECanaGpio; реализация вызывается через этот прототип. */
extern void InitECanaGpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_ECANA
/* Условие компиляции DSP28_ECANB: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_ECANB
/* Объявляет интерфейс функции InitECanb; реализация вызывается через этот прототип. */
extern void InitECanb(void);
/* Объявляет интерфейс функции InitECanbGpio; реализация вызывается через этот прототип. */
extern void InitECanbGpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_ECANB
/* Объявляет интерфейс функции InitECap; реализация вызывается через этот прототип. */
extern void InitECap(void);
/* Объявляет интерфейс функции InitECapGpio; реализация вызывается через этот прототип. */
extern void InitECapGpio(void);
/* Объявляет интерфейс функции InitECap1Gpio; реализация вызывается через этот прототип. */
extern void InitECap1Gpio(void);
/* Объявляет интерфейс функции InitECap2Gpio; реализация вызывается через этот прототип. */
extern void InitECap2Gpio(void);
/* Условие компиляции DSP28_ECAP3: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_ECAP3
/* Объявляет интерфейс функции InitECap3Gpio; реализация вызывается через этот прототип. */
extern void InitECap3Gpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_ECAP3
/* Условие компиляции DSP28_ECAP4: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_ECAP4
/* Объявляет интерфейс функции InitECap4Gpio; реализация вызывается через этот прототип. */
extern void InitECap4Gpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_ECAP4
/* Условие компиляции DSP28_ECAP5: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_ECAP5
/* Объявляет интерфейс функции InitECap5Gpio; реализация вызывается через этот прототип. */
extern void InitECap5Gpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_ECAP5
/* Условие компиляции DSP28_ECAP6: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_ECAP6
/* Объявляет интерфейс функции InitECap6Gpio; реализация вызывается через этот прототип. */
extern void InitECap6Gpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_ECAP6
/* Объявляет интерфейс функции InitEPwm; реализация вызывается через этот прототип. */
extern void InitEPwm(void);
/* Объявляет интерфейс функции InitEPwmGpio; реализация вызывается через этот прототип. */
extern void InitEPwmGpio(void);
/* Объявляет интерфейс функции InitEPwm1Gpio; реализация вызывается через этот прототип. */
extern void InitEPwm1Gpio(void);
/* Объявляет интерфейс функции InitEPwm2Gpio; реализация вызывается через этот прототип. */
extern void InitEPwm2Gpio(void);
/* Объявляет интерфейс функции InitEPwm3Gpio; реализация вызывается через этот прототип. */
extern void InitEPwm3Gpio(void);
/* Условие компиляции DSP28_EPWM4: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_EPWM4
/* Объявляет интерфейс функции InitEPwm4Gpio; реализация вызывается через этот прототип. */
extern void InitEPwm4Gpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_EPWM4
/* Условие компиляции DSP28_EPWM5: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_EPWM5
/* Объявляет интерфейс функции InitEPwm5Gpio; реализация вызывается через этот прототип. */
extern void InitEPwm5Gpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_EPWM5
/* Условие компиляции DSP28_EPWM6: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_EPWM6
/* Объявляет интерфейс функции InitEPwm6Gpio; реализация вызывается через этот прототип. */
extern void InitEPwm6Gpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_EPWM6
/* Условие компиляции DSP28_EQEP1: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_EQEP1
/* Объявляет интерфейс функции InitEQep; реализация вызывается через этот прототип. */
extern void InitEQep(void);
/* Объявляет интерфейс функции InitEQepGpio; реализация вызывается через этот прототип. */
extern void InitEQepGpio(void);
/* Объявляет интерфейс функции InitEQep1Gpio; реализация вызывается через этот прототип. */
extern void InitEQep1Gpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // if DSP28_EQEP1
/* Условие компиляции DSP28_EQEP2: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_EQEP2
/* Объявляет интерфейс функции InitEQep2Gpio; реализация вызывается через этот прототип. */
extern void InitEQep2Gpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_EQEP2
/* Объявляет интерфейс функции InitGpio; реализация вызывается через этот прототип. */
extern void InitGpio(void);
/* Объявляет интерфейс функции InitI2CGpio; реализация вызывается через этот прототип. */
extern void InitI2CGpio(void);
/* Объявляет интерфейс функции InitMcbsp; реализация вызывается через этот прототип. */
extern void InitMcbsp(void);
/* Объявляет интерфейс функции InitMcbspa; реализация вызывается через этот прототип. */
extern void InitMcbspa(void);
/* Объявляет интерфейс функции delay_loop; реализация вызывается через этот прототип. */
extern void delay_loop(void);
/* Объявляет интерфейс функции InitMcbspaGpio; реализация вызывается через этот прототип. */
extern void InitMcbspaGpio(void);
/* Объявляет интерфейс функции InitMcbspa8bit; реализация вызывается через этот прототип. */
extern void InitMcbspa8bit(void);
/* Объявляет интерфейс функции InitMcbspa12bit; реализация вызывается через этот прототип. */
extern void InitMcbspa12bit(void);
/* Объявляет интерфейс функции InitMcbspa16bit; реализация вызывается через этот прототип. */
extern void InitMcbspa16bit(void);
/* Объявляет интерфейс функции InitMcbspa20bit; реализация вызывается через этот прототип. */
extern void InitMcbspa20bit(void);
/* Объявляет интерфейс функции InitMcbspa24bit; реализация вызывается через этот прототип. */
extern void InitMcbspa24bit(void);
/* Объявляет интерфейс функции InitMcbspa32bit; реализация вызывается через этот прототип. */
extern void InitMcbspa32bit(void);
/* Условие компиляции DSP28_MCBSPB: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_MCBSPB
/* Объявляет интерфейс функции InitMcbspb; реализация вызывается через этот прототип. */
extern void InitMcbspb(void);
/* Объявляет интерфейс функции InitMcbspbGpio; реализация вызывается через этот прототип. */
extern void InitMcbspbGpio(void);
/* Объявляет интерфейс функции InitMcbspb8bit; реализация вызывается через этот прототип. */
extern void InitMcbspb8bit(void);
/* Объявляет интерфейс функции InitMcbspb12bit; реализация вызывается через этот прототип. */
extern void InitMcbspb12bit(void);
/* Объявляет интерфейс функции InitMcbspb16bit; реализация вызывается через этот прототип. */
extern void InitMcbspb16bit(void);
/* Объявляет интерфейс функции InitMcbspb20bit; реализация вызывается через этот прототип. */
extern void InitMcbspb20bit(void);
/* Объявляет интерфейс функции InitMcbspb24bit; реализация вызывается через этот прототип. */
extern void InitMcbspb24bit(void);
/* Объявляет интерфейс функции InitMcbspb32bit; реализация вызывается через этот прототип. */
extern void InitMcbspb32bit(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_MCBSPB
/* Объявляет интерфейс функции InitPieCtrl; реализация вызывается через этот прототип. */
extern void InitPieCtrl(void);
/* Объявляет интерфейс функции InitPieVectTable; реализация вызывается через этот прототип. */
extern void InitPieVectTable(void);
/* Объявляет интерфейс функции InitSci; реализация вызывается через этот прототип. */
extern void InitSci(void);
/* Объявляет интерфейс функции InitSciGpio; реализация вызывается через этот прототип. */
extern void InitSciGpio(void);
/* Объявляет интерфейс функции InitSciaGpio; реализация вызывается через этот прототип. */
extern void InitSciaGpio(void);
/* Условие компиляции DSP28_SCIB: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_SCIB
/* Объявляет интерфейс функции InitScibGpio; реализация вызывается через этот прототип. */
extern void InitScibGpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // endif DSP28_SCIB
/* Условие компиляции DSP28_SCIC: выбранный блок включается в текущий вариант прошивки. */
#if DSP28_SCIC
/* Объявляет интерфейс функции InitScicGpio; реализация вызывается через этот прототип. */
extern void InitScicGpio(void);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Объявляет интерфейс функции InitSpi; реализация вызывается через этот прототип. */
extern void InitSpi(void);
/* Объявляет интерфейс функции InitSpiGpio; реализация вызывается через этот прототип. */
extern void InitSpiGpio(void);
/* Объявляет интерфейс функции InitSpiaGpio; реализация вызывается через этот прототип. */
extern void InitSpiaGpio(void);
/* Объявляет интерфейс функции InitSysCtrl; реализация вызывается через этот прототип. */
extern void InitSysCtrl(void);
/* Объявляет интерфейс функции InitTzGpio; реализация вызывается через этот прототип. */
extern void InitTzGpio(void);
/* Объявляет интерфейс функции InitXIntrupt; реализация вызывается через этот прототип. */
extern void InitXIntrupt(void);
/* Объявляет интерфейс функции XintfInit; реализация вызывается через этот прототип. */
extern void XintfInit(void);
/* Объявляет интерфейс функции InitXintf16Gpio; реализация вызывается через этот прототип. */
extern void InitXintf16Gpio();
/* Объявляет интерфейс функции InitXintf32Gpio; реализация вызывается через этот прототип. */
extern void InitXintf32Gpio();
/* Объявляет интерфейс функции InitPll; реализация вызывается через этот прототип. */
extern void InitPll(Uint16 pllcr, Uint16 clkindiv);
/* Объявляет интерфейс функции InitPeripheralClocks; реализация вызывается через этот прототип. */
extern void InitPeripheralClocks(void);
/* Объявляет интерфейс функции EnableInterrupts; реализация вызывается через этот прототип. */
extern void EnableInterrupts(void);
/* Объявляет интерфейс функции DSP28x_usDelay; реализация вызывается через этот прототип. */
extern void DSP28x_usDelay(Uint32 Count);
/* Объявляет интерфейс функции ADC_cal; реализация вызывается через этот прототип. */
extern void ADC_cal (void);
/* Задаёт KickDog = ServiceDog; данные KickDog. */
#define KickDog ServiceDog // For compatiblity with previous versions
/* Объявляет интерфейс функции ServiceDog; реализация вызывается через этот прототип. */
extern void ServiceDog(void);
/* Объявляет интерфейс функции DisableDog; реализация вызывается через этот прототип. */
extern void DisableDog(void);
/* Объявляет интерфейс функции CsmUnlock; реализация вызывается через этот прототип. */
extern Uint16 CsmUnlock(void);
// DSP28_DBGIER.asm
/* Объявляет интерфейс функции SetDBGIER; реализация вызывается через этот прототип. */
extern void SetDBGIER(Uint16 dbgier);
// CAUTION
// This function MUST be executed out of RAM. Executing it
// out of OTP/Flash will yield unpredictable results
/* Объявляет интерфейс функции InitFlash; реализация вызывается через этот прототип. */
extern void InitFlash(void);
/* Объявляет интерфейс функции MemCopy; реализация вызывается через этот прототип. */
void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);
@@ -334,28 +187,19 @@ void MemCopy(Uint16 *SourceAddr, Uint16* SourceEndAddr, Uint16* DestAddr);
// DSP28 examples will use these to relocate code from one LOAD location
// in either Flash or XINTF to a different RUN location in internal
// RAM
/* Объявляет RamfuncsLoadStart — данные RamfuncsLoadStart. Память определена в другом модуле. */
extern Uint16 RamfuncsLoadStart;
/* Объявляет RamfuncsLoadEnd — данные RamfuncsLoadEnd. Память определена в другом модуле. */
extern Uint16 RamfuncsLoadEnd;
/* Объявляет RamfuncsRunStart — данные RamfuncsRunStart. Память определена в другом модуле. */
extern Uint16 RamfuncsRunStart;
/* Объявляет XintffuncsLoadStart — данные XintffuncsLoadStart. Память определена в другом модуле. */
extern Uint16 XintffuncsLoadStart;
/* Объявляет XintffuncsLoadEnd — данные XintffuncsLoadEnd. Память определена в другом модуле. */
extern Uint16 XintffuncsLoadEnd;
/* Объявляет XintffuncsRunStart — данные XintffuncsRunStart. Память определена в другом модуле. */
extern Uint16 XintffuncsRunStart;
/* Включает следующий блок только при определённом символе __cplusplus. */
#ifdef __cplusplus
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
#endif /* extern "C" */ /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif /* extern "C" */
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // - end of DSP2833x_GLOBALPROTOTYPES_H
//===========================================================================

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание I2c_defines для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/2 $
// Checkin $Date: April 16, 2008 17:16:47 $
//###########################################################################
@@ -12,9 +11,7 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Начинает условие: DSP2833x_I2C_DEFINES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef DSP2833x_I2C_DEFINES_H
/* Определяет защитный символ или переключатель DSP2833x_I2C_DEFINES_H для последующей компиляции. */
#define DSP2833x_I2C_DEFINES_H
//--------------------------------------------
@@ -22,115 +19,68 @@
//--------------------------------------------
// Error Messages
/* Задаёт I2C_ERROR = 0xFFFF; 2 C ошибка. */
#define I2C_ERROR 0xFFFF
/* Задаёт I2C_ARB_LOST_ERROR = 0x0001; 2 C ARB LOST ошибка. */
#define I2C_ARB_LOST_ERROR 0x0001
/* Задаёт I2C_NACK_ERROR = 0x0002; 2 C NACK ошибка. */
#define I2C_NACK_ERROR 0x0002
/* Задаёт I2C_BUS_BUSY_ERROR = 0x1000; 2 C BUS BUSY ошибка. */
#define I2C_BUS_BUSY_ERROR 0x1000
/* Задаёт I2C_STP_NOT_READY_ERROR = 0x5555; 2 C STP NOT READY ошибка. */
#define I2C_STP_NOT_READY_ERROR 0x5555
/* Задаёт I2C_NO_FLAGS = 0xAAAA; 2 C NO флаги. */
#define I2C_NO_FLAGS 0xAAAA
/* Задаёт I2C_SUCCESS = 0x0000; данные I2C_SUCCESS. */
#define I2C_SUCCESS 0x0000
// Clear Status Flags
/* Задаёт I2C_CLR_AL_BIT = 0x0001; 2 C CLR AL бит. */
#define I2C_CLR_AL_BIT 0x0001
/* Задаёт I2C_CLR_NACK_BIT = 0x0002; 2 C CLR NACK бит. */
#define I2C_CLR_NACK_BIT 0x0002
/* Задаёт I2C_CLR_ARDY_BIT = 0x0004; 2 C CLR ARDY бит. */
#define I2C_CLR_ARDY_BIT 0x0004
/* Задаёт I2C_CLR_RRDY_BIT = 0x0008; 2 C CLR RRDY бит. */
#define I2C_CLR_RRDY_BIT 0x0008
/* Задаёт I2C_CLR_SCD_BIT = 0x0020; 2 C CLR SCD бит. */
#define I2C_CLR_SCD_BIT 0x0020
// Interrupt Source Messages
/* Задаёт I2C_NO_ISRC = 0x0000; данные I2C_NO_ISRC. */
#define I2C_NO_ISRC 0x0000
/* Задаёт I2C_ARB_ISRC = 0x0001; данные I2C_ARB_ISRC. */
#define I2C_ARB_ISRC 0x0001
/* Задаёт I2C_NACK_ISRC = 0x0002; данные I2C_NACK_ISRC. */
#define I2C_NACK_ISRC 0x0002
/* Задаёт I2C_ARDY_ISRC = 0x0003; данные I2C_ARDY_ISRC. */
#define I2C_ARDY_ISRC 0x0003
/* Задаёт I2C_RX_ISRC = 0x0004; данные I2C_RX_ISRC. */
#define I2C_RX_ISRC 0x0004
/* Задаёт I2C_TX_ISRC = 0x0005; данные I2C_TX_ISRC. */
#define I2C_TX_ISRC 0x0005
/* Задаёт I2C_SCD_ISRC = 0x0006; данные I2C_SCD_ISRC. */
#define I2C_SCD_ISRC 0x0006
/* Задаёт I2C_AAS_ISRC = 0x0007; данные I2C_AAS_ISRC. */
#define I2C_AAS_ISRC 0x0007
// I2CMSG structure defines
/* Задаёт I2C_NO_STOP = 0; данные I2C_NO_STOP. */
#define I2C_NO_STOP 0
/* Задаёт I2C_YES_STOP = 1; данные I2C_YES_STOP. */
#define I2C_YES_STOP 1
/* Задаёт I2C_RECEIVE = 0; 2 C приём. */
#define I2C_RECEIVE 0
/* Задаёт I2C_TRANSMIT = 1; 2 C передача. */
#define I2C_TRANSMIT 1
/* Задаёт I2C_MAX_BUFFER_SIZE = 16; 2 C MAX буфер размер. */
#define I2C_MAX_BUFFER_SIZE 16
// I2C Slave State defines
/* Задаёт I2C_NOTSLAVE = 0; данные I2C_NOTSLAVE. */
#define I2C_NOTSLAVE 0
/* Задаёт I2C_ADDR_AS_SLAVE = 1; данные I2C_ADDR_AS_SLAVE. */
#define I2C_ADDR_AS_SLAVE 1
/* Задаёт I2C_ST_MSG_READY = 2; данные I2C_ST_MSG_READY. */
#define I2C_ST_MSG_READY 2
// I2C Slave Receiver messages defines
/* Задаёт I2C_SND_MSG1 = 1; данные I2C_SND_MSG1. */
#define I2C_SND_MSG1 1
/* Задаёт I2C_SND_MSG2 = 2; данные I2C_SND_MSG2. */
#define I2C_SND_MSG2 2
// I2C State defines
/* Задаёт I2C_IDLE = 0; данные I2C_IDLE. */
#define I2C_IDLE 0
/* Задаёт I2C_SLAVE_RECEIVER = 1; данные I2C_SLAVE_RECEIVER. */
#define I2C_SLAVE_RECEIVER 1
/* Задаёт I2C_SLAVE_TRANSMITTER = 2; данные I2C_SLAVE_TRANSMITTER. */
#define I2C_SLAVE_TRANSMITTER 2
/* Задаёт I2C_MASTER_RECEIVER = 3; данные I2C_MASTER_RECEIVER. */
#define I2C_MASTER_RECEIVER 3
/* Задаёт I2C_MASTER_TRANSMITTER = 4; данные I2C_MASTER_TRANSMITTER. */
#define I2C_MASTER_TRANSMITTER 4
// I2C Message Commands for I2CMSG struct
/* Задаёт I2C_MSGSTAT_INACTIVE = 0x0000; данные I2C_MSGSTAT_INACTIVE. */
#define I2C_MSGSTAT_INACTIVE 0x0000
/* Задаёт I2C_MSGSTAT_SEND_WITHSTOP = 0x0010; данные I2C_MSGSTAT_SEND_WITHSTOP. */
#define I2C_MSGSTAT_SEND_WITHSTOP 0x0010
/* Задаёт I2C_MSGSTAT_WRITE_BUSY = 0x0011; 2 C MSGSTAT запись BUSY. */
#define I2C_MSGSTAT_WRITE_BUSY 0x0011
/* Задаёт I2C_MSGSTAT_SEND_NOSTOP = 0x0020; данные I2C_MSGSTAT_SEND_NOSTOP. */
#define I2C_MSGSTAT_SEND_NOSTOP 0x0020
/* Задаёт I2C_MSGSTAT_SEND_NOSTOP_BUSY = 0x0021; данные I2C_MSGSTAT_SEND_NOSTOP_BUSY. */
#define I2C_MSGSTAT_SEND_NOSTOP_BUSY 0x0021
/* Задаёт I2C_MSGSTAT_RESTART = 0x0022; данные I2C_MSGSTAT_RESTART. */
#define I2C_MSGSTAT_RESTART 0x0022
/* Задаёт I2C_MSGSTAT_READ_BUSY = 0x0023; 2 C MSGSTAT чтение BUSY. */
#define I2C_MSGSTAT_READ_BUSY 0x0023
// Generic defines
/* Задаёт I2C_TRUE = 1; данные I2C_TRUE. */
#define I2C_TRUE 1
/* Задаёт I2C_FALSE = 0; данные I2C_FALSE. */
#define I2C_FALSE 0
/* Задаёт I2C_YES = 1; данные I2C_YES. */
#define I2C_YES 1
/* Задаёт I2C_NO = 0; данные I2C_NO. */
#define I2C_NO 0
/* Задаёт I2C_DUMMY_BYTE = 0; данные I2C_DUMMY_BYTE. */
#define I2C_DUMMY_BYTE 0
@@ -139,9 +89,7 @@
//--------------------------------------------
// I2C Message Structure
/* Описывает структуру I2CMSG; порядок полей определяет расположение данных. */
struct I2CMSG {
/* Объявляет MsgStatus — Msg состояние. */
Uint16 MsgStatus; // Word stating what state msg is in:
// I2C_MSGCMD_INACTIVE = do not send msg
// I2C_MSGCMD_BUSY = msg start has been sent,
@@ -152,23 +100,16 @@ struct I2CMSG {
// master trans msg without the stop bit
// I2C_MSGCMD_RESTART = command to send a restart
// as a master receiver with a stop bit
/* Объявляет SlaveAddress — Slave адрес. */
Uint16 SlaveAddress; // I2C address of slave msg is intended for
/* Объявляет NumOfBytes — данные NumOfBytes. */
Uint16 NumOfBytes; // Num of valid bytes in (or to be put in MsgBuffer)
/* Объявляет MemoryHighAddr — данные MemoryHighAddr. */
Uint16 MemoryHighAddr; // EEPROM address of data associated with msg (high byte)
/* Объявляет MemoryLowAddr — данные MemoryLowAddr. */
Uint16 MemoryLowAddr; // EEPROM address of data associated with msg (low byte)
/* Объявляет MsgBuffer — Msg буфер. */
Uint16 MsgBuffer[I2C_MAX_BUFFER_SIZE]; // Array holding msg data - max that
// MAX_BUFFER_SIZE can be is 16 due to
// the FIFO's
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
};
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // end of DSP2833x_I2C_DEFINES_H definition
//===========================================================================

View File

@@ -1,4 +1,3 @@
/* Настройки и интерфейс DSP28x_Project. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/1 $
// Checkin $Date: April 22, 2008 14:35:56 $
@@ -13,16 +12,11 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Начинает условие: DSP28x_PROJECT_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
#ifndef DSP28x_PROJECT_H
/* Определяет защитный символ или переключатель DSP28x_PROJECT_H для последующей компиляции. */
#define DSP28x_PROJECT_H
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif // end of DSP28x_PROJECT_H definition

View File

@@ -1,4 +1,3 @@
; Поставляемое ti описание adc_cal для семейства c2833x. Пояснения в UTF-8.
;; TI File $Revision: /main/1 $
;; Checkin $Date: July 30, 2007 10:29:23 $
;;###########################################################################
@@ -9,7 +8,7 @@
;;
;; Functions:
;;
;; _ADC_cal - Copies device specific calibration data into ADCREFSEL and ADCOFFTRIM registers
;; _ADC_cal - Copies device specific calibration data into ADCREFSEL and ADCOFFTRIM registers
;; Notes:
;;
;;###########################################################################
@@ -17,35 +16,27 @@
;; $Release Date: August 1, 2008 $
;;###########################################################################
; Экспортирует символ для связывания с C-кодом. Операция: .def _ADC_cal.
.def _ADC_cal
; Задаёт текстовый псевдоним константы для ассемблера. Операция: .asg "0x711C", ADCREFSEL_LOC.
.asg "0x711C", ADCREFSEL_LOC
;-----------------------------------------------
; _ADC_cal
;-----------------------------------------------
;-----------------------------------------------
; This is the ADC cal routine.This routine is programmed into
; reserved memory by the factory. 0xAAAA and 0xBBBB are place-
; holders for calibration data.
;The actual values programmed by TI are device specific.
; This is the ADC cal routine.This routine is programmed into
; reserved memory by the factory. 0xAAAA and 0xBBBB are place-
; holders for calibration data.
;The actual values programmed by TI are device specific.
;
; This function assumes that the clocks have been
; enabled to the ADC module.
;-----------------------------------------------
; Выбирает секцию объектного файла для следующих инструкций. Операция: .sect ".adc_cal".
.sect ".adc_cal"
; Объявляет метку _ADC_cal для перехода или вызова. Операция: _ADC_cal.
_ADC_cal
; Загружает регистр страниц данных DP для доступа к указанной области. Операция: MOVW DP, #ADCREFSEL_LOC >> 6.
MOVW DP, #ADCREFSEL_LOC >> 6
; Переносит операнд в регистр или ячейку назначения. Операция: MOV @28, #0xAAAA.
MOV @28, #0xAAAA ; actual value may not be 0xAAAA
; Переносит операнд в регистр или ячейку назначения. Операция: MOV @29, #0xBBBB.
MOV @29, #0xBBBB ; actual value may not be 0xBBBB
; Возвращает управление вызывающему коду через длинный адрес возврата. Операция: LRETR.
LRETR
;eof ----------

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание Adc для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/5 $
// Checkin $Date: October 23, 2007 13:34:09 $
//###########################################################################
@@ -12,12 +11,9 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
/* Задаёт ADC_usDELAY = 5000L; АЦП us DELAY. */
#define ADC_usDELAY 5000L
//---------------------------------------------------------------------------
@@ -25,11 +21,8 @@
//---------------------------------------------------------------------------
// This function initializes ADC to a known state.
//
/* Начинает функцию InitAdc; назначение модуля — поставляемое TI описание Adc для семейства C2833x. */
void InitAdc(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет интерфейс функции DSP28x_usDelay; реализация вызывается через этот прототип. */
extern void DSP28x_usDelay(Uint32 Count);
@@ -43,13 +36,9 @@ void InitAdc(void)
// See the device data manual and/or the ADC Reference
// Manual for more information.
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Записывает SysCtrlRegs.PCLKCR0.bit.ADCENCLK значением 1; данные ADCENCLK. */
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1;
/* Вызывает ADC_cal с аргументами () в текущей последовательности операций. */
ADC_cal();
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
@@ -64,14 +53,10 @@ void InitAdc(void)
// CPU_RATE define statement in the DSP2833x_Examples.h file must
// contain the correct CPU clock period in nanoseconds.
/* Записывает AdcRegs.ADCREFSEL.bit.REF_SEL значением 0x01; данные REF_SEL. */
AdcRegs.ADCREFSEL.bit.REF_SEL = 0x01;
/* Записывает AdcRegs.ADCTRL3.all значением 0x00E0; представление регистра целым словом без разбиения на битовые поля. */
AdcRegs.ADCTRL3.all = 0x00E0; // Power up bandgap/reference/ADC circuits
/* Вызывает DELAY_US с аргументами (ADC_usDELAY) в текущей последовательности операций. */
DELAY_US(ADC_usDELAY); // Delay before converting ADC channels
//pause_us(50L);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание CpuTimers для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/3 $
// Checkin $Date: March 16, 2007 08:37:30 $
//###########################################################################
@@ -19,18 +18,13 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // Headerfile Include File
/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */
#include "DSP2833x_Examples.h" // Examples Include File
/* Описывает структуру CPUTIMER_VARS CpuTimer0;; порядок полей определяет расположение данных. */
struct CPUTIMER_VARS CpuTimer0;
// CpuTimer 1 and CpuTimer2 are used by DSP BIOS & other RTOS. Comment out if using DSP BIOS or other RTOS.
/* Описывает структуру CPUTIMER_VARS CpuTimer1;; порядок полей определяет расположение данных. */
struct CPUTIMER_VARS CpuTimer1;
/* Описывает структуру CPUTIMER_VARS CpuTimer2;; порядок полей определяет расположение данных. */
struct CPUTIMER_VARS CpuTimer2;
//---------------------------------------------------------------------------
@@ -38,30 +32,21 @@ struct CPUTIMER_VARS CpuTimer2;
//---------------------------------------------------------------------------
// This function initializes all three CPU timers to a known state.
//
/* Начинает функцию InitCpuTimers; назначение модуля — поставляемое TI описание CpuTimers для семейства C2833x. */
void InitCpuTimers(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// CPU Timer 0
// Initialize address pointers to respective timer registers:
/* Записывает CpuTimer0.RegsAddr значением &CpuTimer0Regs; данные RegsAddr. */
CpuTimer0.RegsAddr = &CpuTimer0Regs;
// Initialize timer period to maximum:
/* Записывает CpuTimer0Regs.PRD.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */
CpuTimer0Regs.PRD.all = 0xFFFFFFFF;
// Initialize pre-scale counter to divide by 1 (SYSCLKOUT):
/* Записывает CpuTimer0Regs.TPR.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
CpuTimer0Regs.TPR.all = 0;
/* Записывает CpuTimer0Regs.TPRH.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
CpuTimer0Regs.TPRH.all = 0;
// Make sure timer is stopped:
/* Записывает CpuTimer0Regs.TCR.bit.TSS значением 1; данные TSS. */
CpuTimer0Regs.TCR.bit.TSS = 1;
// Reload all counter register with period value:
/* Записывает CpuTimer0Regs.TCR.bit.TRB значением 1; данные TRB. */
CpuTimer0Regs.TCR.bit.TRB = 1;
// Reset interrupt counters:
/* Записывает CpuTimer0.InterruptCount значением 0; прерывание число. */
CpuTimer0.InterruptCount = 0;
@@ -70,41 +55,26 @@ void InitCpuTimers(void)
// DSP-BIOS or another realtime OS.
//
// Initialize address pointers to respective timer registers:
/* Записывает CpuTimer1.RegsAddr значением &CpuTimer1Regs; данные RegsAddr. */
CpuTimer1.RegsAddr = &CpuTimer1Regs;
/* Записывает CpuTimer2.RegsAddr значением &CpuTimer2Regs; данные RegsAddr. */
CpuTimer2.RegsAddr = &CpuTimer2Regs;
// Initialize timer period to maximum:
/* Записывает CpuTimer1Regs.PRD.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */
CpuTimer1Regs.PRD.all = 0xFFFFFFFF;
/* Записывает CpuTimer2Regs.PRD.all значением 0xFFFFFFFF; представление регистра целым словом без разбиения на битовые поля. */
CpuTimer2Regs.PRD.all = 0xFFFFFFFF;
// Initialize pre-scale counter to divide by 1 (SYSCLKOUT):
/* Записывает CpuTimer1Regs.TPR.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
CpuTimer1Regs.TPR.all = 0;
/* Записывает CpuTimer1Regs.TPRH.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
CpuTimer1Regs.TPRH.all = 0;
/* Записывает CpuTimer2Regs.TPR.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
CpuTimer2Regs.TPR.all = 0;
/* Записывает CpuTimer2Regs.TPRH.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
CpuTimer2Regs.TPRH.all = 0;
// Make sure timers are stopped:
/* Записывает CpuTimer1Regs.TCR.bit.TSS значением 1; данные TSS. */
CpuTimer1Regs.TCR.bit.TSS = 1;
/* Записывает CpuTimer2Regs.TCR.bit.TSS значением 1; данные TSS. */
CpuTimer2Regs.TCR.bit.TSS = 1;
// Reload all counter register with period value:
/* Записывает CpuTimer1Regs.TCR.bit.TRB значением 1; данные TRB. */
CpuTimer1Regs.TCR.bit.TRB = 1;
/* Записывает CpuTimer2Regs.TCR.bit.TRB значением 1; данные TRB. */
CpuTimer2Regs.TCR.bit.TRB = 1;
// Reset interrupt counters:
/* Записывает CpuTimer1.InterruptCount значением 0; прерывание число. */
CpuTimer1.InterruptCount = 0;
/* Записывает CpuTimer2.InterruptCount значением 0; прерывание число. */
CpuTimer2.InterruptCount = 0;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
//---------------------------------------------------------------------------
@@ -115,45 +85,29 @@ void InitCpuTimers(void)
// and the period in "uSeconds". The timer is held in the stopped state
// after configuration.
//
/* Начинает функцию ConfigCpuTimer; назначение модуля — поставляемое TI описание CpuTimers для семейства C2833x. */
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет temp — данные temp. */
Uint32 temp;
// Initialize timer period:
/* Записывает Timer->CPUFreqInMHz значением Freq; таймер CPU Freq In M Hz. */
Timer->CPUFreqInMHz = Freq;
/* Записывает Timer->PeriodInUSec значением Period; таймер период In U Sec. */
Timer->PeriodInUSec = Period;
/* Записывает temp значением (long) (Freq * Period); данные temp. */
temp = (long) (Freq * Period);
/* Записывает Timer->RegsAddr->PRD.all значением temp; представление регистра целым словом без разбиения на битовые поля. */
Timer->RegsAddr->PRD.all = temp;
// Set pre-scale counter to divide by 1 (SYSCLKOUT):
/* Записывает Timer->RegsAddr->TPR.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
Timer->RegsAddr->TPR.all = 0;
/* Записывает Timer->RegsAddr->TPRH.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
Timer->RegsAddr->TPRH.all = 0;
// Initialize timer control register:
/* Записывает Timer->RegsAddr->TCR.bit.TSS значением 1; данные TSS. */
Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer
/* Записывает Timer->RegsAddr->TCR.bit.TRB значением 1; данные TRB. */
Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer
/* Записывает Timer->RegsAddr->TCR.bit.SOFT значением 0; данные SOFT. */
Timer->RegsAddr->TCR.bit.SOFT = 0;
/* Записывает Timer->RegsAddr->TCR.bit.FREE значением 0; данные FREE. */
Timer->RegsAddr->TCR.bit.FREE = 0; // Timer Free Run Disabled
/* Записывает Timer->RegsAddr->TCR.bit.TIE значением 1; данные TIE. */
Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt
// Reset interrupt counter:
/* Записывает Timer->InterruptCount значением 0; таймер прерывание число. */
Timer->InterruptCount = 0;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
//===========================================================================

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание PieCtrl для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/1 $
// Checkin $Date: August 18, 2006 13:46:35 $
//###########################################################################
@@ -12,107 +11,70 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
//---------------------------------------------------------------------------
// InitPieCtrl:
// InitPieCtrl:
//---------------------------------------------------------------------------
// This function initializes the PIE control registers to a known state.
//
/* Начинает функцию InitPieCtrl; назначение модуля — поставляемое TI описание PieCtrl для семейства C2833x. */
void InitPieCtrl(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Disable Interrupts at the CPU level:
/* Запрет маскируемых прерываний ядра. */
DINT;
// Disable the PIE
/* Записывает PieCtrlRegs.PIECTRL.bit.ENPIE значением 0; данные ENPIE. */
PieCtrlRegs.PIECTRL.bit.ENPIE = 0;
// Clear all PIEIER registers:
/* Записывает PieCtrlRegs.PIEIER1.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all = 0;
/* Записывает PieCtrlRegs.PIEIER2.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all = 0;
/* Записывает PieCtrlRegs.PIEIER3.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all = 0;
/* Записывает PieCtrlRegs.PIEIER4.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all = 0;
PieCtrlRegs.PIEIER4.all = 0;
/* Записывает PieCtrlRegs.PIEIER5.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER5.all = 0;
/* Записывает PieCtrlRegs.PIEIER6.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all = 0;
/* Записывает PieCtrlRegs.PIEIER7.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all = 0;
/* Записывает PieCtrlRegs.PIEIER8.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER8.all = 0;
/* Записывает PieCtrlRegs.PIEIER9.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all = 0;
/* Записывает PieCtrlRegs.PIEIER10.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER10.all = 0;
/* Записывает PieCtrlRegs.PIEIER11.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER11.all = 0;
/* Записывает PieCtrlRegs.PIEIER12.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all = 0;
// Clear all PIEIFR registers:
/* Записывает PieCtrlRegs.PIEIFR1.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR1.all = 0;
/* Записывает PieCtrlRegs.PIEIFR2.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR2.all = 0;
/* Записывает PieCtrlRegs.PIEIFR3.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR3.all = 0;
/* Записывает PieCtrlRegs.PIEIFR4.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR3.all = 0;
PieCtrlRegs.PIEIFR4.all = 0;
/* Записывает PieCtrlRegs.PIEIFR5.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR5.all = 0;
/* Записывает PieCtrlRegs.PIEIFR6.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR6.all = 0;
/* Записывает PieCtrlRegs.PIEIFR7.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR7.all = 0;
/* Записывает PieCtrlRegs.PIEIFR8.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR8.all = 0;
/* Записывает PieCtrlRegs.PIEIFR9.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR9.all = 0;
/* Записывает PieCtrlRegs.PIEIFR10.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR10.all = 0;
/* Записывает PieCtrlRegs.PIEIFR11.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR11.all = 0;
/* Записывает PieCtrlRegs.PIEIFR12.all значением 0; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIFR12.all = 0;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
}
//---------------------------------------------------------------------------
// EnableInterrupts:
// EnableInterrupts:
//---------------------------------------------------------------------------
// This function enables the PIE module and CPU interrupts
//
/* Начинает функцию EnableInterrupts; назначение модуля — поставляемое TI описание PieCtrl для семейства C2833x. */
void EnableInterrupts()
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Enable the PIE
/* Записывает PieCtrlRegs.PIECTRL.bit.ENPIE значением 1; данные ENPIE. */
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
// Enables PIE to drive a pulse into the CPU
PieCtrlRegs.PIEACK.all = 0xFFFF;
// Enables PIE to drive a pulse into the CPU
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF;
// Enable Interrupts at the CPU level
/* Разрешение маскируемых прерываний ядра. */
// Enable Interrupts at the CPU level
EINT;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание PieVect для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/1 $
// Checkin $Date: August 18, 2006 13:46:38 $
//###########################################################################
@@ -12,335 +11,192 @@
// $Release Date: August 1, 2008 $
//###########################################################################
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
/* Записывает PieVectTableInit значением {; данные PieVectTableInit. */
const struct PIE_VECT_TABLE PieVectTableInit = {
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 0 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 1 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 2 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 3 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 4 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 5 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 6 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 7 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 8 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 9 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 10 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 11 Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // 12 Reserved space
PIE_RESERVED, // 1 Reserved space
PIE_RESERVED, // 2 Reserved space
PIE_RESERVED, // 3 Reserved space
PIE_RESERVED, // 4 Reserved space
PIE_RESERVED, // 5 Reserved space
PIE_RESERVED, // 6 Reserved space
PIE_RESERVED, // 7 Reserved space
PIE_RESERVED, // 8 Reserved space
PIE_RESERVED, // 9 Reserved space
PIE_RESERVED, // 10 Reserved space
PIE_RESERVED, // 11 Reserved space
PIE_RESERVED, // 12 Reserved space
// Non-Peripheral Interrupts
/* Продолжает список аргументов, полей или выражение INT13_ISR,; порядок элементов сохраняется. */
INT13_ISR, // XINT13 or CPU-Timer 1
/* Продолжает список аргументов, полей или выражение INT14_ISR,; порядок элементов сохраняется. */
INT14_ISR, // CPU-Timer2
/* Продолжает список аргументов, полей или выражение DATALOG_ISR,; порядок элементов сохраняется. */
DATALOG_ISR, // Datalogging interrupt
/* Продолжает список аргументов, полей или выражение RTOSINT_ISR,; порядок элементов сохраняется. */
RTOSINT_ISR, // RTOS interrupt
/* Продолжает список аргументов, полей или выражение EMUINT_ISR,; порядок элементов сохраняется. */
EMUINT_ISR, // Emulation interrupt
/* Продолжает список аргументов, полей или выражение NMI_ISR,; порядок элементов сохраняется. */
NMI_ISR, // Non-maskable interrupt
/* Продолжает список аргументов, полей или выражение ILLEGAL_ISR,; порядок элементов сохраняется. */
ILLEGAL_ISR, // Illegal operation TRAP
/* Продолжает список аргументов, полей или выражение USER1_ISR,; порядок элементов сохраняется. */
USER1_ISR, // User Defined trap 1
/* Продолжает список аргументов, полей или выражение USER2_ISR,; порядок элементов сохраняется. */
USER2_ISR, // User Defined trap 2
/* Продолжает список аргументов, полей или выражение USER3_ISR,; порядок элементов сохраняется. */
USER3_ISR, // User Defined trap 3
/* Продолжает список аргументов, полей или выражение USER4_ISR,; порядок элементов сохраняется. */
USER4_ISR, // User Defined trap 4
/* Продолжает список аргументов, полей или выражение USER5_ISR,; порядок элементов сохраняется. */
USER5_ISR, // User Defined trap 5
/* Продолжает список аргументов, полей или выражение USER6_ISR,; порядок элементов сохраняется. */
USER6_ISR, // User Defined trap 6
/* Продолжает список аргументов, полей или выражение USER7_ISR,; порядок элементов сохраняется. */
USER7_ISR, // User Defined trap 7
/* Продолжает список аргументов, полей или выражение USER8_ISR,; порядок элементов сохраняется. */
USER8_ISR, // User Defined trap 8
/* Продолжает список аргументов, полей или выражение USER9_ISR,; порядок элементов сохраняется. */
USER9_ISR, // User Defined trap 9
/* Продолжает список аргументов, полей или выражение USER10_ISR,; порядок элементов сохраняется. */
USER10_ISR, // User Defined trap 10
/* Продолжает список аргументов, полей или выражение USER11_ISR,; порядок элементов сохраняется. */
USER11_ISR, // User Defined trap 11
/* Продолжает список аргументов, полей или выражение USER12_ISR,; порядок элементов сохраняется. */
USER12_ISR, // User Defined trap 12
// Group 1 PIE Vectors
/* Продолжает список аргументов, полей или выражение SEQ1INT_ISR,; порядок элементов сохраняется. */
SEQ1INT_ISR, // 1.1 ADC
/* Продолжает список аргументов, полей или выражение SEQ2INT_ISR,; порядок элементов сохраняется. */
SEQ2INT_ISR, // 1.2 ADC
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
SEQ1INT_ISR, // 1.1 ADC
SEQ2INT_ISR, // 1.2 ADC
rsvd_ISR, // 1.3
/* Продолжает список аргументов, полей или выражение XINT1_ISR,; порядок элементов сохраняется. */
XINT1_ISR, // 1.4
/* Продолжает список аргументов, полей или выражение XINT2_ISR,; порядок элементов сохраняется. */
XINT1_ISR, // 1.4
XINT2_ISR, // 1.5
/* Продолжает список аргументов, полей или выражение ADCINT_ISR,; порядок элементов сохраняется. */
ADCINT_ISR, // 1.6 ADC
/* Продолжает список аргументов, полей или выражение TINT0_ISR,; порядок элементов сохраняется. */
TINT0_ISR, // 1.7 Timer 0
/* Продолжает список аргументов, полей или выражение WAKEINT_ISR,; порядок элементов сохраняется. */
WAKEINT_ISR, // 1.8 WD, Low Power
// Group 2 PIE Vectors
/* Продолжает список аргументов, полей или выражение EPWM1_TZINT_ISR,; порядок элементов сохраняется. */
EPWM1_TZINT_ISR, // 2.1 EPWM-1 Trip Zone
/* Продолжает список аргументов, полей или выражение EPWM2_TZINT_ISR,; порядок элементов сохраняется. */
EPWM2_TZINT_ISR, // 2.2 EPWM-2 Trip Zone
/* Продолжает список аргументов, полей или выражение EPWM3_TZINT_ISR,; порядок элементов сохраняется. */
EPWM3_TZINT_ISR, // 2.3 EPWM-3 Trip Zone
/* Продолжает список аргументов, полей или выражение EPWM4_TZINT_ISR,; порядок элементов сохраняется. */
EPWM4_TZINT_ISR, // 2.4 EPWM-4 Trip Zone
/* Продолжает список аргументов, полей или выражение EPWM5_TZINT_ISR,; порядок элементов сохраняется. */
EPWM5_TZINT_ISR, // 2.5 EPWM-5 Trip Zone
/* Продолжает список аргументов, полей или выражение EPWM6_TZINT_ISR,; порядок элементов сохраняется. */
EPWM6_TZINT_ISR, // 2.6 EPWM-6 Trip Zone
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
EPWM6_TZINT_ISR, // 2.6 EPWM-6 Trip Zone
rsvd_ISR, // 2.7
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 2.8
// Group 3 PIE Vectors
/* Продолжает список аргументов, полей или выражение EPWM1_INT_ISR,; порядок элементов сохраняется. */
EPWM1_INT_ISR, // 3.1 EPWM-1 Interrupt
/* Продолжает список аргументов, полей или выражение EPWM2_INT_ISR,; порядок элементов сохраняется. */
EPWM2_INT_ISR, // 3.2 EPWM-2 Interrupt
/* Продолжает список аргументов, полей или выражение EPWM3_INT_ISR,; порядок элементов сохраняется. */
EPWM3_INT_ISR, // 3.3 EPWM-3 Interrupt
/* Продолжает список аргументов, полей или выражение EPWM4_INT_ISR,; порядок элементов сохраняется. */
EPWM4_INT_ISR, // 3.4 EPWM-4 Interrupt
/* Продолжает список аргументов, полей или выражение EPWM5_INT_ISR,; порядок элементов сохраняется. */
EPWM5_INT_ISR, // 3.5 EPWM-5 Interrupt
/* Продолжает список аргументов, полей или выражение EPWM6_INT_ISR,; порядок элементов сохраняется. */
EPWM6_INT_ISR, // 3.6 EPWM-6 Interrupt
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
EPWM6_INT_ISR, // 3.6 EPWM-6 Interrupt
rsvd_ISR, // 3.7
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 3.8
// Group 4 PIE Vectors
/* Продолжает список аргументов, полей или выражение ECAP1_INT_ISR,; порядок элементов сохраняется. */
ECAP1_INT_ISR, // 4.1 ECAP-1
/* Продолжает список аргументов, полей или выражение ECAP2_INT_ISR,; порядок элементов сохраняется. */
ECAP2_INT_ISR, // 4.2 ECAP-2
/* Продолжает список аргументов, полей или выражение ECAP3_INT_ISR,; порядок элементов сохраняется. */
ECAP3_INT_ISR, // 4.3 ECAP-3
/* Продолжает список аргументов, полей или выражение ECAP4_INT_ISR,; порядок элементов сохраняется. */
ECAP4_INT_ISR, // 4.4 ECAP-4
/* Продолжает список аргументов, полей или выражение ECAP5_INT_ISR,; порядок элементов сохраняется. */
ECAP5_INT_ISR, // 4.5 ECAP-5
/* Продолжает список аргументов, полей или выражение ECAP6_INT_ISR,; порядок элементов сохраняется. */
ECAP6_INT_ISR, // 4.6 ECAP-6
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 4.7
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 4.8
ECAP4_INT_ISR, // 4.4 ECAP-4
ECAP5_INT_ISR, // 4.5 ECAP-5
ECAP6_INT_ISR, // 4.6 ECAP-6
rsvd_ISR, // 4.7
rsvd_ISR, // 4.8
// Group 5 PIE Vectors
/* Продолжает список аргументов, полей или выражение EQEP1_INT_ISR,; порядок элементов сохраняется. */
EQEP1_INT_ISR, // 5.1 EQEP-1
/* Продолжает список аргументов, полей или выражение EQEP2_INT_ISR,; порядок элементов сохраняется. */
EQEP2_INT_ISR, // 5.2 EQEP-2
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 5.3
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 5.4
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 5.5
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 5.6
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 5.7
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 5.8
rsvd_ISR, // 5.3
rsvd_ISR, // 5.4
rsvd_ISR, // 5.5
rsvd_ISR, // 5.6
rsvd_ISR, // 5.7
rsvd_ISR, // 5.8
// Group 6 PIE Vectors
/* Продолжает список аргументов, полей или выражение SPIRXINTA_ISR,; порядок элементов сохраняется. */
SPIRXINTA_ISR, // 6.1 SPI-A
/* Продолжает список аргументов, полей или выражение SPITXINTA_ISR,; порядок элементов сохраняется. */
SPITXINTA_ISR, // 6.2 SPI-A
/* Продолжает список аргументов, полей или выражение MRINTA_ISR,; порядок элементов сохраняется. */
MRINTA_ISR, // 6.3 McBSP-A
/* Продолжает список аргументов, полей или выражение MXINTA_ISR,; порядок элементов сохраняется. */
MXINTA_ISR, // 6.4 McBSP-A
/* Продолжает список аргументов, полей или выражение MRINTB_ISR,; порядок элементов сохраняется. */
MRINTB_ISR, // 6.5 McBSP-B
/* Продолжает список аргументов, полей или выражение MXINTB_ISR,; порядок элементов сохраняется. */
MXINTB_ISR, // 6.6 McBSP-B
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 6.7
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 6.8
rsvd_ISR, // 6.7
rsvd_ISR, // 6.8
// Group 7 PIE Vectors
/* Продолжает список аргументов, полей или выражение DINTCH1_ISR,; порядок элементов сохраняется. */
DINTCH1_ISR, // 7.1 DMA channel 1
/* Продолжает список аргументов, полей или выражение DINTCH2_ISR,; порядок элементов сохраняется. */
DINTCH1_ISR, // 7.1 DMA channel 1
DINTCH2_ISR, // 7.2 DMA channel 2
/* Продолжает список аргументов, полей или выражение DINTCH3_ISR,; порядок элементов сохраняется. */
DINTCH3_ISR, // 7.3 DMA channel 3
/* Продолжает список аргументов, полей или выражение DINTCH4_ISR,; порядок элементов сохраняется. */
DINTCH4_ISR, // 7.4 DMA channel 4
/* Продолжает список аргументов, полей или выражение DINTCH5_ISR,; порядок элементов сохраняется. */
DINTCH5_ISR, // 7.5 DMA channel 5
/* Продолжает список аргументов, полей или выражение DINTCH6_ISR,; порядок элементов сохраняется. */
DINTCH6_ISR, // 7.6 DMA channel 6
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 7.7
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 7.8
DINTCH3_ISR, // 7.3 DMA channel 3
DINTCH4_ISR, // 7.4 DMA channel 4
DINTCH5_ISR, // 7.5 DMA channel 5
DINTCH6_ISR, // 7.6 DMA channel 6
rsvd_ISR, // 7.7
rsvd_ISR, // 7.8
// Group 8 PIE Vectors
/* Продолжает список аргументов, полей или выражение I2CINT1A_ISR,; порядок элементов сохраняется. */
I2CINT1A_ISR, // 8.1 I2C
/* Продолжает список аргументов, полей или выражение I2CINT2A_ISR,; порядок элементов сохраняется. */
I2CINT1A_ISR, // 8.1 I2C
I2CINT2A_ISR, // 8.2 I2C
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 8.3
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 8.4
/* Продолжает список аргументов, полей или выражение SCIRXINTC_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 8.3
rsvd_ISR, // 8.4
SCIRXINTC_ISR, // 8.5 SCI-C
/* Продолжает список аргументов, полей или выражение SCITXINTC_ISR,; порядок элементов сохраняется. */
SCITXINTC_ISR, // 8.6 SCI-C
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 8.7
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 8.8
// Group 9 PIE Vectors
/* Продолжает список аргументов, полей или выражение SCIRXINTA_ISR,; порядок элементов сохраняется. */
SCITXINTC_ISR, // 8.6 SCI-C
rsvd_ISR, // 8.7
rsvd_ISR, // 8.8
// Group 9 PIE Vectors
SCIRXINTA_ISR, // 9.1 SCI-A
/* Продолжает список аргументов, полей или выражение SCITXINTA_ISR,; порядок элементов сохраняется. */
SCITXINTA_ISR, // 9.2 SCI-A
/* Продолжает список аргументов, полей или выражение SCIRXINTB_ISR,; порядок элементов сохраняется. */
SCIRXINTB_ISR, // 9.3 SCI-B
/* Продолжает список аргументов, полей или выражение SCITXINTB_ISR,; порядок элементов сохраняется. */
SCITXINTB_ISR, // 9.4 SCI-B
/* Продолжает список аргументов, полей или выражение ECAN0INTA_ISR,; порядок элементов сохраняется. */
ECAN0INTA_ISR, // 9.5 eCAN-A
/* Продолжает список аргументов, полей или выражение ECAN1INTA_ISR,; порядок элементов сохраняется. */
ECAN1INTA_ISR, // 9.6 eCAN-A
/* Продолжает список аргументов, полей или выражение ECAN0INTB_ISR,; порядок элементов сохраняется. */
ECAN0INTB_ISR, // 9.7 eCAN-B
/* Продолжает список аргументов, полей или выражение ECAN1INTB_ISR,; порядок элементов сохраняется. */
ECAN1INTB_ISR, // 9.8 eCAN-B
// Group 10 PIE Vectors
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 10.1
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 10.1
rsvd_ISR, // 10.2
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 10.3
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 10.4
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 10.5
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 10.6
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 10.7
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 10.8
rsvd_ISR, // 10.3
rsvd_ISR, // 10.4
rsvd_ISR, // 10.5
rsvd_ISR, // 10.6
rsvd_ISR, // 10.7
rsvd_ISR, // 10.8
// Group 11 PIE Vectors
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 11.1
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 11.1
rsvd_ISR, // 11.2
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 11.3
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 11.4
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 11.5
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 11.6
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 11.7
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 11.3
rsvd_ISR, // 11.4
rsvd_ISR, // 11.5
rsvd_ISR, // 11.6
rsvd_ISR, // 11.7
rsvd_ISR, // 11.8
// Group 12 PIE Vectors
/* Продолжает список аргументов, полей или выражение XINT3_ISR,; порядок элементов сохраняется. */
XINT3_ISR, // 12.1
/* Продолжает список аргументов, полей или выражение XINT4_ISR,; порядок элементов сохраняется. */
XINT3_ISR, // 12.1
XINT4_ISR, // 12.2
/* Продолжает список аргументов, полей или выражение XINT5_ISR,; порядок элементов сохраняется. */
XINT5_ISR, // 12.3
/* Продолжает список аргументов, полей или выражение XINT6_ISR,; порядок элементов сохраняется. */
XINT6_ISR, // 12.4
/* Продолжает список аргументов, полей или выражение XINT7_ISR,; порядок элементов сохраняется. */
XINT7_ISR, // 12.5
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // 12.6
/* Продолжает список аргументов, полей или выражение LVF_ISR,; порядок элементов сохраняется. */
LVF_ISR, // 12.7
/* Продолжает список аргументов, полей или выражение LUF_ISR,; порядок элементов сохраняется. */
LUF_ISR, // 12.8
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
XINT5_ISR, // 12.3
XINT6_ISR, // 12.4
XINT7_ISR, // 12.5
rsvd_ISR, // 12.6
LVF_ISR, // 12.7
LUF_ISR, // 12.8
};
//---------------------------------------------------------------------------
// InitPieVectTable:
// InitPieVectTable:
//---------------------------------------------------------------------------
// This function initializes the PIE vector table to a known state.
// This function must be executed after boot time.
//
/* Начинает функцию InitPieVectTable; назначение модуля — поставляемое TI описание PieVect для семейства C2833x. */
void InitPieVectTable(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Продолжает список аргументов, полей или выражение int16 i;; порядок элементов сохраняется. */
int16 i;
/* Объявляет Source — данные Source; PieVectTableInit — данные PieVectTableInit. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */
Uint32 *Source = (void *) &PieVectTableInit;
/* Объявляет Dest — данные Dest; PieVectTable — данные PieVectTable. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */
Uint32 *Dest = (void *) &PieVectTable;
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Цикл for(i=0; i < 128; i++); задаёт начальное значение, условие продолжения и шаг перебора. */
EALLOW;
for(i=0; i < 128; i++)
/* Изменяет счётчик в выражении *Dest++ = *Source++; на один для следующего шага. */
*Dest++ = *Source++;
/* Закрытие доступа к защищённым регистрам периферии. */
*Dest++ = *Source++;
EDIS;
// Enable the PIE Vector Table
/* Записывает PieCtrlRegs.PIECTRL.bit.ENPIE значением 1; данные ENPIE. */
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
}
//===========================================================================

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание SWPrioritizedDefaultIsr для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/5 $
// Checkin $Date: January 14, 2008 11:28:12 $
//###########################################################################
@@ -14,388 +13,259 @@
//###########################################################################
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */
#include "DSP2833x_SWPrioritizedIsrLevels.h"
// Connected to INT13 of CPU (use MINT13 mask):
// Note CPU-Timer1 is reserved for TI use, however XINT13
// ISR can be used by the user.
/* Условие компиляции (INT13PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (INT13PL != 0)
/* Объявляет обработчик INT13_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void INT13_ISR(void) // INT13 or CPU-Timer1
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Устанавливает биты IER значением MINT13; регистр разрешения прерываний ядра C28x. */
IER |= MINT13; // Set "global" priority
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to INT14 of CPU (use MINT14 mask):
/* Условие компиляции (INT14PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (INT14PL != 0)
/* Объявляет обработчик INT14_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void INT14_ISR(void) // CPU-Timer2
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Устанавливает биты IER значением MINT14; регистр разрешения прерываний ядра C28x. */
IER |= MINT14; // Set "global" priority
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to INT15 of CPU (use MINT15 mask):
/* Условие компиляции (INT15PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (INT15PL != 0)
/* Объявляет обработчик DATALOG_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DATALOG_ISR(void) // Datalogging interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Устанавливает биты IER значением MINT15; регистр разрешения прерываний ядра C28x. */
IER |= MINT15; // Set "global" priority
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to INT16 of CPU (use MINT16 mask):
/* Условие компиляции (INT16PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (INT16PL != 0)
/* Объявляет обработчик RTOSINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void RTOSINT_ISR(void) // RTOS interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Устанавливает биты IER значением MINT16; регистр разрешения прерываний ядра C28x. */
IER |= MINT16; // Set "global" priority
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to EMUINT of CPU (non-maskable):
/* Объявляет обработчик EMUINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EMUINT_ISR(void) // Emulation interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
// Connected to NMI of CPU (non-maskable):
/* Объявляет обработчик NMI_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void NMI_ISR(void) // Non-maskable interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик ILLEGAL_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ILLEGAL_ISR(void) // Illegal operation TRAP
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER1_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER1_ISR(void) // User Defined trap 1
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER2_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER2_ISR(void) // User Defined trap 2
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER3_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER3_ISR(void) // User Defined trap 3
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER4_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER4_ISR(void) // User Defined trap 4
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER5_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER5_ISR(void) // User Defined trap 5
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER6_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER6_ISR(void) // User Defined trap 6
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER7_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER7_ISR(void) // User Defined trap 7
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER8_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER8_ISR(void) // User Defined trap 8
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER9_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER9_ISR(void) // User Defined trap 9
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER10_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER10_ISR(void) // User Defined trap 10
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER11_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER11_ISR(void) // User Defined trap 11
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик USER12_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void USER12_ISR(void) // User Defined trap 12
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
@@ -404,65 +274,41 @@ interrupt void USER12_ISR(void) // User Defined trap 12
// -----------------------------------------------------------
// Connected to PIEIER1_1 (use MINT1 and MG11 masks):
/* Условие компиляции (G11PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G11PL != 0)
/* Объявляет обработчик SEQ1INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SEQ1INT_ISR( void ) // ADC
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// 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; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER1_2 (use MINT1 and MG12 masks):
/* Условие компиляции (G12PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G12PL != 0)
/* Объявляет обработчик SEQ2INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SEQ2INT_ISR( void ) // ADC
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// 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 значением MG12; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all &= MG12; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
@@ -471,78 +317,50 @@ interrupt void SEQ2INT_ISR( void ) // ADC
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER1_4 (use MINT1 and MG14 masks):
/* Условие компиляции (G14PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G14PL != 0)
/* Объявляет обработчик XINT1_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT1_ISR(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all;
/* Устанавливает биты IER значением MINT1; регистр разрешения прерываний ядра C28x. */
IER |= MINT1; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG14; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all &= MG14; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER1_5 (use MINT1 and MG15 masks):
/* Условие компиляции (G15PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G15PL != 0)
/* Объявляет обработчик XINT2_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT2_ISR(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER1.all;
/* Устанавливает биты IER значением MINT1; регистр разрешения прерываний ядра C28x. */
IER |= MINT1; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER1.all значением MG15; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all &= MG15; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
@@ -550,143 +368,92 @@ interrupt void XINT2_ISR(void)
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER1_6 (use MINT1 and MG16 masks):
/* Условие компиляции (G16PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G16PL != 0)
/* Объявляет обработчик ADCINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ADCINT_ISR(void) // ADC
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// 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 значением MG16; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all &= MG16; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER1_7 (use MINT1 and MG17 masks):
/* Условие компиляции (G17PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G17PL != 0)
/* Объявляет обработчик TINT0_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void TINT0_ISR(void) // CPU-Timer 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 значением MG17; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all &= MG17; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER1_8 (use MINT1 and MG18 masks):
/* Условие компиляции (G18PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G18PL != 0)
/* Объявляет обработчик WAKEINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void WAKEINT_ISR(void) // WD/LPM
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// 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 значением MG18; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all &= MG18; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER1.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER1.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
@@ -695,247 +462,157 @@ interrupt void WAKEINT_ISR(void) // WD/LPM
// -----------------------------------------------------------
// Connected to PIEIER2_1 (use MINT2 and MG21 masks):
/* Условие компиляции (G21PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G21PL != 0)
/* Объявляет обработчик EPWM1_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM1_TZINT_ISR(void) // ePWM1 Trip Zone
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all;
/* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */
IER |= M_INT2;
/* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */
IER &= MINT2; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG21; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all &= MG21; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER2_2 (use MINT2 and MG22 masks):
/* Условие компиляции (G22PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G22PL != 0)
/* Объявляет обработчик EPWM2_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM2_TZINT_ISR(void) // ePWM2 Trip Zone
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all;
/* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */
IER |= M_INT2;
/* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */
IER &= MINT2; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG22; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all &= MG22; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER2_3 (use MINT2 and MG23 masks):
/* Условие компиляции (G23PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G23PL != 0)
/* Объявляет обработчик EPWM3_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM3_TZINT_ISR(void) // ePWM3 Trip Zone
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all;
/* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */
IER |= M_INT2;
/* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */
IER &= MINT2; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG23; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all &= MG23; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER2_4 (use MINT2 and MG24 masks):
/* Условие компиляции (G24PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G24PL != 0)
/* Объявляет обработчик EPWM4_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM4_TZINT_ISR(void) // ePWM4 Trip Zone
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all;
/* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */
IER |= M_INT2;
/* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */
IER &= MINT2; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG24; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all &= MG24; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER2_5 (use MINT2 and MG25 masks):
/* Условие компиляции (G25PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G25PL != 0)
/* Объявляет обработчик EPWM5_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM5_TZINT_ISR(void) // ePWM5 Trip Zone
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all;
/* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */
IER |= M_INT2;
/* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */
IER &= MINT2; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG25; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all &= MG25; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER2_6 (use MINT2 and MG26 masks):
/* Условие компиляции (G26PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G26PL != 0)
/* Объявляет обработчик EPWM6_TZINT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM6_TZINT_ISR(void) // ePWM6 Trip Zone
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER2.all;
/* Устанавливает биты IER значением M_INT2; регистр разрешения прерываний ядра C28x. */
IER |= M_INT2;
/* Оставляет биты маски IER значением MINT2; регистр разрешения прерываний ядра C28x. */
IER &= MINT2; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER2.all значением MG26; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all &= MG26; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER2.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER2.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
@@ -945,247 +622,157 @@ interrupt void EPWM6_TZINT_ISR(void) // ePWM6 Trip Zone
// Connected to PIEIER3_1 (use MINT3 and MG31 masks):
/* Условие компиляции (G31PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G31PL != 0)
/* Объявляет обработчик EPWM1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM1_INT_ISR(void) // ePWM1 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all;
/* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */
IER |= M_INT3;
/* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */
IER &= MINT3; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG31; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all &= MG31; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER3_2 (use MINT3 and MG32 masks):
/* Условие компиляции (G32PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G32PL != 0)
/* Объявляет обработчик EPWM2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM2_INT_ISR(void) // ePWM2 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all;
/* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */
IER |= M_INT3;
/* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */
IER &= MINT3; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG32; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all &= MG32; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER3_3 (use MINT3 and MG33 masks):
/* Условие компиляции (G33PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G33PL != 0)
/* Объявляет обработчик EPWM3_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM3_INT_ISR(void) // ePWM3 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all;
/* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */
IER |= M_INT3;
/* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */
IER &= MINT3; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG33; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all &= MG33; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER3_4 (use MINT3 and MG34 masks):
/* Условие компиляции (G34PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G34PL != 0)
/* Объявляет обработчик EPWM4_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM4_INT_ISR(void) // ePWM4 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all;
/* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */
IER |= M_INT3;
/* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */
IER &= MINT3; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG34; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all &= MG34; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER3_5 (use MINT3 and MG35 masks):
/* Условие компиляции (G35PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G35PL != 0)
/* Объявляет обработчик EPWM5_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM5_INT_ISR(void) // ePWM5 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all;
/* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */
IER |= M_INT3;
/* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */
IER &= MINT3; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG35; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all &= MG35; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER3_6 (use MINT3 and MG36 masks):
/* Условие компиляции (G36PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G36PL != 0)
/* Объявляет обработчик EPWM6_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EPWM6_INT_ISR(void) // ePWM6 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER3.all;
/* Устанавливает биты IER значением M_INT3; регистр разрешения прерываний ядра C28x. */
IER |= M_INT3;
/* Оставляет биты маски IER значением MINT3; регистр разрешения прерываний ядра C28x. */
IER &= MINT3; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER3.all значением MG36; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all &= MG36; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER3.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER3.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
@@ -1195,249 +782,159 @@ interrupt void EPWM6_INT_ISR(void) // ePWM6 Interrupt
// Connected to PIEIER4_1 (use MINT4 and MG41 masks):
/* Условие компиляции (G41PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G41PL != 0)
/* Объявляет обработчик ECAP1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP1_INT_ISR(void) // eCAP1 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all;
/* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */
IER |= M_INT4;
/* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */
IER &= MINT4; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG41; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all &= MG41; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER4_2 (use MINT4 and MG42 masks):
/* Условие компиляции (G42PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G42PL != 0)
/* Объявляет обработчик ECAP2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP2_INT_ISR(void) // eCAP2 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER5.all;
/* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */
IER |= M_INT4;
/* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */
IER &= MINT4; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG42; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all &= MG42; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER4_3 (use MINT4 and MG43 masks):
/* Условие компиляции (G43PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G43PL != 0)
/* Объявляет обработчик ECAP3_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP3_INT_ISR(void) // eCAP3 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all;
/* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */
IER |= M_INT4;
/* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */
IER &= MINT4; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG43; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all &= MG43; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER4_4 (use MINT4 and MG44 masks):
/* Условие компиляции (G44PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G44PL != 0)
/* Объявляет обработчик ECAP4_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP4_INT_ISR(void) // eCAP4 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all;
/* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */
IER |= M_INT4;
/* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */
IER &= MINT4; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG44; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all &= MG44; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER4_5 (use MINT4 and MG45 masks):
/* Условие компиляции (G45PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G45PL != 0)
/* Объявляет обработчик ECAP5_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP5_INT_ISR(void) // eCAP5 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all;
/* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */
IER |= M_INT4;
/* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */
IER &= MINT4; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG45; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all &= MG45; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER4_6 (use MINT4 and MG46 masks):
/* Условие компиляции (G46PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G46PL != 0)
/* Объявляет обработчик ECAP6_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAP6_INT_ISR(void) // eCAP6 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER4.all;
/* Устанавливает биты IER значением M_INT4; регистр разрешения прерываний ядра C28x. */
IER |= M_INT4;
/* Оставляет биты маски IER значением MINT4; регистр разрешения прерываний ядра C28x. */
IER &= MINT4; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER4.all значением MG46; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all &= MG46; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER4.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER4.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
@@ -1447,87 +944,57 @@ interrupt void ECAP6_INT_ISR(void) // eCAP6 Interrupt
// -----------------------------------------------------------
// Connected to PIEIER5_1 (use MINT5 and MG51 masks):
/* Условие компиляции (G51PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G51PL != 0)
/* Объявляет обработчик EQEP1_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EQEP1_INT_ISR(void) // eQEP1 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER5.all;
/* Устанавливает биты IER значением M_INT5; регистр разрешения прерываний ядра C28x. */
IER |= M_INT5;
/* Оставляет биты маски IER значением MINT5; регистр разрешения прерываний ядра C28x. */
IER &= MINT5; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER5.all значением MG51; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER5.all &= MG51; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER5.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER5.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER5_2 (use MINT5 and MG52 masks):
/* Условие компиляции (G52PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G52PL != 0)
/* Объявляет обработчик EQEP2_INT_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void EQEP2_INT_ISR(void) // eQEP2 Interrupt
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER5.all;
/* Устанавливает биты IER значением M_INT5; регистр разрешения прерываний ядра C28x. */
IER |= M_INT5;
/* Оставляет биты маски IER значением MINT5; регистр разрешения прерываний ядра C28x. */
IER &= MINT5; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER5.all значением MG52; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER5.all &= MG52; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER5.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER5.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// -----------------------------------------------------------
@@ -1535,250 +1002,160 @@ interrupt void EQEP2_INT_ISR(void) // eQEP2 Interrupt
// -----------------------------------------------------------
// Connected to PIEIER6_1 (use MINT6 and MG61 masks):
/* Условие компиляции (G61PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G61PL != 0)
/* Объявляет обработчик SPIRXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SPIRXINTA_ISR(void) // SPI-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all;
/* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */
IER |= M_INT6;
/* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */
IER &= MINT6; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG61; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all &= MG61; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER6_2 (use MINT6 and MG62 masks):
/* Условие компиляции (G62PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G62PL != 0)
/* Объявляет обработчик SPITXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SPITXINTA_ISR(void) // SPI-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all;
/* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */
IER |= M_INT6;
/* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */
IER &= MINT6; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG62; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all &= MG62; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER6_3 (use MINT6 and MG63 masks):
/* Условие компиляции (G63PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G63PL != 0)
/* Объявляет обработчик MRINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void MRINTB_ISR(void) // McBSP-B
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all;
/* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */
IER |= M_INT6;
/* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */
IER &= MINT6; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG63; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all &= MG63; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER6_4 (use MINT6 and MG64 masks):
/* Условие компиляции (G64PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G64PL != 0)
/* Объявляет обработчик MXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void MXINTB_ISR(void) // McBSP-B
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all;
/* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */
IER |= M_INT6;
/* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */
IER &= MINT6; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG64; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all &= MG64; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER6_5 (use MINT6 and MG65 masks):
/* Условие компиляции (G65PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G65PL != 0)
/* Объявляет обработчик MRINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void MRINTA_ISR(void) // McBSP-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all;
/* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */
IER |= M_INT6;
/* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */
IER &= MINT6; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG65; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all &= MG65; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER6_6 (use MINT6 and MG66 masks):
/* Условие компиляции (G66PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G66PL != 0)
/* Объявляет обработчик MXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void MXINTA_ISR(void) // McBSP-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER6.all;
/* Устанавливает биты IER значением M_INT6; регистр разрешения прерываний ядра C28x. */
IER |= M_INT6;
/* Оставляет биты маски IER значением MINT6; регистр разрешения прерываний ядра C28x. */
IER &= MINT6; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG66; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all &= MG66; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER6.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
@@ -1787,250 +1164,160 @@ interrupt void MXINTA_ISR(void) // McBSP-A
// -----------------------------------------------------------
// Connected to PIEIER7_1 (use MINT7 and MG71 masks):
/* Условие компиляции (G71PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G71PL != 0)
/* Объявляет обработчик DINTCH1_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH1_ISR(void) // DMA
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all;
/* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */
IER |= M_INT7;
/* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */
IER &= MINT7; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG71; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all &= MG71; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER7_2 (use MINT7 and MG72 masks):
/* Условие компиляции (G72PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G72PL != 0)
/* Объявляет обработчик DINTCH2_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH2_ISR(void) // DMA
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all;
/* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */
IER |= M_INT7;
/* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */
IER &= MINT7; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG72; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all &= MG72; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER7_3 (use MINT7 and MG73 masks):
/* Условие компиляции (G73PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G73PL != 0)
/* Объявляет обработчик DINTCH3_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH3_ISR(void) // DMA
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all;
/* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */
IER |= M_INT7;
/* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */
IER &= MINT7; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG73; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all &= MG73; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER7_4 (use MINT7 and MG74 masks):
/* Условие компиляции (G74PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G74PL != 0)
/* Объявляет обработчик DINTCH4_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH4_ISR(void) // DMA
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all;
/* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */
IER |= M_INT7;
/* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */
IER &= MINT7; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG74; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all &= MG74; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER7_5 (use MINT7 and MG75 masks):
/* Условие компиляции (G75PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G75PL != 0)
/* Объявляет обработчик DINTCH5_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH5_ISR(void) // DMA
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all;
/* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */
IER |= M_INT7;
/* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */
IER &= MINT7; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG75; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all &= MG75; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER7_6 (use MINT7 and MG76 masks):
/* Условие компиляции (G76PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G76PL != 0)
/* Объявляет обработчик DINTCH6_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void DINTCH6_ISR(void) // DMA
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER7.all;
/* Устанавливает биты IER значением M_INT7; регистр разрешения прерываний ядра C28x. */
IER |= M_INT7;
/* Оставляет биты маски IER значением MINT7; регистр разрешения прерываний ядра C28x. */
IER &= MINT7; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER7.all значением MG76; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all &= MG76; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER7.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER7.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
@@ -2039,167 +1326,107 @@ interrupt void DINTCH6_ISR(void) // DMA
// -----------------------------------------------------------
// Connected to PIEIER8_1 (use MINT8 and MG81 masks):
/* Условие компиляции (G81PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G81PL != 0)
/* Объявляет обработчик I2CINT1A_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void I2CINT1A_ISR(void) // I2C-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all;
/* Устанавливает биты IER значением M_INT8; регистр разрешения прерываний ядра C28x. */
IER |= M_INT8;
/* Оставляет биты маски IER значением MINT8; регистр разрешения прерываний ядра C28x. */
IER &= MINT8; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG81; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all &= MG81; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER8.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER8.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER8_2 (use MINT8 and MG82 masks):
/* Условие компиляции (G82PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G82PL != 0)
/* Объявляет обработчик I2CINT2A_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void I2CINT2A_ISR(void) // I2C-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all;
/* Устанавливает биты IER значением M_INT8; регистр разрешения прерываний ядра C28x. */
IER |= M_INT8;
/* Оставляет биты маски IER значением MINT8; регистр разрешения прерываний ядра C28x. */
IER &= MINT8; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER8.all значением MG82; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER8.all &= MG82; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER8.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER8.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER8_5 (use MINT8 and MG85 masks):
/* Условие компиляции (G85PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G85PL != 0)
/* Объявляет обработчик SCIRXINTC_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCIRXINTC_ISR(void) // SCI-C
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all;
/* Устанавливает биты IER значением M_INT8; регистр разрешения прерываний ядра C28x. */
IER |= M_INT8;
/* Оставляет биты маски IER значением MINT8; регистр разрешения прерываний ядра C28x. */
IER &= MINT8; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER6.all значением MG85; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER6.all &= MG85; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER8.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER8.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER8_6 (use MINT8 and MG86 masks):
/* Условие компиляции (G82PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G82PL != 0)
/* Объявляет обработчик SCITXINTC_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCITXINTC_ISR(void) // SCI-C
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER8.all;
/* Устанавливает биты IER значением M_INT8; регистр разрешения прерываний ядра C28x. */
IER |= M_INT8;
/* Оставляет биты маски IER значением MINT8; регистр разрешения прерываний ядра C28x. */
IER &= MINT8; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER8.all значением MG86; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER8.all &= MG86; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER8.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER8.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// -----------------------------------------------------------
@@ -2207,332 +1434,212 @@ interrupt void SCITXINTC_ISR(void) // SCI-C
// -----------------------------------------------------------
// Connected to PIEIER9_1 (use MINT9 and MG91 masks):
/* Условие компиляции (G91PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G91PL != 0)
/* Объявляет обработчик SCIRXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCIRXINTA_ISR(void) // SCI-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all;
/* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */
IER |= M_INT9;
/* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */
IER &= MINT9; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG91; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all &= MG91; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER9_2 (use MINT9 and MG92 masks):
/* Условие компиляции (G92PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G92PL != 0)
/* Объявляет обработчик SCITXINTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCITXINTA_ISR(void) // SCI-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all;
/* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */
IER |= M_INT9;
/* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */
IER &= MINT9; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG92; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all &= MG92; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER9_3 (use MINT9 and MG93 masks):
/* Условие компиляции (G93PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G93PL != 0)
/* Объявляет обработчик SCIRXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCIRXINTB_ISR(void) // SCI-B
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all;
/* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */
IER |= M_INT9;
/* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */
IER &= MINT9; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG93; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all &= MG93; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER9_4 (use MINT9 and MG94 masks):
/* Условие компиляции (G94PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G94PL != 0)
/* Объявляет обработчик SCITXINTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void SCITXINTB_ISR(void) // SCI-B
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all;
/* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */
IER |= M_INT9;
/* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */
IER &= MINT9; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG94; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all &= MG94; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER9_5 (use MINT9 and MG95 masks):
/* Условие компиляции (G95PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G95PL != 0)
/* Объявляет обработчик ECAN0INTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAN0INTA_ISR(void) // eCAN-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all;
/* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */
IER |= M_INT9;
/* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */
IER &= MINT9; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG95; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all &= MG95; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER9_6 (use MINT9 and MG96 masks):
/* Условие компиляции (G96PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G96PL != 0)
/* Объявляет обработчик ECAN1INTA_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAN1INTA_ISR(void) // eCAN-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all;
/* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */
IER |= M_INT9;
/* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */
IER &= MINT9; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG96; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all &= MG96; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER9_7 (use MINT9 and MG97 masks):
/* Условие компиляции (G97PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G97PL != 0)
/* Объявляет обработчик ECAN0INTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAN0INTB_ISR(void) // eCAN-B
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all;
/* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */
IER |= M_INT9;
/* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */
IER &= MINT9; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG97; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all &= MG97; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER9_8 (use MINT9 and MG98 masks):
/* Условие компиляции (G98PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G98PL != 0)
/* Объявляет обработчик ECAN1INTB_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void ECAN1INTB_ISR(void) // eCAN-B
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all;
/* Устанавливает биты IER значением M_INT9; регистр разрешения прерываний ядра C28x. */
IER |= M_INT9;
/* Оставляет биты маски IER значением MINT9; регистр разрешения прерываний ядра C28x. */
IER &= MINT9; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER9.all значением MG98; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all &= MG98; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER9.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER9.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// -----------------------------------------------------------
@@ -2546,291 +1653,186 @@ interrupt void ECAN1INTB_ISR(void) // eCAN-B
// -----------------------------------------------------------
// Connected to PIEIER9_1 (use MINT12 and MG121 masks):
/* Условие компиляции (G121PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G121PL != 0)
/* Объявляет обработчик XINT3_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT3_ISR(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all;
/* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */
IER |= M_INT12;
/* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */
IER &= MINT12; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG121; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all &= MG121; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER12_2 (use MINT12 and MG122 masks):
/* Условие компиляции (G122PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G122PL != 0)
/* Объявляет обработчик XINT4_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT4_ISR(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all;
/* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */
IER |= M_INT12;
/* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */
IER &= MINT12; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG122; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all &= MG122; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER12_3 (use MINT12 and MG123 masks):
/* Условие компиляции (G123PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G123PL != 0)
/* Объявляет обработчик XINT5_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT5_ISR(void) // SCI-B
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all;
/* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */
IER |= M_INT12;
/* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */
IER &= MINT12; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG123; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all &= MG123; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER12_4 (use MINT12 and MG124 masks):
/* Условие компиляции (G124PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G124PL != 0)
/* Объявляет обработчик XINT6_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT6_ISR(void) // SCI-B
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all;
/* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */
IER |= M_INT12;
/* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */
IER &= MINT12; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG124; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all &= MG124; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER12_5 (use MINT12 and MG125 masks):
/* Условие компиляции (G125PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G125PL != 0)
/* Объявляет обработчик XINT7_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void XINT7_ISR(void) // eCAN-A
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all;
/* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */
IER |= M_INT12;
/* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */
IER &= MINT12; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG125; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all &= MG125; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER12_7 (use MINT12 and MG127 masks):
/* Условие компиляции (G127PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G127PL != 0)
/* Объявляет обработчик LVF_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void LVF_ISR(void) // FPU
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all;
/* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */
IER |= M_INT12;
/* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */
IER &= MINT12; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG127; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all &= MG127; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Connected to PIEIER12_8 (use MINT12 and MG128 masks):
/* Условие компиляции (G128PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G128PL != 0)
/* Объявляет обработчик LUF_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void LUF_ISR(void) // FPU
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Set interrupt priority:
/* Объявляет TempPIEIER — сохранённая маска разрешённых прерываний группы PIE. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER12.all;
/* Устанавливает биты IER значением M_INT12; регистр разрешения прерываний ядра C28x. */
IER |= M_INT12;
/* Оставляет биты маски IER значением MINT12; регистр разрешения прерываний ядра C28x. */
IER &= MINT12; // Set "global" priority
/* Оставляет биты маски PieCtrlRegs.PIEIER12.all значением MG128; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all &= MG128; // Set "group" priority
/* Записывает PieCtrlRegs.PIEACK.all значением 0xFFFF; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEACK.all = 0xFFFF; // Enable PIE interrupts
/* Разрешение маскируемых прерываний ядра. */
EINT;
// Insert ISR Code here.......
// Restore registers saved:
/* Запрет маскируемых прерываний ядра. */
DINT;
/* Записывает PieCtrlRegs.PIEIER12.all значением TempPIEIER; представление регистра целым словом без разбиения на битовые поля. */
PieCtrlRegs.PIEIER12.all = TempPIEIER;
// Next two lines for debug only to halt the processor here
// Remove after inserting ISR Code
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
@@ -2838,37 +1840,22 @@ interrupt void LUF_ISR(void) // FPU
// Catch All Default ISRs:
//
/* Начинает функцию PIE_RESERVED; назначение модуля — поставляемое TI описание SWPrioritizedDefaultIsr для семейства C2833x. */
interrupt void PIE_RESERVED(void) // Reserved space. For test.
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик INT_NOTUSED_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void INT_NOTUSED_ISR(void) // Reserved space. For test.
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Объявляет обработчик rsvd_ISR; обслуживает источник прерывания и его аппаратные флаги. */
interrupt void rsvd_ISR(void) // For test
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm (" ESTOP0");
/* Цикл for(;;);; задаёт начальное значение, условие продолжения и шаг перебора. */
for(;;);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
//===========================================================================

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание SWPrioritizedPieVect для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/2 $
// Checkin $Date: April 4, 2007 14:25:31 $
//###########################################################################
@@ -8,895 +7,503 @@
// TITLE: DSP2833x Devices SW Prioritized PIE Vector Table Initialization.
//
//###########################################################################
//
//
// Original Source by A.T.
//
// $TI Release: DSP2833x/DSP2823x Header Files V1.20 $
// $Release Date: August 1, 2008 $
//###########################################################################
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
/* Подключает "DSP2833x_SWPrioritizedIsrLevels.h": поставляемое TI описание SWPrioritizedIsrLevels для семейства C2833x. */
#include "DSP2833x_SWPrioritizedIsrLevels.h"
#include "DSP2833x_SWPrioritizedIsrLevels.h"
/* Записывает PieVectTableInit значением {; данные PieVectTableInit. */
const struct PIE_VECT_TABLE PieVectTableInit = {
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // Reserved space
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
/* Продолжает список аргументов, полей или выражение PIE_RESERVED,; порядок элементов сохраняется. */
PIE_RESERVED, // reserved
// Non-Peripheral Interrupts:
/* Условие компиляции (INT13PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (INT13PL != 0)
/* Продолжает список аргументов, полей или выражение INT13_ISR,; порядок элементов сохраняется. */
INT13_ISR, // XINT13
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (INT14PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (INT14PL != 0)
/* Продолжает список аргументов, полей или выражение INT14_ISR,; порядок элементов сохраняется. */
INT14_ISR, // CPU-Timer2
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (INT15PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (INT15PL != 0)
/* Продолжает список аргументов, полей или выражение DATALOG_ISR,; порядок элементов сохраняется. */
DATALOG_ISR, // Datalogging interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (INT16PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (INT16PL != 0)
/* Продолжает список аргументов, полей или выражение RTOSINT_ISR,; порядок элементов сохраняется. */
RTOSINT_ISR, // RTOS interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR, // reserved interrupt
/* Продолжает список аргументов, полей или выражение NMI_ISR,; порядок элементов сохраняется. */
NMI_ISR, // Non-maskable interrupt
/* Продолжает список аргументов, полей или выражение ILLEGAL_ISR,; порядок элементов сохраняется. */
ILLEGAL_ISR, // Illegal operation TRAP
/* Продолжает список аргументов, полей или выражение USER1_ISR,; порядок элементов сохраняется. */
USER1_ISR, // User Defined trap 1
/* Продолжает список аргументов, полей или выражение USER2_ISR,; порядок элементов сохраняется. */
USER2_ISR, // User Defined trap 2
/* Продолжает список аргументов, полей или выражение USER3_ISR,; порядок элементов сохраняется. */
USER3_ISR, // User Defined trap 3
/* Продолжает список аргументов, полей или выражение USER4_ISR,; порядок элементов сохраняется. */
USER4_ISR, // User Defined trap 4
/* Продолжает список аргументов, полей или выражение USER5_ISR,; порядок элементов сохраняется. */
USER5_ISR, // User Defined trap 5
/* Продолжает список аргументов, полей или выражение USER6_ISR,; порядок элементов сохраняется. */
USER6_ISR, // User Defined trap 6
/* Продолжает список аргументов, полей или выражение USER7_ISR,; порядок элементов сохраняется. */
USER7_ISR, // User Defined trap 7
/* Продолжает список аргументов, полей или выражение USER8_ISR,; порядок элементов сохраняется. */
USER8_ISR, // User Defined trap 8
/* Продолжает список аргументов, полей или выражение USER9_ISR,; порядок элементов сохраняется. */
USER9_ISR, // User Defined trap 9
/* Продолжает список аргументов, полей или выражение USER10_ISR,; порядок элементов сохраняется. */
USER10_ISR, // User Defined trap 10
/* Продолжает список аргументов, полей или выражение USER11_ISR,; порядок элементов сохраняется. */
USER11_ISR, // User Defined trap 11
/* Продолжает список аргументов, полей или выражение USER12_ISR,; порядок элементов сохраняется. */
USER12_ISR, // User Defined trap 12
// Group 1 PIE Vectors:
/* Условие компиляции (G11PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G11PL != 0)
/* Продолжает список аргументов, полей или выражение SEQ1INT_ISR,; порядок элементов сохраняется. */
SEQ1INT_ISR, // ADC
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G12PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G12PL != 0)
/* Продолжает список аргументов, полей или выражение SEQ2INT_ISR,; порядок элементов сохраняется. */
SEQ2INT_ISR, // ADC
/* Выбирает альтернативный блок текущего условия компиляции. */
SEQ2INT_ISR, // ADC
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Условие компиляции (G14PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G14PL != 0)
/* Продолжает список аргументов, полей или выражение XINT1_ISR,; порядок элементов сохраняется. */
XINT1_ISR, // External
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G15PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G15PL != 0)
/* Продолжает список аргументов, полей или выражение XINT2_ISR,; порядок элементов сохраняется. */
XINT2_ISR, // External
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G16PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G16PL != 0)
/* Продолжает список аргументов, полей или выражение ADCINT_ISR,; порядок элементов сохраняется. */
ADCINT_ISR, // ADC
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G17PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G17PL != 0)
/* Продолжает список аргументов, полей или выражение TINT0_ISR,; порядок элементов сохраняется. */
TINT0_ISR, // Timer 0
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G18PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G18PL != 0)
/* Продолжает список аргументов, полей или выражение WAKEINT_ISR,; порядок элементов сохраняется. */
WAKEINT_ISR, // WD & Low Power
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Group 2 PIE Vectors:
/* Условие компиляции (G21PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G21PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM1_TZINT_ISR,; порядок элементов сохраняется. */
EPWM1_TZINT_ISR, // ePWM1 Trip Zone
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G22PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G22PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM2_TZINT_ISR,; порядок элементов сохраняется. */
EPWM2_TZINT_ISR, // ePWM2 Trip Zone
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G23PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G23PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM3_TZINT_ISR,; порядок элементов сохраняется. */
EPWM3_TZINT_ISR, // ePWM3 Trip Zone
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G24PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G24PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM4_TZINT_ISR,; порядок элементов сохраняется. */
EPWM4_TZINT_ISR, // ePWM4 Trip Zone
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G25PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G25PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM5_TZINT_ISR,; порядок элементов сохраняется. */
EPWM5_TZINT_ISR, // ePWM5 Trip Zone
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G26PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G26PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM6_TZINT_ISR,; порядок элементов сохраняется. */
EPWM6_TZINT_ISR, // ePWM6 Trip Zone
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
// Group 3 PIE Vectors:
/* Условие компиляции (G31PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G31PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM1_INT_ISR,; порядок элементов сохраняется. */
EPWM1_INT_ISR, // ePWM1 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G32PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G32PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM2_INT_ISR,; порядок элементов сохраняется. */
EPWM2_INT_ISR, // ePWM2 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G33PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G33PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM3_INT_ISR,; порядок элементов сохраняется. */
EPWM3_INT_ISR, // ePWM3 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G34PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G34PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM4_INT_ISR,; порядок элементов сохраняется. */
EPWM4_INT_ISR, // ePWM4 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G35PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G35PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM5_INT_ISR,; порядок элементов сохраняется. */
EPWM5_INT_ISR, // ePWM5 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G36PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G36PL != 0)
/* Продолжает список аргументов, полей или выражение EPWM6_INT_ISR,; порядок элементов сохраняется. */
EPWM6_INT_ISR, // ePWM6 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
// Group 4 PIE Vectors:
/* Условие компиляции (G41PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G41PL != 0)
/* Продолжает список аргументов, полей или выражение ECAP1_INT_ISR,; порядок элементов сохраняется. */
ECAP1_INT_ISR, // eCAP1 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G42PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G42PL != 0)
/* Продолжает список аргументов, полей или выражение ECAP2_INT_ISR,; порядок элементов сохраняется. */
ECAP2_INT_ISR, // eCAP2 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G43PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G43PL != 0)
/* Продолжает список аргументов, полей или выражение ECAP3_INT_ISR,; порядок элементов сохраняется. */
ECAP3_INT_ISR, // eCAP3 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G44PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G44PL != 0)
/* Продолжает список аргументов, полей или выражение ECAP4_INT_ISR,; порядок элементов сохраняется. */
ECAP4_INT_ISR, // eCAP4 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G45PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G45PL != 0)
/* Продолжает список аргументов, полей или выражение ECAP5_INT_ISR,; порядок элементов сохраняется. */
ECAP5_INT_ISR, // eCAP5 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G46PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G46PL != 0)
/* Продолжает список аргументов, полей или выражение ECAP6_INT_ISR,; порядок элементов сохраняется. */
ECAP6_INT_ISR, // eCAP6 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
rsvd_ISR,
// Group 5 PIE Vectors:
/* Условие компиляции (G51PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G51PL != 0)
/* Продолжает список аргументов, полей или выражение EQEP1_INT_ISR,; порядок элементов сохраняется. */
EQEP1_INT_ISR, // eQEP1 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G52PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G52PL != 0)
/* Продолжает список аргументов, полей или выражение EQEP2_INT_ISR,; порядок элементов сохраняется. */
EQEP2_INT_ISR, // eQEP2 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
rsvd_ISR,
// Group 6 PIE Vectors:
/* Условие компиляции (G61PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G61PL != 0)
/* Продолжает список аргументов, полей или выражение SPIRXINTA_ISR,; порядок элементов сохраняется. */
SPIRXINTA_ISR, // SPI-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G62PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G62PL != 0)
/* Продолжает список аргументов, полей или выражение SPITXINTA_ISR,; порядок элементов сохраняется. */
SPITXINTA_ISR, // SPI-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G63PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G63PL != 0)
/* Продолжает список аргументов, полей или выражение MRINTB_ISR,; порядок элементов сохраняется. */
MRINTB_ISR, // McBSP-B
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G64PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G64PL != 0)
/* Продолжает список аргументов, полей или выражение MXINTB_ISR,; порядок элементов сохраняется. */
MXINTB_ISR, // McBSP-B
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G65PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G65PL != 0)
/* Продолжает список аргументов, полей или выражение MRINTA_ISR,; порядок элементов сохраняется. */
MRINTA_ISR, // McBSP-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G66PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G66PL != 0)
/* Продолжает список аргументов, полей или выражение MXINTA_ISR,; порядок элементов сохраняется. */
MXINTA_ISR, // McBSP-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
// Group 7 PIE Vectors:
/* Условие компиляции (G71PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G71PL != 0)
/* Продолжает список аргументов, полей или выражение DINTCH1_ISR,; порядок элементов сохраняется. */
DINTCH1_ISR, // DMA-Channel 1 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G72PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G72PL != 0)
/* Продолжает список аргументов, полей или выражение DINTCH2_ISR,; порядок элементов сохраняется. */
DINTCH2_ISR, // DMA-Channel 2 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G73PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G73PL != 0)
/* Продолжает список аргументов, полей или выражение DINTCH3_ISR,; порядок элементов сохраняется. */
DINTCH3_ISR, // DMA-Channel 3 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G74PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G74PL != 0)
/* Продолжает список аргументов, полей или выражение DINTCH4_ISR,; порядок элементов сохраняется. */
DINTCH4_ISR, // DMA-Channel 4 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G75PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G75PL != 0)
/* Продолжает список аргументов, полей или выражение DINTCH5_ISR,; порядок элементов сохраняется. */
DINTCH5_ISR, // DMA-Channel 5 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G76PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G76PL != 0)
/* Продолжает список аргументов, полей или выражение DINTCH6_ISR,; порядок элементов сохраняется. */
DINTCH6_ISR, // DMA-Channel 6 Interrupt
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
rsvd_ISR,
// Group 8 PIE Vectors:
/* Условие компиляции (G81PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G81PL != 0)
/* Продолжает список аргументов, полей или выражение I2CINT1A_ISR,; порядок элементов сохраняется. */
I2CINT1A_ISR, // I2C-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G82PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G82PL != 0)
/* Продолжает список аргументов, полей или выражение I2CINT2A_ISR,; порядок элементов сохраняется. */
I2CINT2A_ISR, // I2C-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Условие компиляции (G85PL != 0): выбранный блок включается в текущий вариант прошивки. */
rsvd_ISR,
rsvd_ISR,
#if (G85PL != 0)
/* Продолжает список аргументов, полей или выражение SCIRXINTC_ISR,; порядок элементов сохраняется. */
SCIRXINTC_ISR, // SCI-C
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G86PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G86PL != 0)
/* Продолжает список аргументов, полей или выражение SCITXINTC_ISR,; порядок элементов сохраняется. */
SCITXINTC_ISR, // SCI-C
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
// Group 9 PIE Vectors:
/* Условие компиляции (G91PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G91PL != 0)
/* Продолжает список аргументов, полей или выражение SCIRXINTA_ISR,; порядок элементов сохраняется. */
SCIRXINTA_ISR, // SCI-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G92PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G92PL != 0)
/* Продолжает список аргументов, полей или выражение SCITXINTA_ISR,; порядок элементов сохраняется. */
SCITXINTA_ISR, // SCI-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G93PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G93PL != 0)
/* Продолжает список аргументов, полей или выражение SCIRXINTB_ISR,; порядок элементов сохраняется. */
SCIRXINTB_ISR, // SCI-B
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G94PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G94PL != 0)
/* Продолжает список аргументов, полей или выражение SCITXINTB_ISR,; порядок элементов сохраняется. */
SCITXINTB_ISR, // SCI-B
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G95PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G95PL != 0)
/* Продолжает список аргументов, полей или выражение ECAN0INTA_ISR,; порядок элементов сохраняется. */
ECAN0INTA_ISR, // eCAN-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G96PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G96PL != 0)
/* Продолжает список аргументов, полей или выражение ECAN1INTA_ISR,; порядок элементов сохраняется. */
ECAN1INTA_ISR, // eCAN-A
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G97PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G97PL != 0)
/* Продолжает список аргументов, полей или выражение ECAN0INTB_ISR,; порядок элементов сохраняется. */
ECAN0INTB_ISR, // eCAN-B
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G98PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G98PL != 0)
/* Продолжает список аргументов, полей или выражение ECAN1INTB_ISR,; порядок элементов сохраняется. */
ECAN1INTB_ISR, // eCAN-B
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// Group 10 PIE Vectors
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
// Group 11 PIE Vectors
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
rsvd_ISR,
// Group 12 PIE Vectors
/* Условие компиляции (G121PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G121PL != 0)
/* Продолжает список аргументов, полей или выражение XINT3_ISR,; порядок элементов сохраняется. */
XINT3_ISR, // External interrupt 3
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G122PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G122PL != 0)
/* Продолжает список аргументов, полей или выражение XINT4_ISR,; порядок элементов сохраняется. */
XINT4_ISR, // External interrupt 4
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G123PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G123PL != 0)
/* Продолжает список аргументов, полей или выражение XINT5_ISR,; порядок элементов сохраняется. */
XINT5_ISR, // External interrupt 5
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G124PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G124PL != 0)
/* Продолжает список аргументов, полей или выражение XINT6_ISR,; порядок элементов сохраняется. */
XINT6_ISR, // External interrupt 6
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G125PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G125PL != 0)
/* Продолжает список аргументов, полей или выражение XINT7_ISR,; порядок элементов сохраняется. */
XINT7_ISR, // External interrupt 7
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
rsvd_ISR,
/* Условие компиляции (G127PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G127PL != 0)
/* Продолжает список аргументов, полей или выражение LVF_ISR,; порядок элементов сохраняется. */
LVF_ISR, // Latched overflow flag
/* Выбирает альтернативный блок текущего условия компиляции. */
LVF_ISR, // Latched overflow flag
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции (G128PL != 0): выбранный блок включается в текущий вариант прошивки. */
#if (G128PL != 0)
/* Продолжает список аргументов, полей или выражение LUF_ISR,; порядок элементов сохраняется. */
LUF_ISR, // Latched underflow flag
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Продолжает список аргументов, полей или выражение INT_NOTUSED_ISR,; порядок элементов сохраняется. */
INT_NOTUSED_ISR,
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
#endif
};
//---------------------------------------------------------------------------
// InitPieVectTable:
// InitPieVectTable:
//---------------------------------------------------------------------------
// This function initializes the PIE vector table to a known state.
// This function must be executed after boot time.
//
/* Начинает функцию InitPieVectTable; назначение модуля — поставляемое TI описание SWPrioritizedPieVect для семейства C2833x. */
void InitPieVectTable(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Продолжает список аргументов, полей или выражение int16 i;; порядок элементов сохраняется. */
int16 i;
/* Объявляет Source — данные Source; PieVectTableInit — данные PieVectTableInit. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */
Uint32 *Source = (void *) &PieVectTableInit;
/* Объявляет Dest — данные Dest; PieVectTable — данные PieVectTable. Хранит указатель на данные. Начальное значение задаётся справа от знака равенства. */
Uint32 *Dest = (void *) &PieVectTable;
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Цикл for(i=0; i < 128; i++) ; задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0; i < 128; i++) {
/* Изменяет счётчик в выражении *Dest++ = *Source++; на один для следующего шага. */
*Dest++ = *Source++;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
//===========================================================================

View File

@@ -1,4 +1,3 @@
/* Поставляемое TI описание SysCtrl для семейства C2833x. Русские пояснения сохранены в UTF-8. */
// TI File $Revision: /main/7 $
// Checkin $Date: September 20, 2007 13:30:31 $
//###########################################################################
@@ -17,9 +16,7 @@
//###########################################################################
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
#include "DSP2833x_Device.h" // Headerfile Include File
/* Подключает "DSP2833x_Examples.h": поставляемое TI описание Examples для семейства C2833x. */
#include "DSP2833x_Examples.h" // Examples Include File
//#include "RS485.h"
@@ -29,7 +26,6 @@
// a different section. This section will then be mapped to a load and
// run address using the linker cmd file.
/* Указание компилятору CODE_SECTION(InitFlash, "ramfuncs");: размещение данных или настройка обработки объявлений. */
#pragma CODE_SECTION(InitFlash, "ramfuncs");
//---------------------------------------------------------------------------
@@ -41,27 +37,20 @@
// - Set the pre-scaler for the high and low frequency peripheral clocks
// - Enable the clocks to the peripherals
/* Объявляет SYSCLKOUT — данные SYSCLKOUT; LSPCLK — данные LSPCLK; HSPCLK — данные HSPCLK. */
long SYSCLKOUT, LSPCLK, HSPCLK;
/* Начинает функцию InitSysCtrl; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */
void InitSysCtrl(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Disable the watchdog
/* Вызывает DisableDog с аргументами () в текущей последовательности операций. */
DisableDog();
// Initialize the PLL control: PLLCR and DIVSEL
// DSP28_PLLCR and DSP28_DIVSEL are defined in DSP2833x_Examples.h
/* Инициализирует модуль вызовом InitPll(DSP28_PLLCR,DSP28_DIVSEL); перед его дальнейшим использованием. */
InitPll(DSP28_PLLCR,DSP28_DIVSEL);
// Initialize the peripheral clocks
/* Инициализирует модуль вызовом InitPeripheralClocks(); перед его дальнейшим использованием. */
InitPeripheralClocks();
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
@@ -74,67 +63,48 @@ void InitSysCtrl(void)
// This function MUST be executed out of RAM. Executing it
// out of OTP/Flash will yield unpredictable results
/* Начинает функцию InitFlash; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */
void InitFlash(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
//Enable Flash Pipeline mode to improve performance
//of code executed from Flash.
/* Записывает FlashRegs.FOPT.bit.ENPIPE значением 1; данные ENPIPE. */
FlashRegs.FOPT.bit.ENPIPE = 1;
// CAUTION
//Minimum waitstates required for the flash operating
//at a given CPU rate must be characterized by TI.
//Refer to the datasheet for the latest information.
/* Условие компиляции CPU_FRQ_150MHZ: выбранный блок включается в текущий вариант прошивки. */
#if CPU_FRQ_150MHZ
//Set the Paged Waitstate for the Flash
/* Записывает FlashRegs.FBANKWAIT.bit.PAGEWAIT значением 5; данные PAGEWAIT. */
FlashRegs.FBANKWAIT.bit.PAGEWAIT = 5;
//Set the Random Waitstate for the Flash
/* Записывает FlashRegs.FBANKWAIT.bit.RANDWAIT значением 5; данные RANDWAIT. */
FlashRegs.FBANKWAIT.bit.RANDWAIT = 5;
//Set the Waitstate for the OTP
/* Записывает FlashRegs.FOTPWAIT.bit.OTPWAIT значением 8; данные OTPWAIT. */
FlashRegs.FOTPWAIT.bit.OTPWAIT = 8;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CPU_FRQ_100MHZ: выбранный блок включается в текущий вариант прошивки. */
#if CPU_FRQ_100MHZ
//Set the Paged Waitstate for the Flash
/* Записывает FlashRegs.FBANKWAIT.bit.PAGEWAIT значением 3; данные PAGEWAIT. */
FlashRegs.FBANKWAIT.bit.PAGEWAIT = 3;
//Set the Random Waitstate for the Flash
/* Записывает FlashRegs.FBANKWAIT.bit.RANDWAIT значением 3; данные RANDWAIT. */
FlashRegs.FBANKWAIT.bit.RANDWAIT = 3;
//Set the Waitstate for the OTP
/* Записывает FlashRegs.FOTPWAIT.bit.OTPWAIT значением 5; данные OTPWAIT. */
FlashRegs.FOTPWAIT.bit.OTPWAIT = 5;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
// CAUTION
//ONLY THE DEFAULT VALUE FOR THESE 2 REGISTERS SHOULD BE USED
/* Записывает FlashRegs.FSTDBYWAIT.bit.STDBYWAIT значением 0x01FF; данные STDBYWAIT. */
FlashRegs.FSTDBYWAIT.bit.STDBYWAIT = 0x01FF;
/* Записывает FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT значением 0x01FF; данные ACTIVEWAIT. */
FlashRegs.FACTIVEWAIT.bit.ACTIVEWAIT = 0x01FF;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
//Force a pipeline flush to ensure that the write to
//the last register configured occurs before returning.
/* Вызывает asm с аргументами (" RPT #7 || NOP") в текущей последовательности операций. */
asm(" RPT #7 || NOP");
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
@@ -144,27 +114,16 @@ void InitFlash(void)
// This function resets the watchdog timer.
// Enable this function for using ServiceDog in the application
/* Начинает функцию ServiceDog; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */
void ServiceDog(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Проверяет if(SysCtrlRegs.PLLCR.bit.DIV == DSP28_PLLCR); последующий оператор выполняется только при истинном условии. */
if(SysCtrlRegs.PLLCR.bit.DIV == DSP28_PLLCR)
/* Проверяет if(SysCtrlRegs.PLLSTS.bit.DIVSEL == DSP28_DIVSEL); последующий оператор выполняется только при истинном условии. */
if(SysCtrlRegs.PLLSTS.bit.DIVSEL == DSP28_DIVSEL)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Записывает SysCtrlRegs.WDKEY значением 0x0055; данные WDKEY. */
SysCtrlRegs.WDKEY = 0x0055;
/* Записывает SysCtrlRegs.WDKEY значением 0x00AA; данные WDKEY. */
SysCtrlRegs.WDKEY = 0x00AA;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
/* Завершает ServiceDog без возвращаемого значения. */
return;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
} }
@@ -173,17 +132,11 @@ void ServiceDog(void)
//---------------------------------------------------------------------------
// This function disables the watchdog timer.
/* Начинает функцию DisableDog; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */
void DisableDog(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Записывает SysCtrlRegs.WDCR значением 0x0068; данные WDCR. */
SysCtrlRegs.WDCR= 0x0068;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
//---------------------------------------------------------------------------
@@ -191,60 +144,40 @@ void DisableDog(void)
//---------------------------------------------------------------------------
// This function initializes the PLLCR register.
/* Начинает функцию InitPll; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */
void InitPll(Uint16 divval, Uint16 divsel)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет clkVal — данные clkVal. */
long clkVal;
// Make sure the PLL is not running in limp mode
/* Проверяет if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0); последующий оператор выполняется только при истинном условии. */
if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Missing external clock has been detected
// Replace this line with a call to an appropriate
// SystemShutdown(); function.
/* Вызывает asm с аргументами (" ESTOP0") в текущей последовательности операций. */
asm(" ESTOP0");
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
// DIVSEL MUST be 0 before PLLCR can be changed from
// 0x0000. It is set to 0 by an external reset XRSn
// This puts us in 1/4
/* Проверяет if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0); последующий оператор выполняется только при истинном условии. */
if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Записывает SysCtrlRegs.PLLSTS.bit.DIVSEL значением 0; данные DIVSEL. */
SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
// Change the PLLCR
// if (SysCtrlRegs.PLLCR.bit.DIV != val)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
// Before setting PLLCR turn off missing clock detect logic
/* Записывает SysCtrlRegs.PLLSTS.bit.MCLKOFF значением 1; данные MCLKOFF. */
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;
/* Записывает SysCtrlRegs.PLLCR.bit.DIV значением divval; данные DIV. */
SysCtrlRegs.PLLCR.bit.DIV = divval;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
/* Записывает clkVal значением (divval)?divval:1; данные clkVal. */
clkVal = (divval)?divval:1;
/* Записывает clkVal значением XCLKIN * clkVal; данные clkVal. */
clkVal = XCLKIN * clkVal;
// Optional: Wait for PLL to lock.
@@ -265,74 +198,47 @@ void InitPll(Uint16 divval, Uint16 divsel)
// the loop via ServiceDog().
// Uncomment to disable the watchdog
/* Вызывает DisableDog с аргументами () в текущей последовательности операций. */
DisableDog();
/* Повторяет или ожидает, пока выполняется while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1). */
while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
// Uncomment to service the watchdog
// ServiceDog();
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Записывает SysCtrlRegs.PLLSTS.bit.MCLKOFF значением 0; данные MCLKOFF. */
SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
// If switching to 1/2
/* Проверяет if((divsel == 1) или (divsel == 2)); последующий оператор выполняется только при истинном условии. */
if((divsel == 1)||(divsel == 2))
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Записывает SysCtrlRegs.PLLSTS.bit.DIVSEL значением divsel; данные DIVSEL. */
SysCtrlRegs.PLLSTS.bit.DIVSEL = divsel;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Проверяет if(divsel == 0) clkVal /= 4; последующий оператор выполняется только при истинном условии. */
if(divsel == 0) clkVal /= 4;
/* Проверяет if(divsel == 1) clkVal /= 4; последующий оператор выполняется только при истинном условии. */
if(divsel == 1) clkVal /= 4;
/* Проверяет if(divsel == 2) clkVal /= 2; последующий оператор выполняется только при истинном условии. */
if(divsel == 2) clkVal /= 2;
// If switching to 1/1
// * First go to 1/2 and let the power settle
// The time required will depend on the system, this is only an example
// * Then switch to 1/1
/* Проверяет if((divval == 0) и (divsel == 3)); последующий оператор выполняется только при истинном условии. */
if((divval == 0) && (divsel == 3))
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Записывает SysCtrlRegs.PLLSTS.bit.DIVSEL значением 2; данные DIVSEL. */
SysCtrlRegs.PLLSTS.bit.DIVSEL = 2;
/* Вызывает DELAY_US с аргументами (50L) в текущей последовательности операций. */
DELAY_US(50L);
// pause_us(50L);
/* Записывает SysCtrlRegs.PLLSTS.bit.DIVSEL значением 3; данные DIVSEL. */
SysCtrlRegs.PLLSTS.bit.DIVSEL = 3;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Записывает SYSCLKOUT значением clkVal; данные SYSCLKOUT. */
SYSCLKOUT = clkVal;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
//--------------------------------------------------------------------------
@@ -346,86 +252,52 @@ void InitPll(Uint16 divval, Uint16 divsel)
// Note: If a peripherals clock is not enabled then you cannot
// read or write to the registers for that peripheral
/* Начинает функцию InitPeripheralClocks; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */
void InitPeripheralClocks(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет Val — данные Val. */
long Val;
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
// HISPCP/LOSPCP prescale register settings, normally it will be set to default values
/* Условие компиляции CLKMULT == 0: выбранный блок включается в текущий вариант прошивки. */
#if CLKMULT == 0
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0000; представление регистра целым словом без разбиения на битовые поля. */
SysCtrlRegs.HISPCP.all = 0x0000;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT == 1: выбранный блок включается в текущий вариант прошивки. */
#endif
#if CLKMULT == 1
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0000; представление регистра целым словом без разбиения на битовые поля. */
SysCtrlRegs.HISPCP.all = 0x0000;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT == 2: выбранный блок включается в текущий вариант прошивки. */
#endif
#if CLKMULT == 2
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0001; представление регистра целым словом без разбиения на битовые поля. */
SysCtrlRegs.HISPCP.all = 0x0001;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT == 3: выбранный блок включается в текущий вариант прошивки. */
#endif
#if CLKMULT == 3
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0002; представление регистра целым словом без разбиения на битовые поля. */
SysCtrlRegs.HISPCP.all = 0x0002;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT == 4: выбранный блок включается в текущий вариант прошивки. */
#endif
#if CLKMULT == 4
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0002; представление регистра целым словом без разбиения на битовые поля. */
SysCtrlRegs.HISPCP.all = 0x0002;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Условие компиляции CLKMULT == 5: выбранный блок включается в текущий вариант прошивки. */
#endif
#if CLKMULT == 5
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0003; представление регистра целым словом без разбиения на битовые поля. */
SysCtrlRegs.HISPCP.all = 0x0003;
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Записывает SysCtrlRegs.LOSPCP.all значением 0x0000; представление регистра целым словом без разбиения на битовые поля. */
SysCtrlRegs.LOSPCP.all = 0x0000;
/* Записывает Val значением (SysCtrlRegs.HISPCP.all)?; данные Val. */
Val = (SysCtrlRegs.HISPCP.all)?
/* Продолжает список аргументов, полей или выражение SysCtrlRegs.HISPCP.all*2 : 1;; порядок элементов сохраняется. */
SysCtrlRegs.HISPCP.all*2 : 1;
/* Записывает Val значением SYSCLKOUT / Val; данные Val. */
Val = SYSCLKOUT / Val;
/* Записывает HSPCLK значением Val; данные HSPCLK. */
HSPCLK = Val;
/* Записывает Val значением (SysCtrlRegs.LOSPCP.all)?; данные Val. */
Val = (SysCtrlRegs.LOSPCP.all)?
/* Продолжает список аргументов, полей или выражение SysCtrlRegs.LOSPCP.all*2 : 1;; порядок элементов сохраняется. */
SysCtrlRegs.LOSPCP.all*2 : 1;
/* Записывает Val значением SYSCLKOUT / Val; данные Val. */
Val = SYSCLKOUT / Val;
/* Записывает LSPCLK значением Val; данные LSPCLK. */
LSPCLK = Val;
// XCLKOUT to SYSCLKOUT ratio. By default XCLKOUT = 1/4 SYSCLKOUT
// XTIMCLK = SYSCLKOUT/2
/* Записывает XintfRegs.XINTCNF2.bit.XTIMCLK значением 1; данные XTIMCLK. */
XintfRegs.XINTCNF2.bit.XTIMCLK = 1;
// XCLKOUT = XTIMCLK/2
/* Записывает XintfRegs.XINTCNF2.bit.CLKMODE значением 1; данные CLKMODE. */
XintfRegs.XINTCNF2.bit.CLKMODE = 1;
// Enable XCLKOUT
/* Записывает XintfRegs.XINTCNF2.bit.CLKOFF значением 0; данные CLKOFF. */
XintfRegs.XINTCNF2.bit.CLKOFF = 0;
// Peripheral clock enables set for the selected peripherals.
@@ -437,7 +309,6 @@ void InitPeripheralClocks(void)
//
// This function is not written to be an example of efficient code.
/* Записывает SysCtrlRegs.PCLKCR0.bit.ADCENCLK значением 1; данные ADCENCLK. */
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC
// *IMPORTANT*
@@ -450,80 +321,46 @@ void InitPeripheralClocks(void)
// See the device data manual and/or the ADC Reference
// Manual for more information.
/* Вызывает ADC_cal с аргументами () в текущей последовательности операций. */
ADC_cal();
/* Записывает SysCtrlRegs.PCLKCR0.bit.I2CAENCLK значением 1; данные I2CAENCLK. */
SysCtrlRegs.PCLKCR0.bit.I2CAENCLK = 1; // I2C
/* Записывает SysCtrlRegs.PCLKCR0.bit.SCIAENCLK значением 1; данные SCIAENCLK. */
SysCtrlRegs.PCLKCR0.bit.SCIAENCLK = 1; // SCI-A
/* Записывает SysCtrlRegs.PCLKCR0.bit.SCIBENCLK значением 1; данные SCIBENCLK. */
SysCtrlRegs.PCLKCR0.bit.SCIBENCLK = 1; // SCI-B
/* Записывает SysCtrlRegs.PCLKCR0.bit.SCICENCLK значением 1; данные SCICENCLK. */
SysCtrlRegs.PCLKCR0.bit.SCICENCLK = 1; // SCI-C
/* Записывает SysCtrlRegs.PCLKCR0.bit.SPIAENCLK значением 1; данные SPIAENCLK. */
SysCtrlRegs.PCLKCR0.bit.SPIAENCLK = 1; // SPI-A
/* Записывает SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK значением 1; данные MCBSPAENCLK. */
SysCtrlRegs.PCLKCR0.bit.MCBSPAENCLK = 1; // McBSP-A
/* Записывает SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK значением 1; данные MCBSPBENCLK. */
SysCtrlRegs.PCLKCR0.bit.MCBSPBENCLK = 1; // McBSP-B
/* Записывает SysCtrlRegs.PCLKCR0.bit.ECANAENCLK значением 1; данные ECANAENCLK. */
SysCtrlRegs.PCLKCR0.bit.ECANAENCLK=1; // eCAN-A
/* Записывает SysCtrlRegs.PCLKCR0.bit.ECANBENCLK значением 1; данные ECANBENCLK. */
SysCtrlRegs.PCLKCR0.bit.ECANBENCLK=1; // eCAN-B
/* Записывает SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC значением 0; данные TBCLKSYNC. */
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Disable TBCLK within the ePWM
/* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK значением 1; данные EPWM1ENCLK. */
SysCtrlRegs.PCLKCR1.bit.EPWM1ENCLK = 1; // ePWM1
/* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK значением 1; данные EPWM2ENCLK. */
SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK = 1; // ePWM2
/* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK значением 1; данные EPWM3ENCLK. */
SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK = 1; // ePWM3
/* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK значением 1; данные EPWM4ENCLK. */
SysCtrlRegs.PCLKCR1.bit.EPWM4ENCLK = 1; // ePWM4
/* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK значением 1; данные EPWM5ENCLK. */
SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK = 1; // ePWM5
/* Записывает SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK значением 1; данные EPWM6ENCLK. */
SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK = 1; // ePWM6
/* Записывает SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC значением 1; данные TBCLKSYNC. */
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // Enable TBCLK within the ePWM
/* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK значением 1; данные ECAP3ENCLK. */
SysCtrlRegs.PCLKCR1.bit.ECAP3ENCLK = 1; // eCAP3
/* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK значением 1; данные ECAP4ENCLK. */
SysCtrlRegs.PCLKCR1.bit.ECAP4ENCLK = 1; // eCAP4
/* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK значением 1; данные ECAP5ENCLK. */
SysCtrlRegs.PCLKCR1.bit.ECAP5ENCLK = 1; // eCAP5
/* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK значением 1; данные ECAP6ENCLK. */
SysCtrlRegs.PCLKCR1.bit.ECAP6ENCLK = 1; // eCAP6
/* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK значением 1; данные ECAP1ENCLK. */
SysCtrlRegs.PCLKCR1.bit.ECAP1ENCLK = 1; // eCAP1
/* Записывает SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK значением 1; данные ECAP2ENCLK. */
SysCtrlRegs.PCLKCR1.bit.ECAP2ENCLK = 1; // eCAP2
/* Записывает SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK значением 1; данные EQEP1ENCLK. */
SysCtrlRegs.PCLKCR1.bit.EQEP1ENCLK = 1; // eQEP1
/* Записывает SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK значением 1; данные EQEP2ENCLK. */
SysCtrlRegs.PCLKCR1.bit.EQEP2ENCLK = 1; // eQEP2
/* Записывает SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK значением 1; данные CPUTIMER0ENCLK. */
SysCtrlRegs.PCLKCR3.bit.CPUTIMER0ENCLK = 1; // CPU Timer 0
/* Записывает SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK значением 1; данные CPUTIMER1ENCLK. */
SysCtrlRegs.PCLKCR3.bit.CPUTIMER1ENCLK = 1; // CPU Timer 1
/* Записывает SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK значением 1; данные CPUTIMER2ENCLK. */
SysCtrlRegs.PCLKCR3.bit.CPUTIMER2ENCLK = 1; // CPU Timer 2
/* Записывает SysCtrlRegs.PCLKCR3.bit.DMAENCLK значением 1; данные DMAENCLK. */
SysCtrlRegs.PCLKCR3.bit.DMAENCLK = 1; // DMA Clock
/* Записывает SysCtrlRegs.PCLKCR3.bit.XINTFENCLK значением 1; данные XINTFENCLK. */
SysCtrlRegs.PCLKCR3.bit.XINTFENCLK = 1; // XTIMCLK
/* Записывает SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK значением 1; аппаратная линия ввода/вывода GPIOINENCLK. */
SysCtrlRegs.PCLKCR3.bit.GPIOINENCLK = 1; // GPIO input clock
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
//---------------------------------------------------------------------------
@@ -532,70 +369,44 @@ void InitPeripheralClocks(void)
// This function unlocks the CSM. User must replace 0xFFFF's with current
// password for the DSP. Returns 1 if unlock is successful.
/* Задаёт STATUS_FAIL = 0; состояние FAIL. */
#define STATUS_FAIL 0
/* Задаёт STATUS_SUCCESS = 1; состояние SUCCESS. */
#define STATUS_SUCCESS 1
/* Начинает функцию CsmUnlock; назначение модуля — поставляемое TI описание SysCtrl для семейства C2833x. */
Uint16 CsmUnlock()
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Объявляет temp — данные temp. volatile требует фактического чтения или записи при каждом доступе. */
volatile Uint16 temp;
// Load the key registers with the current password. The 0xFFFF's are dummy
// passwords. User should replace them with the correct password for the DSP.
/* Разрешение записи в защищённые регистры периферии. */
EALLOW;
/* Записывает CsmRegs.KEY0 значением 0xFFFF; данные KEY0. */
CsmRegs.KEY0 = 0xFFFF;
/* Записывает CsmRegs.KEY1 значением 0xFFFF; данные KEY1. */
CsmRegs.KEY1 = 0xFFFF;
/* Записывает CsmRegs.KEY2 значением 0xFFFF; данные KEY2. */
CsmRegs.KEY2 = 0xFFFF;
/* Записывает CsmRegs.KEY3 значением 0xFFFF; данные KEY3. */
CsmRegs.KEY3 = 0xFFFF;
/* Записывает CsmRegs.KEY4 значением 0xFFFF; данные KEY4. */
CsmRegs.KEY4 = 0xFFFF;
/* Записывает CsmRegs.KEY5 значением 0xFFFF; данные KEY5. */
CsmRegs.KEY5 = 0xFFFF;
/* Записывает CsmRegs.KEY6 значением 0xFFFF; данные KEY6. */
CsmRegs.KEY6 = 0xFFFF;
/* Записывает CsmRegs.KEY7 значением 0xFFFF; данные KEY7. */
CsmRegs.KEY7 = 0xFFFF;
/* Закрытие доступа к защищённым регистрам периферии. */
EDIS;
// Perform a dummy read of the password locations
// if they match the key values, the CSM will unlock
/* Записывает temp значением CsmPwl.PSWD0; данные temp. */
temp = CsmPwl.PSWD0;
/* Записывает temp значением CsmPwl.PSWD1; данные temp. */
temp = CsmPwl.PSWD1;
/* Записывает temp значением CsmPwl.PSWD2; данные temp. */
temp = CsmPwl.PSWD2;
/* Записывает temp значением CsmPwl.PSWD3; данные temp. */
temp = CsmPwl.PSWD3;
/* Записывает temp значением CsmPwl.PSWD4; данные temp. */
temp = CsmPwl.PSWD4;
/* Записывает temp значением CsmPwl.PSWD5; данные temp. */
temp = CsmPwl.PSWD5;
/* Записывает temp значением CsmPwl.PSWD6; данные temp. */
temp = CsmPwl.PSWD6;
/* Записывает temp значением CsmPwl.PSWD7; данные temp. */
temp = CsmPwl.PSWD7;
// If the CSM unlocked, return succes, otherwise return
// failure.
/* Проверяет if (CsmRegs.CSMSCR.bit.SECURE == 0) return STATUS_SUCCESS; последующий оператор выполняется только при истинном условии. */
if (CsmRegs.CSMSCR.bit.SECURE == 0) return STATUS_SUCCESS;
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
else return STATUS_FAIL;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}

Some files were not shown because too many files have changed in this diff Show More