STM32 SAI: понимание FIFO

Насколько я понимаю, FIFO (в аппаратном контексте) - это буфер, который будет управляться по принципу "первым пришел - первым вышел". Вы последовательно добавляете в него несколько битов, а затем можете прочитать их, т.е. по блокам, когда будет достигнут желаемый порог. Но меня смущает управление FIFO последовательным аудиоинтерфейсом STM32:

Согласно данным, последовательный аудиоинтерфейс (SAI) поддерживает FIFO до 8 слов. (8x32bit) Регистр данных (SAI_xDR) SAI составляет 1 слово (32бит). Документация объясняет

Запись в этот регистр загружает FIFO при условии, что FIFO не заполнен.

Чтение из этого регистра очищает FIFO, если FIFO не является пустым.

Как это интерпретировать?

Я предполагаю: если я сделаю доступ для записи в этот регистр, он загружает содержимое регистра (32-битный блок) в FIFO в качестве первого слова, затем при втором доступе к записи загружает второе слово в FIFO и так далее. Затем, когда я делаю доступ для чтения, он возвращает первое слово в очереди, затем второе и так далее. Это правильно?

Если так, что происходит, когда я записываю менее 32 бит в регистр? Т.е. я пишу 16-битный блок. Тогда я снова пишу 16 бит. Обе ли битовые блоки разделяют одно слово или передаются в отдельные слова? Если я прочитаю слово, получу ли я оба 16-битных блока или только первые 16-битные? Я не понимаю, как FIFO знает размер моей битовой последовательности, которую я заполняю в регистре данных. Или это всегда занимает целых 32 бита при каждом доступе к записи?

1 ответ

Решение

Я предполагаю: если я сделаю доступ для записи в этот регистр,... Это правильно?

Да ты прав.

Насколько я понимаю, каждое слово FIFO содержит данные для / из одного слота SAI независимо от размера данных. FIFO соединен с 32-битным регистром сдвига, в то время как число сдвигов зависит от размера данных Кажется, что можно использовать, например, 16-битный доступ к данным для нижней половины SAI_xDR для 8 < data_size <= 16 но в любом случае для передачи будет использоваться целое 32-битное слово FIFO, и только data_size биты из каждого слова будут сдвигаться внутрь / наружу.

36.3.9 Последовательный аудиоинтерфейс (SAI) Внутренние FIFO

...

Каждый FIFO - это FIFO из 8 слов. Каждая операция чтения или записи из / в FIFO нацеливается на одно слово FIFO, независимо от размера доступа. Каждое слово FIFO содержит один аудио-слот. Указатели FIFO увеличиваются на одно слово после каждого доступа к регистру SAI_xDR.

Данные должны быть выровнены по правому краю, когда они записаны в SAI_xDR.

Полученные данные будут правильно выровнены в SAI_xDR.

Другие вопросы по тегам