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