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

 
 
> Помогите разобраться с таймером, TA работает непредсказуемо
LCD
сообщение Sep 10 2008, 16:31
Сообщение #1


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

Группа: Участник
Сообщений: 92
Регистрация: 1-06-08
Пользователь №: 37 959



Использую А0 для формирования задержек, а А1 для часов.
Вот так я инициализирую таймер:
Код
  TACCTL0=CCIE;
  TACCTL1=CCIE;
  TACCR1=32767;
  TACTL=TASSEL0+TAIE+MC0;
  //IAR показывает, что TACCTL0=0x418, TACCTL1=0x10

А0 работает так, как от него требуется.
Код
void sleep(unsigned short tacts)
{
  __enable_interrupt();
  TACCR0=tacts;
  __low_power_mode_3();
  TACCR0=0;
}

#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA0_ISR(void)
{
  __low_power_mode_off_on_exit ();
};

А что происходит с А1, я понять не могу: он перестает генерировать прерывания в LPM3. Вроде, все делаю, как написано в исходниках-примерах.
Код
#pragma vector=TIMERA1_VECTOR
__interrupt void TimerA1_ISR(void)
{
  if(TAIV==2)
  {
    (здесь увеличиваем время на секунду)
  }
  P2OUT ^= 0x40; //мигаем светодиодом
}

Помогите разобраться, где здесь ошибка.

Сообщение отредактировал LCD - Sep 10 2008, 17:00
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nathan Stark
сообщение Dec 19 2011, 15:22
Сообщение #2





Группа: Новичок
Сообщений: 6
Регистрация: 25-02-11
Пользователь №: 63 244



Скажите, какой минимальный набор команд нужен, чтобы Таймер А считал в инкрементальном режиме до определенного числа?

Исходя из документации делаю так:
TACCR0 = 0x100; //Задаем модуль счета таймера
TACTL = 0x110; //Задаем MC0 = 1, то есть запускаем счетчик в режиме "вверх",
//Задаем TASSEL0 = 1, то есть задаем источник импульсов.

Но в итоге регистр TAR никак не меняется. Кажется я чего-то не понимаю
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 19 2011, 15:47
Сообщение #3


Гуру
******

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



Цитата(Nathan Stark @ Dec 19 2011, 20:22) *
Исходя из документации делаю так:
TACCR0 = 0x100; //Задаем модуль счета таймера
TACTL = 0x110; //Задаем MC0 = 1, то есть запускаем счетчик в режиме "вверх",
//Задаем TASSEL0 = 1, то есть задаем источник импульсов.

Неправильно. Сначала следует проинициализировать регистры таймера (TASSEL и TACCR0) и только потом запускать счет, установив бит MC0 в TACTL. Т.е. минимально три команды. Хотя я предпочитаю все значащие регистры проинициализировать так, чтобы исключить "случайно возникающие" прерывания (от CCR0, CCR1, CCR2), которые программой не предусмотрены.
Код
TACTL = TASSEL0 | TACLR; // ACLK/1 в качестве входного клока, сброс TAR, прерывание от переполнения запрещено
TACCR0 = 0x100 - 1; //без единицы, т.к. состояние 0x0000 тоже считается
TACCTL0 = 0; //режим сравнения, запрет прерывания от CCR0
TACCTL1 = 0; //режим сравнения, запрет прерывания от CCR1
TACCTL2 = 0; //режим сравнения, запрет прерывания от CCR2
TACTL |= MC0; //запуск счета, режим CountUp

Цитата(Nathan Stark @ Dec 19 2011, 20:22) *
Но в итоге регистр TAR никак не меняется. Кажется я чего-то не понимаю
В железе или в симуляторе? В симуляторе IAR периферия не симулируется!
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- LCD   Помогите разобраться с таймером   Sep 10 2008, 16:31
- - rezident   У вас как минимум две ошибки. Во-первых, вы исполь...   Sep 10 2008, 18:52
- - LCD   Спасибо за подробнейшее разъяснение. Вставил ваш к...   Sep 11 2008, 11:47
- - keks9357   вот такой вопрос. нужно что бы каждые 2 секунды б...   Oct 7 2011, 11:04
|- - MrYuran   Цитата(keks9357 @ Oct 7 2011, 15:04) А в ...   Oct 7 2011, 11:58
|- - rezident   Цитата(keks9357 @ Oct 7 2011, 16:04) в че...   Oct 7 2011, 14:28
- - Psych   А после void main() открывающей скобки { точно нет...   Oct 7 2011, 13:14
- - keks9357   1. volatile int n; 2. поменял вектор прерывания TI...   Oct 10 2011, 08:50
- - rezident   А часовой кварц у вас вообще генерит? То бишь ACLK...   Oct 10 2011, 19:19
- - keks9357   спасибо всем заработало. подскажите идейку как с...   Oct 12 2011, 04:57
|- - rezident   Цитата(keks9357 @ Oct 12 2011, 09:57) под...   Oct 12 2011, 13:06
|- - FREEKER   Цитата(rezident @ Oct 12 2011, 17:06) Исп...   Oct 18 2011, 07:18
|- - rezident   Цитата(FREEKER @ Oct 18 2011, 12:18) Я не...   Oct 18 2011, 11:32
- - keks9357   какие вычисления делаете? и зачем прибавлять к сче...   Oct 25 2011, 10:03
|- - rezident   Цитата(keks9357 @ Oct 25 2011, 15:03) зач...   Oct 25 2011, 10:44
- - keks9357   Реализовать при 12МГц задержку в 3 секунды возможн...   Oct 27 2011, 05:57
|- - rezident   Цитата(keks9357 @ Oct 27 2011, 10:57) Реа...   Oct 27 2011, 21:55
- - keks9357   rezident - гуру   Oct 28 2011, 04:55
- - Nathan Stark   ЦитатаВ железе или в симуляторе? В симуляторе IAR ...   Dec 19 2011, 15:58
|- - ILYAUL   Цитата(Nathan Stark @ Dec 19 2011, 19:58)...   Dec 19 2011, 16:11
- - Nathan Stark   Ага, понятно) Спасибо за помощь) Еще такой вопрос,...   Dec 19 2011, 16:15
- - rezident   Цитата(Nathan Stark @ Dec 19 2011, 21:15)...   Dec 19 2011, 19:42


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

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 13:04
Рейтинг@Mail.ru


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