SPI-slave на К1921ВК028

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

Ответить
Аватара пользователя
Eugene
Сообщения: 8
Зарегистрирован: 14 июл 2022, 12:58
Предприятие: ООО Диаконт

SPI-slave на К1921ВК028

Сообщение Eugene »

Здравствуйте!

Вопрос по работе с SPI микроконтроллера К1921ВК028.

В описании протокола написанного коллегами для работы с SPI данного контроллера прочитал следующее:
"в связи с тем что в контроллере к1921вк028 нет механизма очистки FIFO, любая транзакция занимает восемь шестнадцатибитных слов"

В связи с этим вопрос -- они правы?
Это в любом режиме так? И при любом из трёх режимов - Motorola, National Semiconductor, ti, мы не можем передать/запросить только одну 16-битную транзакцию?

А где-то есть примеры работы с SPI на этом контроллере?

Спасибо.
Даже самую простую задачу можно сделать невыполнимой, если провести достаточное количество совещаний.
ches
Сообщения: 17
Зарегистрирован: 07 сен 2022, 18:08
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: SPI-slave на К1921ВК028

Сообщение ches »

Eugene писал(а): 05 фев 2024, 12:57 В описании протокола написанного коллегами для работы с SPI данного контроллера прочитал следующее:
"в связи с тем что в контроллере к1921вк028 нет механизма очистки FIFO, любая транзакция занимает восемь шестнадцатибитных слов"

В связи с этим вопрос -- они правы?
Это в любом режиме так? И при любом из трёх режимов - Motorola, National Semiconductor, ti, мы не можем передать/запросить только одну 16-битную транзакцию?
Добрый день! SPI в микроконтроллере К1921ВК028 позволяет передавать/принимать любое количество слов размером от 4 до 16 бит.
Предполагаю, что Вашим коллегам требовалось очищать буферы от устаревших данных при работе SPI в режиме ведомого (Slave), и они добивались этого путем перезаписи всех ячеек буфера FIFO (буфер содержит восемь 16-разрядных ячеек). Дело в том, что в режиме ведомого буфер FIFO с записанными данными на передачу очищается путем выдачи данных в линию по запросу от мастера. До запроса мастера данные, записанные в буфер, продолжают оставаться в нем.
В режиме ведомого самым правильным способом очистки буфера FIFO, содержащего ранее записанные, но устаревшие данные (которые уже не нужно передавать) будет сброс модуля SPI в блоке управления сбросом и синхронизацией RCU, а затем его повторная инициализация.
Сброс модуля SPI выполняется с помощью бита RSTDIS регистра SPICFG (нужно записать значение "0").
Поскольку после выполнения сброса регистры SPI вернутся к своему значению по умолчанию (а также очистятся буферы FIFO), необходимо будет повторно инициализировать SPI.
ches
Сообщения: 17
Зарегистрирован: 07 сен 2022, 18:08
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: SPI-slave на К1921ВК028

Сообщение ches »

Eugene писал(а): 05 фев 2024, 12:57 А где-то есть примеры работы с SPI на этом контроллере?
Дополню ответ примером функции инициализации модуля SPI2 в режиме Slave с выводом на порт GPIOC (С0 - С3).

void SPI2_Init()
{
RCU->HCLKCFG_bit.GPIOCEN = 1;
RCU->HRSTCFG_bit.GPIOCEN = 1;
RCU->SPICFG[2].SPICFG_bit.CLKSEL = 1; //Выбор источника тактирования PLL CLK
RCU->SPICFG[2].SPICFG_bit.CLKEN = 1; //Разрешение тактирования
RCU->SPICFG[2].SPICFG_bit.RSTDIS = 1; //Вывод из сброса

SPI2->CR0_bit.SPH = 1; //Фаза сигнала. Выборка данных по заднему фронту синхросигнала, а установка по переднему
SPI2->CR0_bit.FRF = 0; //0 - Протокол SPI Motorola
SPI2->CR0_bit.DSS = 0xF; //Размер слова данных 16 бит
SPI2->CR1_bit.MS = 1; //Режим работы - Ведомый
SPI2->CR1_bit.SSE = 1; //Разрешение работы приемопередатчика

GPIOC->ALTFUNCSET = (1<<0) | (1<<1)| (1<<2)| (1<<3); //Перевод выводов C0-C3 в режим альтернативной функции
GPIOC->ALTFUNCNUM0 = (3<<0) | (3<<4) | (3<<8) | (3<<12); //Указываем номер альтернативной функции для выводов
GPIOC->DENSET = (1<<0) | (1<<1) | (1<<2) | (1<<3); //Разрешение цифровых функций
}
Ответить

Вернуться в «32-разрядные микроконтроллеры»