Цитата(lons83 @ Mar 1 2014, 23:43)

А можете еще раз мне обьяснить: Как произойдет вызов этого программного прерывания?
с аппаратным все понятно... а вот с программным? ведь если я помещу func1() - в обработчик - это ни чем не будет отличаться от вызова обычной функции... а если в обычном цикле программы, то тогда как? по какому то флагу?
Спасибо за книжку. Завтра скачаю и посмотрю...
Если с аппаратным понятно, то хорошо. Софтовый тоже самое)
Когда приходит запрос на обработку прерывания от периферийного модуля взводится флаг
отложенного прерывания в модуле NVIC.
Затем NVIC смотрит какие флаги взведены и выбирает из них один удовлетворяющий критериям
(разрешение прерывания, приоритет и т.п.). Затем переходит к обработке прерывания совершая переход
к функции, адрес которой указан в таблице векторов прерывания паралельно сбрасывая флаг отложенного
прерывания. Процесс очень хорошо описан в книге.
Таким образом Вы можете генерировать софтовые прерывания взводя флаги в NVIC.
Кроме того, Вы можете софтово запускать обработчики аппаратных прерываний.
Хуже: Вы можете снимать запрос на запуск аппаратного или софтового прерывания очищая флаг.
Короче свобода полная. Никакого asm, все на Си. Правда для запуска софтовых прерываний в непривелегированном
режиме требуется специальное на то разрешение. В книге вся инфа есть.