haker_fox 60 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба Just now, AHTOXA said: что у автора темы одно "лишнее" прерывание при отправке пакета по SPI? Чесс говоря, я бы не стал париться, если производительность системы не падает. Осваивать новый МК - это не пуд соли купить) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 26 минут назад, AHTOXA сказал: Да ладно! Вы всерьёз завели разговор о смене МК только потому, что у автора темы одно "лишнее" прерывание при отправке пакета по SPI? А где тут был разговор о "смене МК"? И завели тему не мы, а автор. И по другому вопросу: как сиё сделать на STM. По существу вопроса что-то посоветовать можете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба По существу уже ответили: только копированием в промежуточный буфер. Но я бы оставил всё как есть. Но раз уж зашла речь про NXP-шные SPI и DMA, спрошу: можно ли там сделать передёргивание CS между блоками (например, после отправки команды и адреса)? Ну, без прерывания конечно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба Создать структуру для команды, адреса и данных, и посылать всю целиком. Не? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба А я бы запустил DMA для команды, а инфу о блоке данных запомнил бы и запустил DMA для данных из ISR (не дёргая для такой ерунды задачу). А семафор взводил бы уже после завершения DMA блока данных. Собственно у меня так и делается в проекте на STM где есть работа с SPI-flash. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 3 минуты назад, ViKo сказал: Создать структуру для команды, адреса и данных, и посылать всю целиком. Не? Если блок данных достаточно длинный, то это может быть невыгодно - нужен большой промежуточный буфер, и время копирования может превышать затраты на лишнее прерывание. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 2 минуты назад, ViKo сказал: Создать структуру для команды, адреса и данных, и посылать всю целиком. Не? Это и есть "с копированием в промежуточный буфер". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 4 минуты назад, AHTOXA сказал: Если блок данных достаточно длинный, то это может быть невыгодно - нужен большой промежуточный буфер, и время копирования может превышать выигрыш. А почему массив данных в структуре не использовать сразу, без буфера? Если это данные из ПЗУ, тогда понятно, посылать отдельно команду, отдельно данные. Команду - без DMA, на прерываниях по пересылке байта. Данные - по DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба Только что, ViKo сказал: А почему массив данных в структуре не использовать сразу, без буфера? Это сильно усложняет работу с SPI. Нельзя будет просто передать на запись произвольный блок данных. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 2 минуты назад, ViKo сказал: А почему массив данных в структуре не использовать сразу, без буфера? Потому что SPI-flash требует передачи команды перед данными. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AHTOXA 14 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 5 минут назад, jcxz сказал: А я бы запустил DMA для команды, а инфу о блоке данных запомнил бы и запустил DMA для данных из ISR (не дёргая для такой ерунды задачу). А семафор взводил бы уже после завершения DMA блока данных. Ну, это уже детали реализации - каким образом запускать вторую транзакцию. Можно из ISR, можно из задачи. Я там выше вопрос дописал: 13 минут назад, AHTOXA сказал: Но раз уж зашла речь про NXP-шные SPI и DMA, спрошу: можно ли там сделать передёргивание CS между блоками (например, после отправки команды и адреса)? Ну, без прерывания конечно. Реализуемо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 17 минут назад, jcxz сказал: Потому что SPI-flash требует передачи команды перед данными. Стандартная ситуация. Четверку байтов переслать - вам DMA нужен? Не заморачивайтесь на пустом месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 19 минут назад, AHTOXA сказал: Но раз уж зашла речь про NXP-шные SPI и DMA, спрошу: можно ли там сделать передёргивание CS между блоками (например, после отправки команды и адреса)? Ну, без прерывания конечно. В известных мне NXP (LPC17xx, LPC43xx) насколько помню - нет. Можно в XMC4xxx, в OMAP-L13x, про Tiva - не помню. 7 минут назад, ViKo сказал: Стандартная ситуация. Четверку байтов переслать? Не заморачивайтесь на пустом месте. Вообще-то не четвёрку, а намного больше. И ТС тут печётся об одном прерывании, а Вы ему советуете вместо этого ещё десяток прерываний добавить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 9 минут назад, jcxz сказал: Вообще-то не четвёрку, а намного больше. И ТС тут печётся об одном прерывании, а Вы ему советуете вместо этого ещё десяток прерываний добавить. В стартовом сообщении - именно четверку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 26 марта, 2020 Опубликовано 26 марта, 2020 · Жалоба 35 minutes ago, AHTOXA said: По существу уже ответили: только копированием в промежуточный буфер. ну ещё можно сделать костыли, наоборот, в виде выделения дополнительных 4х байт заранее в том буфере откуда данные берутся, потом дописывать перед ними адрес и отправлять всё целиком. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться