Инструменты пользователя

Инструменты сайта


mpt:доработка_скетча_с_веб-панелью

Про прерывания от W5500, которых нет

Бухаров А.В. 2019/06/18 09:08

В ходе проведенных опытов мы выяснили, что прерывание от W5500 нет.

В этой статье http://www.cyberforum.ru/digital-signal-processing/thread2094151.html указано, что для получения прерываний необходимо перевести сокеты в состояние listen().
Хотя описание дано для W5100, я думаю, что и для W5500 оно тоже подойдет.

Надо проверить. Но как? Вот тут приведено описание библиотеки ethernet: https://doc.arduino.ua/ru/prog/Ethernet

Про listen() нет ни слова. Кирилл! Надо разбираться.


Доработка скетча с веб-панелью.

Бухаров А.В. 2019/06/14 08:24

По состоянию на 7 июня 2019 г в нем реализована обработка GET запросов, выделение команд и данных.

webserver_mpt_ver_2_0.ino

Теперь необходимо реализовать эти команды, взяв за основу уже имеющийся скетч Ястребова.

Скетч Ястребова: 2artonitmpt_large_1_3.ino.

Именно этот код работал на презентации.


Работа с W5500 по прерыванию.

Источник: https://habr.com/ru/post/414211/ Модуль W5500 подключен к SPI интерфейсу МК (MOSI, MISO, SCK, SCLK). Кроме того, к определённому выходу МК подключен вывод RST (аппаратный сброс), и к входу внешнего прерывания INT0 подключен соответствующий вывод INT. Последний используется по прямому назначению: При возникновении того или иного события в модуле W5500 он формирует импульс на выводе INT, который обрабатывается контроллером в теле внешнего прерывания. МК узнаёт, на каких сокетах произошло событие, затем переписывает коды событий для каждого сокета в определённый массив. Дальнейшая обработка прерывания происходит внутри основного цикла программы. Всего документировано пять событий: клиент подключился, клиент отключился (точнее, подал запрос на отключение), поступили данные от клиента, сработал таймаут, данные отправлены успешно. В основном цикле обрабатываются все события, кроме последнего. В данную обработку помещён оператор switch-case. Самая большая часть программного кода на языке Си встречается в секции обработки третьего события (приём данных). В нём после функции обработки принятой информации также помещён оператор switch-case, но в данном случае этот «переключатель» связан с переменной, отвечающей за состояние сокета, о котором говорилось выше (значения 0, 1, 2). Первая секция отвечает за процедуру распознавания пароля. Принятые символы переписываются в отдельный парольный буфер. При определённых условиях работают функции сравнения принятой строки со строками-константами, содержащих пароли. В случае того или иного совпадения присваивается соответствующее состояние. Вторая секция самая простая – содержимое собственного буфера принятой информации перенаправляется на UART микроконтроллера. Это режим обычного использования. Третья секция (самая большая) отвечает за обработку команд – режим управления устройством.

Кроме продолжения обработчика прерываний в основном цикле программы помещены обработчики виртуальных таймеров – таймаут для разрыва соединения при неуспешной попытке ввода пароля, периодическая отправка «keep-alive» и отправка клиенту сформированного по таймеру TCP пакета. Ещё в тело основного цикла помещена функция чтения из UART, внутри которой переписываются принятые контроллером символы в собственный (промежуточный) буфер передачи и происходит сброс таймера, отвечающий за формирование TCP пакета.

Все процедуры сокетов помещены в цикл от 0 до 7, итератор которого привязан к номеру сокета. Таким образом, происходит последовательная обработка всех сокетов. Изначально я подразумевал, что, если присвоить каждому из восьми сокетов одинаковый номер порта, то можно обеспечить подключение до восьми пользователей по одному и тому же порту. Однако такая конфигурация не заработала, и данный вопрос пока отложен на будущее. В документации на W5500 это отражено т.о.:

Предполагаемые задачи при работе с МПТ:

  1. Судя по схеме, прерывание от W5500 заведено на пин 32. Это PD2, он же INT0. Статьи про прерывания:
  • b. Работа надо вести на макете, через UART (для быстрой отладки).
  • c. Надо зафиксировать факт получения прерывания. Алгоритм примерно такой:
  • i. Разрешить обработку прерывания INT0.
  • ii. При получения прерывания выводить в UART сообщение. Прочитать связанные регистры.
  • iii. После отладки внести изменение в основную программу. Программа должна работать с W5500 не по опросу, а по прерыванию.
  1. Обработку кнопок тоже сделать по прерыванию.
/home/cardsoft/artonit.ru/docs/wiki/data/pages/mpt/доработка_скетча_с_веб-панелью.txt · Последние изменения: 18.06.2019 09:16 — buh