Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
94 lines
8.8 KiB
C
94 lines
8.8 KiB
C
/* Проверка 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;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|