[an error occurred while processing this directive]
|
Необходимо произвести modulo adressing. Как шаг используется одно floating-число (5,6). Поэтому использовать напрямую hardware ring buffer не получается.
Необходимо произвести разделение и оставить 2 составные в 2x R-регистрах, например: 5,6= 5(->R0) + 0,6(->R1).
K 5,6 прибавляется шаг (5,6+5,6=11,2) и производится software modulo addressing (11->3, при длине буффера равна 8). Новый floating-индекс (3,2) сохраняется в памяти. Для пояснения добавлю, что ета операция используется в вычислении sin[n+x](аппроксимацией). Шаг 5.6 служит как множитель частоты delta: sin'(f')=sin(delta*f).
Раньше я работал с Motorola DSP56k (fixed point) там это делалось проще (на мой взгляд) из-за особенностей структуры памяти.
Какие операторы/алогоритмы лучше использовать? Как у AD-начинающего у меня нет пока конкретного плана как это эффективно реализовать (процедура используется в ISR,в assembler'e).
буду рад услышать/увидеть ваши советы :-)
E-mail: info@telesys.ru