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,13 @@
/**
* @file DAC.c
* @brief Управление внешним ЦАП и формирование аналогового задания нагрузки.
*
* Формирует последовательный поток через GPIO, рассчитывает временные интервалы
* относительно READY_FREQ и выдаёт нормированное значение Anal_output().
* Линии CLK/CS/DATA управляются непосредственно, поэтому порядок переключений
* и программные задержки являются частью аппаратного протокола и не должны
* переставляться без проверки осциллографом.
*/
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
#include "DSP2833x_SWPrioritizedIsrLevels.h"
#include "filter_bat2.h"
@@ -21,6 +31,10 @@ unsigned long WAKEpowse;
unsigned long IMPowse;
unsigned int period_dac, time_dac;
/**
* @brief Переводит физические интервалы профиля нагрузки в тики READY_FREQ.
* @post Обновлены WAKEpowse, period_dac и time_dac.
*/
void Setup_DAC_time(void)
{
WAKEpowse = 3L * DAC_FREQ +1;
@@ -29,12 +43,14 @@ void Setup_DAC_time(void)
time_dac = LOAD_TIME * DAC_FREQ;
}
/** @brief Устанавливает логический уровень последовательной линии DATA ЦАП. */
void dOUT(int x)
{
if(x) GpioDataRegs.GPBSET.bit.GPIO60=1;
else GpioDataRegs.GPBCLEAR.bit.GPIO60=1;
}
/** @brief Формирует короткую аппаратно-зависимую задержку между фронтами GPIO. */
void wast()
{
int i;
@@ -42,6 +58,11 @@ void wast()
for(i=0;i<25;i++);
}
/**
* @brief Последовательно передаёт одно управляющее слово во внешний ЦАП.
* @param word Слово протокола, выдаваемое по DATA синхронно с CLK.
* @note CS и CLK переключаются программно; порядок фронтов менять нельзя.
*/
void dSEND(unsigned int word)
{
int i;
@@ -57,12 +78,20 @@ void dSEND(unsigned int word)
dCS_1();
}
/** @brief Устанавливает CS, CLK и DATA в безопасные уровни ожидания. */
void Init_DAC(void)
{
dSEND(0x9002|0x0000);
toggle_RES_OUT_1();
}
/**
* @brief Масштабирует прикладное задание и отправляет код во внешний ЦАП.
* @param vrot Требуемое значение в прикладных единицах.
* @param maxx Значение полной шкалы; должно быть больше нуля.
* @details Результат ограничивается аппаратным диапазоном перед формированием
* управляющего слова, поэтому выход не переполняется при завышенном задании.
*/
void Anal_output(long vrot, long maxx)
{
long out;
@@ -70,7 +99,7 @@ void Anal_output(long vrot, long maxx)
out = DAC_min() + vrot * DAC_max() / maxx - vrot * DAC_min() / maxx ;
x=0;// !x; тщетно бытие
x=0;// !x; тщетно бытие
if(cCalibrDac) out=DAC_cal();
@@ -99,6 +128,11 @@ Log_to_mem(modbus[0x1D]);
}
/**
* @brief Выполняет очередной шаг временного профиля аналоговой нагрузки.
* @details Использует IMPowse как фазу профиля и на границах интервалов
* выбирает новое задание, передаваемое через Anal_output().
*/
void Load_runner()
{
static unsigned int count_dac=0, count_load=0, x=1;