реклама на сайте
подробности

 
 
> Проблема с прерываниями от ядра, как то не так работает прерывания от собственного ядра
Грендайзер
сообщение Feb 10 2015, 09:48
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 368
Регистрация: 18-04-11
Из: Город-герой Москва
Пользователь №: 64 451



Здравствуйте, коллеги. Работую с 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
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
serjj
сообщение Feb 10 2015, 11:16
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 527
Регистрация: 4-06-14
Из: Санкт-Петербург
Пользователь №: 81 866



У вас прерывание ничем не маскируется. Процу приходит прерывание, оно еще не зарегестировано, как он будет его обрабатывать? Снятие прерывания лучше сделать через процессор, чтением или сбросом регистра статуса прерываний (или чего-нибудь подобного), тогда оно будет гарантировано ловиться процессором. Хорошая практика для инициализации прерываний - глобальное разрешение прерываний - регистрация прерываний - локальное разрешение (в вашем случае разрешение прерывания от вашего ядра)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th August 2025 - 17:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.02357 секунд с 7
ELECTRONIX ©2004-2016