• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь HSPI slave во FreeRTOS.

RRRLock

New member
Доброго времени суток.
Существует ли API для запуска HSPI в режиме Slave во FreeRTOS?
Нашел на форуме Espressif тему по SPI и RTOS.
Модератор скинул API для SPI. Я применил функции оттуда. Не работает.
Обратил внимание, что в документе API SDK FreeRTOS функций для работы с HSPI нет. Или же я неправильно понял, ткните носом.
 

kvark

New member
Если вопрос еще актуален ...
Вы смешали все вперемешку, периферия есть периферия, тут нужно знать (в идеале сами регистры управления и настройки (тут лучше спросить у людей, которые давно с есп плотно работают)) или брать готовые обертки (то есть, где люди за вас в эти самые регистры и забьют соответствующие значения) по управлению и настройкой соответствующей периферией (HSPI в данном случае). Далее разобрать как непосредственно происходит функционирование периферии (где и какие флаги срабатывают) при получении или отправке данных. В freertos с периферией будете работать как обычно (следить за флагами и производить настройку) с точки зрения таска и далее следить за тем чтобы два и более таска (это на уровне логики работы вашего софта) не могли иметь доступ к этой самой периферии. То есть один таск сделал все свои дела на HSPI и передал его другой задаче (и не лезет в HSPI) пока та не сделает свои задачи на той же периферии, для организации такой работы можно нагородить приличное количество вариантов силами и средствами самой freetros (например мьютексы), поэтому не может в принципе существовать универсальной обертки запуска HSPI ибо каждый кроит систему под свои нужды. Примерно как то так ...
 

RRRLock

New member
Видимо я неправильно выразился. Работа с HSPI у меня осуществляет в одном таске, который занимается тем, что складывает данные, полученные по SPI, в буфер. Другой таск начинает работать с этим самым буфером, когда видит флажок от семафора или мьютекса, что буфер заполнен.

Просто запуск SPI в non-OS SDK и запуск SPI, в так называемом OS SDK - это разные вещи.
Работать на уровне регистров - это просто лишняя работа, а в случае с ESP8266 это вдвойне долго и нудно. Тем более при такой скудной и непонятной документации. Для этого существуют API, который предоставляет возможности работать с периферией на уровне функций и переменных, в котором, пусть и не ко всему, но есть комментарии. Но этот функционал опять же разный для non-OS SDK и OS SDK. Вот я и интересуюсь, есть ли работающие функции API для работы с HSPI во FreeRTOS.

Кстати, по своим поискам, обнаружил вот такой интересный архив, который любезно предоставили одному из форумчан. У меня не заработал, но тут вопросы с железом ещё возникли.
RTOS SDK: HSPI for external device - ESP8266 Developer Zone
 

kvark

New member
Вы в прерываниях hspi апи freertos юзаете? Если приоритет прерывания очень большой и не входит в группу прерываний запрещаемых планировщиком при своем собственном прерывании, то можем получить проблемы. Под нужды оси достаточно выделили в памяти места, достаточен ли размер стэка для тасков? Задержки таймерами считаете или софтово, при этом для планировщика лучше всего выделить персональный аппаратный таймер?
 

RRRLock

New member
Вы в прерываниях hspi апи freertos юзаете? Если приоритет прерывания очень большой и не входит в группу прерываний запрещаемых планировщиком при своем собственном прерывании, то можем получить проблемы. Под нужды оси достаточно выделили в памяти места, достаточен ли размер стэка для тасков? Задержки таймерами считаете или софтово, при этом для планировщика лучше всего выделить персональный аппаратный таймер?
1. На форуме Espressif модератор скинул файлы для работы с HSPI во FreeRTOS. Если можете порекомендовать ещё апи для этих нужд, буду признателен.
2. Вот с прерыванием как раз загвоздка. Программа заходит в прерывание и не может из него выйти. Модуль перезагружается и по-новой.
3. Размер достаточен, проверял.
4. Специально задержки не считаю. Таймер тоже не активировал.
 
Сверху Снизу