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

 
 
> Проблема с TIMERом, Помогите знающие люди
alex_tt
сообщение Apr 3 2006, 08:10
Сообщение #1





Группа: Новичок
Сообщений: 10
Регистрация: 31-03-06
Пользователь №: 15 664



Помогите знающие люди, с прерываниями. Написал подпрграмму для получения задержки в микросекундах, частота 4 МГц.
Ниже привожу фрагмент программы.

void delayMks(unsigned long time)
{
TACTL = 0x00;
TACCR0 = 0x04;
TACCTL0 = CCIE;
TACTL|= MC_1;
unsigned long i;
for (i = time; i > 0; i-- )
{
while (TAIFG)
{
}
}
}

Дело в том, что программа виснет на команде while, бит TAIFG не меняет значание, где ошибка, помогите. Заранее благодарю.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Apr 3 2006, 09:45
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



В регистре TACTL у вас не выбран какой-либо внутренний источник тактирования (SMCLK или ACLK). TACTL=0x00 означает, что входной источник тактирования TACLK.
Кроме того, вы в регистре TACCTL0 разрешаете прерывание от CCR0, но не написали обработчик этого вектора прерывания (TIMERA0_VECTOR). Во-первых, программа будет "улетать" черт знает куда. Во-вторых, флаг TAIFG после первого периода счета от 0 до CCR0 установится и никогда больше не сбросится. Т.к. перехода по вектору прерывания (уже другому - TIMERA1_VECTOR) не будет (прерывание не разрешено), а самостоятельно TAIFG при простом опросе не сбрасывается.
Go to the top of the page
 
+Quote Post



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

 


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


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