Size: a a a

2020 April 20

СС

Сиие Сууие in Embedded Group
Dima
Круто. Пока выполняется основной цикл программы, i2c передает данные сам в шину? Тоесть мы загружаем только флаги и данные в память, с основного потока?
у меня как-то так сложилось что с и2с я почти не работал, но суть не в нём, а в ДМА, дма это как рабочий которому ты говоришь что делать, вот сказал ему перекидать 2 мегабайта из одного места в другое, он и кидает
источник

L

LexsZero in Embedded Group
ты говоришь дма "пихай столько-то байт начиная вон с того адреса в регистр i2c" и забываешь об этом. когда все запихается - прилетит прерывание.
источник

СС

Сиие Сууие in Embedded Group
Dima
Хотя нет, если прерывания активны, то основной поток остановится для обработки прерывания
а зачем их обрабатывать? на их обработку тоже можно поставить дма
источник

D

Dima in Embedded Group
А так можно?
источник

СС

Сиие Сууие in Embedded Group
Dima
А так можно?
да, так и нужно
источник

D

Dima in Embedded Group
Это целый параллельный поток
источник

D

Dima in Embedded Group
Ограниченный правда
источник

СС

Сиие Сууие in Embedded Group
Dima
Это целый параллельный поток
в этом и вся суть дма, чтоб переносом данных процесор не занимался
источник

L

LexsZero in Embedded Group
это очень тупая хрень с несколькими регистрами, которая все что умеет это перекладывать данные с одного места в другое.
источник

L

LexsZero in Embedded Group
у нее есть дрыгалка, если дернуть за которую можно спровоцировать перекладывание следующего байта
источник

D

Dr Zlo in Embedded Group
уточню что есть тонкости с межпериферийной шиной в самом микроконтроллере
источник

L

LexsZero in Embedded Group
если эту дрыгалку соединить с сигналом от и2ц о том что байт передался - оно будет само крутиться, пока у дма не кончатся байты
источник

D

Dr Zlo in Embedded Group
и её арбитраж нигде не прописан)
источник

СС

Сиие Сууие in Embedded Group
Dima
А так можно?
суть в том что у тебя есть некое прерывание в регитрах твоей переферии, если без дма - то ты ставишь туда обработчик и начинаешь его обрабатывать по событию, но если ты используешь дма - ты не ставишь обработчик, ты просто пишешь в регистры дма что по срабатыванию вот этого регистра на этой переферии надо взять очередной байтик из входящего буфера и перенести в новое место
источник

СС

Сиие Сууие in Embedded Group
Dr Zlo
и её арбитраж нигде не прописан)
и чем это чревато? я когда-то пытался это постигнуть, но как-то не постиг
источник

D

Dima in Embedded Group
Короче это всего лишь поезд, который либо увозит, либо привозит?
источник

СС

Сиие Сууие in Embedded Group
Dima
Короче это всего лишь поезд, который либо увозит, либо привозит?
именно, но есть дополнительные настройки чтоб вёз по разным станциям
источник

D

Dr Zlo in Embedded Group
Сиие Сууие
и чем это чревато? я когда-то пытался это постигнуть, но как-то не постиг
в джиттере разных событий, в замедлении обращения процессора к памяти...
источник

D

Dima in Embedded Group
Удобно на самом деле, для связи между блоками
источник

L

LexsZero in Embedded Group
Сиие Сууие
и чем это чревато? я когда-то пытался это постигнуть, но как-то не постиг
у меня на одной железке (сок с линуксом) дма видеокодека клал раком шину и начинало пдглючивать звук.
источник