TWI - как взаимодействует с процессорным временем?
TWI - как взаимодействует с процессорным временем?
Раз это отдельный модуль, значит он должен брать на себя основную задачу по организации работы шины? Т.е. МК подготовил сообщение и передал модулю TWI на отправку, после чего процессор "пошел" заниматься своими делами до возникновения прерывания от TWI, например. Так? Или я ошибаюсь и процессор МК "висит" пока идет отправка сообщения? - но тогда прерывания от TWI становятся ненужными.
А что происходит если сообщение еще отправляется модулем TWI, а процессор уже накидал новых сообщений?
Добавлено after 5 minutes 46 seconds:
Работаю в CVAVR со встроенной библиотекой TWI.
А что происходит если сообщение еще отправляется модулем TWI, а процессор уже накидал новых сообщений?
Добавлено after 5 minutes 46 seconds:
Работаю в CVAVR со встроенной библиотекой TWI.
- Реклама
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: TWI - как взаимодействует с процессорным временем?
зависит от твоего желания.
лично я жду (процессор ждет) окончания операции (передачи байта или приема байта).
процессор у меня не "висит", а проверят бит TWINT регистра TWCR, ожидая окончания операции.
а можно разрешить прерывание по TWI, тогда процессор может выполнять другую работу, пока не наступит прерывание по TWI.
если нужно передать несколько байт, следует создать буфер и сначала заполнить его требуемым количеством байт. потом по прерыванию процессор из буфера будет брать очередной байт и отправлять его, и так, пока не закончится вся очередь.
лично я жду (процессор ждет) окончания операции (передачи байта или приема байта).
процессор у меня не "висит", а проверят бит TWINT регистра TWCR, ожидая окончания операции.
а можно разрешить прерывание по TWI, тогда процессор может выполнять другую работу, пока не наступит прерывание по TWI.
если нужно передать несколько байт, следует создать буфер и сначала заполнить его требуемым количеством байт. потом по прерыванию процессор из буфера будет брать очередной байт и отправлять его, и так, пока не закончится вся очередь.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: TWI - как взаимодействует с процессорным временем?
Starichok51, ок. А если такого буфера не делать, а просто накидывать? У модуля TWI какой-то свой буфер наверно есть? Он будет перезаписываться каждый раз когда прилетит новый байт? И на момент отправки следующего сообщения, что в этом буфере будет лежать, то и отправится?
-
veso74
- Поставщик валерьянки для Кота
- Сообщения: 1907
- Зарегистрирован: Сб май 05, 2012 20:24:52
- Откуда: KN34PC, Болгария
- Контактная информация:
Re: TWI - как взаимодействует с процессорным временем?
Из документации (+трансл.):
Аппаратный буфер TWI в микроконтроллере AVR имеет размер одного байта как для регистров передачи, так и для приема данных. Это означает, что модуль TWI может хранить только один байт данных за раз, а программное обеспечение должно обеспечивать буферизацию остальных данных. Программное обеспечение может использовать флаг TWINT в регистре TWCR, чтобы проверить, готов ли модуль TWI принять или передать другой байт.
Re: TWI - как взаимодействует с процессорным временем?
Нужно знать какая задача стоит, может и не потребуются все эти измудроствования..
А так да, пока отправляется байт можно заниматься другими делами, а потом проверка флага TWINT.
По SPI интерфейсу тоже самое кстати, во время отправки байта готовится следующий, и потом проверка SPIF.
А так да, пока отправляется байт можно заниматься другими делами, а потом проверка флага TWINT.
По SPI интерфейсу тоже самое кстати, во время отправки байта готовится следующий, и потом проверка SPIF.
- Реклама
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: TWI - как взаимодействует с процессорным временем?
а еще, кстати, то же самое по USART.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: TWI - как взаимодействует с процессорным временем?
да, и USART
но:
если на скоростных интерфейсах прирост производительности ощутим, то на айтуси вряд ли можно выкружить многое
Нужно рассматривать конкретный пример.
как МК может что-то накидать без вашего ведома?
но:
если на скоростных интерфейсах прирост производительности ощутим, то на айтуси вряд ли можно выкружить многое
Нужно рассматривать конкретный пример.
Kalisnik писал(а):А что происходит если сообщение еще отправляется модулем TWI, а процессор уже накидал новых сообщений?
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: TWI - как взаимодействует с процессорным временем?
на айтуси я применяю частоту 400 кГц, вполне достаточно для бытовых нужд.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Re: TWI - как взаимодействует с процессорным временем?
ну да, я это и имел ввиду
если частота интерфейса 400кГц, а тактовая МК 16МГц (например), то прирост в производительности будет невелик, если готовить следующий байт во время отправки предыдущего.
А вот в коде возможна излишняя путаница.
если частота интерфейса 400кГц, а тактовая МК 16МГц (например), то прирост в производительности будет невелик, если готовить следующий байт во время отправки предыдущего.
А вот в коде возможна излишняя путаница.
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: TWI - как взаимодействует с процессорным временем?
поэтому я и сказал, что нужно заполнить буфер, и тогда процессор спокойно будет продолжать свою работу, отвлекаясь только на прерывание по интерфейсу.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
- КРАМ
- Друг Кота
- Сообщения: 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 кГц (где она указана) - это и есть максимальная.
Никакой путаницы не будет, если не городить синхронизм подготовки данных и его передачи.
Для подобного делают кольцевой буфер, на который есть два указателя - один куда писать из кода, другой - откуда брать для интерфейса.
Это стандартный прием работы.
Получается совершенно автономный код.
Добавлено after 3 minutes 16 seconds:
[uquote="shonty",url="/forum/viewtopic.php?p=4545347#p4545347"]если частота интерфейса 400кГц[/uquote]
Нужно помнить, что частота определяется мастером шины и никаких ограничений на ее номинал. кроме верхнего значения нет. То есть частота может быть ЛЮБАЯ не превышающая максимально допустимую. 400 кГц (где она указана) - это и есть максимальная.
Re: TWI - как взаимодействует с процессорным временем?
[uquote="shonty",url="/forum/viewtopic.php?p=4545340#p4545340"]как МК может что-то накидать без вашего ведома?[/uquote]
Мы - новички, можем все
Конкретный пример:
Дисплей I2C. Реализовал ползунок, который двигается переменным резистором подключенным к АЦП. Данные с АЦП снимаются по завершении преобразования и отправляются в дисплей функциями glcd_rectangle() и glcd_block() (CVAVR). Полагаю, что АЦП работает быстрее чем интерфейс I2C. Ну вот так и накидывается в буфер
. В результате получаю движение ползунка с рывками и тормозами. Скорость I2C 400 КГц. На интерфейсе SPI все летает. Прихожу к выводу, что лучше использовать SPI.
Хотя. дисплей SPI я без АЦП проверял. Просто по пикселю линию рисовал... было все очень быстро. Тогда, может это АЦП тормозит... не проверял.
Мы - новички, можем все
Дисплей I2C. Реализовал ползунок, который двигается переменным резистором подключенным к АЦП. Данные с АЦП снимаются по завершении преобразования и отправляются в дисплей функциями glcd_rectangle() и glcd_block() (CVAVR). Полагаю, что АЦП работает быстрее чем интерфейс I2C. Ну вот так и накидывается в буфер
Хотя. дисплей SPI я без АЦП проверял. Просто по пикселю линию рисовал... было все очень быстро. Тогда, может это АЦП тормозит... не проверял.
Re: TWI - как взаимодействует с процессорным временем?
Я тоже новичёкKalisnik писал(а):Мы - новички, можем все![]()
Однажды была у меня задумка, подключить дисплей через отдельный контроллер. То есть один контроллер получает, обрабатывает и прочее, и льёт уже готовые данные (но скорее условные команды) во второй. А второй тупо данные на дисплей выводит, поле подчищает, с цветами разбирается.. там же тоже много работы бывает
PS: На подобии дисплея Nextion хотел сделать
Re: TWI - как взаимодействует с процессорным временем?
shonty, получилось?
Re: TWI - как взаимодействует с процессорным временем?
[uquote="Starichok51",url="/forum/viewtopic.php?p=4545328#p4545328"]а еще, кстати, то же самое по USART.[/uquote]
Разве? В AVR, насколько я помню, приёмный буфер USART содержит два байта, а так же ещё есть сдвиговый регистр, который принимает следующий символ. Приёмный буфер организован по типу FIFO - первый пришёл, первый вышел. При чтении регистра UDR считывается первый принятый байт. После чего данные в буфере сдвигаются и регистр UDR указывает уже на второй принятый байт.
Разве? В AVR, насколько я помню, приёмный буфер USART содержит два байта, а так же ещё есть сдвиговый регистр, который принимает следующий символ. Приёмный буфер организован по типу FIFO - первый пришёл, первый вышел. При чтении регистра UDR считывается первый принятый байт. После чего данные в буфере сдвигаются и регистр UDR указывает уже на второй принятый байт.
Re: TWI - как взаимодействует с процессорным временем?
[uquote="Kalisnik",url="/forum/viewtopic.php?p=4545480#p4545480"]shonty, получилось?[/uquote]
Задумка так и осталась задумкой.shonty писал(а):Однажды была у меня задумка,
- Starichok51
- Модератор
- Сообщения: 19053
- Зарегистрирован: Сб авг 14, 2010 15:05:51
- Откуда: г. Озерск, Челябинская обл.
Re: TWI - как взаимодействует с процессорным временем?
во-первых, речь изначально шла про передачу, о приеме разговора не было.OKF писал(а):Разве? В AVR, насколько я помню, приёмный буфер USART содержит два байта, а так же ещё есть сдвиговый регистр, который принимает следующий символ.
во-вторых, если нужно передать несколько байт, то в буфер USART ты их не запихнешь.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.


