Files
Balsam_167/tests/eeprom_profiles/spi_test.c
Andrey f741741cf8 Сохранить русские комментарии и настройки проекта в UTF-8
Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
2026-10-12 12:24:48 +03:00

94 lines
8.8 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* Проверка eeprom_profiles на модели ПК. Русские пояснения сохранены в UTF-8. */
/* Exercise the production Timer2 SPI state machine; no hardware writes. */
/* Подключает <assert.h>: настройки и интерфейс assert. */
#include <assert.h>
/* Подключает "../../Source/Internal/spise2p.c": драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */
#include "../../Source/Internal/spise2p.c"
/* Продолжает список аргументов, полей или выражение static unsigned trace[300], widths[300], used;; порядок элементов сохраняется. */
static unsigned trace[300], widths[300], used;
/* Начинает функцию transfer; назначение модуля — проверка eeprom_profiles на модели ПК. */
static void transfer(unsigned long address, int write)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Записывает buf[2] значением {0x1234,0x5678}, i; данные buf. */
unsigned buf[2]={0x1234,0x5678}, i;
/* Записывает message значением {buf,2,address}; данные message. */
SE2P_DATA message={buf,2,address};
/* Записывает used значением 0; данные used. */
used=0;
/* Проверяет if(write) spiSe2pWrite(&se2p,&message); else spiSe2pRead(&se2p,&message); последующий оператор выполняется только при истинном условии. */
if(write) spiSe2pWrite(&se2p,&message); else spiSe2pRead(&se2p,&message);
/* Цикл for(i=0;i<100 && !spiSe2pFree(&se2p);i++) ; задаёт начальное значение, условие продолжения и шаг перебора. */
for(i=0;i<100 && !spiSe2pFree(&se2p);i++) {
/* Записывает SpiaRegs.SPITXBUF значением 0xdead; данные SPITXBUF. */
SpiaRegs.SPITXBUF=0xdead;
SpiaRegs.SPIRXBUF=0; /* WIP clear for write, deterministic read data. */ /* Записывает SpiaRegs.SPIRXBUF значением 0; данные SPIRXBUF. */
/* Записывает SpiaRegs.SPISTS.bit.INT_FLAG значением 1; INT флаг. */
SpiaRegs.SPISTS.bit.INT_FLAG=1;
/* Вызывает SPISE2P_DRV_tick. Продвигает неблокирующий автомат SPI EEPROM: команда, адрес, данные и ожидание завершения записи. */
SPISE2P_DRV_tick(&se2p);
/* Проверяет if(SpiaRegs.SPITXBUF!=0xdead); последующий оператор выполняется только при истинном условии. */
if(SpiaRegs.SPITXBUF!=0xdead) {
/* Вызывает assert с аргументами (GpioDataRegs.GPADAT.bit.GPIO19==0) в текущей последовательности операций. */
assert(GpioDataRegs.GPADAT.bit.GPIO19==0);
/* Записывает trace[used] значением SpiaRegs.SPITXBUF; данные trace. */
trace[used]=SpiaRegs.SPITXBUF;
/* Записывает widths[used++] значением (SpiaRegs.SPICCR.all&15)+1; данные widths. */
widths[used++]=(SpiaRegs.SPICCR.all&15)+1;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Вызывает assert с аргументами (spiSe2pFree(&se2p) && GpioDataRegs.GPADAT.bit.GPIO19==1) в текущей последовательности операций. */
assert(spiSe2pFree(&se2p) && GpioDataRegs.GPADAT.bit.GPIO19==1);
/* Записывает i значением 0; данные i. */
i=0;
/* Проверяет if(write); последующий оператор выполняется только при истинном условии. */
if(write) { assert(trace[i]==0x0600 && widths[i++]==8); }
/* Вызывает assert с аргументами (trace[i]==(write ? 0x0200 : 0x0300) && widths[i++]==8) в текущей последовательности операций. */
assert(trace[i]==(write ? 0x0200 : 0x0300) && widths[i++]==8);
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
#if EEPROM_M95M02
/* Вызывает assert с аргументами (trace[i]==((address>>16)<<8) && widths[i++]==8) в текущей последовательности операций. */
assert(trace[i]==((address>>16)<<8) && widths[i++]==8);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Вызывает assert с аргументами (trace[i]==(address&65535) && widths[i++]==16) в текущей последовательности операций. */
assert(trace[i]==(address&65535) && widths[i++]==16);
/* Вызывает assert с аргументами (trace[i]==(write ? 0x1234 : 0) && widths[i++]==16) в текущей последовательности операций. */
assert(trace[i]==(write ? 0x1234 : 0) && widths[i++]==16);
/* Вызывает assert с аргументами (trace[i]==(write ? 0x5678 : 0) && widths[i++]==16) в текущей последовательности операций. */
assert(trace[i]==(write ? 0x5678 : 0) && widths[i++]==16);
/* Проверяет if(write); последующий оператор выполняется только при истинном условии. */
if(write) { assert(trace[i]==0x0500 && widths[i++]==8); assert(trace[i++]==0); }
/* Вызывает assert с аргументами (i==used) в текущей последовательности операций. */
assert(i==used);
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}
/* Точка входа: настраивает периферию, загружает параметры и обслуживает команды в главном цикле. */
int main(void)
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
{
/* Вызывает SPISE2P_DRV_init с аргументами (&se2p) в текущей последовательности операций. */
SPISE2P_DRV_init(&se2p);
/* Вызывает transfer с аргументами (0x7ffc,0); transfer(0x7ffc,1) в текущей последовательности операций. */
transfer(0x7ffc,0); transfer(0x7ffc,1);
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
#if EEPROM_M95M02
/* Вызывает assert с аргументами (BALSAM167_EEPROM_FIRMWARE_BYTES==261884UL) в текущей последовательности операций. */
assert(BALSAM167_EEPROM_FIRMWARE_BYTES==261884UL);
/* Вызывает transfer с аргументами (0xfffe,0); transfer(0x10000,0) в текущей последовательности операций. */
transfer(0xfffe,0); transfer(0x10000,0);
/* Вызывает transfer с аргументами (0x20000,1); transfer(0x3fffc,0); transfer(0x3fffc,1) в текущей последовательности операций. */
transfer(0x20000,1); transfer(0x3fffc,0); transfer(0x3fffc,1);
/* Выбирает альтернативный блок текущего условия компиляции. */
#else
/* Вызывает assert с аргументами (BALSAM167_EEPROM_FIRMWARE_BYTES==32508) в текущей последовательности операций. */
assert(BALSAM167_EEPROM_FIRMWARE_BYTES==32508);
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
#endif
/* Завершает main и возвращает 0. */
return 0;
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
}