Много лишних сдвигов. АЦП, весьма вероятно, - выдаёт начиная c СЗБ?
Загонять сдвигами данные из SPI в int32, сдвинуть один раз на 8 бит влево (СЗР=знак) и один раз вправо (расширение знака). Внизу, наверное, уже написали что-то этакое.
Я-бы - загонял через юнион съэкономив 8 сдвигов влево, но некоторые считают юнион - харам.
1. Изо всех сил стараюсь не кормить троллей.
2. Продаю импортные ЭК - https://shop.fulcrum.ru/buy