2013-12-01 10 views
0

Я пытаюсь сделать некоторые простые проекты на Beaglebone Black с помощью StarterWare. Все изменения для работы с черным уже выполнены, и я запускаю пример DMTimer, который хорошо работает.Настроить быстро (DMTimer-) Прерывание на BeagleBone Black

На следующем шаге я изменил этот пример, ISR просто переключает GPIO (для чего требуется только несколько десятков тактовых циклов). И я изменил счетчик таймера и таймера перезагрузки примера на 0xFFFFFF0F, который равен 10 мксек - поэтому мой ISR следует вызывать каждые 10 секунд.

Удивительно, но это кажется предел, когда я использую более высокие значения таймера, которые должны приводить к более частым вызовам ISR, но он по-прежнему остается в этих 10 мкс, даже 5 мксек невозможен с помощью примера DMTimer. Поскольку таймер-источник часов CLK_M_OSC уже используется, так что это должно быть хорошо.

Итак ... любая идея, как ISR можно назвать быстрее?

ответ

1

Вы пытались настроить (или отключить) таймер предварительного делителя? Я обнаружил, что пример DMTimer использует делитель, и я не получаю поведение, что предложенное (перебивает каждый 700 мс), пока я не добавил строки

DMTimerPreScalerClkDisable(SOC_DMTIMER_2_REGS); 

После этого, казалось, работать правильно.

При отключенном пределителе вы должны получить 10 мс с счетчиком перезагрузки 0xFFFFFF06 или 5 мс с помощью счетчика перезагрузки 0xFFFFFF83.