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 main.c
* @brief Точка входа и основной диспетчер периферийной прошивки Balsam 167.
*
* Выполняет инициализацию тактирования, GPIO, интерфейсов и измерительных
* модулей, выбирает обработчик Timer1 по типу платы и затем координирует CAN,
* RS-485, команды и контроль состояния. Порядок инициализации важен: глобальные
* прерывания разрешаются только после настройки таблицы PIE и зависимых блоков.
*/
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "cntrl_adr.h"
@@ -23,6 +32,13 @@
#include "measure.h"
extern void DSP28x_usDelay(Uint32 Count);
/**
* @brief Настраивает CPU Timer1 и выбирает его ISR по роли платы.
* @details Для пульта используется cpu_timer1_isr_PULT(), для остальных ролей
* — измерительный cpu_timer1_isr_SENS(). Период равен одному тику READY_FREQ.
* @pre Desk уже считан из конфигурационных GPIO.
* @post Вектор XINT13 установлен, Timer1 запущен, CPU INT13 разрешён.
*/
void timer_Init()
{
EALLOW; // This is needed to write to EALLOW protected registers
@@ -35,6 +51,17 @@ void timer_Init()
IER |= M_INT13;
}
/**
* @brief Инициализирует устройство и выполняет бесконечный диспетчерский цикл.
*
* @details Последовательно поднимает системное тактирование, внешнюю память,
* PIE, GPIO, UART, EEPROM, CAN, АЦП и таймеры. Затем обслуживает завершённые
* RS-485 кадры, сервисные команды, CAN-периодику, кнопки и контроль связи.
* Точные ветви исполнения определяются Desk и опциями package.h.
*
* @warning Порядок запуска существенен: ISR не должны сработать до создания
* буферов, установки векторов и инициализации разделяемого состояния.
*/
void main()
{
int i,j,mask;
@@ -46,8 +73,10 @@ void main()
InitSysCtrl();
// Disable CPU interrupts and clear all CPU interrupt flags:
/* Конфигурация PIE и периферии выполняется при запрещённых прерываниях CPU. */
DINT;
/* После сброса PIE источники разрешаются отдельно каждым драйвером. */
InitPieCtrl();
IER = 0x0000;
@@ -56,6 +85,7 @@ void main()
InitPieVectTable();
init_zone7();
/* Роль платы определяет дальнейшую разводку ADC, GPIO и Timer1 ISR. */
get_Mode();
InitCan(0,Mode);
@@ -83,6 +113,7 @@ void main()
clear_mem();
set_cntrl_addr(Mode,16);
timer_Init();
/* Все базовые векторы и транспортные состояния готовы к обслуживанию ISR. */
EnableInterrupts();
if(Desk!=dsk_EPLT)
@@ -104,8 +135,10 @@ void main()
SysCtrlRegs.WDCR= 0x2F;
EDIS;
/* READY разрешает измерительному ADC ISR использовать накопленные данные. */
READY=1;
/* Foreground-цикл обрабатывает события, подготовленные ISR и таймерами. */
while(1)
{
if(CanGO)
@@ -206,16 +239,16 @@ void main()
led2_toggle();
switch(j)
{
case CMD_INIT: init(rs); break; // íŕ÷ŕëüíűĺ óńňŕíîâęč
case CMD_INITLOAD: initload(rs); break; // íŕńňđîéęŕ çŕăđóçęč
case CMD_RUN: run(rs); break; // çŕăđóçčňü áëîę
case CMD_LOAD: load(rs); break; // çŕăđóçčňü áëîę
case CMD_PEEK: peek(rs); break; // ďđî÷čňŕňü ŕ÷ĺéęó ďŕěŕňč
case CMD_POKE: poke(rs); break; // çŕďčńŕňü â ŕ÷ĺéęó ďŕěŕňč
case CMD_UPLOAD: upload(rs); break; // ďĺđĺäŕňü áëîę ďŕěŕňč
case CMD_EXTEND: extendbios(rs); break; // đŕńřčđĺííűĺ ęîěŕíäű äëŕ áčîńŕ
case CMD_INIT: init(rs); break; // начальные установки
case CMD_INITLOAD: initload(rs); break; // настройка загрузки
case CMD_RUN: run(rs); break; // загрузить блок
case CMD_LOAD: load(rs); break; // загрузить блок
case CMD_PEEK: peek(rs); break; // прочитать ачейку памати
case CMD_POKE: poke(rs); break; // записать в ачейку памати
case CMD_UPLOAD: upload(rs); break; // передать блок памати
case CMD_EXTEND: extendbios(rs); break; // расширенные команды дла биоса
case CMD_TFLASH: tflash(rs); break; // ďđîřčňü TMS
case CMD_TFLASH: tflash(rs); break; // прошить TMS
case CMD_MODBUS_3: ReceiveCommandModbus3(rs); break;
case CMD_MODBUS_6: ReceiveCommandModbus6(rs); break;