Update CCS12 peripheral firmware and documentation

This commit is contained in:
2026-09-04 19:34:10 +03:00
parent 55bee25b4f
commit 8cd81736cf
56 changed files with 3808 additions and 504 deletions

View File

@@ -1,8 +1,18 @@
/**
* @file ADC.h
* @brief Публичный интерфейс подсистемы АЦП.
*
* Экспортирует таблицы последних/накопленных отсчётов и временные признаки,
* обновляемые ADC.c. Размеры массивов определены реализацией и аппаратной
* разводкой; потребители должны использовать только известные индексы каналов.
*/
extern Uint16 adc_table_lem[];
extern Uint16 ADC_table[];
/** Инициализирует тактирование, последовательность каналов и прерывание АЦП. */
void setup_adc(void);
/** Счётчик активности и его порог, используемые для контроля измерительного цикла. */
extern long WAKE,WAKE_TIME;

View File

@@ -1,7 +1,23 @@
/**
* @file DAC.h
* @brief Интерфейс внешнего ЦАП и генератора задания нагрузки.
*
* Перед первым выводом требуется Init_DAC() и Setup_DAC_time(). Значение
* Anal_output() масштабируется относительно maxx; maxx должен быть положительным.
*/
/** Выполняет очередной шаг временного профиля аналогового выхода нагрузки. */
void Load_runner(void);
/**
* Выдаёт нормированное значение на ЦАП.
* @param vrot Требуемая величина выхода.
* @param maxx Полная шкала; должна быть больше нуля.
*/
void Anal_output(long vrot, long maxx);
/** Переводит линии внешнего ЦАП в исходное состояние. */
void Init_DAC(void);
/** Пересчитывает интервалы ЦАП из READY_FREQ, DAC_FREQ и LOAD_TIME. */
void Setup_DAC_time(void);
/** Внутренние счётчики профиля, обновляемые DAC.c. */
extern unsigned long IMPowse;
extern unsigned int period_dac, time_dac;

View File

@@ -1,3 +1,12 @@
/**
* @file GPIO_table.h
* @brief Таблицы направления и мультиплексирования GPIO для вариантов плат.
*
* Макросы сгруппированы по аппаратным исполнениям и напрямую соответствуют
* выводам разъёмов. Значения 0/1 кодируют вход/выход либо выбранную функцию MUX.
* Любое изменение требует сверки со схемой конкретной платы и package.h;
* этот заголовок содержит конфигурацию, а не переносимую логику GPIO.
*/
#define COMM_gpio00_dir 0UL
#define COMM_gpio01_dir 0UL
#define COMM_gpio02_dir 0UL
@@ -11,7 +20,7 @@
#define COMM_gpio10_dir 0UL
#define COMM_gpio11_dir 0UL
#define COMM_gpio19_dir 1UL // 63 — SPI
#define COMM_gpio19_dir 1UL // 63 — SPI
#define COMM_gpio20_dir 0UL // 64 2:9B mode 2
#define COMM_gpio21_dir 0UL // 65 2:9A mode 4
#define COMM_gpio22_dir 0UL // 66 2:12C mode 1
@@ -23,7 +32,7 @@
#define COMM_gpio32_dir 1UL // 74 2:10B DIOD green
#define COMM_gpio33_dir 0UL
#define COMM_gpio34_dir 1UL // 142 — SCI
#define COMM_gpio34_dir 1UL // 142 — SCI
#define COMM_gpio48_dir 1UL // 88 2:14C DIOD red
#define COMM_gpio49_dir 1UL // 89 2:14B select
@@ -54,7 +63,7 @@
#define BKSD_gpio10_dir 0UL // 19 2:6C oil
#define BKSD_gpio11_dir 1UL // 20 2:3C select
#define BKSD_gpio19_dir 1UL // 63 — SPI
#define BKSD_gpio19_dir 1UL // 63 — SPI
#define BKSD_gpio20_dir 0UL // 64 2:9B mode 2
#define BKSD_gpio21_dir 0UL // 65 2:9A mode 4
#define BKSD_gpio22_dir 0UL // 66 2:12C mode 1
@@ -66,7 +75,7 @@
#define BKSD_gpio32_dir 1UL // 74 2:10B DIOD green
#define BKSD_gpio33_dir 0UL
#define BKSD_gpio34_dir 1UL // 142 — SCI
#define BKSD_gpio34_dir 1UL // 142 — SCI
#define BKSD_gpio48_dir 1UL // 88 2:14C DIOD red
#define BKSD_gpio49_dir 0UL // 89 2:14B input 2
@@ -97,7 +106,7 @@
#define BKST_gpio10_dir 0UL
#define BKST_gpio11_dir 1UL // 20 2:3C select
#define BKST_gpio19_dir 1UL // 63 — SPI
#define BKST_gpio19_dir 1UL // 63 — SPI
#define BKST_gpio20_dir 0UL // 64 2:9B mode 2
#define BKST_gpio21_dir 0UL // 65 2:9A mode 4
#define BKST_gpio22_dir 0UL // 66 2:12C mode 1
@@ -109,7 +118,7 @@
#define BKST_gpio32_dir 1UL // 74 2:10B DIOD green
#define BKST_gpio33_dir 0UL
#define BKST_gpio34_dir 1UL // 142 — SCI
#define BKST_gpio34_dir 1UL // 142 — SCI
#define BKST_gpio48_dir 1UL // 88 2:14C DIOD red
#define BKST_gpio49_dir 0UL
@@ -140,7 +149,7 @@
#define PULT_gpio10_dir 0UL
#define PULT_gpio11_dir 0UL
#define PULT_gpio19_dir 1UL // 63 — SPI
#define PULT_gpio19_dir 1UL // 63 — SPI
#define PULT_gpio20_dir 0UL // 64 2:9B mode 2
#define PULT_gpio21_dir 0UL // 65 2:9A mode 4
#define PULT_gpio22_dir 0UL // 66 2:12C mode 1
@@ -152,7 +161,7 @@
#define PULT_gpio32_dir 1UL // 74 2:10B DIOD green
#define PULT_gpio33_dir 0UL
#define PULT_gpio34_dir 1UL // 142 — SCI
#define PULT_gpio34_dir 1UL // 142 — SCI
#define PULT_gpio48_dir 1UL // 88 2:14C DIOD red
#define PULT_gpio49_dir 0UL // 89 2:14B button
@@ -183,7 +192,7 @@
#define PLT2_gpio10_dir 0UL
#define PLT2_gpio11_dir 0UL
#define PLT2_gpio19_dir 1UL // 63 × SPI
#define PLT2_gpio19_dir 1UL // 63 Ч SPI
#define PLT2_gpio20_dir 0UL // 64 2:9B mode 2
#define PLT2_gpio21_dir 0UL // 65 2:9A mode 4
#define PLT2_gpio22_dir 0UL // 66 2:12C mode 1
@@ -195,7 +204,7 @@
#define PLT2_gpio32_dir 1UL // 74 2:10B DIOD green
#define PLT2_gpio33_dir 0UL // 75 2:10C button
#define PLT2_gpio34_dir 1UL // 142 × SCI
#define PLT2_gpio34_dir 1UL // 142 Ч SCI
#define PLT2_gpio48_dir 0UL // 88 2:14C button
#define PLT2_gpio49_dir 0UL // 89 2:14B button
@@ -226,7 +235,7 @@
#define SHKF_gpio10_dir 0UL // 19 2:6C input
#define SHKF_gpio11_dir 0UL // 20 2:3C input
#define SHKF_gpio19_dir 1UL // 63 — SPI
#define SHKF_gpio19_dir 1UL // 63 — SPI
#define SHKF_gpio20_dir 0UL // 64 2:9B mode 2
#define SHKF_gpio21_dir 0UL // 65 2:9A mode 4
#define SHKF_gpio22_dir 0UL // 66 2:12C mode 1
@@ -238,7 +247,7 @@
#define SHKF_gpio32_dir 0UL // 74 2:10B input
#define SHKF_gpio33_dir 0UL // 75 2:10C input
#define SHKF_gpio34_dir 1UL // 142 — SCI
#define SHKF_gpio34_dir 1UL // 142 — SCI
#define SHKF_gpio48_dir 1UL // 88 2:14C DIOD red
#define SHKF_gpio49_dir 0UL // 89 2:14B input
@@ -269,7 +278,7 @@
#define LOAD_gpio10_dir 0UL
#define LOAD_gpio11_dir 0UL // 20 2:3C res_in 0
#define LOAD_gpio19_dir 1UL // 63 — SPI
#define LOAD_gpio19_dir 1UL // 63 — SPI
#define LOAD_gpio20_dir 0UL // 64 2:9B mode 2
#define LOAD_gpio21_dir 0UL // 65 2:9A mode 4
#define LOAD_gpio22_dir 0UL // 66 2:12C mode 1
@@ -281,7 +290,7 @@
#define LOAD_gpio32_dir 1UL // 74 2:10B DIOD green
#define LOAD_gpio33_dir 0UL
#define LOAD_gpio34_dir 1UL // 142 — SCI
#define LOAD_gpio34_dir 1UL // 142 — SCI
#define LOAD_gpio48_dir 1UL // 88 2:14C DIOD red
#define LOAD_gpio49_dir 0UL

