TWI - как взаимодействует с процессорным временем?

Обсуждаем контроллеры компании Atmel.
Ответить
Kalisnik
Мучитель микросхем
Сообщения: 430
Зарегистрирован: Вс апр 18, 2021 15:43:55

TWI - как взаимодействует с процессорным временем?

Сообщение Kalisnik »

Раз это отдельный модуль, значит он должен брать на себя основную задачу по организации работы шины? Т.е. МК подготовил сообщение и передал модулю TWI на отправку, после чего процессор "пошел" заниматься своими делами до возникновения прерывания от TWI, например. Так? Или я ошибаюсь и процессор МК "висит" пока идет отправка сообщения? - но тогда прерывания от TWI становятся ненужными.

А что происходит если сообщение еще отправляется модулем TWI, а процессор уже накидал новых сообщений?

Добавлено after 5 minutes 46 seconds:
Работаю в CVAVR со встроенной библиотекой TWI.
Реклама
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: TWI - как взаимодействует с процессорным временем?

Сообщение Starichok51 »

зависит от твоего желания.
лично я жду (процессор ждет) окончания операции (передачи байта или приема байта).
процессор у меня не "висит", а проверят бит TWINT регистра TWCR, ожидая окончания операции.
а можно разрешить прерывание по TWI, тогда процессор может выполнять другую работу, пока не наступит прерывание по TWI.
если нужно передать несколько байт, следует создать буфер и сначала заполнить его требуемым количеством байт. потом по прерыванию процессор из буфера будет брать очередной байт и отправлять его, и так, пока не закончится вся очередь.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Kalisnik
Мучитель микросхем
Сообщения: 430
Зарегистрирован: Вс апр 18, 2021 15:43:55

Re: TWI - как взаимодействует с процессорным временем?

Сообщение Kalisnik »

Starichok51, ок. А если такого буфера не делать, а просто накидывать? У модуля TWI какой-то свой буфер наверно есть? Он будет перезаписываться каждый раз когда прилетит новый байт? И на момент отправки следующего сообщения, что в этом буфере будет лежать, то и отправится?
veso74
Поставщик валерьянки для Кота
Сообщения: 1907
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: TWI - как взаимодействует с процессорным временем?

Сообщение veso74 »

Из документации (+трансл.):
Аппаратный буфер TWI в микроконтроллере AVR имеет размер одного байта как для регистров передачи, так и для приема данных. Это означает, что модуль TWI может хранить только один байт данных за раз, а программное обеспечение должно обеспечивать буферизацию остальных данных. Программное обеспечение может использовать флаг TWINT в регистре TWCR, чтобы проверить, готов ли модуль TWI принять или передать другой байт.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: TWI - как взаимодействует с процессорным временем?

Сообщение shonty »

Нужно знать какая задача стоит, может и не потребуются все эти измудроствования..
А так да, пока отправляется байт можно заниматься другими делами, а потом проверка флага TWINT.
По SPI интерфейсу тоже самое кстати, во время отправки байта готовится следующий, и потом проверка SPIF.
Реклама
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: TWI - как взаимодействует с процессорным временем?

Сообщение Starichok51 »

а еще, кстати, то же самое по USART.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: TWI - как взаимодействует с процессорным временем?

Сообщение shonty »

да, и USART :))

но:
если на скоростных интерфейсах прирост производительности ощутим, то на айтуси вряд ли можно выкружить многое :)

Нужно рассматривать конкретный пример.
Kalisnik писал(а):А что происходит если сообщение еще отправляется модулем TWI, а процессор уже накидал новых сообщений?
:shock: как МК может что-то накидать без вашего ведома?
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: TWI - как взаимодействует с процессорным временем?

Сообщение Starichok51 »

на айтуси я применяю частоту 400 кГц, вполне достаточно для бытовых нужд.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: TWI - как взаимодействует с процессорным временем?

Сообщение shonty »

ну да, я это и имел ввиду
если частота интерфейса 400кГц, а тактовая МК 16МГц (например), то прирост в производительности будет невелик, если готовить следующий байт во время отправки предыдущего.

А вот в коде возможна излишняя путаница.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: TWI - как взаимодействует с процессорным временем?

Сообщение Starichok51 »

