Здрасте )
Работаю со зверем stellaris LM3S1968(отладочная дощечка).
Нужно сделать так, чтобы прерывание таймера срабатывало раз в микросекунду.
Курю пример TI -
One timer is set up to interrupt once per second and
//! the other to interrupt twice per second;
// Configure the two 32-bit periodic timers.
//
TimerConfigure(TIMER0_BASE, TIMER_CFG_32_BIT_PER);
TimerConfigure(TIMER1_BASE, TIMER_CFG_32_BIT_PER);
TimerLoadSet(TIMER0_BASE, TIMER_A, SysCtlClockGet());
TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet() / 2);
//
// Setup the interrupts for the timer timeouts.
//
IntEnable(INT_TIMER0A);
IntEnable(INT_TIMER1A);
TimerIntEnable(TIMER0_BASE, TIMER_TIMA_TIMEOUT);
TimerIntEnable(TIMER1_BASE, TIMER_TIMA_TIMEOUT);
То есть по строчкам описания
the other to interrupt twice per second;
и кода
TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet() / 2);
делаю вывод, что раз это срабатывание в полсекунды, то я делаю
TimerLoadSet(TIMER1_BASE, TIMER_A, SysCtlClockGet() / 1000000);
и все в ажуре... НИФИГА ПОДОБНОГО! Этот код нормально компилится, но в плате даже не заводится! Пробовал ставить туда разные значения, так и не нашел логики... может кто сталкивался с функцией
TimerLoadSet() и знает как все это работает, ХЕЛП!
Да, еще посмотрел исходники, там описание той функции такое:
//! This function sets the timer load value; if the timer is running then the
//! value will be immediately loaded into the timer.
??? шо за хрень... может есть что-нибудь покурить по этим таймерам, а то я похоже принцип не понимаю, с АВР все намного проще было....