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 spise2p.c
* @brief Неблокирующий драйвер последовательной EEPROM поверх SPI.
*
* Высокоуровневые Seeprom_read/Seeprom_write запускают транзакцию, а конечный
* автомат SPISE2P_DRV_tick продвигается от Timer2. Состояние драйвера единично:
* новую операцию разрешено начинать только после spiSe2pFree(). Адрес и длина
* должны укладываться в SEEPROM_LEN и не пересекать ограничения микросхемы.
*/
/*=================================================================
File name : SPISE2PD.C
@@ -32,6 +41,14 @@ int ccc=0;
/******* SPI bus Serial EEPROM driver Initialization routine ********/
/********************************************************************/
/**
* @brief Синхронно записывает пользовательский блок через асинхронный драйвер.
* @param adres Начальный адрес EEPROM.
* @param buf Источник данных в памяти DSP.
* @param size Размер блока в байтах.
* @details Ожидает освобождения драйвера, запускает транзакцию и блокируется до
* её завершения, которое продвигается прерываниями Timer2.
*/
void Seeprom_write( unsigned int adres,
unsigned int buf[],
unsigned int size)
@@ -63,6 +80,12 @@ void Seeprom_write( unsigned int adres,
CpuTimer2Regs.TCR.all = 0x4010; // Use write-only instruction to set TSS bit = 1
}
/**
* @brief Синхронно читает блок EEPROM в пользовательский буфер.
* @param adres Начальный адрес EEPROM.
* @param buf Приёмный буфер DSP.
* @param size Размер в байтах.
*/
void Seeprom_read( unsigned int adres,
unsigned int buf[],
unsigned int size)
@@ -94,6 +117,10 @@ void Seeprom_read( unsigned int adres,
CpuTimer2Regs.TCR.all = 0x4010; // Use write-only instruction to set TSS bit = 1
}
/**
* @brief Инициализирует SPI, объект драйвера и периодический Timer2.
* @post se2p находится в свободном состоянии, Timer2 вызывает cpu_timer2_isr().
*/
void InitSeeprom()
{
se2p.init(&se2p);
@@ -108,6 +135,7 @@ void InitSeeprom()
IER |= M_INT14;
}
/** @brief Сбрасывает конечный автомат и программирует регистры SPI-A. */
void SPISE2P_DRV_init(SPISE2P_DRV *eeprom)
{
/* Configure SPI-A pins using GPIO regs*/
@@ -141,28 +169,33 @@ void SPISE2P_DRV_init(SPISE2P_DRV *eeprom)
SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SCI
}
/** @brief Деактивирует chip-select EEPROM. */
void SPISE2P_DRV_csset()
{
GpioDataRegs.GPADAT.bit.GPIO19 = 1;
}
/** @brief Активирует chip-select EEPROM перед транзакцией. */
void SPISE2P_DRV_csclr()
{
GpioDataRegs.GPADAT.bit.GPIO19 = 0;
}
/** @brief Возвращает ненулевое значение, если конечный автомат не занят. */
unsigned int spiSe2pFree(SPISE2P_DRV *se2p)
{
if(se2p->csr&0x3) return(0);
else return(1);
}
/** @brief Привязывает описание блока и переводит автомат в начало записи. */
void spiSe2pWrite(SPISE2P_DRV *se2p, SE2P_DATA *msgPtr)
{
se2p->msgPtr=msgPtr;
se2p->csr|=0x1;
}
/** @brief Привязывает описание блока и переводит автомат в начало чтения. */
void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *msgPtr)
{
se2p->msgPtr=msgPtr;
@@ -173,6 +206,10 @@ void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *msgPtr)
/******* SPI bus Serial EEPROM driver Tick function *****************/
/********************************************************************/
/**
* @brief ISR Timer2, задающий такт конечному автомату EEPROM.
* @note Один вызов выполняет только ограниченный шаг SPI-транзакции.
*/
interrupt void cpu_timer2_isr(void)
{ EALLOW;
CpuTimer2.InterruptCount++;
@@ -183,6 +220,12 @@ interrupt void cpu_timer2_isr(void)
EDIS;
}
/**
* @brief Выполняет один переход конечного автомата SPI EEPROM.
* @details Состояния последовательно выдают opcode, адрес и данные, ожидают
* флаги SPI, управляют CS и проверяют готовность микросхемы после записи.
* @param eeprom Активный экземпляр драйвера с описанием текущего блока.
*/
void SPISE2P_DRV_tick(SPISE2P_DRV *eeprom)
{
static unsigned int step=0;