Update CCS12 peripheral firmware and documentation
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
|
||||
@@ -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 //---------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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[];
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
/**
|
||||
* @file pulto.h
|
||||
* @brief Обработчик периодического таймера для режима пульта.
|
||||
*
|
||||
* Функция устанавливается в вектор Timer1 только для соответствующего Desk.
|
||||
*/
|
||||
//void what_is(void);
|
||||
|
||||
/** ISR таймера CPU1: обновляет индикацию и контроль связи в режиме пульта. */
|
||||
interrupt void cpu_timer1_isr_PULT(void);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user