Здравствуйте, уважаемые разработчики! Я --- новенький!
С нуля осваиваю темы программирования микроконтроллеров и цифровой обработки сигналов на примере 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;")' ?
Прошу прощения за наивность вопроса. Я только-только начинаю разбираться в этой для себя совершенно новой, но красивой, теме и мне до зарезу надо ухватиться за какой-нибудь работающий пример, чтоба от него дальше плясать как от печки.
|