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

 
 
> Прошу помощи в освоении Blackfin BF 535, Прошу помощи в освоении Blackfin BF 535
Sovetskiy
сообщение Apr 22 2008, 07:57
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 22-04-08
Пользователь №: 36 984



Здравствуйте, уважаемые разработчики! Я --- новенький!

С нуля осваиваю темы программирования микроконтроллеров и цифровой обработки сигналов на примере Blackfin BF535. В качестве средства программирования имеется VisualDSP++ 4.5. Кита пока нет, поэтому работа процессора у меня эмулируется.

Решил посмотреть как работает обработка прерываний. Для этого делаю обработчик IVG15 и пытаюсь вызвать 15 прерывание командой Raise 15 вот так:

#include <stdio.h>
#include <defBF535.h>
#include <cdefBF535.h>
#include <sys/exception.h>

const char __argv_string[] = "-abc -xyz";

EX_INTERRUPT_HANDLER(int15ISR)
{
int i;
i = 0;
}



void main( int argc, char *argv[] )
{
register_handler(ik_ivg15, int15ISR);
asm("raise 15;");
while(1);
}

.


При пошаговой отладке вижу, что команда Raise 15 не производит "уход" в обработчик. Вероятная причина: прерывание IVG15 не размаскировано и IPEND[4] равен нулю, то есть прерывания глобально запрещены. Пытался по всякому размаскировать 15 прерывание и выставать IPEND[4], но ничего толкового не получилось.

Подскажите пожалуйста:

1) Как добиться обработки прерывания по команде Raise 15?
2) Какой "сишной" функцией можно заменить 'asm("Raise 15;")' ?

Прошу прощения за наивность вопроса. Я только-только начинаю разбираться в этой для себя совершенно новой, но красивой, теме и мне до зарезу надо ухватиться за какой-нибудь работающий пример, чтоба от него дальше плясать как от печки.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 2)
aaarrr
сообщение Apr 22 2008, 08:58
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Дело в том, что после стандартного стартапа процессор уже находится в режиме выполнения IVG15.
Можно спокойно использовать IVG14.
Код
EX_INTERRUPT_HANDLER(int14ISR)
{
    ...
}

int main(void)
{
    sti(cli() | (0x01UL << 14));
    register_handler(ik_ivg14, int14ISR);
    raise_intr(14);
}


У VisualDSP есть весьма подробный хелп, очень рекомендую.
Go to the top of the page
 
+Quote Post
Sovetskiy
сообщение Apr 24 2008, 09:23
Сообщение #3





Группа: Новичок
Сообщений: 2
Регистрация: 22-04-08
Пользователь №: 36 984



Большое спасибо! Ваша подсказка мне здорово помогла.
Go to the top of the page
 
+Quote Post

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

 


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


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