Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


Управляющая программа для ADPS-2185(Plata L-783)

Вы не вошли.

 Поиск | Регистрация | Вход 

OT
21.06.2010 14:32:54
#1

Гость

Управляющая программа для ADPS-2185(Plata L-783)

Добрый день!
Работаю с платой L-783.
меня управляющую программу для установленного в эту плату сигнального процессора ADSP-2185.
Извлекаю данные из FIFO буфера АЦП командой:
AR=DM(I3,M3);
И эти данные которые стояли в переди очереди, автоматически занеслись в конец очереди.
Я всё правильно понял???

21.06.2010 14:49:33
#2

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: Управляющая программа для ADPS-2185(Plata L-783)

Ответил письмом ещё 17 июня 2010 г. в 21:13:19.

OT
21.06.2010 14:55:45
#3

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Извините, но не могу у вас в Технической поддержке найти тему про "скользящий фильтр"
можете, повторить овет в этой теме, если вам не трудно, спасибо!

OT
21.06.2010 15:01:32
#4

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

ВСё прочитал спасибо!

OT
21.06.2010 16:11:24
#5

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Есть вопросик:
МОгу ли я считывать несколько слов данных из FIFO буфера в регистр и при этом они будут оставаться в бкфере без потерь,
Тоесть я хочу считать 10 значений с буфера АЦП, ссумировать их, но при этом эти 10 начений так и остануться на своих местах???

OT
21.06.2010 16:16:48
#6

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Я сделал так:
SR0=I3;
AX0=DM(I3,M3);
AY0=DM(I3,M3);
AR=AX0+AY0;
I3=SR0;
DM(I3,M3)=AR;
Скажите, не ошибаюсь ли я где???

21.06.2010 16:51:19
#7

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: Управляющая программа для ADPS-2185(Plata L-783)

Лучше попробовать так:

1: I4=I3; M4 = 0x1;
2: AX0=DM(I4,M4);
3: AY0=DM(I4,M4);
4: AR=AX0+AY0;
5: DM(I3,M3)=AR;

Правда за время выполнения инструкций 1-4 регистр I3 вполне может измениться.

OT
21.06.2010 17:56:34
#8

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

То есть таким образом мы вполне сможем прочитать весь буфер АЦП и подсчитать среднее арифметическое всего этого буфера???

OT
22.06.2010 10:43:02
#9

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Доброе утро!
хотелось бы ещё уточнить, набор команд:
RESET FL2;NOP;NOP;SET FL2;
они выталкивают данные из фифо буфера АЦП и заносят их в кольцевой буффер.
Получается, что данные все заносятся в кольцевой буфер компьютера, а ФИФО буффер на плате пустой???

OT
22.06.2010 10:45:21
#10

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

И при этом указатель I3 становаится обратно в исходную позицию начала буфера АЦП?

22.06.2010 11:51:02
#11

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: Управляющая программа для ADPS-2185(Plata L-783)

Если бы Вы прочитали документацию, то знали бы что флажок FL2 просто генерит прерывание в РС. На состояние регистра I3 это не оказывает никакого влияния.

OT
23.06.2010 16:07:23
#12

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Сейчас попробовал 2 пары сумм посчитать, написал такой код:
AX0=DM(I4,M4);
AY0=DM(I4,M4);
AR=AX0+AY0;
DM(I3,M3)=AR;

AX0=DM(I4,M4);
AY0=DM(I4,M4);
AR=AX0+AY0;
DM(I3,M3)=AR;

выдает, не то, что планировалось.

Не скажете как можно считать N-ое количество значиений с буфера АЦП?

23.06.2010 18:57:36
#13

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: Управляющая программа для ADPS-2185(Plata L-783)

Недопонял...
1. На что указывают регистры I3 и I4?
2. Что в Вашем понимает делает строчка DM(I3,M3)=AR?

OT
24.06.2010 08:17:44
#14

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

I4=I3;M4=0x1;