View File

@@ -1,11 +1,20 @@
/**
* @file RS485.h
* @brief Состояние портов SCI/RS-485, ограничения буферов и API обмена.
*
* RS_DATA объединяет регистры SCI, буферы, счётчики и состояние конечного
* автомата. Память буферов принадлежит вызывающему коду и должна оставаться
* доступной до завершения операции. MAX_RECEIVE_LENGTH/MAX_SEND_LENGTH задают
* жёсткую границу, которую необходимо проверить до помещения данных в буфер.
*/
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/****************************************************************
RS485.h
****************************************************************
* Процедуры работы с UART *
* Процедуры работы с UART *
****************************************************************/
#ifndef _RS485
#define _RS485
@@ -38,30 +47,30 @@ typedef struct
{
volatile struct SCI_REGS *SciRegs;
unsigned int commnumber; // Номер порта
unsigned long RS_Length; // Длина пакета
unsigned int commnumber; // Номер порта
unsigned long RS_Length; // Длина пакета
unsigned int *pRS_RecvPtr; // Буфер приема
unsigned int *pRS_SendPtr; // Буфер посылки
unsigned int *pRS_RecvPtr; // Буфер приема
unsigned int *pRS_SendPtr; // Буфер посылки
unsigned int *pRecvPtr;
unsigned int RS_PrevCmd; // Предыдущаа комманда
unsigned int RS_Cmd; // Текущаа комманда
unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Заголовок
unsigned int flag_TIMEOUT_to_Send; // Флаг ожиданиа таймаута на отсылку
unsigned int flag_TIMEOUT_to_Receive; // Флаг ожиданиа таймаута на прием
unsigned int RS_DataReady; // Флаг готовности RS данных
unsigned int buffer[MAX_SEND_LENGTH]; // Буфер дла отсылки по RS
unsigned int RS_PrevCmd; // Предыдущаа комманда
unsigned int RS_Cmd; // Текущаа комманда
unsigned int RS_Header[MAX_RECEIVE_LENGTH]; // Заголовок
unsigned int flag_TIMEOUT_to_Send; // Флаг ожиданиа таймаута на отсылку
unsigned int flag_TIMEOUT_to_Receive; // Флаг ожиданиа таймаута на прием
unsigned int RS_DataReady; // Флаг готовности RS данных
unsigned int buffer[MAX_SEND_LENGTH]; // Буфер дла отсылки по RS
unsigned int addr_answer; // адрес куда отвечать в режиме ведущего
unsigned int addr_recive; // адрес по которому нас запросили
unsigned int flag_LEADING; // Флаг режима контроллера (по умолчанию ведомый)
unsigned int addr_answer; // адрес куда отвечать в режиме ведущего
unsigned int addr_recive; // адрес по которому нас запросили
unsigned int flag_LEADING; // Флаг режима контроллера (по умолчанию ведомый)
unsigned long RS_RecvLen;
unsigned long RS_SLength; // Длина пакета дла посылки
unsigned long RS_SendLen; // Количество байт уже передали
char RS_SendBlockMode; // Режим передачи
char RS_Flag9bit; // дла RS485????????
int BS_LoadOK; // Флаг успешности приема блока
unsigned long RS_SLength; // Длина пакета дла посылки
unsigned long RS_SendLen; // Количество байт уже передали
char RS_SendBlockMode; // Режим передачи
char RS_Flag9bit; // дла RS485????????
int BS_LoadOK; // Флаг успешности приема блока
int RS_FlagBegin;
int RS_HeaderCnt;
int RS_FlagSkiping;
@@ -73,61 +82,72 @@ typedef struct
extern RS_DATA rs_a,rs_b;
extern unsigned int
RS_Len[70]; /* Действительнаа длина команды (отладочной) + 1 */
RS_Len[70]; /* Действительнаа длина команды (отладочной) + 1 */
/** ISR приёма и передачи SCI-A/SCI-B; вызывают общий автомат соответствующего порта. */
interrupt void RSA_RX_Handler(void);
interrupt void RSA_TX_Handler(void);
interrupt void RSB_RX_Handler(void);
interrupt void RSB_TX_Handler(void);
/* иницилизациа переменных rs_a,rs_b*/
/* иницилизациа переменных rs_a,rs_b*/
/** Создаёт исходное состояние обоих RS_DATA и задаёт размер команды 15. */
void create_uart_vars(char size_cmd15);
/** Повторнаа инициализациа последовательного порта, используетса после подвиса */
/** Настройка режима приема/передачи */
/** Повторнаа инициализациа последовательного порта, используетса после подвиса */
/** Настройка режима приема/передачи */
void RS_SetBitMode(RS_DATA *rs_arr, int n);
/** Посылка блока байтов.
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
@param buf адрес массива
@param len количество байт
/** Посылка блока байтов.
Посылает массива 32-битных целых чисел старшие биты должны быть 0.
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
@param rs_arr Состояние выбранного порта.
@param pBuf Адрес массива слов, каждое из которых содержит один байт.
@param len количество байт
@return Ненулевое значение, если передача принята драйвером.
@see RS_BSend, RS_TRANSMIT_INTR
*/
int RS_Send(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
/** Посылка блока упакованных байтов.
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
@param buf адрес массива
@param len количество 8-битных байт
/** Посылка блока упакованных байтов.
@precondition Работа ф-ции зависит от макро RS_TRANSMIT_INTR
@param rs_arr Состояние выбранного порта.
@param pBuf Адрес массива с упакованными байтами.
@param len количество 8-битных байт
@return Ненулевое значение, если передача принята драйвером.
@see RS_Send, RS_TRANSMIT_INTR
*/
int RS_BSend(RS_DATA *rs_arr,unsigned int *pBuf, unsigned long len);
/** Инициализациа последовательного порта */
void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - скорость линии в бодах */
/** Инициализациа последовательного порта */
/** @param commnumber COM_1 или COM_2. @param speed_baud Скорость линии в бодах. */
void setup_uart(char commnumber,unsigned long speed_baud); /* speed_baud - скорость линии в бодах */
/** Настраивает число бит данных, чётность и число стоп-битов выбранного SCI. */
void RS_SetLineMode(RS_DATA *rs_arr, int bit, char parity, int stop);
/** Меняет скорость уже созданного порта и обновляет curr_baud. */
void RS_SetLineSpeed(RS_DATA *rs_arr, unsigned long speed);
// Transmit a character from the SCI'
#define SCI_send(x,y) x->SciRegs->SCITXBUF=(unsigned char)(y)
// Ожидание завершениа передачи UART
// Ожидание завершениа передачи UART
// wait for TRDY =1 for empty state
#define RS_Wait4OK(x) while(!(x->SciRegs->SCICTL2.bit.TXEMPTY))
/** Переключение линии на прием */
/** Переключение линии на прием */
#define RS_Line_to_receive(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 1;
/** Переключение линии на передачу */
/** Переключение линии на передачу */
#define RS_Line_to_send(x) if(x->commnumber==COM_2) GpioDataRegs.GPBDAT.bit.GPIO34 = 0;
/** Разрешение прерываний по получению символа и ошибкам от UART */
/** Разрешение прерываний по получению символа и ошибкам от UART */
#define enableUARTInt(x) x->SciRegs->SCICTL2.all=2
#define enableUARTIntW(x) x->SciRegs->SCICTL2.all=1
/** Сбрасывает таймер контроля активности после корректного обмена. */
void clear_timer_rs_live(RS_DATA *rs_arr);
/** Обновляет признак потери связи по тайм-ауту RS_TIME_OUT. */
void test_rs_live(RS_DATA *rs_arr);
#ifdef __cplusplus

View File

@@ -1,11 +1,19 @@
/**
* @file bios_dsp.h
* @brief Команды сервисного BIOS и API удалённой работы с памятью.
*
* Объявляет номера команд загрузчика и обработчики, работающие с RS_DATA.
* Интерфейс предоставляет прямые операции с адресным пространством DSP и
* предназначен только для доверенных, уже проверенных протокольных запросов.
*/
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/****************************************************************/
/* Bios_dsp.h */
/****************************************************************/
/* Основные комманды BIOS */
/* Основные комманды BIOS */
/****************************************************************/
#ifndef _BIOS_DSP
#define _BIOS_DSP
@@ -42,71 +50,85 @@ enum {
CMD_VECTOR=61,
CMD_IMPULSE,
/* стандартные команды */
/* стандартные команды */
CMD_STD=65, CMD_STD_ANS
};
enum {false=0, true};
/** Возвращает номер комманды, если есть или -1 если транзакций не было */
/** Возвращает номер комманды, если есть или -1 если транзакций не было */
/** Проверяет кадр и выполняет содержащуюся в нём сервисную команду. */
int get_command(RS_DATA *rs_arr);
/** Стандартный ответ, без параметров */
/** Стандартный ответ, без параметров */
/** Формирует и отправляет ответ длиной n слов через заданный порт. */
void Answer(RS_DATA *rs_arr,int n);
/* начальные установки (не работает)*/
/* начальные установки (не работает)*/
/** Сбрасывает состояние текущей сессии загрузчика. */
void init(RS_DATA *rs_arr);
/**@name Комманды
* Комманды, вызываемые через последовательный канал*/
/**@name Комманды
* Комманды, вызываемые через последовательный канал*/
//@{
/** Инициировать загрузку блока.
Настраивает прием блока данных */
/** Инициировать загрузку блока.
Настраивает прием блока данных */
/** Подготавливает диапазон памяти к приёму нового образа. */
void initload(RS_DATA *rs_arr);
/** Загрузка блока.
Вызываетса после загрузки блока через RS */
/** Загрузка блока.
Вызываетса после загрузки блока через RS */
/** Записывает очередной проверенный блок образа в память. */
void load(RS_DATA *rs_arr);
/** Выполнить программу в формате Serial Boot.
@precondition Должна быть произведена загрузка блока
Адрес программы беретса из заголовка и
сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load
/** Выполнить программу в формате Serial Boot.
@precondition Должна быть произведена загрузка блока
Адрес программы беретса из заголовка и
сравниваетса с переменной RecvPtr, заполнаемой в ф-ции load
@see load */
/** Передаёт управление по адресу, заданному сервисной командой. */
void run (RS_DATA *rs_arr);
/** Прочитать ачейку памати */
/** Прочитать ачейку памати */
/** Читает запрошенный диапазон памяти и возвращает его ведущему узлу. */
void peek(RS_DATA *rs_arr);
/** Записать в ачейку памати */
/** Записать в ачейку памати */
/** Записывает одно или несколько слов по адресу из команды. */
void poke(RS_DATA *rs_arr);
/** Передать блок памати */
/** Передать блок памати */
/** Передаёт ведущему узлу очередной блок содержимого памяти. */
void upload(RS_DATA *rs_arr);
/** Прошить XILINX.
@precondition Должна быть произведена загрузка блока
Адрес и длина прошивки беретса из заголовка и
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load,
так же смотрит магическое слово в начале прошивки
/** Прошить XILINX.
@precondition Должна быть произведена загрузка блока
Адрес и длина прошивки беретса из заголовка и
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load,
так же смотрит магическое слово в начале прошивки
@see load */
/** Обрабатывает команду доступа к внешней Flash-памяти. */
void xflash(RS_DATA *rs_arr);
/** Прошить TMS.
@precondition Должна быть произведена загрузка блока
Адрес и длина прошивки беретса из заголовка и
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
/** Прошить TMS.
@precondition Должна быть произведена загрузка блока
Адрес и длина прошивки беретса из заголовка и
сравниваетса с переменными RecvPtr и Length, заполнаемыми в ф-ции load
@see load */
/** Обрабатывает команду доступа к целевой Flash-памяти. */
void tflash(RS_DATA *rs_arr);
/* расширенные команды дла биоса */
/* расширенные команды дла биоса */
/** Обрабатывает расширенную сервисную команду BIOS. */
void extendbios(RS_DATA *rs_arr);
/** Записывает слово по физическому адресу; адрес обязан быть допустимым. */
void write_memory(unsigned long addr, unsigned int data);
/** Читает слово по физическому адресу; адрес обязан быть допустимым. */
unsigned int read_memory(unsigned long addr);

View File

@@ -1,22 +1,31 @@
/**
* @file caliber.h
* @brief Заводские калибровочные таблицы для вариантов семейства Balsam.
*
* Ровно одна таблица def_cal включается по значению BALSAM. Строки и столбцы
* имеют фиксированный смысл для измерительных каналов и диапазонов; их порядок
* согласован с message.c и внешней методикой калибровки. Файл определяет данные,
* поэтому должен подключаться только одним модулем реализации.
*/
#if BALSAM == 167 //-------------------------------------------------------------
int def_cal[][8] = {
// ÁÊÑÑ òðàíñ 100 1 100 2 150 1 150 2
0, 0, 0, 0, 455, 441, 2459, 2392, // Áîðò 0
0, 0, 0, 0, 462, 439, 2442, 2400, // Áîðò 1
// БКСС транс 100 1 100 2 150 1 150 2
0, 0, 0, 0, 455, 441, 2459, 2392, // Борт 0
0, 0, 0, 0, 462, 439, 2442, 2400, // Борт 1
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
4936, 4877, 4972, 4857, 1886, 1898, 2517, 2535, // Áîðò 0
4876, 5005, 4876, 4847, 1898, 1873, 2535, 2502, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
4936, 4877, 4972, 4857, 1886, 1898, 2517, 2535, // Борт 0
4876, 5005, 4876, 4847, 1898, 1873, 2535, 2502, // Борт 1
// ÓÌÏ UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3820, 3790, 3505, 3380, 1736, 683, 854, 14, // Áîðò 0 1062 1980
3835, 3785, 3522, 3332, 1745, 689, 860, 17, // Áîðò 1 1720 2405
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3820, 3790, 3505, 3380, 1736, 683, 854, 14, // Борт 0 1062 1980
3835, 3785, 3522, 3332, 1745, 689, 860, 17, // Борт 1 1720 2405
// ÁÊÑÑÄ 100 Ohm 150 Ohm
// БКССД 100 Ohm 150 Ohm
1281, 1272, 0, 0, 622, 2263, 0, 0,
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
1290, 1285, 0, 0, 2045, 2045, 2725, 2725 };
#endif //---------------------------------------------------------------------
@@ -24,45 +33,45 @@
#if BALSAM == 166 //-------------------------------------------------------------
int def_cal[][8] = {
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
4936, 4877, 4972, 4857, 1960, 1920, 2610, 2570, // Áîðò 0
4876, 5005, 4876, 4847, 1950, 1965, 2600, 2615, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
4936, 4877, 4972, 4857, 1960, 1920, 2610, 2570, // Борт 0
4876, 5005, 4876, 4847, 1950, 1965, 2600, 2615, // Борт 1
// ÓÌÏ UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3820, 3790, 3505, 3380, 1718, 673, 854, 14, // Áîðò 0
3835, 3785, 3522, 3332, 1697, 653, 860, 17, // Áîðò 1
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3820, 3790, 3505, 3380, 1718, 673, 854, 14, // Борт 0
3835, 3785, 3522, 3332, 1697, 653, 860, 17, // Борт 1
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
1281, 1272, 0, 0, 2049, 2050, 2749, 2750 };
#endif //---------------------------------------------------------------------
#if BALSAM == 165 //-------------------------------------------------------------
int def_cal[][8] = {
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
5130, 4960, 4925, 5070, 1881, 1881, 2506, 2516, // Áîðò 0
5020, 5040, 4950, 5030, 1871, 1879, 2507, 2514, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
5130, 4960, 4925, 5070, 1881, 1881, 2506, 2516, // Борт 0
5020, 5040, 4950, 5030, 1871, 1879, 2507, 2514, // Борт 1
// ÓÌÏ UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3890, 3865, 5100, 4850, 1730, 675, 854, 14, // Áîðò 0
3845, 3800, 3250, 3100, 1044, 0, 860, 17, // Áîðò 1
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3890, 3865, 5100, 4850, 1730, 675, 854, 14, // Борт 0
3845, 3800, 3250, 3100, 1044, 0, 860, 17, // Борт 1
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
1289, 1280, 0, 0, 2073, 2071, 2773, 2771 };
#endif //---------------------------------------------------------------------
#if BALSAM == 164 //-------------------------------------------------------------
int def_cal[][8] = {
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
7573, 7573, 7573, 7573, 1979, 1888, 2592, 2513, // Áîðò 0
7573, 7573, 7573, 7573, 1970, 1907, 2584, 2558, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
7573, 7573, 7573, 7573, 1979, 1888, 2592, 2513, // Борт 0
7573, 7573, 7573, 7573, 1970, 1907, 2584, 2558, // Борт 1
// ÓÌÏ UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3920, 3905, 3300, 3220, 1015, 0, 854, 14, // Áîðò 0
3835, 3785, 5100, 4600, 1750, 680, 860, 17, // Áîðò 1
// УМП UA UC IA IC 20mA O 4mA O 20mA I 4mA I
3920, 3905, 3300, 3220, 1015, 0, 854, 14, // Борт 0
3835, 3785, 5100, 4600, 1750, 680, 860, 17, // Борт 1
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
1266, 1267, 0, 0, 2063, 2040, 2678, 2655 };
#endif //---------------------------------------------------------------------
@@ -71,15 +80,15 @@
#if PXXXXX == 1 //-------------------------------------------------------------
int def_cal[][6] = {
// Ñèëîâîé UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Áîðò 0
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Áîðò 1
// Силовой UA1 UB1 UA2 UB2 300 1 300 2 400 1 400 2
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Борт 0
0400, 0400, 0400, 0400, 1950, 1950, 2600, 2600, // Борт 1
// ÓÌÏ UA UC IA IC 20mA 4mA
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Áîðò 0
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Áîðò 1
// УМП UA UC IA IC 20mA 4mA
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Борт 0
0400, 0400, 4800, 4800, 0, 0, 0, 0, // Борт 1
// ÂÝÏ 380Ô1 380Ô2 300 1 300 2 400 1 400 2
// ВЭП 380Ф1 380Ф2 300 1 300 2 400 1 400 2
1270, 1270, 0, 0, 1950, 1950, 2600, 2600 };
#endif //---------------------------------------------------------------------
*/

View File

@@ -1,11 +1,18 @@
/**
* @file cntrl_adr.h
* @brief Адреса узла в сервисном протоколе и функция их установки.
*
* Константные адреса задают специальные роли, CNTRL_ADDR и ADDR_FOR_ALL могут
* меняться во время настройки. Заголовок не выполняет валидацию диапазонов.
*/
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2000 г. */
/****************************************************************
cntrl_adr.h
****************************************************************
* Адрес контроллера *
* Адрес контроллера *
****************************************************************/
#ifndef _CNTRL_ADR
@@ -15,22 +22,26 @@
extern "C" {
#endif
/** адрес контроллера дла посылки всем АИНам */
/** адрес контроллера дла посылки всем АИНам */
extern int ADDR_FOR_ALL;
/** адрес контроллера дла посылки ответа */
/** адрес контроллера дла посылки ответа */
extern const int ADDR_ANSWER;
/** адреса терминала дла посылки ответа */
/** адреса терминала дла посылки ответа */
extern const int ADDR_TERMINAL;
/* Адрес контроллера */
/* Адрес контроллера */
extern int CNTRL_ADDR;
/* Универсальный адрес контроллера */
/* Универсальный адрес контроллера */
extern const int CNTRL_ADDR_UNIVERSAL;
/** Установка адреса контроллера дла прошивки */
/** Установка адреса контроллера дла прошивки */
/**
* @param cntrl_addr Новый индивидуальный адрес узла.
* @param cntrl_addr_for_all Новый адрес групповых команд.
*/
void set_cntrl_addr (int cntrl_addr,int cntrl_addr_for_all);

View File

@@ -1,8 +1,20 @@
/**
* @file crc16.h
* @brief Интерфейс алгоритмов CRC, используемых коммуникационными модулями.
*
* Буфер представлен словами целевого DSP; параметр size трактуется реализацией
* как число обрабатываемых элементов. Вызывающий код выбирает вариант CRC и
* передаёт требуемое протоколом начальное значение.
*/
typedef unsigned short WORD;
typedef unsigned char byte;
/** Вычисляет CRC-CCITT для size слов, продолжая переданное значение crc. */
unsigned int get_crc_ccitt(unsigned int crc, unsigned int *buf, unsigned long size );
/** Вычисляет табличный CRC-16 (полином 0xA001) для size слов. */
unsigned int get_crc_16(unsigned int crc,unsigned int *buf,unsigned long size );
/** Вычисляет побитовый вариант CRC-16 для проверки табличной реализации. */
unsigned int get_crc_16b(unsigned int crc,unsigned int *buf,unsigned long size );
/** Возвращает CRC-16 кадра с принятым в проекте начальным значением. */
int get_crc16(unsigned int *buf, int size );

View File

@@ -1,3 +1,22 @@
/**
* @file ecan.h
* @brief Минимальный публичный интерфейс обмена по CAN.
*
* Port выбирает аппаратный контроллер, DevNum/Addr определяют логический узел.
* Массив данных должен содержать формат кадра, ожидаемый реализацией ecan.c.
*/
/**
* Настраивает CAN-порт и почтовые ящики логического устройства.
* @param Port Номер аппаратного CAN-контроллера.
* @param DevNum Номер узла; реализация ограничивает его диапазоном 1..16.
*/
void InitCan(int Port, int DevNum);
/**
* Ставит прикладные данные в передающий mailbox.
* @param Port Номер аппаратного CAN-контроллера.
* @param data Массив слов кадра в формате проекта.
* @param Addr Адрес получателя.
*/
void CAN_send(int Port, int data[], int Addr);
/** Последние прикладные слова, принятые обработчиком CAN. */
extern int CAN_input_data[];

View File

@@ -1,3 +1,11 @@
/**
* @file filter_bat2.h
* @brief Коэффициенты и состояние рекурсивного НЧ-фильтра второго порядка.
*
* Наборы K*_FILTER_BATTER2_* рассчитаны для заданных частот среза при штатной
* частоте дискретизации. DEF_FILTERBAT создаёт нулевое состояние для 3 Гц;
* один экземпляр FILTERBAT нельзя одновременно использовать для разных каналов.
*/
#ifndef _FILTER_BAT2
#define _FILTER_BAT2
@@ -38,6 +46,12 @@ typedef struct { float k_0;
K3_FILTER_BATTER2_3HZ, \
0,0,0,0,0,0}
/**
* Выполняет один шаг фильтра и обновляет его историю на месте.
* @param b Уникальное состояние фильтра конкретного канала.
* @param InpVarCurr Текущий входной отсчёт.
* @return Новый фильтрованный отсчёт.
*/
float filterbat(FILTERBAT *b, float InpVarCurr);

View File

@@ -1 +1,13 @@
/**
* @file kanal.h
* @brief Интерфейс вывода значения на адресуемый канальный индикатор.
*
* adr выбирает индикатор, dat содержит отображаемое число, dot — позицию точки.
*/
/**
* Передаёт число адресуемому индикатору.
* @param adr Аппаратный адрес канала.
* @param dat Отображаемое целое значение.
* @param dot Позиция десятичной точки в протокольном формате индикатора.
*/
void kanal_Send(int adr, long dat, int dot);

View File

@@ -1,11 +1,19 @@
/**
* @file log_to_mem.h
* @brief Разметка внешней памяти и состояние кольцевого журнала.
*
* LOG_PAGE_START и LOG_PAGE_LEN обязаны совпадать с картой линковщика. Флаги
* no_write/never_write запрещают запись на разных уровнях, а clear_mem()
* полностью обнуляет область и потому является длительной операцией.
*/
/****************************************************************/
/* TMS320C32 */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2001г. */
/* ====== BIOS, КЛАИН, КЛВСП ====== */
/* ЦНИИ СЭТ (с) 1998-2001г. */
/****************************************************************/
/* log_to_mem.h
****************************************************************
* Запись логов в памyть *
* Запись логов в памyть *
****************************************************************/
#ifndef _LOG_TO_MEM
@@ -15,11 +23,11 @@
extern "C" {
#endif
/* Определениa длa работы логгера */
/* Определениa длa работы логгера */
#define LOG_PAGE_START 0x0200000
#define LOG_PAGE_LEN 0xFA00
extern int no_write, never_write; // Флаги, чтобы не писать (если что)
extern int no_write, never_write; // Флаги, чтобы не писать (если что)
typedef struct
{
@@ -32,14 +40,15 @@ typedef struct
extern LOG Log;
/* Запись словa в памать, где логи лежат */
/* Запись словa в памать, где логи лежат */
#define Log_to_mem(x) *(int *)(Log.Adres++) = x
/* Проверка границы памати дла логов */
/* Проверка границы памати дла логов */
//#define Test_mem_limit(x) if(Log.Adres > (Log.Finis - (x))) Log.Adres = Log.Start
#define Test_mem_limit(x) if(Log.Adres > (Log.Finis - (x))) Log.Adres -=(x)
/* Очистка памати (обнуление) */
/* Очистка памати (обнуление) */
/** Полностью обнуляет область журнала и возвращает указатель записи в начало. */
void clear_mem();
#ifdef __cplusplus

View File

@@ -1,19 +1,41 @@
// âãâ
// вгв
#ifndef _MEASURE
#define _MEASURE
/**
* @file measure.h
* @brief Общие типы, состояния и API измерительно-диагностической подсистемы.
*
* Объявляет этапы обработки каналов, битовые флаги ошибок и разделяемые данные,
* используемые ISR, протоколом и главным циклом. Номера каналов и позиции битов
* являются частью внешнего формата сообщений; менять их независимо нельзя.
*/
/** ISR Timer1 для периодического запуска измерительных и диагностических этапов. */
interrupt void cpu_timer1_isr_SENS(void);
/** Инициализирует основные структуры, фильтры и состояния датчиков. */
void Init_sensors(void);
/** Выполняет дополнительную инициализацию, зависящую от типа платы. */
void Init_sensors_more(void);
/** Строит маски упаковки каналов для внешних сообщений. */
void Init_packMask(void);
/** Рассчитывает температуру канала; ovn выбирает источник/режим измерения. */
void Temper_count(int chan, int ovn);
/** Рассчитывает ток и обновляет диагностику заданного канала. */
void Current_count(int chan);
/** Рассчитывает электрическую мощность заданного канала. */
void Power_count(int chan);
/** Пересчитывает масштабные коэффициенты из калибровочных параметров. */
void calc_sensor_koef(void);
/** Обновляет признаки превышения допустимого напряжения. */
void Is_Voltage_Hi(void);
/** Пересчитывает пороги напряжения для текущего режима изделия. */
void calc_volta_edge(void);
/**
* Выполняет временную проверку порога ошибки.
* @return Ненулевое значение после требуемого числа последовательных нарушений.
*/
int er_anal(int term, unsigned int * count, long edge, int pre);
typedef union
@@ -64,14 +86,14 @@ typedef union
#define NOER 0xE000//C
#define EROR 0x01FF
#define READY_FREQ (500.0 * 2)// Ãö
#define BLINK_FREQ 2 // Ãö
#define READY_FREQ (500.0 * 2)// Гц
#define BLINK_FREQ 2 // Гц
#define BLINK_TIME (READY_FREQ / BLINK_FREQ)
#define CANPOWSE 20
#define ADC_FREQ 3750 //3885.0//777//2000//20000 //777 //3885 // Ãö (777*5)
#define DAC_FREQ 200//5 // Ãö
#define ADC_FREQ 3750 //3885.0//777//2000//20000 //777 //3885 // Гц (777*5)
#define DAC_FREQ 200//5 // Гц
#define LOAD_TIME 30//15 // sec
@@ -86,23 +108,23 @@ extern unsigned int Caliber_time;
#define ZERO 27
#define Cooling 5 // (°Ñ) Ãèñòåðåçèñ ïî ñíàòèþ ïåðåãðåâà
#define Cooling 5 // (°С) Гистерезис по снатию перегрева
#define COSPi6 0.86602540378443864676372317075294
#define RADIX2 1.4142135623730950488016887242097
#define POWER_380 0 // ïèòàíèå 380Â
#define POWER_38O 1 // ïèòàíèå 380Â
#define CURRENT 2 // òîê
#define VOLTAGE 3 // íàïðàæåíèå
#define POWER_31 4 // ïèòàíèå 31Â
#define POWER_27 5 // ïèòàíèå 24Â
#define POWER_24 6 // ïèòàíèå 24Â
#define POWER_15 7 // ïèòàíèå 15Â
#define TERMO_AD 8 // òåðìîäàò÷èê ìåëêîñõåìà
#define TERMO_RS 9 // òåðìîðåçèñòîð
#define TRM_OBEH 10 // òåðìîäàò÷èê îâåí
#define POWER_380 0 // питание 380В
#define POWER_38O 1 // питание 380В
#define CURRENT 2 // ток
#define VOLTAGE 3 // напражение
#define POWER_31 4 // питание 31В
#define POWER_27 5 // питание 24В
#define POWER_24 6 // питание 24В
#define POWER_15 7 // питание 15В
#define TERMO_AD 8 // термодатчик мелкосхема
#define TERMO_RS 9 // терморезистор
#define TRM_OBEH 10 // термодатчик овен
extern int TPL_CANS,tpl_cans;

View File

@@ -1,3 +1,11 @@
/**
* @file message.h
* @brief Форматы команд, размеры ответов и API обработки Modbus-сообщений.
*
* CMD_TO_TMS описывает точную раскладку принятого кадра, включая CRC. Поля и
* ANSWER_LEN/REPLY_LEN согласованы с удалённым мастером; структура использует
* целевые типы DSP, поэтому не должна сериализоваться простым memcpy на PC.
*/
#ifndef MESSAGE_H
#define MESSAGE_H
@@ -11,8 +19,8 @@ typedef unsigned char CHAR;
typedef struct
{
unsigned char Address; // Àäðåñ êîíòðîëëåðà
unsigned char Number; // Íîìåð êîìàíäû
unsigned char Address; // Адрес контроллера
unsigned char Number; // Номер команды
BAITE byte0;
BAITE byte1;
@@ -30,13 +38,20 @@ typedef struct
extern int modbus[];
/** Принимает запрос чтения регистров и подготавливает соответствующий ответ. */
void ReceiveCommandModbus3(RS_DATA *rs_arr);
/** Принимает запрос записи одного регистра и применяет разрешённый параметр. */
void ReceiveCommandModbus6(RS_DATA *rs_arr);
/** Отправляет текущий блок телеметрии ответом прикладной функции 4. */
void SendCommandModbus4(RS_DATA *rs_arr);
/** Разбирает ответ функции 4, полученный от ведомого устройства. */
void ReceiveAnswerModbus4(RS_DATA *rs_arr);
/** Сохраняет текущий массив параметров в EEPROM. */
void Save_params(void);
/** Загружает параметры из EEPROM и заменяет некорректные значения безопасными. */
void Load_params(void);
/** Заполняет параметры значениями для выбранного в package.h варианта платы. */
void Default_params(void);
#endif //MESSAGE_H

View File

@@ -1,3 +1,12 @@
/**
* @file package.h
* @brief Центральная конфигурация изделия Balsam и адресов его подсистем.
*
* Значение BALSAM выбирает аппаратный вариант, направление вращения и набор
* возможностей. adr_* и последующие константы связывают физические модули с
* протоколом и массивами измерений. Изменение этого файла влияет на всю прошивку
* и должно сопровождаться проверкой схемы, карты CAN/Modbus и калибровки.
*/
#ifndef PACKAGE
#define PACKAGE
@@ -91,15 +100,15 @@
#define bSecretBt Buttons.bit.bit1
#define bTermoCal Buttons.bit.bit2
#define Cancount (modbus+0x60) // ïàóçà ìåæäó I ïîñûëêàìè CAN
#define Bright (modbus+0x62) // àðêîñòü ñèãíàëüíûõ ëàìïî÷åê
#define Brightness modbus[0x62] // àðêîñòü ñèãíàëüíûõ ëàìïî÷åê
#define Cancount (modbus+0x60) // пауза между I посылками CAN
#define Bright (modbus+0x62) // аркость сигнальных лампочек
#define Brightness modbus[0x62] // аркость сигнальных лампочек
#define Owncount modbus[0x63] // ïàóçà ìåæäó îïðîñàìè OWEN
#define Owncount modbus[0x63] // пауза между опросами OWEN
/* Íå âðåìà!
#define DAC_go modbus[0x64] // íà÷àëî çàðàäà
#define DAC_stop modbus[0x65] // êîíåö çàðàäà
/* Не врема!
#define DAC_go modbus[0x64] // начало зарада
#define DAC_stop modbus[0x65] // конец зарада
*/
#define m_FAST 0

View File

@@ -1,3 +1,12 @@
/**
* @file peripher.h
* @brief GPIO-примитивы и интерфейс определения аппаратного режима.
*
* Inline-функции учитывают различия разводки плат через глобальный Desk.
* Большинство выходов активны низким уровнем, поэтому set/clear не всегда
* совпадают с физическими SET/CLEAR регистрами. Desk должен быть определён
* get_Mode() до первого управления линиями.
*/
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
extern int Mode,Desk,TermoAD,TermoRS,TermoSW,Kurrent,Kalibro,Owen;

View File

@@ -1,3 +1,10 @@
/**
* @file pulto.h
* @brief Обработчик периодического таймера для режима пульта.
*
* Функция устанавливается в вектор Timer1 только для соответствующего Desk.
*/
//void what_is(void);
/** ISR таймера CPU1: обновляет индикацию и контроль связи в режиме пульта. */
interrupt void cpu_timer1_isr_PULT(void);

View File

@@ -1,3 +1,12 @@
/**
* @file spise2p.h
* @brief Конфигурация SPI EEPROM и структуры её конечного автомата.
*
* Определяет команды микросхемы, ширину адреса/данных, скорость SPI и состояния
* транзакции. SPISE2P_DRV_DEFAULTS создаёт единственный драйвер с callback-функциями;
* перед чтением или записью требуется InitSeeprom(), а диапазон операции должен
* оставаться внутри SEEPROM_LEN.
*/
/*=====================================================================
File name : SPISE2P.H
@@ -17,7 +26,7 @@ Date : 30/6/2003 (DD/MM/YYYY)
#define __SPISE2P_H__
// Ёмкость памати в байтах
// Ёмкость памати в байтах
#define SEEPROM_LEN 0x10000
#define NULL 0
@@ -90,13 +99,28 @@ typedef struct {
typedef SPISE2P_DRV *SPISE2P_DRV_handle;
/** Сбрасывает поля конечного автомата и конфигурирует SPI. */
void SPISE2P_DRV_init(SPISE2P_DRV * );
/** Продвигает конечный автомат EEPROM на один таймерный такт. */
void SPISE2P_DRV_tick(SPISE2P_DRV *);
/** Деактивирует аппаратный chip-select EEPROM. */
void SPISE2P_DRV_csset(void);
/** Активирует аппаратный chip-select EEPROM. */
void SPISE2P_DRV_csclr(void);
/** @return Ненулевое значение, когда драйвер готов принять новую операцию. */
unsigned int spiSe2pFree(SPISE2P_DRV *se2p);
/**
* Запускает асинхронную запись.
* @param se2p Экземпляр конечного автомата.
* @param msgPtr Описание адреса, буфера и длины блока.
*/
void spiSe2pWrite(SPISE2P_DRV *se2p, SE2P_DATA *data);
/**
* Запускает асинхронное чтение.
* @param se2p Экземпляр конечного автомата.
* @param msgPtr Описание адреса, буфера и длины блока.
*/
void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *data);
#if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT)
@@ -109,25 +133,27 @@ void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *data);
#define WORD_LEN 1
#endif
/* Установка драйвера сериальной EEPROM. **
** Инициализациа SPI и проч. Также настройка таймера. **
** Драйвер работает на прерываниах от таймера 2! */
/* Установка драйвера сериальной EEPROM. **
** Инициализациа SPI и проч. Также настройка таймера. **
** Драйвер работает на прерываниах от таймера 2! */
void InitSeeprom(void);
/* Запись блока в SEEPROM. Параметры таковы: **
** adres - адрес в епромке, куда писать. **
** adres = 0..0x8000, если длина слова 8 бит **
** adres = 0..0x4000, если длина слова 16 бит **
** buf - указатель на памать, откуда писать. **
** size - длина блока в байтах. По-любому в байтах! */
/* Запись блока в SEEPROM. Параметры таковы: **
** adres - адрес в епромке, куда писать. **
** adres = 0..0x8000, если длина слова 8 бит **
** adres = 0..0x4000, если длина слова 16 бит **
** buf - указатель на памать, откуда писать. **
** size - длина блока в байтах. По-любому в байтах! */
/** @param size Размер блока в байтах, независимо от SPISE2P_DATA_WIDTH. */
void Seeprom_write(unsigned int adres, unsigned int buf[], unsigned int size);
/* Чтение блока из SEEPROM. Параметры таковы: **
** adres - адрес в епромке, откуда читать. **
** adres = 0..0x8000, если длина слова 8 бит **
** adres = 0..0x4000, если длина слова 16 бит **
** buf - указатель на памать, куда читать. **
** size - длина блока в байтах. По-любому в байтах! */
/* Чтение блока из SEEPROM. Параметры таковы: **
** adres - адрес в епромке, откуда читать. **
** adres = 0..0x8000, если длина слова 8 бит **
** adres = 0..0x4000, если длина слова 16 бит **
** buf - указатель на памать, куда читать. **
** size - длина блока в байтах. По-любому в байтах! */
/** @param size Размер блока в байтах, независимо от SPISE2P_DATA_WIDTH. */
void Seeprom_read(unsigned int adres, unsigned int buf[], unsigned int size);
#endif

View File

@@ -1,7 +1,18 @@
/**
* @file tools.h
* @brief Низкоуровневые вспомогательные функции платформы TMS320F28335.
*
* init_zone7() настраивает внешнюю шину, pause_us() выполняет активную задержку.
*/
#ifndef TOOLS_H
#define TOOLS_H
/** Настраивает 16-битную внешнюю шину XINTF Zone 7. */
void init_zone7(void);
/**
* Выполняет активную задержку.
* @param t Длительность в микросекундах при штатной частоте CPU.
*/
void pause_us(unsigned long t);
#endif //TOOLS_H