ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
29 марта
1016375
BlackMorda, мудак (07.07.2020 09:21, просмотров: 2877)
Есть ли в природе быстрая арифметика конвертация данных 24->32 бит из массива для Cortex M7? 

Наклевывается задача с обработкой данных с АЦП 24 бита, 8 каналов, знаковый тип данных.

Данные нужно получать по SPI/DMA, а затем быстро переработать.

Велосипед изобретать не хочется. Работают же с 24 битным звуком и уже давно. В ассемблер, тоже не хочется глубоко влезать.

Хочется готовое решение с голубой каемочкой. ;-)


Нашел обратное преобразование 4 x 24 bit -> 3 x 32 bits

https://community.arm.com/developer/ip-products/processors/f/cortex-a-forum/4291/compacting-4x-24-bit-values-into-3x-32-bits


Нашел, что можно инструкции LDR использовать с не выровненными данными

https://developer.arm.com/documentation/dui0646/a/the-cortex-m7-instruction-set/about-the-instruction-descriptions/address-alignment

Не знаю правда как через кеш такие данные пройдут так как "some memory regions might not support unaligned accesses."

Можно создать указатель на 3-х байтную структуру или юнион.


Инкрементировать указатель тоже можно на 3, правда все примеры кратны 4:

https://developer.arm.com/documentation/dui0646/a/the-cortex-m7-instruction-set/memory-access-instructions/ldr-and-str--immediate-offset


Тут врукопашную складывают, но у меня есть сомнения что со знаком все хорошо.

https://stackoverflow.com/questions/41491401/converting-24-bit-usb-audio-stream-into-32-bit-stream


Есть пример преобразования 24 бит в float тоже есть.

https://stackoverflow.com/questions/37468430/convert-24bit-twos-complement-to-float-32t

//---------------------------------------

Одно колесо уже есть, осталось найти "колесо" для выборки 24 битных данных и преобразования в 32 битные.

Видел ли кто такое колесо?