AX0=DM(I4,M4);
AY0=DM(I4,M4);
AR=AX0+AY0;
DM(I3,M3)=AR;
I4=I3;M4=0x1;

AX0=DM(I4,M4);
AY0=DM(I4,M4);
AR=AX0+AY0;
DM(I3,M3)=AR;

В моем понимании строка DM(I3,M3)=AR  заносит сумму 2-х значений буфера АЦП в конец очереди буфера АЦП.

24.06.2010 19:18:08
#15

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: Управляющая программа для ADPS-2185(Plata L-783)

Если у Вас регистр I3 указывает в конец очереди буфера АЦП (т.е. на пустое, свободное место), то что тогда читается в Вашем коде при выполнении инструкции AX0=DM(I4,M4)?

OT
25.06.2010 08:49:47
#16

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Доброе утро!
Я думал, что ФИФО буфер работает иначе.
Получается, что данные записываются в то место, куда указывает I3? и он вполне может указывать и на середину буфера?
значит получается команда DM(I3,M3)=AR; записывает данные в буфер DM(I3,M3) в то место , куда указыват фифо буфер.
При выыполнении команд
AX0=DM(I4,M4);
AY0=DM(I4,M4);
местоположение I3=n (допустим n), а I4=n+2.
ПОсле выполнения команды DM(I3,M3)=AR; , местоположение I3 изменилоось и равно n+1.
Я правильно понял?

25.06.2010 15:47:47
#17

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: Управляющая программа для ADPS-2185(Plata L-783)

1. Если бы Вы прочитали описание, то выяснили бы,  что речь идёт о программно-организованном FIFO буфере.
2. Стандартные инструкции типа DM(I3,M3)=AR или  AR=DM(I3,M3) осуществляют взаимодействие с памятью данных или кода ADSP. Причём регистр I3 указывает адрес рабочей ячейки памяти. Почитайте внимательно руководство по ADSP.
3. Если M3=1, после выполнения инструкции DM(I3,M3)=AR или AR=DM(I3,M3) содержимое регистра I3 возвеличивается а 1.

OT
29.06.2010 12:12:15
#18

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Понял спасибо большое!
но возник такой вопрос, с какого адреса в памяти программ начинается fifo буфер АЦП?
в файле FIFO.H, написано, что для процессора ADSP-2185 ФИФО буфер начинается с адреса 0x3000
написал такой код в обработчике прерывания по таймеру:
zader:
    ENA SEC_REG;
    AX0 = 300;
    DIS SEC_REG;
    I4 = 0x3000; M4 = M3;
sbor:
    DIS SEC_REG;
    AX0=DM(I4,M4);
    AY0=DM(I4,M4);
    AR=AX0+AY0;
    DM(I3,M3)=AR;
    ENA SEC_REG;
    AR=AX0-1;
    AX0=AR;
    IF NE JUMP sbor;   
    DIS SEC_REG;

29.06.2010 13:07:47
#19

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: Управляющая программа для ADPS-2185(Plata L-783)

