Здравствуйте всем,пользуюсь usart прерывания для принятие и отправки данных. скорость 9600 получается для отправки 1-байта уходит 104 микросекунд, вопрос в это время микроконтроллер зависает ?
Нет не зависает он выполняет подпрограмму (оно же прерывание) прием или отправку.А как Вы используете прерывание по USART в Ардуино?Там же оно вроде недоступно?
Ну, почему? Вполне доступно, только ели до него доступиться, то надо уж всё самому писать, потому что если отключить его, то вместе с ним вся работа wiring с сериалом отпадёт.
Погоди. Чтобы уйти на прерывание по USART, необходимо совершить действие - отправить или принять данные. Это так? В любом случае, если в конструкции имеется ожидание поднятия какого-то флага, то на этом ожидании МК и стопорится.
Нет, почему? Прошивка - это дело загрузчика, а в Вашей программе Вы можете использовать Serial, а можете не использовать - вообще питание ему выключить через PRR - на возможность загрузки это никак не влияет. Пример для uno/nano (328p) подойдёт?
Ну что как? Предложи свой вариант СТАРТА передачи пакета по UART сразу после инициализации оного и исключительно на прерываниях. Там, кста, можно UART превратить в USART - в частности в SPI, но только в режиме мастер. То бишь проверяем буфер на пустоту, кладем данные, дергаем веревочку слива и валим по своим делам. Это грозит очень хорошим энергопотреблением. А так как я на энергопотреблении провернут, да ещё и супротив резьбы, для меня это очень важно.
никто так не работает с прерыванием по приему байта или опустошению буфера. Пришел байт - вызывается обработчик прерывания, считывается байт, флаг автоматически сбрасывается. То же по передаче- байт ушел- вызывается обработчик прерывания, а там уже или сдвигаешь очередь на передачу и посылаешь в буфер следующий байт, или выходишь. Флаг сбрасывается по вызову обработчика . А на вопрос ТС есть ответ - 2 такта занимает посылка байта в буфер USART.
вопрос, как я понял, в том, как это организовать внутри обработчика прерывания. То бишь разрешаем прерывания по пустому буферу и сразу же уходим на него, т.к. он пуст. В прерывании кладем данные и инициируем передачу. Вопрос о том, Кто так работает или кто так не работает - в данном контексте не уместен. МК позволяет так работать - работайте на здоровье.
Мы в каком месте инициируем передачу данных? В коде или в обработчике прерывания? Если последнее, то для начала туда надо попасть. Вопрос был именно в этом, если я ничего не путаю.