Добавить пояснения к исходникам, заголовкам TI, настройкам CCS и существующим проверкам. Зафиксировать правила кодировки, обзор модулей и аудит комментариев.
782 lines
58 KiB
C
782 lines
58 KiB
C
/* Драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. Русские пояснения сохранены в UTF-8. */
|
||
/* Подключает "DSP2833x_Device.h": поставляемое TI описание Device для семейства C2833x. */
|
||
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
|
||
|
||
/* Подключает "spise2p.h": драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */
|
||
#include "spise2p.h"
|
||
|
||
|
||
/* Instance the SPI bus serial EEPROM driver */
|
||
/* Объявляет se2p — данные se2p; SPISE2P_DRV_DEFAULTS — данные SPISE2P_DRV_DEFAULTS. Начальное значение задаётся справа от знака равенства. */
|
||
static SPISE2P_DRV se2p=SPISE2P_DRV_DEFAULTS;
|
||
|
||
/* Instance serial EEPROm data transfer structure */
|
||
/* Продолжает список аргументов, полей или выражение static SE2P_DATA writeData, readData;; порядок элементов сохраняется. */
|
||
static SE2P_DATA writeData, readData;
|
||
|
||
// Prototype statements for functions found within this file.
|
||
/* Объявляет интерфейс функции PRD_TICK; реализация вызывается через этот прототип. */
|
||
interrupt void PRD_TICK(void);
|
||
/* Продвигает SPI EEPROM по Timer2 и подтверждает прерывание таймера. */
|
||
interrupt void cpu_timer2_isr(void);
|
||
|
||
/* Объявляет ccc — данные ccc. Начальное значение задаётся справа от знака равенства. */
|
||
int ccc=0;
|
||
|
||
/********************************************************************/
|
||
/******* SPI bus Serial EEPROM driver Initialization routine ********/
|
||
/********************************************************************/
|
||
|
||
/* Пишет EEPROM с разделением по физическим страницам; область параметров не пересекает образ прошивки. */
|
||
void Seeprom_write( SE2P_SIZE adres,
|
||
/* Объявляет buf — данные buf. */
|
||
unsigned int buf[],
|
||
/* Объявляет size). */
|
||
SE2P_SIZE size)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Объявляет len — данные len. */
|
||
unsigned int len;
|
||
|
||
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
|
||
#if EEPROM_M95M02
|
||
/* Bound physical accesses before byte-to-word rounding. Legacy 32-KiB
|
||
* callers retain their compact driver; EXTEND is checked independently. */
|
||
/* Проверяет if (adres >= PROM_LEN или !size или size > (PROM_LEN-adres)*2) return; последующий оператор выполняется только при истинном условии. */
|
||
if (adres >= PROM_LEN || !size || size > (PROM_LEN-adres)*2) return;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
|
||
/* Записывает CpuTimer2.InterruptCount значением 0; прерывание число. */
|
||
CpuTimer2.InterruptCount=0;
|
||
/* Записывает CpuTimer2Regs.TCR.all значением 0x4020; представление регистра целым словом без разбиения на битовые поля. */
|
||
CpuTimer2Regs.TCR.all = 0x4020; // Use write-only instruction to set TSS bit = 0
|
||
|
||
/* Повторяет или ожидает, пока выполняется while(!spiSe2pFree(&se2p));. */
|
||
while(!spiSe2pFree(&se2p));
|
||
|
||
/* Записывает size значением (size / WORD_LEN) + (size % WORD_LEN); размер. */
|
||
size = (size / WORD_LEN) + (size % WORD_LEN);
|
||
/* Повторяет или ожидает, пока выполняется while(size). */
|
||
while(size)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Записывает len значением PAGE_LEN - (adres % PAGE_LEN); данные len. */
|
||
len = PAGE_LEN - (adres % PAGE_LEN);
|
||
/* Проверяет if(len > size) len=size; последующий оператор выполняется только при истинном условии. */
|
||
if(len > size) len=size;
|
||
|
||
/* Записывает writeData.dataPtr значением buf; данные Ptr. */
|
||
writeData.dataPtr = buf;
|
||
/* Записывает writeData.nrData значением len; nr данные. */
|
||
writeData.nrData = len;
|
||
/* Записывает writeData.se2pAddr значением adres * WORD_LEN; данные se2pAddr. */
|
||
writeData.se2pAddr = adres * WORD_LEN;
|
||
|
||
/* Вызывает spiSe2pWrite. Ставит задание записи в SPI-драйвер с учётом состояния занятости EEPROM. */
|
||
spiSe2pWrite(&se2p, &writeData);
|
||
/* Повторяет или ожидает, пока выполняется while(!spiSe2pFree(&se2p));. */
|
||
while(!spiSe2pFree(&se2p));
|
||
|
||
/* Увеличивает buf значением len; данные buf. */
|
||
buf += len;
|
||
/* Увеличивает adres значением len; данные adres. */
|
||
adres += len;
|
||
/* Уменьшает size значением len; размер. */
|
||
size -= len;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Записывает CpuTimer2Regs.TCR.all значением 0x4010; представление регистра целым словом без разбиения на битовые поля. */
|
||
CpuTimer2Regs.TCR.all = 0x4010; // Use write-only instruction to set TSS bit = 1
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Читает EEPROM порциями; адрес задаётся словами C28x, размер переводится в число передаваемых слов. */
|
||
void Seeprom_read( SE2P_SIZE adres,
|
||
/* Объявляет buf — данные buf. */
|
||
unsigned int buf[],
|
||
/* Объявляет size). */
|
||
SE2P_SIZE size)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Объявляет len — данные len. */
|
||
unsigned int len;
|
||
|
||
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
|
||
#if EEPROM_M95M02
|
||
/* Bound physical accesses before byte-to-word rounding. Legacy 32-KiB
|
||
* callers retain their compact driver; EXTEND is checked independently. */
|
||
/* Проверяет if (adres >= PROM_LEN или !size или size > (PROM_LEN-adres)*2) return; последующий оператор выполняется только при истинном условии. */
|
||
if (adres >= PROM_LEN || !size || size > (PROM_LEN-adres)*2) return;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
|
||
/* Записывает CpuTimer2.InterruptCount значением 0; прерывание число. */
|
||
CpuTimer2.InterruptCount=0;
|
||
/* Записывает CpuTimer2Regs.TCR.all значением 0x4020; представление регистра целым словом без разбиения на битовые поля. */
|
||
CpuTimer2Regs.TCR.all = 0x4020; // Use write-only instruction to set TSS bit = 0
|
||
|
||
/* Повторяет или ожидает, пока выполняется while(!spiSe2pFree(&se2p));. */
|
||
while(!spiSe2pFree(&se2p));
|
||
|
||
/* Записывает size значением (size / WORD_LEN) + (size % WORD_LEN); размер. */
|
||
size = (size / WORD_LEN) + (size % WORD_LEN);
|
||
/* Повторяет или ожидает, пока выполняется while(size). */
|
||
while(size)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Записывает len значением PAGE_LEN - (adres % PAGE_LEN); данные len. */
|
||
len = PAGE_LEN - (adres % PAGE_LEN);
|
||
/* Проверяет if(len > size) len=size; последующий оператор выполняется только при истинном условии. */
|
||
if(len > size) len=size;
|
||
|
||
/* Записывает readData.dataPtr значением buf; данные Ptr. */
|
||
readData.dataPtr = buf;
|
||
/* Записывает readData.nrData значением len; nr данные. */
|
||
readData.nrData = len;
|
||
/* Записывает readData.se2pAddr значением adres * WORD_LEN; данные se2pAddr. */
|
||
readData.se2pAddr = adres * WORD_LEN;
|
||
|
||
/* Вызывает spiSe2pRead. Ставит задание чтения в SPI-драйвер с указателем буфера, длиной и физическим адресом. */
|
||
spiSe2pRead(&se2p, &readData);
|
||
/* Повторяет или ожидает, пока выполняется while(!spiSe2pFree(&se2p));. */
|
||
while(!spiSe2pFree(&se2p));
|
||
|
||
/* Увеличивает buf значением len; данные buf. */
|
||
buf += len;
|
||
/* Увеличивает adres значением len; данные adres. */
|
||
adres += len;
|
||
/* Уменьшает size значением len; размер. */
|
||
size -= len;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Записывает CpuTimer2Regs.TCR.all значением 0x4010; представление регистра целым словом без разбиения на битовые поля. */
|
||
CpuTimer2Regs.TCR.all = 0x4010; // Use write-only instruction to set TSS bit = 1
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Начинает функцию InitSeeprom; назначение модуля — драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */
|
||
void InitSeeprom()
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Продолжает список аргументов, полей или выражение se2p.init(&se2p);; порядок элементов сохраняется. */
|
||
se2p.init(&se2p);
|
||
|
||
/* Разрешение записи в защищённые регистры периферии. */
|
||
EALLOW; // This is needed to write to EALLOW protected registers
|
||
/* Записывает PieVectTable.TINT2 значением &cpu_timer2_isr; данные TINT2. */
|
||
PieVectTable.TINT2 = &cpu_timer2_isr;
|
||
/* Закрытие доступа к защищённым регистрам периферии. */
|
||
EDIS; // This is needed to disable write to EALLOW protected registers
|
||
|
||
/* Инициализирует модуль вызовом InitCpuTimers(); перед его дальнейшим использованием. */
|
||
InitCpuTimers(); // For this example, only initialize the Cpu Timers
|
||
/* Вызывает ConfigCpuTimer с аргументами (&CpuTimer2, (SYSCLKOUT/1000000), 100) в текущей последовательности операций. */
|
||
ConfigCpuTimer(&CpuTimer2, (SYSCLKOUT/1000000), 100);
|
||
|
||
/* Устанавливает биты IER значением M_INT14; регистр разрешения прерываний ядра C28x. */
|
||
IER |= M_INT14;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Начинает функцию SPISE2P_DRV_init; назначение модуля — драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */
|
||
void SPISE2P_DRV_init(SPISE2P_DRV *eeprom)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Configure SPI-A pins using GPIO regs*/
|
||
// This specifies which of the possible GPIO pins will be SPI functional pins.
|
||
// Comment out other unwanted lines.
|
||
/* Разрешение записи в защищённые регистры периферии. */
|
||
EALLOW;
|
||
/* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO16 значением 1; аппаратная линия ввода/вывода GPIO16. */
|
||
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 1; // Configure GPIO16 as SPISIMOA
|
||
/* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO17 значением 1; аппаратная линия ввода/вывода GPIO17. */
|
||
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 1; // Configure GPIO17 as SPISOMIA
|
||
/* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO18 значением 1; аппаратная линия ввода/вывода GPIO18. */
|
||
GpioCtrlRegs.GPAMUX2.bit.GPIO18 = 1; // Configure GPIO18 as SPICLKA
|
||
/* Записывает GpioCtrlRegs.GPAMUX2.bit.GPIO19 значением 0; аппаратная линия ввода/вывода GPIO19. */
|
||
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; // General purpose I/O 19 (default) (I/O)
|
||
/* Записывает GpioCtrlRegs.GPADIR.bit.GPIO19 значением 1; аппаратная линия ввода/вывода GPIO19. */
|
||
GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; // Configures the GPIO pin as an output
|
||
/* Записывает GpioDataRegs.GPADAT.bit.GPIO19 значением 0; аппаратная линия ввода/вывода GPIO19. */
|
||
GpioDataRegs.GPADAT.bit.GPIO19 = 0;
|
||
/* Закрытие доступа к защищённым регистрам периферии. */
|
||
EDIS;
|
||
|
||
/* Configure the SPI: 8-bit, Rising edge with delay */
|
||
/* Записывает SpiaRegs.SPICCR.all значением 0x0007; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all=0x0007;
|
||
/* Записывает SpiaRegs.SPICTL.all значением 0x001F; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICTL.all=0x001F;
|
||
/* Записывает SpiaRegs.SPISTS.all значением 0x00; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPISTS.all=0x00;
|
||
|
||
/* Записывает SpiaRegs.SPIBRR значением CLKMULT * 6 + 1; данные SPIBRR. */
|
||
SpiaRegs.SPIBRR = CLKMULT * 6 + 1;
|
||
|
||
/* Записывает SpiaRegs.SPIFFTX.all значением 0x8000; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPIFFTX.all=0x8000;
|
||
/* Записывает SpiaRegs.SPIFFRX.all значением 0x0000; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPIFFRX.all=0x0000;
|
||
/* Записывает SpiaRegs.SPIFFCT.all значением 0x00; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPIFFCT.all=0x00;
|
||
/* Записывает SpiaRegs.SPIPRI.all значением 0x0010; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPIPRI.all=0x0010;
|
||
|
||
/* Disable Chip Select of Serial EEPROM */
|
||
/* Записывает eeprom->csr значением 0; данные eeprom->csr. */
|
||
eeprom->csr=0;
|
||
/* Записывает eeprom->msgPtr значением 0; данные eeprom->msgPtr. */
|
||
eeprom->msgPtr=0;
|
||
|
||
/* Записывает SpiaRegs.SPICCR.bit.SPISWRESET значением 1; данные SPISWRESET. */
|
||
SpiaRegs.SPICCR.bit.SPISWRESET=1; // Enable SCI
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Начинает функцию SPISE2P_DRV_csset; назначение модуля — драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */
|
||
void SPISE2P_DRV_csset()
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Записывает GpioDataRegs.GPADAT.bit.GPIO19 значением 1; аппаратная линия ввода/вывода GPIO19. */
|
||
GpioDataRegs.GPADAT.bit.GPIO19 = 1;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Начинает функцию SPISE2P_DRV_csclr; назначение модуля — драйвер SPI EEPROM, адресация, страницы и автомат завершения операций. */
|
||
void SPISE2P_DRV_csclr()
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Записывает GpioDataRegs.GPADAT.bit.GPIO19 значением 0; аппаратная линия ввода/вывода GPIO19. */
|
||
GpioDataRegs.GPADAT.bit.GPIO19 = 0;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Проверяет завершение текущего задания SPI EEPROM перед постановкой следующего. */
|
||
unsigned int spiSe2pFree(SPISE2P_DRV *se2p)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Проверяет if(se2p->csr&0x3) return(0); последующий оператор выполняется только при истинном условии. */
|
||
if(se2p->csr&0x3) return(0);
|
||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||
else return(1);
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Ставит задание записи в SPI-драйвер с учётом состояния занятости EEPROM. */
|
||
void spiSe2pWrite(SPISE2P_DRV *se2p, SE2P_DATA *msgPtr)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Записывает se2p->msgPtr значением msgPtr; данные se2p->msgPtr. */
|
||
se2p->msgPtr=msgPtr;
|
||
/* Устанавливает биты se2p->csr значением 0x1; данные se2p->csr. */
|
||
se2p->csr|=0x1;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Ставит задание чтения в SPI-драйвер с указателем буфера, длиной и физическим адресом. */
|
||
void spiSe2pRead(SPISE2P_DRV *se2p, SE2P_DATA *msgPtr)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Записывает se2p->msgPtr значением msgPtr; данные se2p->msgPtr. */
|
||
se2p->msgPtr=msgPtr;
|
||
/* Устанавливает биты se2p->csr значением 0x2; данные se2p->csr. */
|
||
se2p->csr|=0x2;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/********************************************************************/
|
||
/******* SPI bus Serial EEPROM driver Tick function *****************/
|
||
/********************************************************************/
|
||
|
||
/* Продвигает SPI EEPROM по Timer2 и подтверждает прерывание таймера. */
|
||
interrupt void cpu_timer2_isr(void)
|
||
/* Продолжает список аргументов, полей или выражение { EALLOW;; порядок элементов сохраняется. */
|
||
{ EALLOW;
|
||
/* Изменяет счётчик в выражении CpuTimer2.InterruptCount++; на один для следующего шага. */
|
||
CpuTimer2.InterruptCount++;
|
||
|
||
/* Продолжает список аргументов, полей или выражение se2p.tick(&se2p);; порядок элементов сохраняется. */
|
||
se2p.tick(&se2p);
|
||
|
||
// The CPU acknowledges the interrupt.
|
||
/* Закрытие доступа к защищённым регистрам периферии. */
|
||
EDIS;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Продвигает неблокирующий автомат SPI EEPROM: команда, адрес, данные и ожидание завершения записи. */
|
||
void SPISE2P_DRV_tick(SPISE2P_DRV *eeprom)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Объявляет step — данные step. Начальное значение задаётся справа от знака равенства. */
|
||
static unsigned int step=0;
|
||
/* Объявляет dataCount — данные число. Начальное значение задаётся справа от знака равенства. */
|
||
static unsigned int dataCount=0;
|
||
/* Объявляет dummy — данные dummy. volatile требует фактического чтения или записи при каждом доступе. Начальное значение задаётся справа от знака равенства. */
|
||
static volatile unsigned int dummy=0;
|
||
|
||
/* Вызывает switch с аргументами (step) в текущей последовательности операций. */
|
||
switch(step)
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Ветвь выбора для 0; выполняется при совпадении селектора switch. */
|
||
case 0:
|
||
/* If write request is SET, then trigger the Write operation
|
||
If read request is SET, then trigger the Read operation
|
||
If Read request is also not SET, then continue to poll */
|
||
|
||
/* Проверяет if(eeprom->csr&SPISE2P_WRRQ); последующий оператор выполняется только при истинном условии. */
|
||
if(eeprom->csr&SPISE2P_WRRQ)
|
||
/* Записывает step значением 1; данные step. */
|
||
{ step=1;
|
||
eeprom->csr|=SPISE2P_WRIP; /* Set Write in progress*/ /* Устанавливает биты eeprom->csr значением SPISE2P_WRIP; данные eeprom->csr. */
|
||
/* Продолжает список аргументов, полей или выражение eeprom->csclr();; порядок элементов сохраняется. */
|
||
eeprom->csclr();
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|
||
/* Проверяет if(eeprom->csr&SPISE2P_RDRQ); последующий оператор выполняется только при истинном условии. */
|
||
if(eeprom->csr&SPISE2P_RDRQ)
|
||
/* Записывает step значением 13; данные step. */
|
||
{ step=13;
|
||
eeprom->csr|=SPISE2P_RDIP; /* Set Read in progress */ /* Устанавливает биты eeprom->csr значением SPISE2P_RDIP; данные eeprom->csr. */
|
||
/* Продолжает список аргументов, полей или выражение eeprom->csclr();; порядок элементов сохраняется. */
|
||
eeprom->csclr();
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 1; выполняется при совпадении селектора switch. */
|
||
case 1:
|
||
/************************************************************
|
||
*********** SPI bus EEPROM Write Starts from here ***********
|
||
*************************************************************
|
||
Prier to any attempt to write data to SPI serial EEPROM
|
||
Write Enable Latch must be set by issuing the WREN command */
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением SPISE2P_WREN_CMD; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=SPISE2P_WREN_CMD;
|
||
/* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */
|
||
SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1;
|
||
/* Записывает step значением 2; данные step. */
|
||
step=2;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 2; выполняется при совпадении селектора switch. */
|
||
case 2:
|
||
/* Wait for VSPI State machine to send the WREN command and
|
||
serial EEPROM Chip Select must be brought to HIGH to set
|
||
the WREN latch */
|
||
|
||
if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */
|
||
/* Продолжает список аргументов, полей или выражение eeprom->csset();; порядок элементов сохраняется. */
|
||
eeprom->csset();
|
||
|
||
/* Записывает step значением 3; данные step. */
|
||
step=3;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 3; выполняется при совпадении селектора switch. */
|
||
case 3:
|
||
/* Assert CS of Serial EEPROM and send WRITE command */
|
||
|
||
/* Продолжает список аргументов, полей или выражение eeprom->csclr();; порядок элементов сохраняется. */
|
||
eeprom->csclr();
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением SPISE2P_WRITE_CMD; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=SPISE2P_WRITE_CMD;
|
||
/* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */
|
||
SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1;
|
||
/* Записывает step значением 4; данные step. */
|
||
step=4;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 4; выполняется при совпадении селектора switch. */
|
||
case 4:
|
||
/* Wait for VSPI State machine to send the WRITE command */
|
||
|
||
if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */
|
||
{ dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */
|
||
/* Записывает step значением 5; данные step. */
|
||
step=5;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 5; выполняется при совпадении селектора switch. */
|
||
case 5:
|
||
/* Send Address */
|
||
|
||
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
|
||
#if EEPROM_M95M02
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением (unsigned int)(eeprom->msgPtr->se2pAddr >> 16) << 8; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=(unsigned int)(eeprom->msgPtr->se2pAddr >> 16) << 8;
|
||
/* Записывает step значением 20; данные step. */
|
||
step=20;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
/* Ветвь выбора для 20; выполняется при совпадении селектора switch. */
|
||
case 20:
|
||
/* Проверяет if (!SpiaRegs.SPISTS.bit.INT_FLAG) break; последующий оператор выполняется только при истинном условии. */
|
||
if (!SpiaRegs.SPISTS.bit.INT_FLAG) break;
|
||
/* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */
|
||
dummy=SpiaRegs.SPIRXBUF;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
/* Условие компиляции (SPISE2P_ADDR_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_ADDR_WIDTH==SIXTEEN_BIT)
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR16BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all= SPISE2P_TFR16BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением eeprom->msgPtr->se2pAddr; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
/* Условие компиляции (SPISE2P_ADDR_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_ADDR_WIDTH==EIGHT_BIT)
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all= SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением eeprom->msgPtr->se2pAddr<<8; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr<<8;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
|
||
SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */
|
||
/* Записывает step значением 6; данные step. */
|
||
step=6;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 6; выполняется при совпадении селектора switch. */
|
||
case 6:
|
||
/* Wait for VSPI State machine to send the Address */
|
||
|
||
if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */
|
||
{ dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */
|
||
/* Записывает step значением 7; данные step. */
|
||
step=7;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 7; выполняется при совпадении селектора switch. */
|
||
case 7:
|
||
/* Send Data */
|
||
|
||
/* Условие компиляции (SPISE2P_DATA_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT)
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR16BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all=SPISE2P_TFR16BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением *(eeprom->msgPtr->dataPtr+dataCount); данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=*(eeprom->msgPtr->dataPtr+dataCount);
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
|
||
/* Условие компиляции (SPISE2P_DATA_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_DATA_WIDTH==EIGHT_BIT)
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением *(eeprom->msgPtr->dataPtr+dataCount)<<8; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=*(eeprom->msgPtr->dataPtr+dataCount)<<8;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
|
||
/* Изменяет счётчик в выражении dataCount++; на один для следующего шага. */
|
||
dataCount++;
|
||
SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */
|
||
/* Записывает step значением 8; данные step. */
|
||
step=8;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 8; выполняется при совпадении селектора switch. */
|
||
case 8:
|
||
/* Wait for VSPI State machine to send the Data.
|
||
If all the data are sent, then set the CS pin to HIGH
|
||
to program or write the data in EEPROM array */
|
||
|
||
if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */
|
||
{ dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */
|
||
|
||
/* Проверяет if (dataCount==eeprom->msgPtr->nrData); последующий оператор выполняется только при истинном условии. */
|
||
if (dataCount==eeprom->msgPtr->nrData)
|
||
/* Продолжает список аргументов, полей или выражение { eeprom->csset();; порядок элементов сохраняется. */
|
||
{ eeprom->csset();
|
||
/* Записывает step значением 9;}; данные step. */
|
||
step=9;}
|
||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||
else
|
||
step=7; /* Write next data */ /* Записывает step значением 7; данные step. */
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
|
||
/* Ветвь выбора для 9; выполняется при совпадении селектора switch. */
|
||
case 9:
|
||
/* Read the EEPROM status register to check whether the
|
||
data sent are indeed programmed to the EEPROM array.
|
||
Hence, send RDSR command to EEPROM to read status reg. */
|
||
|
||
/* Продолжает список аргументов, полей или выражение eeprom->csclr();; порядок элементов сохраняется. */
|
||
eeprom->csclr();
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением SPISE2P_RDSR_CMD; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=SPISE2P_RDSR_CMD;
|
||
SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */
|
||
/* Записывает step значением 10; данные step. */
|
||
step=10;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 10; выполняется при совпадении селектора switch. */
|
||
case 10:
|
||
/* Wait for VSPI State machine to send RDSR command */
|
||
|
||
if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */
|
||
{ dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */
|
||
/* Записывает step значением 11; данные step. */
|
||
step=11;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 11; выполняется при совпадении селектора switch. */
|
||
case 11:
|
||
/* Send dummy Data to read Status reg. */
|
||
|
||
/* Записывает SpiaRegs.SPITXBUF значением SPISE2P_DUMMY_DATA; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA;
|
||
SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */
|
||
/* Записывает step значением 12; данные step. */
|
||
step=12;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 12; выполняется при совпадении селектора switch. */
|
||
case 12:
|
||
/* Wait for VSPI State machine to clock out status reg.
|
||
Check, whether the data are written to the EEPROM array,
|
||
If written, then reset the WRIP(write in progress) and
|
||
WRRQ(Write request bit) and go back to STATE0 */
|
||
|
||
if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */
|
||
/* Продолжает список аргументов, полей или выражение { eeprom->csset();; порядок элементов сохраняется. */
|
||
{ eeprom->csset();
|
||
|
||
/* Проверяет if (SpiaRegs.SPIRXBUF & SPISE2P_BUSY_MASK ); последующий оператор выполняется только при истинном условии. */
|
||
if (SpiaRegs.SPIRXBUF & SPISE2P_BUSY_MASK )
|
||
/* Записывает step значением 9; данные step. */
|
||
step=9;
|
||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||
else
|
||
/* Оставляет биты маски eeprom->csr значением (~SPISE2P_WRIP); данные eeprom->csr. */
|
||
{ eeprom->csr&=(~SPISE2P_WRIP);
|
||
/* Оставляет биты маски eeprom->csr значением (~SPISE2P_WRRQ); данные eeprom->csr. */
|
||
eeprom->csr&=(~SPISE2P_WRRQ);
|
||
/* Записывает step значением 0; данные step. */
|
||
step=0;
|
||
/* Записывает dataCount значением 0; данные число. */
|
||
dataCount=0;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 13; выполняется при совпадении селектора switch. */
|
||
case 13:
|
||
/************************************************************
|
||
*********** SPI bus EEPROM Read Starts from here ***********
|
||
*************************************************************
|
||
Send READ Command to SPI bus serail EEPROM */
|
||
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением SPISE2P_READ_CMD; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=SPISE2P_READ_CMD;
|
||
SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */
|
||
/* Записывает step значением 14; данные step. */
|
||
step=14;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 14; выполняется при совпадении селектора switch. */
|
||
case 14:
|
||
/* Wait for VSPI State machine to send READ command */
|
||
|
||
if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */
|
||
{ dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */
|
||
/* Записывает step значением 15; данные step. */
|
||
step=15;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 15; выполняется при совпадении селектора switch. */
|
||
case 15:
|
||
/* Send Address */
|
||
|
||
/* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */
|
||
#if EEPROM_M95M02
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all=SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением (unsigned int)(eeprom->msgPtr->se2pAddr >> 16) << 8; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=(unsigned int)(eeprom->msgPtr->se2pAddr >> 16) << 8;
|
||
/* Записывает step значением 21; данные step. */
|
||
step=21;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
/* Ветвь выбора для 21; выполняется при совпадении селектора switch. */
|
||
case 21:
|
||
/* Проверяет if (!SpiaRegs.SPISTS.bit.INT_FLAG) break; последующий оператор выполняется только при истинном условии. */
|
||
if (!SpiaRegs.SPISTS.bit.INT_FLAG) break;
|
||
/* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */
|
||
dummy=SpiaRegs.SPIRXBUF;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
/* Условие компиляции (SPISE2P_ADDR_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_ADDR_WIDTH==SIXTEEN_BIT)
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR16BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all= SPISE2P_TFR16BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением eeprom->msgPtr->se2pAddr; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
/* Условие компиляции (SPISE2P_ADDR_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_ADDR_WIDTH==EIGHT_BIT)
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all= SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением eeprom->msgPtr->se2pAddr<<8; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=eeprom->msgPtr->se2pAddr<<8;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
|
||
SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */
|
||
/* Записывает step значением 16; данные step. */
|
||
step=16;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 16; выполняется при совпадении селектора switch. */
|
||
case 16:
|
||
/* Wait for VSPI State machine to send Address */
|
||
|
||
if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */
|
||
{ dummy=SpiaRegs.SPIRXBUF; /* Reset SPI INT FLAG */ /* Записывает dummy значением SpiaRegs.SPIRXBUF; данные dummy. */
|
||
/* Записывает step значением 17; данные step. */
|
||
step=17;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 17; выполняется при совпадении селектора switch. */
|
||
case 17:
|
||
/* Send Dummy value to clock out data from serial EEPROM */
|
||
|
||
/* Условие компиляции (SPISE2P_DATA_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT)
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR16BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all= SPISE2P_TFR16BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением SPISE2P_DUMMY_DATA; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
|
||
/* Условие компиляции (SPISE2P_DATA_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_DATA_WIDTH==EIGHT_BIT)
|
||
/* Записывает SpiaRegs.SPICCR.all значением SPISE2P_TFR8BIT; представление регистра целым словом без разбиения на битовые поля. */
|
||
SpiaRegs.SPICCR.all= SPISE2P_TFR8BIT;
|
||
/* Записывает SpiaRegs.SPITXBUF значением SPISE2P_DUMMY_DATA<<8; данные SPITXBUF. */
|
||
SpiaRegs.SPITXBUF=SPISE2P_DUMMY_DATA<<8;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
|
||
SpiaRegs.SPISTS.bit.BUFFULL_FLAG=1; /* Set TXBUF FULL FLAG */ /* Записывает SpiaRegs.SPISTS.bit.BUFFULL_FLAG значением 1; BUFFULL флаг. */
|
||
/* Записывает step значением 18; данные step. */
|
||
step=18;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 18; выполняется при совпадении селектора switch. */
|
||
case 18:
|
||
/* Wait for VSPI State machine to clk out data from EEPROM */
|
||
|
||
if(SpiaRegs.SPISTS.bit.INT_FLAG) /* Check SPI INT FLAG */ /* Проверяет if(SpiaRegs.SPISTS.bit.INT_FLAG); последующий оператор выполняется только при истинном условии. */
|
||
/* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */
|
||
{
|
||
/* Условие компиляции (SPISE2P_DATA_WIDTH==SIXTEEN_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_DATA_WIDTH==SIXTEEN_BIT)
|
||
/* Продолжает список аргументов, полей или выражение *(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF;; порядок элементов сохраняется. */
|
||
*(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
|
||
/* Условие компиляции (SPISE2P_DATA_WIDTH==EIGHT_BIT): выбранный блок включается в текущий вариант прошивки. */
|
||
#if(SPISE2P_DATA_WIDTH==EIGHT_BIT)
|
||
/* Продолжает список аргументов, полей или выражение *(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF&0xFF;; порядок элементов сохраняется. */
|
||
*(eeprom->msgPtr->dataPtr+dataCount)=SpiaRegs.SPIRXBUF&0xFF;
|
||
/* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */
|
||
#endif
|
||
/* Изменяет счётчик в выражении dataCount++; на один для следующего шага. */
|
||
dataCount++;
|
||
/* Записывает step значением 19; данные step. */
|
||
step=19;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
|
||
/* Ветвь выбора для 19; выполняется при совпадении селектора switch. */
|
||
case 19:
|
||
/* If all the data are read, terminate the read operation by
|
||
rising the CS. Then reset the RDIP (Read in progress) bit
|
||
and reset the RDRQ(Read request) bit and go back to STATE0 */
|
||
|
||
/* Проверяет if (dataCount==eeprom->msgPtr->nrData); последующий оператор выполняется только при истинном условии. */
|
||
if (dataCount==eeprom->msgPtr->nrData)
|
||
/* Продолжает список аргументов, полей или выражение { eeprom->csset();; порядок элементов сохраняется. */
|
||
{ eeprom->csset();
|
||
/* Записывает step значением 0; данные step. */
|
||
step=0;
|
||
/* Записывает dataCount значением 0; данные число. */
|
||
dataCount=0;
|
||
/* Оставляет биты маски eeprom->csr значением (~SPISE2P_RDIP); данные eeprom->csr. */
|
||
eeprom->csr&=(~SPISE2P_RDIP);
|
||
/* Оставляет биты маски eeprom->csr значением (~SPISE2P_RDRQ); данные eeprom->csr. */
|
||
eeprom->csr&=(~SPISE2P_RDRQ);
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Выполняет альтернативу, если предыдущее условие if оказалось ложным. */
|
||
else
|
||
/* Записывает step значением 17; данные step. */
|
||
step=17;
|
||
/* Прерывает ближайший цикл или ветвь switch и продолжает после него. */
|
||
break;
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
/* Закрывает текущий блок или список полей; следующие операторы относятся к внешнему уровню. */
|
||
}
|
||
|