Здравствуйте!
Я новичок в области электроники и пытаюсь разобраться с программой для ADSP 2184 (http://www.analog.com/static/imported-files/data_sheets/ADSP-2184.pdf)
Вот кусок из кода:
start:
// Установка задержки при записи во внешнее устройство 1 такт
ax0 = b#0111111111111001;
dm(Dm_Wait_Reg) = ax0;
// Инициализация таймера
ax0=0;
dm(Tscale_Reg)=ax0;
ax0=40;
dm(Tperiod_Reg)=ax0;
dm(Tcount_Reg)=ax0;
// Разрешение прерываний от таймера и по входу IRQE//
ICNTL=0;//
IFC=1;//
IMASK=1;
ena INTS;
// Старт таймера
ena TIMER;//(установка бита TE MSTAT)
af = pass 0;
wait: idle;
jump wait;
Вопросы:
1)
ax0 = b#0111111111111001;
dm(Dm_Wait_Reg) = ax0;
Это, я понимаю, мы обращаемся к Data memory waistate register и устанавливаем ожидание-один такт при обращении к следующим диапазонам адресов адресного пространства ввода/вывода: 0x000-0x1FF.
Подскажите, зачем это может быть нужно?
2)
Далее мы инициализируем таймер. Тактовая частота внешнего генератора - 40MHz. Насколько я правильно понял, смотря в Datasheet, внутренняя тактовая частота для этого процессора будет в 2 раза выше, то есть 80MHz? Согласно формуле Tint = (TPERIOD + 1) * (TSCALE + 1) / Fclkout получается, что каждые 0,5125 *10^-6 будет возникать прерывание, так ли это?
3)
Что означает команда
IFC=1;
? В мануале написано, что тем самым мы очищаем прерывание по таймеру. Зачем это может быть здесь нужно?
4) Где-то в этом коде мы разрешаем прерывание по IRQE, но в IMASK записывается только 1 и больше ничего.