Первый шаг - переключиться на С++ компилятор. Пишите С код, но
компилируйте С++ компилятором. Переписывать ничего не надо, никто
вам за это не заплатит, тем более чужой код. Пишите на плюсах свой
новый код. В нём никто не запрещает вам использовать вызов
С-функций. Начните с инкапсуляции данных в классы. Нарабатывайте
библиотеки того что вы чаще всего используете, стандартизируйте для
себя интерфейсы взаимодействия между классами. Когда появится
библиотека классов и пони
мание объектности всего с чем вы работаете, то даже мелкие вещи для удобства применения будете классами писать. Примерно так, даже для одного метода. Этому классу пофиг на каком контроллере и каком SPI работать, он об этом ничего не знает. Знает переданный шаблонным параметром класс.

В переводе тут написано, что для установки аттенюатора надо отправить по SPI один байт, содержащий шесть инвертированных значащих бит. Всё, на этом вся логика чипа закончилась. И код тоже. Чтобы использовать его в приложении надо сделать описание

И где надо вызывать метод
HMC1018::SetAtt(att);
Шаблоны, лямбды и метапрограммы сами, конечно, не придут. Тут нужна увлечённость. Без этого никак.