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


L783 прерывания по таймеру

Вы не вошли.

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

OT
26.04.2010 11:40:23
#1

Гость

L783 прерывания по таймеру

Здравствуйте нужны вывод на ТТЛ линии по таймеру.
Сделал так:
{ Обработчик прерываний Timer}
jump switch_fir; NOP; NOP; NOP;
Потом после метки Start написал:
DIS TIMER;
AX0=0x00;
DM(Tscale_Reg)=AX0;
AX0=0x000F;
DM(Tcount_Reg)=AX0;
AX0=0xFFFF;
DM(Tperiod_Reg)=AX0;
AX0=0x0000;
После строки     "AR = 0x1; DM(Ready) = AR;"
разрешил таймер:
ENA TIMER;
перед меткой "mainloop"
замаскировал прерывания:
IMASK = DM(ImaskValue); NOP;
AR=DM(ImaskValue);
AR=SETBIT 0 OF AR;
DM(ImaskValue)=AR;
IMASK=AR;
и после этого в конце файла перед строкой ".ENDMOD;" вставил такой код:
switch_fir:
AR=0x0000;
IO(0)=AR;
AX0=0;
AR=0xFFFF;
IO(0)=AR;
RTI;
Скажите в чем проблема, ТТЛ линиии выводят только "1" и всё.
Заранее спасибо.

26.04.2010 12:26:00
#2

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

Re: L783 прерывания по таймеру

1. Попробуйте обработчик таймерных прерываний расположить где-нибудь до метки Set_DSP_Type_cmd.
2. Вместо:
IMASK = DM(ImaskValue); NOP;
AR=DM(ImaskValue);
AR=SETBIT 0 OF AR;
DM(ImaskValue)=AR;
IMASK=AR;

Можно написать проще:
AR = DM(ImaskValue);
AR = SETBIT 0 OF AR;
DM(ImaskValue) = AR;
IMASK = AR; NOP;

OT
26.04.2010 13:41:04
#3

Гость

Re: L783 прерывания по таймеру

Спасибо за ответ.
Сделал, как вы сказали.
в Вашем Биосе есть метка для задержки на 350 мкс - "Delay350ns"
до неё вставил код:
switch_fir:
AR=0x0000;
IO(0)=AR;
AX0=0;
AR=0xFFFF;
IO(0)=AR;
RTI;
Ничего не помогло...

OT
27.04.2010 08:44:59
#4

Гость

Re: L783 прерывания по таймеру

Спасибо! решил проблему!
Проблема была в том, что я при установки таймера писал в 16-ричном формате.
AX0=0x00;
DM(Tscale_Reg)=AX0;
AX0=0x000F;
DM(Tcount_Reg)=AX0;
AX0=0xFFFF;
DM(Tperiod_Reg)=AX0;
AX0=0x0000;
переписал в десятичном:
DIS TIMER;
AX0=2;
DM(Tscale_Reg)=AX0;
AX0=5;
DM(Tcount_Reg)=AX0;
AX0=5;
DM(Tperiod_Reg)=AX0;
Всё заработало.

OT
28.04.2010 08:32:28
#5

Гость

Re: L783 прерывания по таймеру

Доброе утро!
Немного изменил ваш биос, записав в него активацию таймера и вывод с помощью таймера на цифровые линии.
Вывод идет, но вот вставил свой биос в программу l-graph и при сборе данных с АЦП, там наблюдается потеря сигнала.
может я что-то не так написал в изменении вашего биоса???

28.04.2010 11:55:14
#6

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

Re: L783 прерывания по таймеру

1. Таймер ничего не знает про то, в каком формате (10-тичном или 16-ричном) записываются данные в регистры. Вы просто резко изменили период работы таймера.
2. Что значит "потеря сигнала"?
3. "я что-то не так написал в изменении вашего биоса?"
Скорее всего так и есть.

OT
28.04.2010 17:36:07
#7

Гость

Re: L783 прерывания по таймеру

1. Что значит /"потеря сигнала/"?
мой обработчик написан так:
switch_fir:
AR=0xFFFF;
IO(0)=AR;
CNTR=15000;
DO neop UNTIL CE;
neop: NOP;
AR=0x0000;
IO(0)=AR;
AX0=0;
RTI;
Генератором подается синусоида на АЦП, а в l-graph, часть синусоиды рубиться как раз примерно тот промежуток, на сколько выводятся цифровые линии. Насколько я понял процессор был занят счетчиком и на этот промежуток не принимал информацию с АЦП.

OT
04.05.2010 09:59:10
#8

Гость

Re: L783 прерывания по таймеру

Утро доброе!
Пробую изменять ваш биос для платы.
у меня такой вопрос, как работает условные оператор IF?
допустим у меня есть регистр AR=0, и каждый цикл он увеличивается на 1, и при прохождении 5 циклов, когда AR=5 выполняется команда. как можно праавильнее записать?
IF  GE CALL loop;
заранее спасибо!

OT
04.05.2010 09:59:54
#9

Гость

Re: L783 прерывания по таймеру

вот где тут есть сравнения двух регистров? как я могу сравнить AR болше ли он 5-ти или нет?

04.05.2010 11:27:29
#10

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

Re: L783 прерывания по таймеру

1. Почитайте руководство для ADSP-21xx. Там же всё подробно написано.
2. Можно сделать так:
   а. записываете в регистр AR число 5;
   б. каждый цикл уменьшаете значение в AR на 1;
   в. проверяете на равенство 0: IF EQ CALL Zzzzz.

OT
05.05.2010 10:50:17
#11

Гость

Re: L783 прерывания по таймеру

Добрый день!
вот так описал обработчик прерывания.
Необходимо, что бы каждые 5 тактов таймера обработчик выдавай на ТТЛ линии импульс.

switch_fir:  {Обработчик прерывания}
AX0=0x0000;
AR=AX1-1;
AX1=AR;
IF EQ CALL zzz;
IO(0)=AX0;
RTI;    {Выход из него}
zzz: AX0=0x0001;AX1=5;
Алгоритм понятен, но вот как написать, для меня проблемка((

OT
05.05.2010 15:25:18
#12

Гость

Re: L783 прерывания по таймеру

ВСё сделал спасибо, пока работает

06.05.2010 19:20:21
#13

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

Re: L783 прерывания по таймеру

Если используется обработчик прерывания в том виде, в котором он представлен в сообщении от 05.05.10 11:50, то Вы сильно рискуете.
Посудите сами. Если в основной программе используются регистры AR, AX0 или AX1, то они рискуют быть изменены в любой произвольный момент времени Вашим обработчиком прерывания. Посмотрите как организованы обработчики прерывания в штатном LBIOS.

OT
06.05.2010 23:38:34
#14

Гость

Re: L783 прерывания по таймеру

а есть какие нибудь регистры с которымитоже можнопроизводить битовые операции?
например AR=SETBIT 0 OF AR;
или  операции декриментирования/инкриментирования
с регистрами AX0,AX1,Ay0,AY1,AF,MX0,MX1,AF....
с нимитакие операции нельзя почему-то делать, я просто написал
AY0=SETBIT 0 OF AY0;
программа не оттранслировалась...