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,3 +1,12 @@
/**
* @file peripher.c
* @brief Определение типа платы и управление дискретной периферией.
*
* Читает конфигурационные входы, выбирает режим изделия, коммутирует каналы
* термопар и опрашивает кнопки. Временное переназначение LED-линий сохраняет
* исходные MUX/DIR и должно всегда завершаться unsetup_leds_line(). Таблицы GPIO
* зависят от варианта платы и описаны в GPIO_table.h.
*/
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
#include "filter_bat2.h"
#include "measure.h"
@@ -10,12 +19,19 @@
#include "peripher.h"
#include "GPIO_table.h"
/** @brief Распознанный адрес/режим и признаки установленной периферии платы. */
int Mode,Desk,TermoAD=0,TermoRS=0,TermoSW=0,Kurrent=0,Kalibro=0,Owen=0;
/** @brief Интегрирующие счётчики фильтрации дискретных входов. */
unsigned int INcount0=0,INcount1=0;
/** @brief Снимок диагностических битов дискретной периферии. */
LONGE DigErr;
int MUX_GPIO32,MUX_GPIO48,DIR_GPIO32,DIR_GPIO48;
/**
* @brief Временно переводит GPIO32/GPIO48 в режим обычных цифровых выходов.
* @post Предыдущие MUX/DIR сохранены для unsetup_leds_line().
*/
void setup_leds_line()
{
MUX_GPIO32 = GpioCtrlRegs.GPBMUX1.bit.GPIO32;
@@ -31,6 +47,7 @@ void setup_leds_line()
EDIS;
}
/** @brief Восстанавливает MUX/DIR LED-линий, сохранённые setup_leds_line(). */
void unsetup_leds_line()
{
EALLOW;
@@ -41,14 +58,21 @@ void unsetup_leds_line()
EDIS;
}
/**
* @brief Считывает код исполнения платы и формирует её программную конфигурацию.
* @details По комбинации GPIO задаёт Mode/Desk, наличие температурных трактов,
* токовых входов, калибровки и внешнего OWEN. Затем применяет соответствующие
* таблицы направления, MUX и начальных уровней GPIO_table.h.
* @post Все inline-примитивы peripher.h можно безопасно использовать.
*/
void get_Mode()
{
EALLOW;
GpioCtrlRegs.GPAMUX1.all &= 0xFF000000; // 00—11
GpioCtrlRegs.GPAMUX2.all &= 0xFF00003F; // 19—27
GpioCtrlRegs.GPBMUX1.all &= 0xFFFFFFC0; // 32—34
GpioCtrlRegs.GPBMUX2.all &= 0x000FF000; // 48—53, 58—63
GpioCtrlRegs.GPAMUX1.all &= 0xFF000000; // 00—11
GpioCtrlRegs.GPAMUX2.all &= 0xFF00003F; // 19—27
GpioCtrlRegs.GPBMUX1.all &= 0xFFFFFFC0; // 32—34
GpioCtrlRegs.GPBMUX2.all &= 0x000FF000; // 48—53, 58—63
GpioCtrlRegs.GPADIR.bit.GPIO20 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO21 = 0;
@@ -117,6 +141,10 @@ void get_Mode()
EDIS;
}
/**
* @brief Переводит адресные линии мультиплексора термопар в невыбранное состояние.
* @note Используется между каналами, чтобы снизить влияние переходных процессов.
*/
void select_tpl_255(void)
{
if(Desk==dsk_BKSD)
@@ -144,6 +172,11 @@ void select_tpl_255(void)
GpioDataRegs.GPBSET.all = BKST_B_tpl_zero;
} }
/**
* @brief Выбирает один физический канал мультиплексора термопар.
* @param n_tpl Номер канала в логической нумерации измерительного модуля.
* @details Номер раскладывается на адресные GPIO с учётом разводки текущего Desk.
*/
void select_tpl_canal(int n_tpl)
{
unsigned long GPIO_A_tpl_set = 0;
@@ -187,6 +220,11 @@ void select_tpl_canal(int n_tpl)
GpioDataRegs.GPBCLEAR.all = GPIO_B_tpl_set;
} }
/**
* @brief Опрашивает кнопки и дискретные входы с программным антидребезгом.
* @details Счётчики INcount* требуют устойчивого уровня несколько циклов;
* подтверждённые состояния переносятся в команды и диагностические биты.
*/
void get_Buttons()
{
unsigned long butt =0;
@@ -208,7 +246,7 @@ void get_Buttons()
Inputs.all = butt;
}
/* Ничего такого в действительности нет
/* Ничего такого в действительности нет
if(Desk==dsk_BKST)
{ bSecretBt = !GpioDataRegs.GPBDAT.bit.GPIO63;
InputRep1 = bSecretBt;
@@ -244,7 +282,7 @@ void get_Buttons()
if(GpioDataRegs.GPADAT.bit.GPIO5 ) butt +=0x0800;
if(GpioDataRegs.GPBDAT.bit.GPIO48) butt +=0x1000;
if(GpioDataRegs.GPADAT.bit.GPIO10) butt +=0x2000; // Секретный вход
if(GpioDataRegs.GPADAT.bit.GPIO10) butt +=0x2000; // Секретный вход
Inputs.all = butt;
}