Compare commits
22 Commits
ccs12
...
pm35-uart-
| Author | SHA1 | Date | |
|---|---|---|---|
| 04a9d989fb | |||
| fa20ed085b | |||
| 13e5bfe373 | |||
| 3ebfdca0a0 | |||
| fabd1bdf99 | |||
| 1e911e5250 | |||
| f741741cf8 | |||
| 378e06a281 | |||
| 5d9818291b | |||
| c6c9128238 | |||
| 419d6b17dc | |||
| e3d43ef279 | |||
| 34a95bc553 | |||
| 1ce42a1877 | |||
| 316dd52f99 | |||
| 2a9f42331c | |||
| ee7dce4615 | |||
| a3633d8ede | |||
| df719229b7 | |||
| 799e6ba46d | |||
| 341f194b4d | |||
| ed9680a36e |
6
.editorconfig
Normal file
6
.editorconfig
Normal file
@@ -0,0 +1,6 @@
|
||||
# Общая кодировка редактируемых файлов проекта.
|
||||
root = true
|
||||
|
||||
# Русские комментарии сохраняются без BOM в UTF-8.
|
||||
[*]
|
||||
charset = utf-8
|
||||
58
.gitignore
vendored
58
.gitignore
vendored
@@ -1,2 +1,60 @@
|
||||
# Исключает из 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
1
Bin/.gitignore
vendored
@@ -1 +1,2 @@
|
||||
# Исключает из Git артефакты по шаблону ниже.
|
||||
/UKSSTMS320F28335.out
|
||||
|
||||
41
Bin/EepromPublishFix/rebuild.py
Normal file
41
Bin/EepromPublishFix/rebuild.py
Normal file
File diff suppressed because one or more lines are too long
BIN
Bin/GAS_M95M02/UKSSTMS320F28335_GAS_M95M02.bin
Normal file
BIN
Bin/GAS_M95M02/UKSSTMS320F28335_GAS_M95M02.bin
Normal file
Binary file not shown.
41
Bin/GAS_M95M02/UKSSTMS320F28335_GAS_M95M02.bin.manifest.json
Normal file
41
Bin/GAS_M95M02/UKSSTMS320F28335_GAS_M95M02.bin.manifest.json
Normal file
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
1
Bin/GAS_M95M02/UKSSTMS320F28335_GAS_M95M02.bin.sha256
Normal file
1
Bin/GAS_M95M02/UKSSTMS320F28335_GAS_M95M02.bin.sha256
Normal file
@@ -0,0 +1 @@
|
||||
a1c186e5f114ea2f77ac5f18a60424c79f53b1e3a49e0343ac9bd96979f0347e UKSSTMS320F28335_GAS_M95M02.bin
|
||||
16
Bin/GAS_M95M02/profile-comparison.json
Normal file
16
Bin/GAS_M95M02/profile-comparison.json
Normal file
@@ -0,0 +1,16 @@
|
||||
[
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
358
Bin/IndicatorTimingCompare/A_delay_before_clock_fall/kanal.c
Normal file
358
Bin/IndicatorTimingCompare/A_delay_before_clock_fall/kanal.c
Normal file
@@ -0,0 +1,358 @@
|
||||
/* Последовательный вывод данных канала индикации. Русские пояснения сохранены в 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();
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
358
Bin/IndicatorTimingCompare/B_delay_after_clock_fall/kanal.c
Normal file
358
Bin/IndicatorTimingCompare/B_delay_after_clock_fall/kanal.c
Normal file
@@ -0,0 +1,358 @@
|
||||
/* Последовательный вывод данных канала индикации. Русские пояснения сохранены в 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();
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
37
Bin/IndicatorTimingCompare/README.txt
Normal file
37
Bin/IndicatorTimingCompare/README.txt
Normal file
@@ -0,0 +1,37 @@
|
||||
Бальзам-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.
|
||||
Физические длительности сигналов и отсутствие строба требуют проверки на плате.
|
||||
41
Bin/StartupWait3s/rebuild.py
Normal file
41
Bin/StartupWait3s/rebuild.py
Normal file
File diff suppressed because one or more lines are too long
48
Bin/TestLampFix/README.txt
Normal file
48
Bin/TestLampFix/README.txt
Normal file
@@ -0,0 +1,48 @@
|
||||
Бальзам-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 секунды сохраняются;
|
||||
быстрых переключений между тестовыми и рабочими показаниями быть не должно.
|
||||
54
Bin/TestLampFix/rebuild.py
Normal file
54
Bin/TestLampFix/rebuild.py
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
@@ -2,7 +2,7 @@
|
||||
TMS320C2000 Hex Converter v5.2.7
|
||||
********************************************************************************
|
||||
|
||||
INPUT FILE NAME: <D:\project12\Balsam_167\bin\UKSSTMS320F28335.out>
|
||||
INPUT FILE NAME: <UKSSTMS320F28335.out>
|
||||
OUTPUT FORMAT: Binary
|
||||
|
||||
PHYSICAL MEMORY PARAMETERS
|
||||
@@ -12,21 +12,20 @@ PHYSICAL MEMORY PARAMETERS
|
||||
|
||||
BOOT LOADER PARAMETERS
|
||||
Table Type: SERIAL PORT (SCI 8 bit Mode)
|
||||
Entry Point: 0x0000b8fa
|
||||
Entry Point: 0x0000a8d1
|
||||
|
||||
|
||||
OUTPUT TRANSLATION MAP
|
||||
--------------------------------------------------------------------------------
|
||||
00000000..003fffff Page=0 Memory Width=8 ROM Width=8
|
||||
--------------------------------------------------------------------------------
|
||||
OUTPUT FILES: D:\project12\Balsam_167\bin\UKSSTMS320F28335.bin [b0..b7]
|
||||
OUTPUT FILES: UKSSTMS320F28335_c6c91282.bin.pending [b0..b7]
|
||||
|
||||
CONTENTS: 00000000..00007d15 BOOT TABLE
|
||||
.cinit : dest=0000ba94 size=0000027f width=00000002
|
||||
.text : dest=00008000 size=00003a94 width=00000002
|
||||
ramfuncs : dest=0000c15d size=00000023 width=00000002
|
||||
.econst : dest=0000c000 size=00000112 width=00000002
|
||||
.switch : dest=0000c112 size=00000028 width=00000002
|
||||
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
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
00000000..003fffff Page=1 Memory Width=8 ROM Width=8 "*DEFAULT PAGE 1*"
|
||||
|
||||
41
Bin/UartBaudFix/rebuild.py
Normal file
41
Bin/UartBaudFix/rebuild.py
Normal file
File diff suppressed because one or more lines are too long
41
Bin/UartColdStart/rebuild.py
Normal file
41
Bin/UartColdStart/rebuild.py
Normal file
File diff suppressed because one or more lines are too long
Binary file not shown.
140
Doc/COMMENT_AUDIT.md
Normal file
140
Doc/COMMENT_AUDIT.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# Проверка комментариев и кодировки
|
||||
|
||||
Проверка относится к редактируемым исходникам 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 |
|
||||
288
Doc/DAC_SPI_REVIEW.md
Normal file
288
Doc/DAC_SPI_REVIEW.md
Normal file
@@ -0,0 +1,288 @@
|
||||
# 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).
|
||||
|
||||
Модель ЦАП и электрическая схема не установлены. Режим выборки, назначение
|
||||
командных битов и допустимые длительности нельзя считать подтверждёнными
|
||||
до сверки с документацией конкретной микросхемы. Сборка/прошивка и стендовые
|
||||
измерения в рамках подготовки этого документа не выполнялись.
|
||||
136
Doc/EEPROM_LAYOUT.md
Normal file
136
Doc/EEPROM_LAYOUT.md
Normal file
@@ -0,0 +1,136 @@
|
||||
# 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.
|
||||
167
Doc/FIRMWARE_IDENTITY.md
Normal file
167
Doc/FIRMWARE_IDENTITY.md
Normal file
@@ -0,0 +1,167 @@
|
||||
# 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 прочитайте версию снова.
|
||||
98
Doc/GAS_167_M95M02.md
Normal file
98
Doc/GAS_167_M95M02.md
Normal file
File diff suppressed because one or more lines are too long
97
Doc/GAS_ADDRESS_ALLOCATION.md
Normal file
97
Doc/GAS_ADDRESS_ALLOCATION.md
Normal file
File diff suppressed because one or more lines are too long
270
Doc/GAS_MODBUS_MAP.md
Normal file
270
Doc/GAS_MODBUS_MAP.md
Normal file
File diff suppressed because one or more lines are too long
241
Doc/GAS_MODBUS_PROJECT_COMPARISON.md
Normal file
241
Doc/GAS_MODBUS_PROJECT_COMPARISON.md
Normal file
File diff suppressed because one or more lines are too long
119
Doc/PERIPH28335_CAN.md
Normal file
119
Doc/PERIPH28335_CAN.md
Normal file
@@ -0,0 +1,119 @@
|
||||
# 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`.
|
||||
97
Doc/RS232_FIFO.md
Normal file
97
Doc/RS232_FIFO.md
Normal file
@@ -0,0 +1,97 @@
|
||||
# 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.
|
||||
112
Doc/SOURCE_GUIDE.md
Normal file
112
Doc/SOURCE_GUIDE.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# Назначение исходников Бальзам-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 и соседних шаблонах.
|
||||
269
Doc/UMP_LOGGER.md
Normal file
269
Doc/UMP_LOGGER.md
Normal file
@@ -0,0 +1,269 @@
|
||||
# Логгер запуска и отключения УМП: прошивка Бальзам 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 ещё требует подтверждения.
|
||||
146
Doc/UMP_VOLTAGE_PROTECTION.md
Normal file
146
Doc/UMP_VOLTAGE_PROTECTION.md
Normal file
@@ -0,0 +1,146 @@
|
||||
# Контроль роста ЗПТ при пуске УМП
|
||||
|
||||
УМП с адресом 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 с нужно проверить на стенде с установленной прошивкой.
|
||||
117
F28335.cmd
117
F28335.cmd
@@ -1,3 +1,4 @@
|
||||
/* Распределение памяти линкером и абсолютные границы загрузочного образа EEPROM. Русские пояснения сохранены в UTF-8. */
|
||||
/*
|
||||
// TI File $Revision: /main/10 $
|
||||
// Checkin $Date: July 9, 2008 13:43:56 $
|
||||
@@ -69,52 +70,74 @@
|
||||
*/
|
||||
|
||||
|
||||
/* 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 */
|
||||
PAGE 0: /* Program Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */
|
||||
/* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */
|
||||
|
||||
ZONE0 : origin = 0x004000, length = 0x001000 /* XINTF zone 0 */
|
||||
RAML0 : origin = 0x008000, length = 0x004000 /* on-chip RAM block L0 */
|
||||
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. */
|
||||
/* 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 */
|
||||
RAML4 : origin = 0x00C000, length = 0x001000 /* on-chip RAM block L1 */ /* Записывает origin значением 0x00C000, length = 0x001000; данные 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 */
|
||||
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. */
|
||||
|
||||
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 */
|
||||
PAGE 1 : /* Data Memory */ /* Выбирает страницу адресного пространства линкера: 0 — программа, 1 — данные. */
|
||||
/* 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 */
|
||||
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 */
|
||||
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. */
|
||||
/* 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 */
|
||||
ZONE7B : origin = 0x20FC00, length = 0x000400 /* XINTF zone 7 - data space */
|
||||
FLASHB : origin = 0x330000, length = 0x008000 /* on-chip FLASH */
|
||||
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. */
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
/* Allocate sections to memory blocks.
|
||||
@@ -124,38 +147,60 @@ PAGE 1 : /* Data Memory */
|
||||
ramfuncs user defined section to store functions that will be copied from Flash into RAM
|
||||
*/
|
||||
|
||||
/* Начинает описание размещения секций объектных файлов для линкера. */
|
||||
SECTIONS
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
|
||||
/* Allocate program areas: */
|
||||
.cinit : > RAML0 PAGE = 0
|
||||
/* Keep initialization tables out of the code RAM block. */
|
||||
/* Записывает PAGE значением 0; данные PAGE. */
|
||||
.cinit : > RAML4 PAGE = 0
|
||||
/* Записывает PAGE значением 0; данные PAGE. */
|
||||
.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), в текущей последовательности операций. */
|
||||
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
|
||||
|
||||
/* Allocate IQ math areas: */
|
||||
IQmath : > FLASHC PAGE = 0 /* Math Code */
|
||||
IQmath : > FLASHC PAGE = 0 /* Math Code */ /* Записывает PAGE значением 0; данные PAGE. */
|
||||
/* Записывает PAGE значением 0, TYPE = NOLOAD; данные PAGE. */
|
||||
IQmathTables : > IQTABLES, PAGE = 0, TYPE = NOLOAD
|
||||
|
||||
/* Uncomment the section below if calling the IQNexp() or IQexp()
|
||||
@@ -174,6 +219,7 @@ SECTIONS
|
||||
}
|
||||
*/
|
||||
|
||||
/* Записывает PAGE значением 0, TYPE = NOLOAD; данные PAGE. */
|
||||
FPUmathTables : > FPUTABLES, PAGE = 0, TYPE = NOLOAD
|
||||
|
||||
/* Allocate DMA-accessible RAM sections: * /
|
||||
@@ -183,6 +229,7 @@ SECTIONS
|
||||
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 */
|
||||
@@ -190,12 +237,16 @@ SECTIONS
|
||||
/* 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. */
|
||||
.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
|
||||
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание DefaultIsr для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: August 18, 2006 13:45:37 $
|
||||
//###########################################################################
|
||||
@@ -11,11 +12,16 @@
|
||||
// $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
|
||||
|
||||
|
||||
@@ -29,93 +35,163 @@ extern "C" {
|
||||
//
|
||||
|
||||
// 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; обслуживает источник прерывания и его аппаратные флаги. */
|
||||
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:
|
||||
@@ -123,23 +199,36 @@ interrupt void ECAN1INTB_ISR(void); // eCAN-B
|
||||
// Group 11 PIE Interrupt Service Routines:
|
||||
|
||||
// Group 12 PIE Interrupt Service Routines:
|
||||
/* Объявляет обработчик XINT3_ISR; обслуживает источник прерывания и его аппаратные флаги. */
|
||||
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
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание Dma_defines для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/2 $
|
||||
// Checkin $Date: August 14, 2007 16:32:29 $
|
||||
//###########################################################################
|
||||
@@ -11,69 +12,112 @@
|
||||
// $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
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание EPwm_defines для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: August 18, 2006 13:45:39 $
|
||||
//###########################################################################
|
||||
@@ -11,129 +12,206 @@
|
||||
// $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
|
||||
|
||||
|
||||
@@ -141,22 +219,33 @@ 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
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание Examples для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/9 $
|
||||
// Checkin $Date: July 2, 2008 14:31:12 $
|
||||
//###########################################################################
|
||||
@@ -11,12 +12,17 @@
|
||||
// $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
|
||||
|
||||
|
||||
@@ -25,9 +31,11 @@ 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
|
||||
@@ -74,6 +82,7 @@ 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)
|
||||
@@ -93,12 +102,19 @@ 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
|
||||
|
||||
|
||||
@@ -106,35 +122,52 @@ 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
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание GlobalPrototypes для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/11 $
|
||||
// Checkin $Date: May 12, 2008 14:30:08 $
|
||||
//###########################################################################
|
||||
@@ -11,174 +12,320 @@
|
||||
// $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);
|
||||
|
||||
|
||||
@@ -187,19 +334,28 @@ 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
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание I2c_defines для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/2 $
|
||||
// Checkin $Date: April 16, 2008 17:16:47 $
|
||||
//###########################################################################
|
||||
@@ -11,7 +12,9 @@
|
||||
// $Release Date: August 1, 2008 $
|
||||
//###########################################################################
|
||||
|
||||
/* Начинает условие: DSP2833x_I2C_DEFINES_H ещё не определён; защищает повторное включение или задаёт значение сборки. */
|
||||
#ifndef DSP2833x_I2C_DEFINES_H
|
||||
/* Определяет защитный символ или переключатель DSP2833x_I2C_DEFINES_H для последующей компиляции. */
|
||||
#define DSP2833x_I2C_DEFINES_H
|
||||
|
||||
//--------------------------------------------
|
||||
@@ -19,68 +22,115 @@
|
||||
//--------------------------------------------
|
||||
|
||||
// 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
|
||||
|
||||
|
||||
@@ -89,7 +139,9 @@
|
||||
//--------------------------------------------
|
||||
|
||||
// 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,
|
||||
@@ -100,16 +152,23 @@ 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
|
||||
|
||||
//===========================================================================
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,3 +1,4 @@
|
||||
/* Настройки и интерфейс DSP28x_Project. Русские пояснения сохранены в UTF-8. */
|
||||
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: April 22, 2008 14:35:56 $
|
||||
@@ -12,11 +13,16 @@
|
||||
// $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
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
; Поставляемое ti описание adc_cal для семейства c2833x. Пояснения в UTF-8.
|
||||
;; TI File $Revision: /main/1 $
|
||||
;; Checkin $Date: July 30, 2007 10:29:23 $
|
||||
;;###########################################################################
|
||||
@@ -16,7 +17,9 @@
|
||||
;; $Release Date: August 1, 2008 $
|
||||
;;###########################################################################
|
||||
|
||||
; Экспортирует символ для связывания с C-кодом. Операция: .def _ADC_cal.
|
||||
.def _ADC_cal
|
||||
; Задаёт текстовый псевдоним константы для ассемблера. Операция: .asg "0x711C", ADCREFSEL_LOC.
|
||||
.asg "0x711C", ADCREFSEL_LOC
|
||||
|
||||
;-----------------------------------------------
|
||||
@@ -32,11 +35,17 @@
|
||||
; 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 ----------
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание Adc для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: October 23, 2007 13:34:09 $
|
||||
//###########################################################################
|
||||
@@ -11,9 +12,12 @@
|
||||
// $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
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -21,8 +25,11 @@
|
||||
//---------------------------------------------------------------------------
|
||||
// This function initializes ADC to a known state.
|
||||
//
|
||||
/* Начинает функцию InitAdc; назначение модуля — поставляемое TI описание Adc для семейства C2833x. */
|
||||
void InitAdc(void)
|
||||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||||
{
|
||||
/* Объявляет интерфейс функции DSP28x_usDelay; реализация вызывается через этот прототип. */
|
||||
extern void DSP28x_usDelay(Uint32 Count);
|
||||
|
||||
|
||||
@@ -36,9 +43,13 @@ 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;
|
||||
|
||||
|
||||
@@ -53,10 +64,14 @@ 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);
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание CpuTimers для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/3 $
|
||||
// Checkin $Date: March 16, 2007 08:37:30 $
|
||||
//###########################################################################
|
||||
@@ -18,13 +19,18 @@
|
||||
// $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;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -32,21 +38,30 @@ 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;
|
||||
|
||||
|
||||
@@ -55,26 +70,41 @@ 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;
|
||||
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -85,29 +115,45 @@ 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;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание PieCtrl для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: August 18, 2006 13:46:35 $
|
||||
//###########################################################################
|
||||
@@ -11,7 +12,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
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -19,43 +22,72 @@
|
||||
//---------------------------------------------------------------------------
|
||||
// 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.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.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;
|
||||
|
||||
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -63,18 +95,24 @@ void InitPieCtrl(void)
|
||||
//---------------------------------------------------------------------------
|
||||
// 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; представление регистра целым словом без разбиения на битовые поля. */
|
||||
PieCtrlRegs.PIEACK.all = 0xFFFF;
|
||||
|
||||
// Enable Interrupts at the CPU level
|
||||
/* Разрешение маскируемых прерываний ядра. */
|
||||
EINT;
|
||||
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание PieVect для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/1 $
|
||||
// Checkin $Date: August 18, 2006 13:46:38 $
|
||||
//###########################################################################
|
||||
@@ -11,168 +12,300 @@
|
||||
// $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
|
||||
|
||||
|
||||
// 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,; порядок элементов сохраняется. */
|
||||
rsvd_ISR, // 1.3
|
||||
/* Продолжает список аргументов, полей или выражение XINT1_ISR,; порядок элементов сохраняется. */
|
||||
XINT1_ISR, // 1.4
|
||||
/* Продолжает список аргументов, полей или выражение XINT2_ISR,; порядок элементов сохраняется. */
|
||||
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,; порядок элементов сохраняется. */
|
||||
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,; порядок элементов сохраняется. */
|
||||
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
|
||||
|
||||
// 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
|
||||
|
||||
|
||||
// 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
|
||||
|
||||
|
||||
// Group 7 PIE Vectors
|
||||
/* Продолжает список аргументов, полей или выражение DINTCH1_ISR,; порядок элементов сохраняется. */
|
||||
DINTCH1_ISR, // 7.1 DMA channel 1
|
||||
/* Продолжает список аргументов, полей или выражение DINTCH2_ISR,; порядок элементов сохраняется. */
|
||||
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
|
||||
|
||||
// Group 8 PIE Vectors
|
||||
/* Продолжает список аргументов, полей или выражение I2CINT1A_ISR,; порядок элементов сохраняется. */
|
||||
I2CINT1A_ISR, // 8.1 I2C
|
||||
/* Продолжает список аргументов, полей или выражение I2CINT2A_ISR,; порядок элементов сохраняется. */
|
||||
I2CINT2A_ISR, // 8.2 I2C
|
||||
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
|
||||
rsvd_ISR, // 8.3
|
||||
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
|
||||
rsvd_ISR, // 8.4
|
||||
/* Продолжает список аргументов, полей или выражение SCIRXINTC_ISR,; порядок элементов сохраняется. */
|
||||
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,; порядок элементов сохраняется. */
|
||||
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.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
|
||||
|
||||
// Group 11 PIE Vectors
|
||||
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
|
||||
rsvd_ISR, // 11.1
|
||||
/* Продолжает список аргументов, полей или выражение rsvd_ISR,; порядок элементов сохраняется. */
|
||||
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.8
|
||||
|
||||
// Group 12 PIE Vectors
|
||||
/* Продолжает список аргументов, полей или выражение XINT3_ISR,; порядок элементов сохраняется. */
|
||||
XINT3_ISR, // 12.1
|
||||
/* Продолжает список аргументов, полей или выражение XINT4_ISR,; порядок элементов сохраняется. */
|
||||
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
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
};
|
||||
|
||||
|
||||
@@ -183,20 +316,31 @@ const struct PIE_VECT_TABLE PieVectTableInit = {
|
||||
// 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++); задаёт начальное значение, условие продолжения и шаг перебора. */
|
||||
for(i=0; i < 128; i++)
|
||||
/* Изменяет счётчик в выражении *Dest++ = *Source++; на один для следующего шага. */
|
||||
*Dest++ = *Source++;
|
||||
/* Закрытие доступа к защищённым регистрам периферии. */
|
||||
EDIS;
|
||||
|
||||
// Enable the PIE Vector Table
|
||||
/* Записывает PieCtrlRegs.PIECTRL.bit.ENPIE значением 1; данные ENPIE. */
|
||||
PieCtrlRegs.PIECTRL.bit.ENPIE = 1;
|
||||
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание SWPrioritizedDefaultIsr для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/5 $
|
||||
// Checkin $Date: January 14, 2008 11:28:12 $
|
||||
//###########################################################################
|
||||
@@ -13,259 +14,388 @@
|
||||
//###########################################################################
|
||||
|
||||
|
||||
/* Подключает "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(;;);
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
|
||||
@@ -274,41 +404,65 @@ 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.......
|
||||
@@ -317,50 +471,78 @@ 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.......
|
||||
@@ -368,92 +550,143 @@ 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
|
||||
|
||||
|
||||
@@ -462,157 +695,247 @@ 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
|
||||
|
||||
|
||||
@@ -622,157 +945,247 @@ 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
|
||||
|
||||
|
||||
@@ -782,159 +1195,249 @@ 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
|
||||
|
||||
|
||||
@@ -944,57 +1447,87 @@ 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
|
||||
|
||||
// -----------------------------------------------------------
|
||||
@@ -1002,160 +1535,250 @@ 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
|
||||
|
||||
|
||||
@@ -1164,160 +1787,250 @@ 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
|
||||
|
||||
|
||||
@@ -1326,107 +2039,167 @@ 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
|
||||
|
||||
// -----------------------------------------------------------
|
||||
@@ -1434,212 +2207,332 @@ 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
|
||||
|
||||
// -----------------------------------------------------------
|
||||
@@ -1653,186 +2546,291 @@ 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
|
||||
|
||||
|
||||
@@ -1840,22 +2838,37 @@ 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(;;);
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание SWPrioritizedPieVect для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/2 $
|
||||
// Checkin $Date: April 4, 2007 14:25:31 $
|
||||
//###########################################################################
|
||||
@@ -14,476 +15,857 @@
|
||||
// $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"
|
||||
|
||||
/* Записывает 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
|
||||
/* Выбирает альтернативный блок текущего условия компиляции. */
|
||||
#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,
|
||||
|
||||
// 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,
|
||||
|
||||
// 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,
|
||||
|
||||
// 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): выбранный блок включается в текущий вариант прошивки. */
|
||||
#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,
|
||||
|
||||
// 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,
|
||||
|
||||
// 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,
|
||||
|
||||
// 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
|
||||
/* Выбирает альтернативный блок текущего условия компиляции. */
|
||||
#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
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
};
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -493,17 +875,28 @@ const struct PIE_VECT_TABLE PieVectTableInit = {
|
||||
// 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;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/* Поставляемое TI описание SysCtrl для семейства C2833x. Русские пояснения сохранены в UTF-8. */
|
||||
// TI File $Revision: /main/7 $
|
||||
// Checkin $Date: September 20, 2007 13:30:31 $
|
||||
//###########################################################################
|
||||
@@ -16,7 +17,9 @@
|
||||
//###########################################################################
|
||||
|
||||
|
||||
/* Подключает "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"
|
||||
@@ -26,6 +29,7 @@
|
||||
// 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");
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -37,20 +41,27 @@
|
||||
// - 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();
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
|
||||
@@ -63,48 +74,67 @@ 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");
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
|
||||
@@ -114,16 +144,27 @@ 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;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
} }
|
||||
|
||||
|
||||
@@ -132,11 +173,17 @@ 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;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -144,40 +191,60 @@ 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.
|
||||
@@ -198,29 +265,46 @@ 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
|
||||
@@ -228,17 +312,27 @@ void InitPll(Uint16 divval, Uint16 divsel)
|
||||
// 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;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------
|
||||
@@ -252,52 +346,86 @@ 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: выбранный блок включается в текущий вариант прошивки. */
|
||||
#if CLKMULT == 1
|
||||
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0000; представление регистра целым словом без разбиения на битовые поля. */
|
||||
SysCtrlRegs.HISPCP.all = 0x0000;
|
||||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||||
#endif
|
||||
/* Условие компиляции CLKMULT == 2: выбранный блок включается в текущий вариант прошивки. */
|
||||
#if CLKMULT == 2
|
||||
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0001; представление регистра целым словом без разбиения на битовые поля. */
|
||||
SysCtrlRegs.HISPCP.all = 0x0001;
|
||||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||||
#endif
|
||||
/* Условие компиляции CLKMULT == 3: выбранный блок включается в текущий вариант прошивки. */
|
||||
#if CLKMULT == 3
|
||||
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0002; представление регистра целым словом без разбиения на битовые поля. */
|
||||
SysCtrlRegs.HISPCP.all = 0x0002;
|
||||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||||
#endif
|
||||
/* Условие компиляции CLKMULT == 4: выбранный блок включается в текущий вариант прошивки. */
|
||||
#if CLKMULT == 4
|
||||
/* Записывает SysCtrlRegs.HISPCP.all значением 0x0002; представление регистра целым словом без разбиения на битовые поля. */
|
||||
SysCtrlRegs.HISPCP.all = 0x0002;
|
||||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||||
#endif
|
||||
/* Условие компиляции CLKMULT == 5: выбранный блок включается в текущий вариант прошивки. */
|
||||
#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.
|
||||
@@ -309,6 +437,7 @@ 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*
|
||||
@@ -321,46 +450,80 @@ 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;
|
||||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
@@ -369,44 +532,70 @@ 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
Reference in New Issue
Block a user