реклама на сайте
подробности

 
 
 
Closed TopicStart new topic
> Считывание регистров, в контролллере LPC2478
argentum
сообщение Jul 12 2010, 11:35
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283



Скажите, пробовал кто-нибудь считывать регистры T0TC - T3TC у LPC2478?
Я всё время получаю нули!!!
А хотелось бы получить всё же истинное содержаение регистров.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 12 2010, 21:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



в студию код инициализации, опроса... телепаты в отпуске

Сообщение отредактировал rezident - Jul 12 2010, 23:05
Причина редактирования: Ненужное цитирование.
Go to the top of the page
 
+Quote Post
argentum
сообщение Jul 13 2010, 07:04
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283



Цитата(toweroff @ Jul 13 2010, 01:36) *
в студию код инициализации, опроса... телепаты в отпуске

Да... Простите)))
В том-то всё и дело, что драйвер простой, и взят с сайта NXP
Код
/******************************************************************************
** Descriptions:        Initialize timer, set timer interval, reset timer,
**                        install timer interrupt handler
**
** parameters:            timer number and timer interval
** Returned value:        true or false, if the interrupt handler can't be
**                        installed, return false.
******************************************************************************/
DWORD timer_init(BYTE timer_num, DWORD TimerInterval)
{
  switch (timer_num)
  {
    case 0:
     timer0_counter = 0;
     //T0MR0 = TimerInterval;
     T0MR0 = TimerInterval * (Fpclk / 1000-1);
     T0MCR = 3;                /* Interrupt and Reset on MR0 */
     return install_irq( TIMER0_INT, (void *)Timer0Handler, HIGHEST_PRIORITY );

   case 1:
     timer1_counter = 0;
     //T1MR0 = TimerInterval;
     T1MR0 = TimerInterval * (Fpclk / 1000-1);
     T1MCR = 3;                /* Interrupt and Reset on MR1 */
     return install_irq( TIMER1_INT, (void *)Timer1Handler, HIGHEST_PRIORITY );

  case 2:
     timer2_counter = 0;
     //T1MR0 = TimerInterval;
     T2MR0 = TimerInterval * (Fpclk / 1000-1);
     T2MCR = 3;                /* Interrupt and Reset on MR1 */
     return install_irq( TIMER2_INT, (void *)Timer2Handler, HIGHEST_PRIORITY );

    case 3:
     timer3_counter = 0;
     //T1MR0 = TimerInterval;
     T3MR0 = TimerInterval * (Fpclk / 1000-1);
     T3MCR = 3;                /* Interrupt and Reset on MR1 */
     return install_irq( TIMER3_INT, (void *)Timer3Handler, HIGHEST_PRIORITY );

    default:
               return (FALSE);
  }
}


Ну а считать пытаюсь простым:
Код
a = T0TC;

Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 13 2010, 07:23
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Код
    //--- Timer 0  - interrupt 10 ms

    T0PR = 0;  //-- Prscaler = 0
    T0PC = 0;

    T0MR0 = 18000 * 10; //TimerInterval;
    T0MCR = 3; //-- bit 0=1 -int on MR0 , bit 1=1 - Reset on MR0

    T0TCR = 1; //-- Timer 0 - run


посмотрите, как там у Вас с частотой на таймер, вообще стартап. В моем случае 72/4=18, отсюда T0MR0 = 18000 * 10 для 10мс

и опять же - в каком месте вызывается чтение? может, оно так получается, что вызываете как раз в состоянии счетчика 0 laughing.gif
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Jul 13 2010, 07:25
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



На 2368 всё работает, как ни странно.

В какой момент считываете?
Таймер в это время работает? Запуск что-то не наблюдаю...


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jul 13 2010, 07:31
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(esaulenka @ Jul 13 2010, 11:25) *
Запуск что-то не наблюдаю...

во-во...
T0TCR = 1; //-- Timer 0 - run
где?
Go to the top of the page
 
+Quote Post
argentum
сообщение Jul 13 2010, 07:57
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283



Прошу прощения ещё раз.
Запуск происходт в функции timer_enable сразу после инициализации. Драйвер вот:
CODE

/******************************************************************************
** Function name: enable_timer
**
** Descriptions: Enable timer
**
** parameters: timer number: 0 or 1
** Returned value: None
**
******************************************************************************/
void timer_enable(BYTE timer_num)
{
if ( timer_num == 0 )
{
T0TCR = 1;
}
else if ( timer_num == 1 )
{
T1TCR = 1;
}
else if ( timer_num == 2 )
{
T2TCR = 1;
}
else if ( timer_num == 3 )
{
T3TCR = 1;
}
return;
}


Цитата(esaulenka @ Jul 13 2010, 11:25) *
В какой момент считываете?


Считывается в while...


Цитата(toweroff @ Jul 13 2010, 11:23) *
[code] //--- Timer 0 - interrupt 10 ms
посмотрите, как там у Вас с частотой на таймер, вообще стартап. В моем случае 72/4=18, отсюда T0MR0 = 18000 * 10 для 10мс
и опять же - в каком месте вызывается чтение? может, оно так получается, что вызываете как раз в состоянии счетчика 0 laughing.gif

Прерывания-то происходят, а считать ничего не удаётся.
Так как считывание происходит в цикле while(1), то попадать всегда в T0TC = 0, кажется невероятным


Сообщение отредактировал argentum - Jul 13 2010, 07:53
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Jul 13 2010, 05:26
Сообщение #8


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



И где этот while?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
argentum
сообщение Jul 21 2010, 07:12
Сообщение #9


Частый гость
**

Группа: Участник
Сообщений: 79
Регистрация: 26-04-09
Из: Москва
Пользователь №: 48 283



Закрываю тему. Проблема была в следующем: я пытался считать значение счётчик Таймера 3, инициализируя его по аналогии с Таймером 0. Но для Таймера 3 нужно дополнительно устанавливать соответствующий бит в регистре PCONP: PCONP |= (1<<23);
Спасибо за отклики.
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 16:54
Рейтинг@Mail.ru


Страница сгенерированна за 0.01428 секунд с 7
ELECTRONIX ©2004-2016