реклама на сайте
подробности

 
 
> продолжить прерывание, atmega128 winavr
Mikron
сообщение Feb 9 2011, 14:07
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 82
Регистрация: 1-03-10
Пользователь №: 55 731



Добрый день

есть некоторый код
Код
void funс(void){
    cli();
    ...
    sei();
}
ISR(INT0_vect){
    ...}
ISR(USART1_RX_vect){
    ...}
ISR(USART1_TX_vect){
   ...
   func();
   ...}
ISR(USART1_UDRE_vect){
...  }
...

Функцию я вызываю из прерывания, во время её выполнения прерывания нужно запретить.
Когда я их снова разрешу, то могут возникнуть любые прерывания, а не продолжалось USART1_TX, так ведь?
Вопрос, как сделать так, что бы после разрешения прерываний разрешалось только USART1_TX

Спасибо за помощь
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Feb 11 2011, 05:07
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



1111493779.gif Ето винавр, проснитесь!
Код
#include <util/atomic.h>
void func(void)
{
  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
  {
   <Function's body&soul>
  }
}

ЗЫ в опциях обязательно включить -std=gnu99

Цитата(ILYAUL @ Feb 10 2011, 21:39) *
Так например при обработке DS18B20 лучше не использовать UDRE.

cranky.gif Стало быть, Вы не умеете его готовить в условиях многозадачности?
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Feb 11 2011, 11:36
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(_Pasha @ Feb 11 2011, 08:07) *
cranky.gif Стало быть, Вы не умеете его готовить в условиях многозадачности?

Причём здесь мнонгозадачность и DS18B20. Если Вы возьмёте листок бумаги и посчитаете поведение USART при использовании UDRE в качестве прерывания для обмена с DS , то увидите что , если не изменяет память, на 9 байте начинает лезть ошибка приема ответа DS . Точне посмотрю дома в записях. Считали и не я один. А запрещать и разрешать его в таком случае смысла не имеет , если есть TX.

Цитата
ReAl Так это же отлично! ......
и т.д.
При передачи сразу массива данных , нафинг он вообще нужен TXC ? Tолько что бы "красиво" в конце передачи массива узнать , что последний байт массива передали. Смысл? Всё равно же считаете переданные байты либо в ноль либо до какого-то значения.

Цитата
Кстати , этот флаг имеет "неприятную" особенность он практически "всегда установлен".

А это я написал , так как топикстартер ещё не определился , что он вообще будет использовать и нигде не озвучивал свой замысел. А "неприятную" - как Вы видите я поставил в кавычках


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 11 2011, 11:40
Сообщение #4


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(ILYAUL @ Feb 11 2011, 14:36) *
При передачи сразу массива данных , нафинг он вообще нужен TXC ? Tолько что бы "красиво" в конце передачи массива узнать , что последний байт массива передали. Смысл?
Чтобы максимально быстро перевести драйвер RS485 в на приём и освободить линию после завершения передачи последнего байта.
UART используется и для симплексных каналов связи.

Или чтобы отключить передатчик для экономии батарейки например...


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
ILYAUL
сообщение Feb 11 2011, 13:21
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 940
Регистрация: 16-12-07
Из: Москва
Пользователь №: 33 339



Цитата(demiurg_spb @ Feb 11 2011, 14:40) *
Чтобы максимально быстро перевести драйвер RS485 в на приём и освободить линию после завершения передачи последнего байта.
UART используется и для симплексных каналов связи.

Или чтобы отключить передатчик для экономии батарейки например...

У Вас счётчик уже обнулился , зачем лишний обработчик прерывания


--------------------
Закон Мерфи:

Чем тщательнее составлен проект, тем больше неразбериха, если что-то пошло не так
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 11 2011, 14:57
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(ILYAUL @ Feb 11 2011, 16:21) *
У Вас счётчик уже обнулился , зачем лишний обработчик прерывания
Ну, вроде ясно сказано:
Цитата(demiurg_spb @ Feb 11 2011, 14:40) *
Чтобы максимально быстро перевести драйвер RS485 в на приём и освободить линию после завершения передачи последнего байта.
Чтобы передатчик не выключить раньше, чем будут переданы данные...
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 11 2011, 15:25
Сообщение #7


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Похоже Илья упускает момент буферирования регистра UDR (один байт выплёвываем, а ещё 2 ждут в очереди).
И может показаться что передача окончена - софтовый fifo опустошили, а на самом деле аппаратный fifo ещё содержит данные для передачи.
Так вот TXC скажет нам когда действительно всё отправлено.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 11 2011, 15:51
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(demiurg_spb @ Feb 11 2011, 18:25) *
...один байт выплёвываем, а ещё 2 ждут в очереди
А, разве не один "выплёвываем" (из регистра сдвига), а ещё один ждёт (в регистре данных)?
Go to the top of the page
 
+Quote Post
demiurg_spb
сообщение Feb 12 2011, 08:25
Сообщение #9


неотягощённый злом
******

Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643



Цитата(Палыч @ Feb 11 2011, 18:51) *
А, разве не один "выплёвываем" (из регистра сдвига), а ещё один ждёт (в регистре данных)?
Возможно и так, но мне что-то помнится циферка 2.
Вот глянул DS на mega128:
Цитата
In addition to the recovery units, the receiver includes a parity checker, control logic, a Shift Register and a two level receive buffer (UDR).
Не уверен отлична-ли глубина буфера регистра UDR при передаче... Но на приём сдвиговый регистр + ещё 2 уровня буфера.
Посмотрел картиночку с блок-схемой UARTa - на передачу похоже действительно лишь один уровень буферизации.
Вы похоже правы.


--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Mikron   продолжить прерывание   Feb 9 2011, 14:07
- - Палыч   Цитата(Mikron @ Feb 9 2011, 17:07) ...пре...   Feb 9 2011, 14:24
- - Xenia   Цитата(Mikron @ Feb 9 2011, 17:07) Функци...   Feb 9 2011, 14:48
- - ILYAUL   ЦитатаКогда я их снова разрешу, то могут возникнут...   Feb 9 2011, 16:15
- - Mikron   Всем огромное спасибо за помощь) Что-то я реально ...   Feb 9 2011, 21:25
|- - Палыч   Цитата(Mikron @ Feb 10 2011, 00:25) ...фу...   Feb 10 2011, 07:15
- - Mikron   Цитата(ILYAUL @ Feb 9 2011, 19:15) Да и в...   Feb 10 2011, 14:09
|- - ILYAUL   Цитата(Mikron @ Feb 10 2011, 17:09) Возни...   Feb 10 2011, 18:39
|- - ReAl   Цитата(ILYAUL @ Feb 10 2011, 20:39) Кстат...   Feb 11 2011, 07:31
- - _Артём_   Кодvoid func(void) { unsigned char savSR...   Feb 10 2011, 14:18
|- - Палыч   Цитата(_Артём_ @ Feb 10 2011, 17:18) Разв...   Feb 10 2011, 15:20
|- - ILYAUL   Цитата(demiurg_spb @ Feb 11 2011, 18:25) ...   Feb 11 2011, 18:16
|- - Палыч   Цитата(ILYAUL @ Feb 11 2011, 21:16) Итог:...   Feb 11 2011, 19:01
|- - ILYAUL   Цитата(Палыч @ Feb 11 2011, 22:01) Да, US...   Feb 11 2011, 21:40
|- - _Pasha   Цитата(ILYAUL @ Feb 12 2011, 00:40) Но эт...   Feb 11 2011, 22:22
|- - ILYAUL   Цитата(_Pasha @ Feb 12 2011, 01:22) Эта а...   Feb 12 2011, 11:17
|- - _Pasha   Цитата(ILYAUL @ Feb 12 2011, 15:17) Вот и...   Feb 12 2011, 11:43
|- - demiurg_spb   Цитата(ILYAUL @ Feb 12 2011, 14:17) Давай...   Feb 12 2011, 13:05
|- - ILYAUL   Цитата(demiurg_spb @ Feb 12 2011, 16:05) ...   Feb 13 2011, 04:45
- - _Pasha   Цитата(ILYAUL @ Feb 11 2011, 14:36) Причё...   Feb 11 2011, 15:40


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 20:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01477 секунд с 7
ELECTRONIX ©2004-2016