ViKo 1 4 июня, 2015 Опубликовано 4 июня, 2015 · Жалоба Вспомнился старый анекдот: "…Не ебонит!!! Целлюлёид!!!…" :) PRIMASK Описался. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Brain13 0 4 июня, 2015 Опубликовано 4 июня, 2015 (изменено) · Жалоба Это говорит о том, что любое запрещенное прерывание может разбудить процессор? Нет, запрещенное походу не разбудит... http://infocenter.arm.com/help/index.jsp?t...a/BABGGICD.html To achieve this set the PRIMASK bit to 1 and the FAULTMASK bit to 0. If an interrupt arrives that is enabled and has a higher priority than current exception priority, the processor wakes up but does not execute the interrupt handler until the processor sets PRIMASK to zero. То есть разбудит процессор только разрешенное(я так понимаю в NVIC) прерывание с более выским приоритетом. Изменено 4 июня, 2015 пользователем Brain13 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба А вот и последняя часть пазла http://infocenter.arm.com/help/index.jsp?t...e/CJAFBCBB.html __disable_irq Typically, this intrinsic disables IRQ interrupts by setting the I-bit in the CPSR. However, for M-profile it sets the exception mask register (PRIMASK). и следовательно последовательность __disable_irq .... __swi() __WFI() .... __enable_irq правильная, the processor wakes up but does not execute the interrupt handler until the processor sets PRIMASK to zero. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DmitryM 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба и следовательно последовательность __disable_irq .... __swi() или __wfi() .... __enable_irq правильная, ??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Obam 38 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба и следовательно последовательность __disable_irq .... __swi() .... __enable_irq правильная, Не в масть! Даже команды такой нет. (Гусары, про UAL молчать!!!) Тема про WFI! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 5 июня, 2015 Опубликовано 5 июня, 2015 · Жалоба Да я о чем-то своем думал, естественно имел ввиду команду WFI, поправил сообщение, простите... Гусары могут кричать, коль сопоставить 2 факта не в силах.... еще раз для гусар, а то вдруг опять че не поймут вот так правильно __disable_irq() .... __WFI() .... __enable_irq() Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 242 6 июня, 2015 Опубликовано 6 июня, 2015 · Жалоба Имхо - у ТС изначально неверно построен алгоритм. WFI не нужно смешивать с каким-либо полезным кодом. Систему с WFI надо строить так, чтобы WFI выполнялось в фоновом процессе (возможно просто бесконечный цикл while (1) WFI();), а вся полезная работа - в задачах или ISR с приоритетом выше фонового. Тогда никаких запретов прерывания с WFI не нужно, WFI будет выполняться только когда нет ждущих прерываний. Если ПО без ОС - вся работа в ISR-ах (разбитых по приоритетам), в фоновой задаче - функция main() заканчивающаяся while (1) WFI();. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться