|
затыкается stdout в NiosII, из-за прерываний |
|
|
|
Feb 24 2011, 15:13
|

Гуру
     
Группа: Свой
Сообщений: 2 113
Регистрация: 1-11-05
Пользователь №: 10 359

|
Возникла проблема. В программе под NiosII используется вывод в консоль fprintf. Очень удобно для отладки. Добавил в систему VIC и написал обработчик прерываний для таймера. Таймер генерит прерывание с периодом 1мс. И тут у меня начал затыкаться вывод в stdout (в функции main в бесконечном цикле). Как только я закоментил код обработчика прерываний, все заработало: Код //********************** ISR functions ************************************************** //void timer_interrupt_init (void* base, alt_u32 irq_controller_id, alt_u32 irq) //{ // /* Register the interrupt */ // alt_ic_isr_register(irq_controller_id, irq, timer_interrupt_irq, base, NULL); // // irq_cnt = 0; // // /* Start timer */ // IOWR_ALTERA_AVALON_TIMER_CONTROL(base, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK // | ALTERA_AVALON_TIMER_CONTROL_START_MSK); //} // //void timer_interrupt_irq (void* base) //{ // /* Clear TO bit in status register */ // IOWR_ALTERA_AVALON_TIMER_STATUS (base, 0); // // if (irq_cnt < 1000) { // irq_cnt++; // } else { // irq_cnt = 0; // send_tx_buffer(&tx); // } // // /*Start timer */ // IOWR_ALTERA_AVALON_TIMER_CONTROL(base, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK // | ALTERA_AVALON_TIMER_CONTROL_START_MSK); // //} Это как-то лечится, не? Отчего происходят такие сбои?
--------------------
Быть. torizin-liteha@yandex.ru
|
|
|
|
|
Feb 25 2011, 04:44
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
во, нашел. ваш косяк, думаю, видно где: Код #include <stdio.h> #include "alt_types.h" #include "system.h" #include <sys/alt_irq.h> #include "altera_avalon_timer_regs.h"
void timer_interrupt_latency_irq() { IOWR_ALTERA_AVALON_TIMER_STATUS(TIMER_0_BASE,0); alt_ic_irq_disable(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ); printf("Hello timer!\n"); alt_ic_irq_enable(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ); printf("IRQ enabled!\n"); }
int main() { printf("Hello from Nios II!\n"); /* Register the interrupt */ alt_ic_isr_register(TIMER_0_IRQ_INTERRUPT_CONTROLLER_ID, TIMER_0_IRQ, timer_interrupt_latency_irq, TIMER_0_BASE, NULL); /* Start timer */ IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE,10000); IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE,10000); IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE,1000); IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE, ALTERA_AVALON_TIMER_CONTROL_ITO_MSK | ALTERA_AVALON_TIMER_CONTROL_CONT_MSK | ALTERA_AVALON_TIMER_CONTROL_START_MSK); while (1);//Event Loop return 0; }
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|