Usart interrupt

Тема в разделе "Микроконтроллеры AVR", создана пользователем Yerabdi, 2 апр 2019.

  1. Yerabdi

    Yerabdi Гик

    Здравствуйте всем,пользуюсь usart прерывания для принятие и отправки данных. скорость 9600 получается
    для отправки 1-байта уходит 104 микросекунд, вопрос в это время микроконтроллер зависает ?
     
  2. Airbus

    Airbus Радиохулиган Модератор

    Нет не зависает он выполняет подпрограмму (оно же прерывание) прием или отправку.А как Вы используете прерывание по USART в Ардуино?Там же оно вроде недоступно?
     
  3. Yerabdi

    Yerabdi Гик

    Программу пишу в атмел студио,там все доступно
     
  4. Airbus

    Airbus Радиохулиган Модератор

    Именно для Ардуино?Или просто для Меги 328
     
  5. Asper Daffy

    Asper Daffy Иксперд

    Ну, почему? Вполне доступно, только ели до него доступиться, то надо уж всё самому писать, потому что если отключить его, то вместе с ним вся работа wiring с сериалом отпадёт.
     
  6. parovoZZ

    parovoZZ Гуру

    Погоди. Чтобы уйти на прерывание по USART, необходимо совершить действие - отправить или принять данные. Это так? В любом случае, если в конструкции имеется ожидание поднятия какого-то флага, то на этом ожидании МК и стопорится.
     
  7. Airbus

    Airbus Радиохулиган Модератор

    Не понял-переведи.В смысле писать на чистом Си/Асме прошивать НЕХ по ISP олдскульным способом?
     
  8. Limoney

    Limoney Гик

    Правда, что ли?
     
    Asper Daffy нравится это.
  9. Limoney

    Limoney Гик

    А на фига загрузчик, что бы прошить один раз на всегда.
     
  10. Asper Daffy

    Asper Daffy Иксперд

    Нет, почему? Прошивка - это дело загрузчика, а в Вашей программе Вы можете использовать Serial, а можете не использовать - вообще питание ему выключить через PRR - на возможность загрузки это никак не влияет. Пример для uno/nano (328p) подойдёт?
     
    Limoney нравится это.
  11. parovoZZ

    parovoZZ Гуру

    Ну есть флаг пустого буфера, но с ним надо очень аккуратно работать, а то в цикл улетишь))
     
  12. parovoZZ

    parovoZZ Гуру

    Чтобы прошивку зашифровать...
     
    Limoney нравится это.
  13. Limoney

    Limoney Гик

    как?
     
  14. parovoZZ

    parovoZZ Гуру

    Ну что как? Предложи свой вариант СТАРТА передачи пакета по UART сразу после инициализации оного и исключительно на прерываниях.

    Там, кста, можно UART превратить в USART - в частности в SPI, но только в режиме мастер. То бишь проверяем буфер на пустоту, кладем данные, дергаем веревочку слива и валим по своим делам. Это грозит очень хорошим энергопотреблением. А так как я на энергопотреблении провернут, да ещё и супротив резьбы, для меня это очень важно.
     
  15. Onkel

    Onkel Гуру

    никто так не работает с прерыванием по приему байта или опустошению буфера. Пришел байт - вызывается обработчик прерывания, считывается байт, флаг автоматически сбрасывается. То же по передаче- байт ушел- вызывается обработчик прерывания, а там уже или сдвигаешь очередь на передачу и посылаешь в буфер следующий байт, или выходишь. Флаг сбрасывается по вызову обработчика .
    А на вопрос ТС есть ответ - 2 такта занимает посылка байта в буфер USART.
     
  16. parovoZZ

    parovoZZ Гуру

    вопрос, как я понял, в том, как это организовать внутри обработчика прерывания. То бишь разрешаем прерывания по пустому буферу и сразу же уходим на него, т.к. он пуст. В прерывании кладем данные и инициируем передачу. Вопрос о том, Кто так работает или кто так не работает - в данном контексте не уместен. МК позволяет так работать - работайте на здоровье.
     
  17. a1000

    a1000 Гуру

    Немного не понял что надо дёрнуть. Разве после
    Код (C++):
    out UDR, Rx
    данные не уходят сами?
     
  18. parovoZZ

    parovoZZ Гуру

    Мы в каком месте инициируем передачу данных? В коде или в обработчике прерывания? Если последнее, то для начала туда надо попасть. Вопрос был именно в этом, если я ничего не путаю.