Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы

ATMega & TWI в режиме прерываний

Непрочитано 17.04.2010, 19:57  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 482
Сказал спасибо: 18
Сказали Спасибо 106 раз(а) в 67 сообщении(ях)
nerozero на пути к лучшему
По умолчанию ATMega & TWI в режиме прерываний

Пишу библиотеку для работы с TWI в режиме прерываний. Столкнулся с проблемой ожидания окончания передачи, то есть установки на шине STOP состояния. ожидание флага TWINT в регистре TWCR ни к чему не приводят.
Вот грабли, если дважды подряд вызвать функцию отсылки данных, первая пройдет успешно, вторая будет ждать окончания. Но максимум что можно узнать (IMHO), это получение последнего прерывания, что происходит за долго до установки состояния STOP, и как причину второе, ожидающее сообщение отослано корректно не будет.
Единственное что приходит на ум, проверять в ручную состояние пинов...
Реклама:
nerozero вне форума  
Непрочитано 18.04.2010, 15:08  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ATMega & TWI в режиме прерываний

Сразу после СТОП можно давать СТАРТ - без всяких задержек, логика чипа сама все сделает. Именно поэтому СТОП и не вызывает прерывание - ибо незачем
niXto вне форума  
Непрочитано 18.04.2010, 15:44  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 482
Сказал спасибо: 18
Сказали Спасибо 106 раз(а) в 67 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: ATMega & TWI в режиме прерываний

Так именно в том-то проблема, что СТОП не передается, ибо на него залезает СТАРТ!!! Если сразу (дожидаясь TWINT конечно) инициировать новую транзакцию... Тоесть происходит вот что.

в основном потоке (main Proc) вызываеться функция которая устанавливает соответствующие переменные в нужное состояние, и устанавливает
Код:
twi_send()
{
  while(_busyflag); //‹‹ Вот тут грабли,
  // ... code... 
  // ‹‹ вот тут на них наступаю
  TWCR = 	_BV(TWEN)|_BV(TWIE)|_BV(TWINT)|	_BV(TWSTA); 
}
далее все обрабатываеться по приходу прерывания.
но как так сбросить флаг занятости чтоб не наехать стартом на стоп....?

Пока решил дожидаться состояния стоп проверяя пины SDA & SCL на наличие высокого уровня после завершения транзакции.
nerozero вне форума  
Непрочитано 18.04.2010, 16:09  
alberio
Гражданин KAZUS.RUN
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 582
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: ATMega & TWI в режиме прерываний

Чип какой? Не ATmega8 ли случайно?
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Непрочитано 18.04.2010, 16:13  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 482
Сказал спасибо: 18
Сказали Спасибо 106 раз(а) в 67 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: ATMega & TWI в режиме прерываний

Сообщение от alberio Посмотреть сообщение
Чип какой? Не ATmega8 ли случайно?
А какая разница, у них на всех один TWI. и в меге 16, и в меге 8, одни грабли.
nerozero вне форума  
Непрочитано 18.04.2010, 19:20  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ATMega & TWI в режиме прерываний

Ха-ха, вот и напоролись на наличие отсутствия атмеловских еррат))) В мега8 ТВИ глючный, особенно в слейве и особенно при работе от встроенного 8 МГц, поэтому и была в спешном порядке выпущена мега88. Могли бы погуглить этот вопрос
niXto вне форума  
Непрочитано 18.04.2010, 20:52  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 482
Сказал спасибо: 18
Сказали Спасибо 106 раз(а) в 67 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: ATMega & TWI в режиме прерываний