поэтому я и сказал, что нужно заполнить буфер, и тогда процессор спокойно будет продолжать свою работу, отвлекаясь только на прерывание по интерфейсу.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: TWI - как взаимодействует с процессорным временем?

Сообщение КРАМ »

[uquote="shonty",url="/forum/viewtopic.php?p=4545347#p4545347"]А вот в коде возможна излишняя путаница.[/uquote]
Никакой путаницы не будет, если не городить синхронизм подготовки данных и его передачи.
Для подобного делают кольцевой буфер, на который есть два указателя - один куда писать из кода, другой - откуда брать для интерфейса.
Это стандартный прием работы.
Получается совершенно автономный код.

Добавлено after 3 minutes 16 seconds:
[uquote="shonty",url="/forum/viewtopic.php?p=4545347#p4545347"]если частота интерфейса 400кГц[/uquote]
Нужно помнить, что частота определяется мастером шины и никаких ограничений на ее номинал. кроме верхнего значения нет. То есть частота может быть ЛЮБАЯ не превышающая максимально допустимую. 400 кГц (где она указана) - это и есть максимальная.
Kalisnik
Мучитель микросхем
Сообщения: 430
Зарегистрирован: Вс апр 18, 2021 15:43:55

Re: TWI - как взаимодействует с процессорным временем?

Сообщение Kalisnik »

[uquote="shonty",url="/forum/viewtopic.php?p=4545340#p4545340"]как МК может что-то накидать без вашего ведома?[/uquote]

Мы - новички, можем все :) Конкретный пример:
Дисплей I2C. Реализовал ползунок, который двигается переменным резистором подключенным к АЦП. Данные с АЦП снимаются по завершении преобразования и отправляются в дисплей функциями glcd_rectangle() и glcd_block() (CVAVR). Полагаю, что АЦП работает быстрее чем интерфейс I2C. Ну вот так и накидывается в буфер :)) . В результате получаю движение ползунка с рывками и тормозами. Скорость I2C 400 КГц. На интерфейсе SPI все летает. Прихожу к выводу, что лучше использовать SPI.

Хотя. дисплей SPI я без АЦП проверял. Просто по пикселю линию рисовал... было все очень быстро. Тогда, может это АЦП тормозит... не проверял.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: TWI - как взаимодействует с процессорным временем?

Сообщение shonty »

Kalisnik писал(а):Мы - новички, можем все :)
Я тоже новичёк :)

Однажды была у меня задумка, подключить дисплей через отдельный контроллер. То есть один контроллер получает, обрабатывает и прочее, и льёт уже готовые данные (но скорее условные команды) во второй. А второй тупо данные на дисплей выводит, поле подчищает, с цветами разбирается.. там же тоже много работы бывает :) :)

PS: На подобии дисплея Nextion хотел сделать
Kalisnik
Мучитель микросхем
Сообщения: 430
Зарегистрирован: Вс апр 18, 2021 15:43:55

Re: TWI - как взаимодействует с процессорным временем?

Сообщение Kalisnik »

shonty, получилось?
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: TWI - как взаимодействует с процессорным временем?

Сообщение OKF »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4545328#p4545328"]а еще, кстати, то же самое по USART.[/uquote]
Разве? В AVR, насколько я помню, приёмный буфер USART содержит два байта, а так же ещё есть сдвиговый регистр, который принимает следующий символ. Приёмный буфер организован по типу FIFO - первый пришёл, первый вышел. При чтении регистра UDR считывается первый принятый байт. После чего данные в буфере сдвигаются и регистр UDR указывает уже на второй принятый байт.
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

Re: TWI - как взаимодействует с процессорным временем?

Сообщение shonty »

[uquote="Kalisnik",url="/forum/viewtopic.php?p=4545480#p4545480"]shonty, получилось?[/uquote]
shonty писал(а):Однажды была у меня задумка,
Задумка так и осталась задумкой.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19053
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: TWI - как взаимодействует с процессорным временем?

Сообщение Starichok51 »

OKF писал(а):Разве? В AVR, насколько я помню, приёмный буфер USART содержит два байта, а так же ещё есть сдвиговый регистр, который принимает следующий символ.
во-первых, речь изначально шла про передачу, о приеме разговора не было.
во-вторых, если нужно передать несколько байт, то в буфер USART ты их не запихнешь.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Ответить

Вернуться в «AVR»