1. Текущее расположение FIFO буфера АЦП в памяти данных платы L-783 можно узнать прочитав переменные AdcFifoBaseAddress (начальный адрес FIFO буфера) и AdcFifoLength (длина FIFO буфера).
2. Текущую степень заполненности FIFO буфера АЦП можно вычислить исходя из переменных AdcFifoPointer (положение //'головы//' FIFO буфера) и IrqDataAddress (положение //'хвоста//' FIFO буфера).

OT
13.07.2010 11:46:53
#20

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Добрый день!
Не могли бы вы написать как, можно делить значение рестра на определенное целое число?
в Описании по ADSP-21xx читал, но хотелось бы что бы вы написали пример.
Допустим в регистре MR1 находятся данные, нам их надо разделить на n(допустим 7) как получить результат, напишите пожалуйста!
Заранее спасибо!

13.07.2010 14:23:12
#21

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: Управляющая программа для ADPS-2185(Plata L-783)

1. Если необходимо делить на 2, 4, 8 ... , то следует осуществлять сдвиг вправо на 1, 2, 3 и т.д. битов.
2. Если необходимо деление на произвольное число, то внимательней читайте мат.часть, например: ftp://ftp.lcard.ru/pub/users/adsp/adsp2 … onseng.exe

OT
14.07.2010 10:09:45
#22

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Спасибо.
Есть примитивы деления DIVQ,DIVS.
Пытался делать как в описании, но в результате кроме умножения на 2 ничего не получалось. Как описано в данной книге, в операции деления учавствуют регистры:
AY1,AF - регистры, где содержаться старшие биты делимого
AY0 - регистр, где содержаться младшие биты делимого
AX0,AX1,AY0,AY1 ... - R регистры, где содержаться биты делителя.
Делимое состоит из 32 бит(старш. набор бит, и младший) операция деления возвращает 16 бит частного , которое храниться в регистре AY0
При знаковом делении необходимо использовать примитив DIVS AF,AX0; после этого ещё 15 раз использовать DIVQ AX0;
(На сколько я понял в AX0 находиться делитель)
в итоге в регистре AY0 будет находиться 16 битный результат деления.
У нас дано: в регистре AR находится результат(знаковый, значит регистр ASTAT не трогаю), нам необходимо поделить содержимое регистра AR на какое-то число (можно и на 2048).
Исходя из полуенного описания ADSP-2100, можно написать такой код:

AY0 = AR;{младшие биты делимого}
AX0 = 2;{число на которое будем делить}
AR = 0;
AF = PASS AR; {Не знаю, зачем старшие биты делимого, я их занулил}
{дальше идет процесс едления DIVS выполняется 1 раз, чтобы знак определить, далье DIVQ 15 раз, что бы заполнить регистр результата}
    DIVS AF,AX0;DIVQ AX0; DIVQ AX0;
    DIVQ AX0; DIVQ AX0; DIVQ AX0;
        DIVQ AX0; DIVQ AX0; DIVQ AX0;
        DIVQ AX0; DIVQ AX0; DIVQ AX0;
        DIVQ AX0; DIVQ AX0; DIVQ AX0;
В чем проблема? может я не учел, что как-то надо использовать старшие биты делимого? хотя у нас делимое само 16 бит.
Заранее спасибо!

OT
14.07.2010 10:13:30
#23

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Извините в предыдущем письме написал 14 раз DIVQ AX0; их 15 операций, не хвататет ещё одной DIVQ AX0;
можете сказать что не так?

14.07.2010 10:41:12
#24

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: Управляющая программа для ADPS-2185(Plata L-783)

И что именно у Вас не получилось? Исходный код не откомпилировался?

OT
14.07.2010 10:42:05
#25

Гость

Re: Управляющая программа для ADPS-2185(Plata L-783)

Пока что организовал такой алгоритм деления:

{ кладём скорректированный результат в буфер АЦП                                }
    AX0 = MR1;
    AR = AX0;
    AR = TSTBIT 15 OF AR;
    IF NE JUMP negative;
    JUMP positive;
negative:
    AR = AX0;
    AR = CLRBIT 15 OF AR;
    SR = LSHIFT AR BY -6(LO);
    AR = SR0;
    AR = SETBIT 15 OF AR;
    AR = SETBIT 14 OF AR;
    AR = SETBIT 13 OF AR;
    AR = SETBIT 12 OF AR;
    AR = SETBIT 11 OF AR;
    AR = SETBIT 10 OF AR;
    AR = SETBIT 9 OF AR;
    JUMP registering;
positive:
    AR = AX0;
    SR = LSHIFT AR BY -6(LO);
    AR = SR0;

registering:
    DM(I3, M3) = AR;

Здесь мы делим наш результат на 64, также можно и на 2048 организовать, но может используя ппримитивы DIVS,DIVQ получится более эффективнее делить, и не только на числа 2^n???
Заранее спасибо!