Перейти к содержанию
    

В TMS320VC5502 в ROM по адресу 0xFFED00H лежит синусная таблица. Может кто знает как ей пользоваться? Подскажите если не трудно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В TMS320VC5502 в ROM по адресу 0xFFED00H лежит синусная таблица. Может кто знает как ей пользоваться? Подскажите если не трудно

А зачем? Чем не устраивает полином?

Изменено пользователем jcxz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Там же в инструкции написано черным по белому - таблица содержит 256 значений на 360 градусов (примерно 1.4 градуса шаг), отсчеты в формате Q15.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3.1.1 On-Chip ROM из даташита

 

Пользоваться несложно. Читаете из памяти нужные элемент данной таблицы. Про целочисленный формат данных можете почитать, например, в описании библиотеки IQmath от тех же техасовцев.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А зачем? Чем не устраивает полином?

 

Скоростью выполнения расчета синуса (или косинуса).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скоростью выполнения расчета синуса (или косинуса).

Ну если Вам достаточно такой грубой точности как 256 значений на 360 градусов, то наверно.

Но если для повышения точности будете пользоваться sin(x+y)=sin(x)*cos(y)+sin(y)*cos(x) то думаю будет значительно медленнее чем полиномом, так как насколько знаю - ROM там очень медленная.

Изменено пользователем jcxz

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот как-то так с простенькой линейной интерполяцией. Вход - фаза в ячейке "expphase", котора занимает два слова, выход - квадратуры в T0 и T1.

 


SINE_TABLE:	.set	07FF680h


	mov	#256, mmap(@BK03)
	mov	#SINE_TABLE & 000FFFFh, mmap(@BSA01)
	bset	AR0LC
	amov	#SINE_TABLE & 0FF0000h,xar0

	mov	@expphase,ar0

	mov	uns(@expphase+1)<<#16,ac3

	bclr	FRCT

	mov	*ar0+,ac2
	sub	*ar0-,ac2,t1
||		sftl	ac2,#16
	mas	t1,ac3,ac2		; sine

	mov	*ar0(#64),t0
	sub	*ar0(#65),t0,t1
	mpy	t1,ac3
||		mov	HI(ac2),t1
	neg	ac3
	add	mmap(@T0)<<#16,ac3	; cosine
	sftl	ac3,#-16
	mov	ac3,t0

	bclr	AR0LC

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Генератор синусоиды на полиноме 4-й степени (примерно 13 бит точности) на C5502 тратит 10 тактов на 1 отсчёт синуса при 32-битной фазе. Без stalls насколько помню.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Генератор синусоиды на полиноме 4-й степени (примерно 13 бит точности) на C5502 тратит 10 тактов на 1 отсчёт синуса при 32-битной фазе. Без stalls насколько помню.

Тогда может приведете код для 10 тактов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тогда может приведете код для 10 тактов?

Примерно так (может где-то в мелочах только неточности за давностью лет ;)

DATAcodec .sect     ".dual:.DATAcodec"
txPhasa   .long     0
stepPhasa .long     ...
coefC3C4  .long     -21812 << 16 | 2231
coefC1C2  .long     12864 << 16 | 83
coefC5    .word     7374
txAmpl    .word     -32768

          .text
          .dp       DATAcodec

          AMOV      #DATAcodec, XDP
          MOV       #stepPhasa, AR2
          MOV       #outbuf, AR0
          BSET      SXMD
          BSET      ARMS
          BCLR      SATD
          BCLR      M40
          BSET      FRCT
          .arms_on

          MOV       dbl(txPhasa), AC2
          SFTL      AC2, #1, AC0
          SFTS      AC0, #-17
          ABS       AC0, T3
        ||MOV       dbl(coefC3C4), pair(hi(AC0))
          RPTBLOCAL cdc_1
          ADD       dbl(*AR2), AC2
        ||MOV       hi(AC2), AR1
          MACMR     coefC5, T3, AC1, AC3
        ||BSET      SATD
          MACR      AC3, T3, AC0, AC3
        ||MOV       dbl(coefC1C2), pair(hi(AC0))
          MACR      AC3, T3, AC1, AC3
        ||MOV       hi(AC2), T2
          MACR      AC3, T3, AC0, AC0
        ||SFTL      T2, #1
          MPYR      T3, AC0, AC3
        ||MOV       dbl(coefC3C4), pair(hi(AC0))
          SFTS      AC3, #3
        ||SFTS      T2, #-1
          XCC       AR1 < #0
        ||NEG       AC3
          MPYMR     txAmpl, AC3
        ||BCLR      SATD
cdc_1:    MOV       hi(AC3), *AR0+
        ||ABS       T2, T3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Примерно так (может где-то в мелочах только неточности за давностью лет ;)

 

Хотите сказать что это все выполняется за 10 тактов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...