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

 
 
 
Reply to this topicStart new topic
> Не работает аппаратный таймер на PLC2129 при Keil OS
Д_М
сообщение Nov 11 2013, 19:40
Сообщение #1


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

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Здравствуйте!
Не выполняется обработчик прерывания Таймера1. Таймер0 используется ОС (по умолчанию).

#define pcon_PCTIM0 (1<< 1)
#define pcon_PCTIM1 (1<< 2)
#define Int_bit_TIMER0 4
#define Int_bit_TIMER1 5

PCONP |= pcon_PCTIM1; // Power up Timer1
T1PR = 0x00000000; //Load prescaler
T1TCR = 0x00000002; //Reset counter and prescaler
T1MCR = 0x00000003; //On match reset the counter and generate an interrupt
T1MR0 = 400000; //Set the cycle time
T1TCR = 0x00000001; //enable timer
VICVectAddr5 = (unsigned)TIMER1VectoredIRQ;
VICVectCntl5 = 0x00000000; //Set channel
VICIntEnable = (1<< Int_bit_TIMER1);

void TIMER1VectoredIRQ (void) __irq
{
LEDS_ON = LED_B;

T1IR |= 0x00000001; //Clear match 0 interrupt
VICVectAddr = 0;// Dummy write to signal end of interrupt
}

Как мне кажется, ничего не упустил. По крайней мере на LPC2394 такое работает.
Заранее благодарен за помощь!
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 12 2013, 01:42
Сообщение #2


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Д_М @ Nov 11 2013, 22:40) *
Здравствуйте!
Не выполняется обработчик прерывания Таймера1. Таймер0 используется ОС (по умолчанию).

Частенько бывают проблемы. Но к счастью мы можем разделить их напополам.
Проверьте если регистр таймера изменяет свое значение. Если изменяет, то проблема с разрешением прерывания. Вот у меня недавно надо было вызвать такие функции:
NVIC_SetPriority((IRQn_Type)46, NVIC_EncodePriority(NVIC_GetPriorityGrouping(),62,0));
/* Enable Interrupt */
NVIC_EnableIRQ((IRQn_Type)46);
46 вектор 62 приоритет 0 подприоритет.

Если таймер не меняет своего значения, то у вас либо что-то не разрешено либо дорожка от системного генератора к таймеру нарушена.

Сообщение отредактировал Tarbal - Nov 12 2013, 01:44
Go to the top of the page
 
+Quote Post
Д_М
сообщение Nov 12 2013, 17:59
Сообщение #3


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

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Спасибо за отклик!
Таймер ОС пересаживается на другой аппаратный таймер путём добавления в программу #define OS_TIMER 1. Причина того, что не работал Таймер 0 была в настройке регистра управления прерыванием. Сделал, как в примере
VICVectCntl0 = 0x20 | 4; //Set channel
Заработало. Кто бы растолковал смысл этого числа!
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Nov 12 2013, 18:20
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



QUOTE (Д_М @ Nov 12 2013, 20:59) *
Кто бы растолковал смысл этого числа!
Какая именно фраза из документации непонятна?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Д_М
сообщение Nov 12 2013, 18:56
Сообщение #5


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

Группа: Участник
Сообщений: 121
Регистрация: 15-04-05
Из: Краснодар
Пользователь №: 4 185



Цитата(Сергей Борщ @ Nov 12 2013, 22:20) *
Какая именно фраза из документации непонятна?

VICVectCntl0 = 0x20 | 4
Что означает число 0x20 | 4?
Go to the top of the page
 
+Quote Post
Tarbal
сообщение Nov 12 2013, 19:06
Сообщение #6


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

Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439



Цитата(Д_М @ Nov 12 2013, 22:56) *
VICVectCntl0 = 0x20 | 4
Что означает число 0x20 | 4?


0x20 | 4 = 0x24
Устанавливаются в высокий уровень бит 0х20 и бит 0х4. В документации посмотрите чему соответствуют эти биты.

Сообщение отредактировал Tarbal - Nov 12 2013, 19:06
Go to the top of the page
 
+Quote Post

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

 


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


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