|
|
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" и всё.
Заранее спасибо.
|
|
- Сотрудник "Л Кард"
- Здесь с 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;
|
|
|
Re: L783 прерывания по таймеру
Спасибо за ответ.
Сделал, как вы сказали.
в Вашем Биосе есть метка для задержки на 350 мкс - "Delay350ns"
до неё вставил код:
switch_fir:
AR=0x0000;
IO(0)=AR;
AX0=0;
AR=0xFFFF;
IO(0)=AR;
RTI;
Ничего не помогло...
|
|
|
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;
Всё заработало.
|
|
|
Re: L783 прерывания по таймеру
Доброе утро!
Немного изменил ваш биос, записав в него активацию таймера и вывод с помощью таймера на цифровые линии.
Вывод идет, но вот вставил свой биос в программу l-graph и при сборе данных с АЦП, там наблюдается потеря сигнала.
может я что-то не так написал в изменении вашего биоса???
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,495
|
Re: L783 прерывания по таймеру
1. Таймер ничего не знает про то, в каком формате (10-тичном или 16-ричном) записываются данные в регистры. Вы просто резко изменили период работы таймера.
2. Что значит "потеря сигнала"?
3. "я что-то не так написал в изменении вашего биоса?"
Скорее всего так и есть.
|
|
|
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, часть синусоиды рубиться как раз примерно тот промежуток, на сколько выводятся цифровые линии. Насколько я понял процессор был занят счетчиком и на этот промежуток не принимал информацию с АЦП.
|
|
|
Re: L783 прерывания по таймеру
Утро доброе!
Пробую изменять ваш биос для платы.
у меня такой вопрос, как работает условные оператор IF?
допустим у меня есть регистр AR=0, и каждый цикл он увеличивается на 1, и при прохождении 5 циклов, когда AR=5 выполняется команда. как можно праавильнее записать?
IF GE CALL loop;
заранее спасибо!
|
|
|
Re: L783 прерывания по таймеру
вот где тут есть сравнения двух регистров? как я могу сравнить AR болше ли он 5-ти или нет?
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,495
|
Re: L783 прерывания по таймеру
1. Почитайте руководство для ADSP-21xx. Там же всё подробно написано.
2. Можно сделать так:
а. записываете в регистр AR число 5;
б. каждый цикл уменьшаете значение в AR на 1;
в. проверяете на равенство 0: IF EQ CALL Zzzzz.
|
|
|
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;
Алгоритм понятен, но вот как написать, для меня проблемка((
|
|
|
Re: L783 прерывания по таймеру
ВСё сделал спасибо, пока работает
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,495
|
Re: L783 прерывания по таймеру
Если используется обработчик прерывания в том виде, в котором он представлен в сообщении от 05.05.10 11:50, то Вы сильно рискуете.
Посудите сами. Если в основной программе используются регистры AR, AX0 или AX1, то они рискуют быть изменены в любой произвольный момент времени Вашим обработчиком прерывания. Посмотрите как организованы обработчики прерывания в штатном LBIOS.
|
|
|
Re: L783 прерывания по таймеру
а есть какие нибудь регистры с которымитоже можнопроизводить битовые операции?
например AR=SETBIT 0 OF AR;
или операции декриментирования/инкриментирования
с регистрами AX0,AX1,Ay0,AY1,AF,MX0,MX1,AF....
с нимитакие операции нельзя почему-то делать, я просто написал
AY0=SETBIT 0 OF AY0;
программа не оттранслировалась...
|