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

 
 
> Timer A в режиме захвата
Pavel V.
сообщение Jul 28 2007, 14:17
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 211
Регистрация: 3-06-06
Пользователь №: 17 742



Пытаюсь запустить таймер в режиме захвата. Возникло несколько вопросов.

Мне нужно ловить сигнал логического "0". Т.е. на входе постоянно присутствует "1", и проскакивает кратковременный "0". Я так понимаю, мне нужен захват по заднему фронту?

МК - MSP430F1232

Прикладываю свой код:

Код
#include <io430x12x2.h>

unsigned int speed=0;

void main(void)
{
  init_PORTS();
  init_TA();
  __enable_interrupt();
  
  for (;;) {

    itoa1(speed); // int to char
    display(); // динамическая индикация
    
  }
}

#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA0(void)
{
  speed = TACCR0;
}

void init_PORTS(void)
{
  P1DIR = 0xFF; // 0 - input; 1 - output
  P1OUT = 0xFF; // 0 - low; 1 - high
  P1SEL = 0x00; // 0 - i/o; 1 - function
  
  P2DIR = 0x00;
  P2OUT = 0x00;
  P2SEL = 0x0C; // P2.2 P2.3 - capture
  
  P3DIR = 0x0E;
  P3OUT = 0x00;
  P3SEL = 0x00;
}

void init_TA(void)
{
  TACCTL0 = CM_2 + SCS + CCIS_1 + CAP + CCIE; // задний фронт, синхронный захват, вход CCIxB, захват, прерывание
  TACTL = TASSEL_2 + MC_2;                  // SMCLK + Continuous Mode
}


Почему-то прерывания не происходит. Подозреваю, что напутал либо с инициализацией таймера, либо с тактовыми сигналами. Систему тактирования не настраиваю, по умолчанию ведь используется DCO с частотой около 800 кГц?

Пробовал подавать сигнал на ноги P2.2/TA0/A2 и P2.3/TA1/A3/VREF−/

И еще вопрос - прерывание должно возникать при возникновении сигнала по обоим ногам (CCI0B и CCI1B)?

Спасибо!


--------------------
Good News Everyone!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jul 28 2007, 15:10
Сообщение #2


Гуру
******

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



См. внимательно таблицу Timer_A3 Signal Connections в datasheet msp430f1232.pdf. Входными сигналами для регистра захвата CCR0 могут быть P1.1 (CCI0A) и P2.2 (CCI0B). Сигнал от P2.3 это CCI1B для CCR1. Кроме того, у вас выбран режим синхронного захвата (бит SCS в TACCTL0), поэтому длительность входного импульса должны быть не меньше периода одного импульса от источника тактирования TACLK=SMCLK для вашего случая. Чтобы проверить корректность работы программы, можете симмитировать захват программно. Для этого достаточно инвертировать бит CCIS0 в TACCTL0. Бит CCIS1 должне быть сброшен.
Код
TACCTL0^=CCIS0;
TACCTL0^=CCIS0;
После этого обязательно должно возникнуть прерывание, которые вы легко отловите в отладчике, установив breakpoint на
Код
speed = TACCR0;
в процедуре обработчика прерывания.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 26th June 2025 - 02:22
Рейтинг@Mail.ru


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