Здравствуйте, коллеги. Работую с Nios II и понадобилось подключить собственное ядро. Написал, подключил - всё хорошо, кроме прерываний. Способы подключения ядра к процессору на рисунке. В первом случае, процессор, после того как происходит прерывание, просто останавливается и всё (в режиме отладки заходит в какую то неведомую функцию после выхода из которой процес опять повторяется и он опять в неё заходит). Во втором случае, процессор нормально уходит в прерывание. В третьем, зависит от того что произошло ранеьше. Если зажать кнопку прерывания, то после ресета процессор входит в обработчик прерывания, если же кнопку не нажимать , то после ресета ядро генерит прерывание и проц столбинеет. Возможно кто то уже напарывался. Буду очень благодарен за помощь. Так же ниже приведу код на с.
Код
#include <stdio.h>
#include "io.h"
#include "system.h"
#include "alt_types.h"
#include "sys/alt_irq.h"
void chu_chu_subprog(void* context, alt_32 id);
void* context;
alt_32 id = 0;
alt_u32 a = 0;
int main()
{
alt_irq_register(CHU_CHU_IRQ, context, (void*)chu_chu_subprog); // указываем ф-цию обработки прерывания
while(1)
{
IOWR(CHU_CHU_BASE, 0, 6); // данные в my_core
IOWR(CHU_CHU_BASE, 1, 7); // данные в my_core
IOWR(CHU_CHU_BASE, 3, 1); // маска прерывания в my_core
IOWR(CHU_CHU_BASE, 2, 1); // запуск my_core на выполнение
a = IORD(CHU_CHU_BASE, 4); // читаем данные с ядра
IOWR(LED_BASE, 0, a); // выводим результат работы ядра на светодиоды
}
return 0;
}
void chu_chu_subprog(void* context, alt_32 id) // если произошло прерывание выполнить ф-цию
{
while(1)
{IOWR(LED_BASE, 0, 0x55);}
return;
}
Сообщение отредактировал Грендайзер - Feb 10 2015, 09:50
Эскизы прикрепленных изображений