| Форум РадиоКот https://radiokot.ru/forum/ |
|
| TWI - как взаимодействует с процессорным временем? https://radiokot.ru/forum/viewtopic.php?f=57&t=192301 |
Страница 1 из 1 |
| Автор: | Kalisnik [ Пн фев 19, 2024 15:08:09 ] |
| Заголовок сообщения: | TWI - как взаимодействует с процессорным временем? |
Раз это отдельный модуль, значит он должен брать на себя основную задачу по организации работы шины? Т.е. МК подготовил сообщение и передал модулю TWI на отправку, после чего процессор "пошел" заниматься своими делами до возникновения прерывания от TWI, например. Так? Или я ошибаюсь и процессор МК "висит" пока идет отправка сообщения? - но тогда прерывания от TWI становятся ненужными. А что происходит если сообщение еще отправляется модулем TWI, а процессор уже накидал новых сообщений? Добавлено after 5 minutes 46 seconds: Работаю в CVAVR со встроенной библиотекой TWI. |
|
| Автор: | Starichok51 [ Пн фев 19, 2024 15:50:49 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
зависит от твоего желания. лично я жду (процессор ждет) окончания операции (передачи байта или приема байта). процессор у меня не "висит", а проверят бит TWINT регистра TWCR, ожидая окончания операции. а можно разрешить прерывание по TWI, тогда процессор может выполнять другую работу, пока не наступит прерывание по TWI. если нужно передать несколько байт, следует создать буфер и сначала заполнить его требуемым количеством байт. потом по прерыванию процессор из буфера будет брать очередной байт и отправлять его, и так, пока не закончится вся очередь. |
|
| Автор: | Kalisnik [ Пн фев 19, 2024 17:27:26 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
Starichok51, ок. А если такого буфера не делать, а просто накидывать? У модуля TWI какой-то свой буфер наверно есть? Он будет перезаписываться каждый раз когда прилетит новый байт? И на момент отправки следующего сообщения, что в этом буфере будет лежать, то и отправится? |
|
| Автор: | veso74 [ Пн фев 19, 2024 17:41:59 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
Из документации (+трансл.): Цитата: Аппаратный буфер TWI в микроконтроллере AVR имеет размер одного байта как для регистров передачи, так и для приема данных. Это означает, что модуль TWI может хранить только один байт данных за раз, а программное обеспечение должно обеспечивать буферизацию остальных данных. Программное обеспечение может использовать флаг TWINT в регистре TWCR, чтобы проверить, готов ли модуль TWI принять или передать другой байт.
|
|
| Автор: | shonty [ Вт фев 20, 2024 09:58:14 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
Нужно знать какая задача стоит, может и не потребуются все эти измудроствования.. А так да, пока отправляется байт можно заниматься другими делами, а потом проверка флага TWINT. По SPI интерфейсу тоже самое кстати, во время отправки байта готовится следующий, и потом проверка SPIF. |
|
| Автор: | Starichok51 [ Вт фев 20, 2024 11:44:52 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
а еще, кстати, то же самое по USART. |
|
| Автор: | shonty [ Вт фев 20, 2024 12:17:37 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
да, и USART но: если на скоростных интерфейсах прирост производительности ощутим, то на айтуси вряд ли можно выкружить многое Нужно рассматривать конкретный пример. Kalisnik писал(а): А что происходит если сообщение еще отправляется модулем TWI, а процессор уже накидал новых сообщений? |
|
| Автор: | Starichok51 [ Вт фев 20, 2024 12:35:20 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
на айтуси я применяю частоту 400 кГц, вполне достаточно для бытовых нужд. |
|
| Автор: | shonty [ Вт фев 20, 2024 12:53:18 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
ну да, я это и имел ввиду если частота интерфейса 400кГц, а тактовая МК 16МГц (например), то прирост в производительности будет невелик, если готовить следующий байт во время отправки предыдущего. А вот в коде возможна излишняя путаница. |
|
| Автор: | Starichok51 [ Вт фев 20, 2024 15:13:26 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
поэтому я и сказал, что нужно заполнить буфер, и тогда процессор спокойно будет продолжать свою работу, отвлекаясь только на прерывание по интерфейсу. |
|
| Автор: | КРАМ [ Вт фев 20, 2024 15:42:58 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
А вот в коде возможна излишняя путаница. Никакой путаницы не будет, если не городить синхронизм подготовки данных и его передачи. Для подобного делают кольцевой буфер, на который есть два указателя - один куда писать из кода, другой - откуда брать для интерфейса. Это стандартный прием работы. Получается совершенно автономный код. Добавлено after 3 minutes 16 seconds: если частота интерфейса 400кГц Нужно помнить, что частота определяется мастером шины и никаких ограничений на ее номинал. кроме верхнего значения нет. То есть частота может быть ЛЮБАЯ не превышающая максимально допустимую. 400 кГц (где она указана) - это и есть максимальная. |
|
| Автор: | Kalisnik [ Вт фев 20, 2024 16:24:45 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
как МК может что-то накидать без вашего ведома? Мы - новички, можем все Дисплей I2C. Реализовал ползунок, который двигается переменным резистором подключенным к АЦП. Данные с АЦП снимаются по завершении преобразования и отправляются в дисплей функциями glcd_rectangle() и glcd_block() (CVAVR). Полагаю, что АЦП работает быстрее чем интерфейс I2C. Ну вот так и накидывается в буфер Хотя. дисплей SPI я без АЦП проверял. Просто по пикселю линию рисовал... было все очень быстро. Тогда, может это АЦП тормозит... не проверял. |
|
| Автор: | shonty [ Вт фев 20, 2024 16:58:22 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
Kalisnik писал(а): Мы - новички, можем все Я тоже новичёк Однажды была у меня задумка, подключить дисплей через отдельный контроллер. То есть один контроллер получает, обрабатывает и прочее, и льёт уже готовые данные (но скорее условные команды) во второй. А второй тупо данные на дисплей выводит, поле подчищает, с цветами разбирается.. там же тоже много работы бывает PS: На подобии дисплея Nextion хотел сделать |
|
| Автор: | Kalisnik [ Вт фев 20, 2024 19:08:10 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
shonty, получилось? |
|
| Автор: | OKF [ Вт фев 20, 2024 20:37:35 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
а еще, кстати, то же самое по USART. Разве? В AVR, насколько я помню, приёмный буфер USART содержит два байта, а так же ещё есть сдвиговый регистр, который принимает следующий символ. Приёмный буфер организован по типу FIFO - первый пришёл, первый вышел. При чтении регистра UDR считывается первый принятый байт. После чего данные в буфере сдвигаются и регистр UDR указывает уже на второй принятый байт. |
|
| Автор: | shonty [ Вт фев 20, 2024 21:11:08 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
shonty, получилось? shonty писал(а): Однажды была у меня задумка, Задумка так и осталась задумкой.
|
|
| Автор: | Starichok51 [ Вт фев 20, 2024 22:03:08 ] |
| Заголовок сообщения: | Re: TWI - как взаимодействует с процессорным временем? |
OKF писал(а): Разве? В AVR, насколько я помню, приёмный буфер USART содержит два байта, а так же ещё есть сдвиговый регистр, который принимает следующий символ. во-первых, речь изначально шла про передачу, о приеме разговора не было.во-вторых, если нужно передать несколько байт, то в буфер USART ты их не запихнешь. |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


