Цитата(aaarrr @ Aug 29 2008, 00:13)

Попробуйте перенести мигание в основной цикл и посмотреть, не зависает ли процессор при получении прерывания.
сделал, как вы советовали. нет, не зависает. нормально мигает.
Цитата
Автору, в прерываниях большие задержки ставить глупо, лучше ивертировать состояние, тогда светодиод должен мигать раз в четыре секунды.
это как?
вместо
Код
IO0CLR = LED; //turn on LED
Soft_Delay(DELAY); //delay
IO0SET = LED; //turn off LED
Soft_Delay(DELAY); //delay
сделать так:
Код
static DWORD tmp = LED;
- объявить глобально
а в обраб. прерывания:
Код
__irq void IRQ_Handler(void)
{
//Blink(); // LED Blink ~0.5 sec
tmp = ~tmp;
IO0CLR = tmp;
IO0SET = ~tmp;
T0IR = 0x00; // Clear the interrupt flag
}
Цитата
Код
а почему неверный?
что тогда делает следующая строчка:
VICIntEnable = TIMER0_INT;
как я понял это Interrupt Enable Register.
Да, VIC'а. А есть еще разрешение прерываний у ядра.
это нужно разрешать в стартапе как я понял из предыдущих постов.
может кто-нибудь ткнуть пальцем в мой стартап где это сделано? я постараюсь разобраться.
я ошибся в предыдущем посте.
в стартапе было написано
Код
FIQ_Addr DCD FIQ_Handler
а у меня в коде IRQ_Handler.
это изменил. далее в бесконечный цикл поставил мигание диода.
запустил. диод начал мигать. дальше перестал.
2) я закоментировал прототип обработчика и саму функцию обработчика. результат - тот же. мигал, потом перестал.
пото м я закоментировал еще и это
Код
VICIntSelect = TIMER0_INT; //assign TIMER0 intterupt to FIQ category
VICIntEnable = TIMER0_INT; //Enable TIMER0 interrupt
и он начал мигать без сбоев.
что-от происходит при входе в прерыванеи навернео
Сообщение отредактировал i.dmitry - Aug 29 2008, 16:51
Прикрепленные файлы
led2.rar ( 40.36 килобайт )
Кол-во скачиваний: 29