Обновление SPI transfer16 для создания Transfer24

Это может быть немного, но для проекта, над которым я работаю, размер моего слова по умолчанию равен 24 битам (3x8 бит), из которых первые 8 бит - это данные, а следующие 16 бит - данные. Я хотел бы вывести его из системы как можно быстрее с минимальными вызовами подпрограмм. Для этого я пытаюсь уменьшить количество звонков, мне удалось уменьшить его с 3 до 2, могу ли я сделать это 1 звонок.

  1. Моя первая попытка состояла в том, чтобы использовать 3x SPI.transfer() Вторая - в использовании 1x

  2. SPI.transfer() и 1x SPI.transfer16()

Я хотел бы знать, каков был бы идеальный способ написать функцию SPI.transfer24.

, 👍2

Обсуждение

Какую крошку ты используешь?, @Majenko

teensy 4.0 - это тот, который я использую, @sandeepzgk

И как вы думаете, какая разница, если сделать 1 вызов функции, а не 2, на частоте 600 МГц? Ты вообще сможешь сказать?, @Majenko

@Majenko это справедливая точка зрения, но если вы попытаетесь посмотреть на цифровой анализатор логического уровня, каждое слово, кажется, оказывает небольшое влияние, но когда вы пишете ~ 4M слов в секунду, это, к сожалению, складывается., @sandeepzgk


1 ответ


2

Ты не можешь. Teensy 4.0 имеет аппаратную поддержку 8-битных, 16-битных и 32-битных передач. Не 24-битные передачи.

Но при частоте 600 МГц накладные расходы на вызов функции в любом случае незначительны - конечно, по сравнению со скоростью SPI, которая в лучшем случае примерно в 30 раз медленнее, чем работает процессор.

Если вам нужна высокая пропускная способность, вы все равно не захотите использовать библиотеку SPI, вместо этого вы будете использовать DMA для передачи данных с минимальным вмешательством процессора.

,