Комментарии 3
Жесть, особенно запрет всех прерываний в обработчика прерывания и разрешение обратно где - то в основном потоке. Также цикл for по количеству байт в обработчике прерывания.
Я надеюсь это просто для тестов(но непонятно зачем так делать и так усложнять код) и в продукт такое не идёт.
ИМХО, Такой код сам по себе сложен для понимания. А если надо будетъ что оо поменять или добавить? , я так понимаю придётся всё переписать. Не надо так.
Целью статьи является рассмотрение модулей МК, а не создание какого-либо продукта, и даже не библиотеки. Исходный код приведен исключительно для тестирования функций МК.
Чтение кадра в обработчике прерывания от ENC28J60 с помощью функции eth_recvpkt() показано для примера "без DMA" как раз для того, чтобы сравнить преимущества варианта с DMA.
В обработчике dma_hdl() установка прикладных флагов делается через запрещение прерывания, чтобы обеспечить атомарность их обработки в основной программе, но это совершенно опционально.
Ок, но даже пример, должен быть понятным
Зачем в прерывании то?
Тогда и разрешение должно быть сразу после установки,а не в другом потоке, кроме того, у вас что вложенные прерывания есть, где эти флаги считываются? Или вообще в чем смысл? Это же путает основательно, если вы ради примера, то зачем вообще это показывать, просто флаги установили и ок.
Микроконтроллеры Megawin серии MG32F02: модуль интерфейса SPI