cortex_m3 отключить ШИМ после n импульсов

Используя Cortex M3, arduino due знает ли кто-нибудь, возможно ли это, поэтому получите канал pwm, чтобы отключить себя после такого количества импульсов.

я хочу попробовать что-то вроде этого

Срабатывает прерывание 1 (timer0), оно устанавливает задержку pwm и сколько циклов нужно пройти

ШИМ запускается, и каждый импульс увеличивает счетчик, как только счетчик достигает своего предела, ШИМ отключается.

что меня НЕ интересует, так это какой-либо другой цикл за пределами настроек pwm, выполняющий подсчет / отключение


person joe blogs    schedule 20.03.2017    source источник
comment
спасибо, Фредди, удалось заставить работать 2 частоты ШИМ, и счетчики для каждой были замаскированы регистром PWM_IER1, чтобы определить, от какого импульса исходит прерывание. Я не был уверен, что смогу понять это только с одним прерыванием и двумя источниками, но, в конце концов, похоже, что это намного эффективнее, поскольку 2 канала могут работать с частотой до 250 кГц на каждом канале без ошибки подсчета (0,5 мГц) эффективная частота прерываний. это примерно 200: 1 запас прочности, что в 30 раз лучше, чем я ожидал   -  person joe blogs    schedule 22.03.2017


Ответы (2)


Просто добавьте прерывание к таймеру, который выполняет ШИМ (либо от «обновления», либо от «сравнения» - результат будет немного отличаться, поэтому вы должны выбрать тот, который вам больше нравится) и увеличивайте счетчик там. Как только счетчик достигнет целевого значения, просто отключите таймер от прерывания и все.

person Freddie Chopin    schedule 21.03.2017

Есть лучший способ справиться с этим, если ваш контроллер имеет счетчик итераций DMA и DMA.

Настройте канал DMA для передачи фиктивного байта при каждом импульсе. сконфигурируйте DMA для создания прерывания, когда счетчик итераций достигнет порогового значения. Вы можете остановить счетчик PWM внутри этой обработки ISR. Поскольку мы используем DMA для подсчета импульсов, нагрузка на ЦП очень мала.

person akshayb    schedule 10.05.2021