Update CCS12 peripheral firmware and documentation
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user