ARMan 0 2 ноября, 2004 Опубликовано 2 ноября, 2004 · Жалоба Проблема в слеудющем: хочу разрешить преррывания. Для этого надо сбросить I-флаг в CPSR-регистре. В моем IAR'е в документации упоминаются функции __get_CPSR и __set_CPSR, но только в документации, в header'ах их нигде нет. О функциях же __enable_interrupt и __disable_interrupt написано, что они работатют только в режиме супервизора. У меня есть сомнения в том, что этот режим у меня установлен. Соответственно, вопросы:1) Как можно установить и проконтролировать установку режима супервизора? 2) Как иначе можно доступиться до CPSR регистра и разрешить прерывания? 3) Исходя из вышеизложенного, я, кажется, уже дошел до того, чтобы самому написать asm-овские функции getCPSR и setCPSR. Как это сделать, чтобы оно работало? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jojo 0 2 ноября, 2004 Опубликовано 2 ноября, 2004 · Жалоба Посмотрите в СиStartup.Асм, который подключен к проекту. Просто не переходите в юзер_моуд, и все. Тогда cpsr доступен будет, в т.ч. и функциям __enable_interrupt и __disable_interrupt.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ig_z 0 2 ноября, 2004 Опубликовано 2 ноября, 2004 · Жалоба В моем IAR'е в документации упоминаются функции __get_CPSR и __set_CPSR, но только в документации, в header'ах их нигде нет. Это же вроде интринсик функции, зачем им хидер? Один плюсик или два плюсика тоже в хидерах не описан, но все юзают и вполне довольны :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
iit 0 8 ноября, 2004 Опубликовано 8 ноября, 2004 · Жалоба Сделай ассемблерную вставочку по изменению флага I. Только не пытайся делать это из режима User Mode. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться