Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Дополнение: ШИМ

Последнее замечание, прежде чем двигаться дальше.

Прерывания довольно дороги. Процессор должен завершить или прервать текущую инструкцию, затем сохранить достаточно состояния, чтобы потом продолжить выполнение, и только потом вызвать обработчик прерывания. Всё это занимает несколько тактов процессора, то есть драгоценного времени работы.

Решение предыдущего раздела написано так, что на каждый цикл выходного сигнала динамика приходится два прерывания. Это примерно тысяча прерываний в секунду. На таком процессоре, как наш nRF52833, это работает нормально.

У nRF52833 есть встроенная периферия, которая могла бы сильно снизить частоту прерываний сирены. Блок широтно-импульсной модуляции (Pulse-Width Modulation, PWM) может, среди прочего, генерировать циклы на выводе динамика с частотой, которую задаёт регистр PWM. Его можно использовать для генерации базовой квадратной волны для нашей сирены. Прерывание по-прежнему понадобилось бы каждый раз, когда мы захотим поменять частоту, но это было бы что-то вроде 10 прерываний в секунду вместо 1000.

Я не использовал блок PWM в своём решении. Отчасти потому, что хотел сосредоточиться на прерываниях. Ещё одна важная причина: блок PWM nRF52833 довольно сложен и трудно понимаем. Заставить что-то работать простым способом в суровом окружении «голого железа» всегда привлекательно.

Если вы готовы к вызову, попробуйте использовать блок PWM для вашей сирены.