Сообщение от niXto Посмотреть сообщение
Ха-ха, вот и напоролись на наличие отсутствия атмеловских еррат))) В мега8 ТВИ глючный, особенно в слейве и особенно при работе от встроенного 8 МГц, поэтому и была в спешном порядке выпущена мега88. Могли бы погуглить этот вопрос
Хи-хи, читать внимательно, Slave не генерирует START и STOP. это мастер(можно было догадаться), и мега16, к тому-же от кварца. кстати, насчет меги8, делал, но с периодическим опросом но не в прерываниях, на встроенном генераторе, на максимальной частоте, то есть 8 МГц. Мастером кстати тоже была мега - Mega32, никаких пререканий.
nerozero вне форума  
Непрочитано 18.04.2010, 21:30  
niXto
Почётный гражданин KAZUS.RUN
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,026
Сказал спасибо: 60
Сказали Спасибо 3,941 раз(а) в 2,302 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: ATMega & TWI в режиме прерываний

Ну значит повезло - а я в свое время помню мучился с ним дня 3... За это время мог написать 3 раза подряд полностью софтовые модули, но хотелось разобраться с аппаратным. Пока в запарке не перепутал макетки с мега8 и мега88 - и о чудо! - все сразу заработало. Не знаю, может теперь в мега8 глюки пофиксили - но я принципиально ставлю на И2С только мега48-88-168, чего и всем рекомендую. Идеально работают и в мастере. и в слэйве, СТАРТ у них никогда не залазит на СТОП, посмотрите ассемблерный листинг - может компилятор думает что он самый умный

И давайте не будем играть в угадайку
niXto вне форума  
Непрочитано 18.04.2010, 22:22  
nerozero
Вид на жительство
 
Регистрация: 26.07.2007
Сообщений: 482
Сказал спасибо: 18
Сказали Спасибо 106 раз(а) в 67 сообщении(ях)
nerozero на пути к лучшему
По умолчанию Re: ATMega & TWI в режиме прерываний

Сообщение от niXto Посмотреть сообщение
И давайте не будем играть в угадайку
С радостью. Но только если не будете сразу отправлять на "погугивание", ото некрасиво получается... ...
nerozero вне форума  
Непрочитано 19.04.2010, 19:29  
Alex-R
Прохожий
 
Регистрация: 24.11.2006
Сообщений: 6
Сказал спасибо: 0
Сказали Спасибо 2 раз(а) в 2 сообщении(ях)
Alex-R на пути к лучшему
По умолчанию Re: ATMega & TWI в режиме прерываний

Сообщение от nerozero Посмотреть сообщение
Пишу библиотеку для работы с TWI в режиме прерываний. Столкнулся с проблемой ожидания окончания передачи, то есть установки на шине STOP состояния. ожидание флага TWINT в регистре TWCR ни к чему не приводят.
Вот грабли, если дважды подряд вызвать функцию отсылки данных, первая пройдет успешно, вторая будет ждать окончания. Но максимум что можно узнать (IMHO), это получение последнего прерывания, что происходит за долго до установки состояния STOP, и как причину второе, ожидающее сообщение отослано корректно не будет.
Единственное что приходит на ум, проверять в ручную состояние пинов...
Ну после СТОПА прерывания ждать не нужно(и незачем). И если был отправлен стоп(например TWCR = (1‹‹TWINT)|(1‹‹TWEN)|(1‹‹TWSTO))
то старт(например TWCR =(1‹‹TWINT)|(1‹‹TWSTA)|(1‹‹TWEN)|(1‹‹TWIE) ) можно делать ничего не дожидаясь. Кристалл сам аппаратно дождётся окончпния СТОПА и выполнит СТАРТ.

вот цитата из даташита:
• Bit 5 – TWSTA: TWI START Condition Bit
The application writes the TWSTA bit to one when it desires to become a Master on the
Two-wire Serial Bus. The TWI hardware checks if the bus is available, and generates a
START condition on the bus if it is free. However, if the bus is not free, the TWI waits
until a STOP condition is detected, and then generates a new START condition to claim
the bus Master status. TWSTA must be cleared by software when the START condition
has been transmitted.

Ну собственно что я уже и написал.

Проверенно не раз на разных кристалах, в том числе и на Мега8, да ещё и на внутреннем генераторе 8Мгц(в мастере естественно). Как и ожидалось, всё работает ГУТ.
Alex-R вне форума  
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 14:13.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.