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 kanal.c
* @brief Последовательный вывод числовых данных на канальный индикатор.
*
* Управляет линиями DCLK/DOUT, формирует импульс сброса и передаёт разряды
* индикатора с учётом адреса, десятичной точки и множителя тактовой частоты.
* Задержки и таблица сегментов привязаны к внешней схеме; изменение GPIO или
* CLKMULT требует повторной проверки временной диаграммы.
*/
#include "DSP2833x_Device.h" // DSP281x Headerfile Include File
#include "DSP2833x_SWPrioritizedIsrLevels.h"
#include "filter_bat2.h"
@@ -15,12 +24,14 @@
int digits[16] = {63,6,91,79,102,109,125,7,127,111,64,0,0,0,121,0};
int readr[5] = {0x08,0x0C,0x10,0x00,0x04};
/** @brief Устанавливает тактовую линию канального последовательного интерфейса. */
void DCLK(int x)
{
if(x) GpioDataRegs.GPASET.bit.GPIO6=1;
else GpioDataRegs.GPACLEAR.bit.GPIO6=1;
}
/** @brief Устанавливает линию данных канального последовательного интерфейса. */
void DOUT(int x)
{
if(x) GpioDataRegs.GPASET.bit.GPIO8=1;
@@ -48,6 +59,10 @@ void DOUT(int x)
#define POWS1 80L
#endif
/**
* @brief Формирует последовательность сброса внешних регистров индикатора.
* @note Число холостых тактов является частью аппаратного протокола.
*/
void RESET()
{
DCLK(0);
@@ -64,6 +79,7 @@ void RESET()
#endif
}
/** @brief Выдаёт один бит данных и сопровождающий его импульс DCLK. */
void SENDBIT(int x)
{
DOUT(x); DCLK(1);
@@ -78,12 +94,20 @@ void SENDBIT(int x)
#endif
}
/**
* @brief Кодирует адрес и число и передаёт их семисегментному индикатору.
* @param adr Адрес физического канала.
* @param dat Значение для отображения.
* @param dot Позиция десятичной точки.
* @details Таблица digits преобразует цифры в сегменты; знак и ведущие позиции
* обрабатываются до побитовой отправки каждого разряда.
*/
void kanal_Send(int adr, long dat, int dot)
{
long Word,data,aliq_part,dg[4];
int i,j,bit,byt,addr,sgn=0,punkt=0,aliq_len=0,full_len, isdot=0;
if(adr>1) // Лампочки
if(adr>1) // Лампочки
{
Word =dat;
}
@@ -134,7 +158,7 @@ void kanal_Send(int adr, long dat, int dot)
for(i=3;i>0;i--)
{
if((dg[i]==0)&&(i!=dot))
dg[i]=0xF; // Это значит пусто
dg[i]=0xF; // Это значит пусто
else break;
}
@@ -143,7 +167,7 @@ void kanal_Send(int adr, long dat, int dot)
{
if( (dg[i]==0xF)||(i==3))
{
dg[i]=0xA; // Это значит минус
dg[i]=0xA; // Это значит минус
break;
} }